HAproxy で Basic 認証を使う際の パスワード文字列 エンコード
HAproxy における Basic認証のパスワード設定で、” insecure-password “ オプション を使いたくないとき。
パスワード を ハッシュ化する必要がある。
その手順 を書き留めておく。
環境:
Ubuntu "18.04.4 LTS (Bionic Beaver)"
HA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22
HAproxy docker コンテナ version 2.6.7
生成手順
$ sudo apt-get install whois
|
これで ハッシュ化されたパスワードを生成できます。
DESを使った 例
$ printf "password12345" | mkpasswd --stdin --method=sha-256
$5$oPP0ueuなんちゃら
|
他にも MD5, SHA-256 or SHA-512 に HAproxy は、対応しているようです。
HAproxy ver. 2.6.7 デフォルトでは、sha-256 でした。
上記で エンコードした パスワード は HAproxy の 設定 cfg ファイル の Basic 認証 用 で使用できます。
エンコードしない場合は、 insecure-password オプションを使うことで 対応可能です。
haproxy.cfg 内の ユーザーリスト部 ( なければ自分で 記述してOK )
以下では is-admin という グループ定義もしています。
userlist basic-auth-list
group is-admin
user admin password $5$oPP0ueuなんちゃら groups is-admin
user guest insecure-password guestpassword
|
参考:こちら より詳細に紹介されています。英文です。
ラズパイ MJPG streamer サービスデーモン化
Webカメラ として ラズパイ & MJPG streamer の組み合わせは AIカメラとしても使いやすいし、超便利。
そんな中、サービス化・デーモン化 で Permission denied ( パーミッション エラー ) 。
少し躓いた。
UNIT ファイル の挙動、整理のため、メモ。
< 動作前提環境メモ >
・Raspberry Pi 3 Model B Plus Rev 1.3
・Raspbian GNU/Linux 10 (buster)
・mjpg-streamer が通常動作する環境
・( v4l2-ctl コマンドが 普通に使える状況 )
・普通に使えるUSBカメラ
手順
接続した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-****
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自動化編~
ラズパイ chromium を自動起動する
目的
目次
メインメニュー
“ Raspberry Pi の設定 "
“ システム "タブ
“ 自動ログイン “ の ところで “ 現在のユーザーとしてログインする” にチェック ✓ しておけば
crontab に 1行 追記
起動時に 不要 となるファイルを消しておきます。
autostart の 設定・登録
$ vi /etc/xdg/lxsession/LXDE-pi/autostart
# 以下追記 #
@xset s off
@xset -dpms
@xset s noblank
|
あとがき: autostart の 場所が変わった
昔は ここにあったファイル
vi ~/.config/lxssion/LXDE-pi/autostart
こちらに引っ越しになったそう ようですね。
/etc/xdg/lxsession/LXDE-pi/autostart
詳細は以下参照です。
参考 自動 chromum 起動
ここ autostart 引っ越し先 について
参考: crontab 起動時 自動 実行
Docker 使っていて タブ補完 が不十分だったので 補完機能を強化
docker inspect コンテナ名
|
って 入力したいときなどに、OSの環境によっては、 コンテナ名 まで Tab キーで 補完 されません。
bash-completion をインストールしているのに、、
いまいち 補完 が 不十分 、、
というとき、以下で 補完機能を強化できます。
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
|
これで docker コマンドが快適になった!
docker タブ
docker 補完
bash complete , completion で検索してもなかなか 欲しい情報にたどり着かなかったのでメモ。
環境メモ
Ubuntu 18.04.4 LTS (Bionic Beaver)
Docker version 19.03.8, build afacb8b7f0
docker-compose version 1.25.4, build 8d51620a
参照 : 公式
Docker インストール ubuntu 18
☐ 目的
サクっと ubuntu 18 に Docker ( CE ) をインストールしたい。
☐ 動作環境 確認
Ubuntu 18.04.4 LTS (Bionic Beaver)
目次
まず いつもの。
新しいパッケージ情報にリーチできるようにします。
sudo apt-get update
|
☐ リポジトリ 設定
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
|
Docker 公式 GPG キー 追加。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
|
必要に応じてフィンガープリントチェック
sudo apt-key fingerprint 0EBFCD88
|
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
sudo add-apt-repository \
$(lsb_release -cs) \
stable"
|
その他は公式を要チェック
Docker エンジンをインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io
|
細かくバージョン 指定してインストールしたい場合も公式をチェックしてから install だ:
sudo apt-get install docker-ce docker-ce-cli containerd.io
|
インストール完了しました。
sudo docker --version
|
Docker version 19.03.8, build afacb8b7f0
☐ 簡易動作確認
sudo docker run hello-world
|
1b930d010525: Pull complete
Digest: sha256:f9dfddf63636d84ef479d645ab5885156ae030f611a56f3a7ac7f2fdd86d7e4e
Status: Downloaded newer image for hello-world:latest
sudo docker ps -a
|
このように hello-world イメージができていれば インストール OK だと思います。
Docker バージョン 17 みたいに 一部 Volume 動作でバグが。。。 とか まではさすが にこれで確認できないですね🤔
ーー
参照:公式 インストール方法
余談:
windows 関連のニュースで最も衝撃 を受けて、Windows 10 Pro が欲しくなりました。 サンドボックス めちゃくちゃいいな。。 サンドボックスに保存機能がついたら Windows 最強では、、、
Windows で 煩わしいと思ってたこと の多くが ふっ飛ぶ 勢い。
Node-RED Node-gen で 作ったパーツ を 別の環境で 動作させる
目的
nodered-node-gen で作った ノード パーツ モジュール を 作ったところとは別の環境で動作させる。
環境メモ
node-red-nodegen 0.1.0 コマンドの インストール済み
Nodejs v12.16.1
Node-RED v1.0.4
Nodejs v12.16.1
Node-RED v1.0.4
( node-red-nodegen インストール不要でした )
移行元
~/.node-red/lib/functions/
|
そこで 作成した 該当する js ファイルと、それに該当するディレクトリを 移行先へコピーする
scp など。
( Format-date.js と node-red-contrib-format-date/配下全て )
移行先 の例
~/.node-red/lib/functions
|
必要な nodejs モジュールなど 準備を先に行っておく
cd ~/.node-red
npm install (Node-REDノードで使うNodejsモジュールなど)
|
以後は、前回の記事で作成した node-red-contrib-format-date を例にコマンド 例を かきます。
移行コピーしたディレクトリへ移動
必要な nodejs モジュールなど 準備を先に行っておく
cd ~/.node-red/lib/functions/node-red-contrib-format-date
|
リンク引っ張り
sudo npm link
|
リンク生成
cd ~/.node-red/
npm link node-red-contrib-format-date
|
Node-RED を再起動
Raspberry Piなら 例えば
sudo service nodered restart
|
移行できました!
私のは動きましたが、 動作確認もしっかりと👍
NodeRED nodegen における require を使う Nodejs モジュール ( ライブラリ ) 込みのケース
目的
< 環境メモ >
Nodejs v12.16.1
Node-RED v1.0.4
node-red-nodegen 0.1.0 コマンドの 通常インストール済み
時間を出力するだけのオリジナルノードを生成してみる。
環境準備
( nodejs で使える moment モジュール ( ライブラリ ) を使った Node-gen )
Nodejs でつかう モジュール の require 記述
ここでは moment モジュール の require
vi ~/.node-red/settings.js
|
221行目前後の " functionGlobalContext " の項目を変更
functionGlobalContext: {
// os:require('os'),
// jfive:require("johnny-five"),
// j5board:require("johnny-five").Board({repl:false})
moment: require('moment’) // 外部モジュールの定義を追加
},
|
コア機能に使うモジュールをインストール。
ここでは、Nodejs モジュール moment を インストール。
cd ~/.node-red/
|
npm install moment
|
cd
|
これでまず 手元の node-red 上で上記モジュールを使う準備は整った。
目的となる function ノードの生成
node-red を起動
以下 パーツを配置接続
真ん中は 普通の function
function に記述。
このパーツに 名前をつける
名前: Format date
・ コード
var moment = global.get('moment');
msg.payload = moment().format('MMMM Do YYYY:mm:ss a');
return msg;
|
そして デプロイ。
動作確認
ちゃんと動作している。
function ノードの ライブラリ 出力
“ ライブラリへ保存 "
js ファイルとして保存します。
こうすると 通常 の保存先は、こちら でした。
{ ホームディレクトリ }/.node-red/lib/functions/
( GUI 上では、 function 。
CUI 上では、functions となっているのが若干 気になる。。 )
ls
Format-date.js -> 保存できている
|
ここで node-red-nodegen コマンド を実行 !
node-red-nodegen ~/.node-red/lib/functions/Format-date.js
|
Success: node-red-contrib-format-date
と表示されました。
ls
|
Format-date.js node-red-contrib-format-date/
|
jsファイルに定義を追加します
vi node-red-contrib-format-date/node.js
|
vm.createContext() の前に定義を追加します。
package.jsonファイル の 編集。依存関係を 明記します。
vi node-red-contrib-format-date/package.json
|
"keywords” 要素の次にでも。
追記しました。
シンボリックリンク の準備
cd ~/.node-red/lib/functions/node-red-contrib-format-date
sudo npm link
|
( 上記 cd の コマンド 、公式に 誤記? で 存在してなかったので 若干 迷った )
シンボリックリンク を生成します
cd ~/.node-red/
npm link node-red-contrib-format-date
|
これで 生成したノードが使用できるようになりました。
ノードジェネレータ の弱点を鑑みて 生成したノードが 使用できるか否かは、以下公式をチェックです👍
参照: Node-RED-Node-Gen 公式
素晴らしいツール作りと丁寧なドキュメントに感謝🙏