アレコレ・ティプス

これ便利だな〜と思ったことなど

ラズパイに Go言語 をインストールする。

Raspberry pi へ Go lang をインストール

ラズパイは、armv6 の go パッケージを使うため、

そこの部分だけ公式ドキュメントの通りにいかないので、一応 備忘録。

インストール環境

Raspberry pi 3B+

まず ラズパイ にインストールする go 言語のファイルを 以下サイトで確認

https://golang.org/dl/

f:id:asuki_y:20210903134610p:plain

go top

 

ラズパイは、 ARMv6 で 調べる。

f:id:asuki_y:20210903134637p:plain

go lang package list

 

2021/9/3 の最新安定版 go1.17.linux-armv6l.tar.gz  を扱う

右クリックで ダウンロードURLをコピーしておく。

 

ラズパイ ターミナル操作

sudo rm -rf /usr/local/go

( さきほどコピーした ダウンロードURL で wget )

wget https://golang.org/dl/go1.17.linux-armv6l.tar.gz

sudo tar -C /usr/local -xzf go1.17.linux-armv6l.tar.gz

vim ~/.bashrc

90行目あたり、あたり触りのないところに追加。

< 記述内容 >

( ・・中略・・ )

#export GCC_COLORS= ***省略

# Go言語のPATH  以下 1行を追加しておく
export PATH=$PATH:/usr/local/go/bin

# some more ls aliases
( ・・省略・・ )

sources ~/.profile

これで準備完了!

動作するか確認する

go version

go version go1.17 linux/arm

この結果が帰ってくればインストール OK

 

ーーー

適切なパッケージを 選ばないと go version コマンドを使ったときに、

ーーー

go version

-bash: /usr/local/go/bin/go: バイナリファイルを実行できません: 実行形式エラー

ーーー

となる。

ラズパイにインストールするパッケージは、 armv6 のものを選ぼう。

 

 

ラズパイに NodeRED version 2 を インストールする方法 2021 年 秋 版

Raspberry pi  に NodeRED 2.0.x をインストールさせる。

https://www.i-cafe.info/wp/wp-content/uploads/2020/03/Node-RED.png

2021/9/1 現在、これまで使っていた、以下 スクリプトが 使用できなくなっていたため。

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

 

上記スクリプトでは、いろいろエラーで落ちる。

一部エラー内容は記録をとれなかった。

 

( ラズパイへの NodeRED version 2 インストール 成功に至るまでに躓いたエラー内容 )

ーーーー

$ sudo npm install -g --unsafe-perm node-red

node-pre-gyp ERR! install response status 404 Not Found on https://github.com/kelektiv/node.bcrypt.js/releases/download/v5.0.1/bcrypt_lib-v5.0.1-napi-v3-linux-arm-glibc.tar.gz 
node-pre-gyp WARN Pre-built binaries not installable for bcrypt@5.0.1 and node@14.8.0 (node-v83 ABI, glibc) (falling back to source compile with node-gyp) 
node-pre-gyp WARN Hit error response status 404 Not Found on https://github.com/kelektiv/node.bcrypt.js/releases/download/v5.0.1/bcrypt_lib-v5.0.1-napi-v3-linux-arm-glibc.tar.gz

 

ーーーー

 

環境

Raspbian GNU/Linux 10 (buster)

Linux raspberrypi 5.10.52-v7+ #1441 SMP Tue Aug 3 18:10:09 BST 2021 armv7l GNU/Linux

nodejs 14.8.0

npm 6.14.7

いつもの準備

apt-get update

apt-get upgrade 

 

インストール方法

mkdir node_inst

cd !$

wget https://unofficial-builds.nodejs.org/download/release/v14.8.0/node-v14.8.0-linux-armv6l.tar.gz

tar xvzf ./node-v14.8.0-linux-armv6l.tar.gz

cd ./node-v14.8.0-linux-armv6l

rm CHANGELOG.md LICENSE README.md

sudo cp -R * /usr/local/

インストールされた nodejs のバージョン確認

node -v

ーーーー

sudo apt install node-pre-gyp

sudo npm install -g --unsafe-perm node-red

ーーー

サービス化

cd /etc/systemd/system/

sudo vim  ./nodered-pi.service

 

( 記載内容 )

[Unit]
Description=node-red-pi
After=udev.target
After=syslog.target
After=network.target
After=remote-fs.target
[Service]
ExecStartPre=/bin/sleep 3
Type=simple
## サービス起動 フルパス 絶対パスで。
ExecStart=/usr/local/lib/node_modules/node-red/bin/node-red-pi

Restart=always
RestartSec=4
User=pi
Group=pi

##作業ディレクトリを定義 ( ここ重要 )
WorkingDirectory=/home/pi/.node-red/
[Install]
WantedBy=multi-user.target

 

ーーーー

sudo systemctl  daemon-reload 

サービス 停止状態であることを確認

sudo systemctl  status nodered-pi.service

NodeRED デーモン起動

sudo systemctl  start nodered-pi.service 

sudo systemctl  enable nodered-pi.service 

起動状態に異常がないかを確認

journalctl -u nodered-pi.service -f

問題なければ ctrl + c で リアルタイムログの監視を停止

ーーー

これで インストールでき、NodeRED 2.0.5 が 正常に起動できた。2021/9/1 

 

便利だったスクリプトが使えなくなったのが痛いですね。

そのうちあのスクリプトもバージョンアップすれば、このようなやり方をせずとも、すんなり、実行できればいいですね。

 

参考記事に感謝🙏

Raspberry Piにnode.jsをインストトールする方法 – あきらのぶろぐ

iOS14 で クラウドを使わない 電話帳 連絡先 を移行・復元する方法

 なんとかできたので、記録。
連絡先データだけ復旧したい場合とか、クラウドを一切使いたくない場合は、便利かも。
 
キーワード
vCard , vcf , iOS , iPhone ,  iOS14 , 連絡先 , 電話帳 , MyContactsBackup , クラウド , クラウド不使用 , アドレス帳 , 移行 , バックアップ , 復元
 
 

できた環境

復元先 iOS 14.6  /  iPhoneSE ( 2020 )

(かつても使ったことがあるアプリなので、おそらく iOS14.6 以前のものでも可能かも)

ーーー

( 復元元は、iPhoneSE (初代) だったが vcfファイル vCard データがエクスポートできればおそらくどれでも可 )

macOS Catalina 10.15.7

chrome ブラウザ 2021/8/12 時点最新 (バージョン: 92.0.4515.131)

ーーー

扱うデータ

vCard 、 vcf データ。

使うアプリ

MyContactsBackup Pro (無償バージョンでも可能かもしれない)

!注意点!

促されるが 不要なので、このアプリからメール送信機能を一切使わない。


連絡帳データのバックアップ

まずは、バックアップ元 iPhoneを操作して連絡先データをバックアップする。

  • MyContactsBackupPro をインストール。
  • アプリを開く。
  • 緑色の " Backup " ボタンを押して 連絡先データをバックアップ

 

以上でバックアップ完了。

バックアップした連絡帳データの取得

  • 右下 歯車のマークを押して、Settings 画面へ。
  • Type は、 vCard であることを確認。
  • WI-FI MANAGEMENT の Server を ON
  • URL が表示される。 192.168.xxx.xxx:8080 など
    • ( クラウドを使わないローカルエリアアクセスである )
  • 手元の WI-FI 環境の Macbook のブラウザからその URL へ アクセス

  • Wi-Fi Download を クリック

 

  • vcf ファイル = vCard データ = 連絡帳データをダウンロードし、取得。
 
このデータから復旧する。

以上で、バックアップしたデータ、vcfファイル ( vCard データ ) の取得が完了。


新しい端末で、vCardデータから連絡帳を復元

新しい iPhone に MyContactsBackup Pro をインストール。

新しい iPhoneMacBook を つなげる。

 
Finder で 接続状態を確認
 

場所:自分のiPhone名 : "ファイル" タブをクリック
すると、インストールされたアプリ一覧が出るので、
 

 
MyContactsBackupPro が  リストに上がっていることを確認
 

 

ここで、先ほど取得した vcf ファイルを MyContactsBackupPro の配下へドラッグアンドドロップ

 
以下のようになる。
 

 

 
vcfデータのコピーが完了したら、 新しい iPhoneを操作。
( ケーブル接続したままでOK )
 
アプリ : MyContactsBackupPro を開く。
 
右下 歯車マークをタップして、Settings 画面へ。

( この際に決して、緑のバックアップボタンを押さない )

 

 
Type : vCard であることを確認

 
 
緑色のボタン " In App vCard Restore " をタップ! これは復元ボタン。

 

 
そうすると、さきほどドラッグアンドドロップした vcf データ の存在を確認できるので、そこをタップ。
 
3つ選択肢が出るので "Restore" を選択
 

 

 

 
すると、復元先の指定として、" 連絡先 " アプリが選択できるので、" 連絡先 " を選択。

 

 
すると、自動で 「 連絡先 」 アプリが開き、、
 
「 xxx件すべての連絡先を追加 」 と出るので、右上の「 保存 」 文字をタップ
 

 
これにて完了!
何年も昔から使っているこのアプリがまだ使えていてよかった。
 

HAproxy  BASIC認証 REST API 用 と ブラウザ GUI 認証で 処理を切り分ける

HAproxy の BASIC 認証で、REST API 用 に適した処理の 記述 と ブラウザから ユーザー パスワードを手入力させるBASIC 認証では、適した書き方が違うようなので、処理を書き分けた。
 

 
 

( 動作環境メモ )
 
Ubuntu 18.04.4 LTS
HA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22
 

 
 
 
## ( 上段 global のコンフィグ等は 略します。 )
## -------------------------------------------------------
## userlist
## -------------------------------------------------------
userlist 管理者_user
  user   管理者     password   ハッシュ化したパスワード
userlist panpy_user
  user   一般usr   insecure-password   パスワード平文    
 
# ---------------------------------------------------------------
# フロントエンドを定義
# port : 80  で待ち受け
# ---------------------------------------------------------------
frontend http-in
 
        bind    *:80
 
        # forntend 内に BASIC認証を記述しない。
        # backendの定義で記述し、BASIC認証の処理を用途で分ける。
 
        # DashBoard GUI
        acl url_gui        path_beg    /gui
        use_backend        gui_servers    if    url_gui
 
        # API SERVER 
        acl url_api        path_beg    /api
        use_backend        api_servers    if    url_api
 
        default_backend        get_away
 
# -------------------------------------------
# バックエンドを定義
# -------------------------------------------
backend gui_servers
 
#       GUI用のBASIC認証処理
        acl auth_一般_ok http_auth(panpy_user)
        http-request     auth if !auth_一般_ok
        server        gui-app        127.0.0.1:1880 check
 
backend api_servers
 
#       REST API用のBASIC認証処理
        acl auth_管理者_ok http_auth(管理者_user)
        http-request    deny unless auth_管理者_ok
        server        api-svr        127.0.0.1:1881 check
 
# -------------------------------------------
# Good-bye
# -------------------------------------------
backend get_away
    http-request deny
 
# -----------------------------------------------
# 上記、漢字のところは適宜 半角英数に修正すると使えるかと思います。
 
 
ーーー
 
ポイントは、
 
・フロントエンド定義のところで BASIC認証を記述しない。
・バックエンド定義のところで、BASIC認証を記述する。
 
こうすることで、 それぞれに意図したBASIC認証が動作してくれるようになりました。
 
HAproxy は、フロントに立たせると、 NodeRED のセキュリティを高めてくれたり相性いいと思うので、どんどん積極的に組み合わせて 使っていきたい!
 
 

 
参考:
 
 

iOS13 に アップデートしたら、無駄通信が異常に増え、通信制限くらう 問題

iOS12 から iOS13 にアップデートしたら、しばらくして通信制限をくらいました。

アプリで通信状況を調べると、明らかに、異常に無駄な通信が増えました。

結構、問題解析が地道で大変だったので、誰かの助けになれれば、、

ここに共有します。

nsdev.jp/img/iOS13.png

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

( 環境メモ )

・ iOS12.x.x から iOS13.1あたりにアップデートして 生じた問題

・iPhone SE2

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

OSが最新でも改善しない。。

 

どのアプリだ?

 

本気になってiOS13端末内通信状況と、ひとつひとつアプリをwifi以外通信禁止設定にして調べたところ、 iOS13 の音楽アプリ が勝手に何かをダウンロードしてしまうような挙動を観測。

 

iOS 13 の音楽アプリの通信に制限をかけたところ、問題は改善されました。

通信は、3G 4G 回線を使わないようにさせて、wifi のみに。

 

> 設定アプリ起動

> "設定"

> "ミュージック"

> "モバイルデータ通信"    <= これをOFFに!

 

-> 無駄な通信が大幅に改善しました。

 

自分は、よく楽曲を単体で購入するので、そのバックグラウンドダウンロードが iOS13から 勝手に多く働くようになってしまったのだろうか。という 気がする。

 

ギガ残量 通信量チェッカー

ギガ残量 通信量チェッカー

  • Rigato, inc.
  • ユーティリティ
  • 無料

apps.apple.com

 

このアプリは 見やすいし、めちゃくちゃ助かりました。

用途は違うとは思いますが、また、通信過多な問題が出たらこれで解析しようと思います☺️

 

 

 

HAproxy で Basic 認証を使う際の パスワード文字列 エンコード

 
HAproxy における Basic認証のパスワード設定で、” insecure-password “ オプション を使いたくないとき。
パスワード を ハッシュ化する必要がある。
 
その手順 を書き留めておく。
 
 

 
環境:
 
Ubuntu "18.04.4 LTS (Bionic Beaver)"
HA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22
 

 
生成手順
 
 
$ sudo apt-get install whois
 
これで ハッシュ化されたパスワードを生成できます。
 

 
 DESを使った 例
 
$ printf  "password12345" | mkpasswd --stdin --method=des
MX0tC7Y9TYWEk
 
他にも  MD5, SHA-256 or SHA-512 に HAproxy は、対応しているようです。
 

 
 
上記で エンコードした パスワード は  HAproxy の 設定 cfg ファイル の Basic 認証 用 で使用できます。
 
エンコードしない場合は、 insecure-password  オプションを使うことで 対応可能です。
 
haproxy.cfg 内の ユーザーリスト部 ( なければ自分で 記述してOK )
 
以下では is-admin という グループ定義もしています。
 
  userlist basic-auth-list
  group is-admin
 
  user admin  password MX0tC7Y9TYWEk             groups is-admin
  user guest  insecure-password guestpassword
 
 
参考:こちら より詳細に紹介されています。英文です。

ラズパイ MJPG streamer サービスデーモン化

Webカメラ として ラズパイ & MJPG streamer の組み合わせは AIカメラとしても使いやすいし、超便利。
 
そんな中、サービス化・デーモン化 で Permission denied ( パーミッション エラー ) 。
少し躓いた。
UNIT ファイル の挙動、整理のため、メモ。
 
 

f:id:asuki_y:20200514173655p:plain

MJPG-streamer
 

 
 

< 動作前提環境メモ >

 
Raspberry Pi 3 Model B Plus Rev 1.3
・Raspbian GNU/Linux 10 (buster)
・mjpg-streamer が通常動作する環境
・( v4l2-ctl コマンドが 普通に使える状況 )
・普通に使えるUSBカメラ
vim を使っています。 適宜 お好みの テキストエディタで。
 
 

 

手順

 

接続したUSBカメラデバイスIDを取得 
v4l2-ctl --list-devices
 
USB2.0 PC CAMERA (usb-3f980000.usb-1.2):
    /dev/video0
    /dev/video1
 
 
" usb-3f980000.usb-1.2 "
 
これを記録しておく
 
sudo systemctl list-units -t device
 
 
以上の結果より  USBアドレス に該当する行から デバイスID を取得
 
以下  1行、カメラのデバイスID を メモっておいた。
 
sys-devices-*****usb-3f980000.usb-****
 
 
vim /etc/systemd/system/mjpgStreamer.service
 
 

 
UNIT ファイル編集内容
 
[Unit]
# たてるサービスの説明
Description=MJPEG-Streamer
 
After=udev.target
After=sound.target
After=syslog.target
 
# 上記で取得したカメラのデバイスIDをこちらへ反映する
BindsTo=sys-devices-platform-soc-3f980000.usb-usb1-1\x2d1-1\x2d1.1-1\x2d1.1.1-1\x2d1.1.1:1.0-net-eth0.device
After=sys-devices-platform-soc-3f980000.usb-usb1-1\x2d1-1\x2d1.1-1\x2d1.1.1-1\x2d1.1.1:1.0-net-eth0.device
 
[Service]
type=simple
# mjpg ストリーマー 起動コマンド。パスワードなど オプションはお好みで変更
ExecStart=/usr/local/bin/mjpg_streamer -i 'input_uvc.so -f 20 -d /dev/video0 -r 640x480 -n -y' -o 'output_http.so -w /var/www -p 18880'
 
[Install]
WantedBy=multi-user.target
WantedBy=sys-devices-platform-soc-3f980000.usb-usb1-1\x2d1-1\x2d1.1-1\x2d1.1.1-1\x2d1.1.1:1.0-net-eth0.device
# 末尾のこの項目も一応 デバイスIDを反映しておく
 
 

 
(今日の つまずき ポイント)
ただし、service UNITファイルにたいして root権限のままでは、動作できないので注意。(状況によって)
 
生成した UNITファイルの 権限変更を行う。
たとえば mstuser に 権限を与えたければ、
 
sudo chown mstuser:mstuser /etc/systemd/system/mjpgStreamer.service
 
 
( pi ユーザーがよければ、上記 ユーザー名 グループ名は適宜修正してください )
 
 
最後に サービスデーモン化
 
systemctl enable mjpgStreamer.service
 
これで sudo しなくても  MJPG - streamer サーバー が起動・ 実行できた!
 
 

 

参考

 
 
Raspberry PiでUSB Web CAMの動画を配信する ~mjpg-streamer自動化編~