昨年10月(2018/10)の記事「Node-REDからpython-broadlinkでRM mini3をコントロール【失敗】[on Onion Omega2+]」では、python-broadlinkをNode-Redのexecノードで実行しようというものでした。結果的に75-exec.jsでTypeErrorの例外が発生してしまい、躓いていました。
原因は、使っているNode.jsが古い(v4.3.1)ことが起因しているようでした・・・
Node.jsをクロスコンパイルすることもトライしましたが、ハードルが高く断念しました。
あれから約半年、どうもNode.js v8.10.0が正式サポートされたようです。
また、Node-REDも公式にサポートされました。但し、公式サポートは、最新のOmega2 Proのようです。Omega2+と比較がありましたので、参照すると以下のようになっておりました。MemoryがOmega2 Pro=512MBに対し、Omega2 Plus=128MBとなっておりますが、Swapで対応すれば、カバーできそうです。
0. 前提条件
- Onion Omega2 Plus
※工場出荷状態にリセット済み - 2GB Micro-SD Card
- パーティション2分割
- 512MB=スワップ用、残り=システム領域拡張用
- 各領域共にext4でフォーマット済み
- パーティション2分割
- Omega2拡張ドック
1. ファームウェアのアップデート
最初にファームウェアをアップデートします。
詳細は、公式ページを参照してください。
$ oupgrade -l
更新後のファームウェアの確認は、以下で可能です。
$ oupgrade -v
> Device Firmware Version: 0.3.2 b220
$
この時点で以下の構成となります。
- Onion Omega2 Plus
- BusyBox v1.28.3
- Ω-ware: 0.3.2 b220
- Linux 4.14.81 #0 Thu Feb 21 20:59:23 2019 mips GNU/Linux
2. スワップ領域の確保
以前の記事に書いた方法でスワップ領域を作成・設定します。
必要なパッケージのインストール
$ opkg update
$ opkg install swap-utils block-mount
スワップファイルの作成
$ dd if=/dev/zero of=/mnt/mmcblk0p1/swap.page bs=1M count=512
スワップ領域として設定・有効化
$ mkswap /mnt/mmcblk0p1/swap.page
$ swapon /mnt/mmcblk0p1/swap.page
micro-SD自動マウント有効化
$ block detect > /etc/config/fstab
/etc/config/fstabを開いて、option enabledを**'1'**に設定します。
config 'mount'
option target '/mnt/mmcblk0p1'
option uuid 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
option enabled '1'
スワップファイル自動有効化
/etc/rc.local に swapon コマンドを仕込みます。
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
### activate the swap file on an external SD-Card
SWAP_FILE="/mnt/mmcblk0p1/swap.page"
if [ -e "$SWAP_FILE" ]; then
swapon $SWAP_FILE
fi
exit 0
再起動して、スワップファイルが自動で有効になっているか確認します。
$ free
total used free shared buffers cached
Mem: 124920 93244 31676 44 5760 20828
-/+ buffers/cache: 66656 58264
Swap: 524284 512 523772
3. 外部ストレージからの起動設定
こちらも同じく、以前の記事に書いた方法で設定していきます。
外部ストレージのフォーマット
e2fsprogsをインストールします。
$ opkg update
$ opkg install e2fsprogs
アンマウント後、ext4でフォーマットします。
フォーマット後、再マウントします。
$ umount /mnt/mmcblk0p2
$ mkfs.ext4 /dev/mmcblk0p2
/overlay ディレクトリをコピー
/overlay に格納されているシステム関連ファイルを Micro-SD にコピーします。
$ mount /dev/mmcblk0p2 /mnt/mmcblk0p2 ; tar -C /overlay -cvf - . | tar -C /mnt/mmcblk0p2 -xf - ; umount /mnt/mmcblk0p2
/overlay 自動マウント設定
$ block detect > /etc/config/fstab
/etc/config/fstab のoption targetを**'/overlay'に、option enabledを'1'**に設定します。
config 'mount'
option target '/overlay'
option uuid 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
option enabled '1'
設定が終わったら再起動します。
以下、確認結果です。
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 7936 7936 0 100% /rom
tmpfs 62460 92 62368 0% /tmp
/dev/mmcblk0p2 1348020 291676 969816 23% /overlay
overlayfs:/overlay 1348020 291676 969816 23% /
tmpfs 512 0 512 0% /dev
/dev/mmcblk0p1 564156 524736 0 100% /mnt/mmcblk0p1
4. Node-RED関連インストール
公式ガイドに従い、Node-REDをインストールします。
Node-Redインストール
公式ガイドを見ると、インストールはブラウザからアクセスするOnionOSのApp Managerで可能との記載があります。
OnionでのNode-RED公式サポートは、Omega2 ProのみでOmega2+は公式サポートしていないようです。App Managerのインストール用アイコンには***"Pro"***と明記されています。インストールに際し、もしかしたらエラーと成り得る可能性も考え、(私的にエラー調査し易い)コマンドラインでインストールすることにしました。
$ opkg update
$ opkg install oos-app-nodered
インストール完了後、再起動すると自動的にNode-REDが起動するように**/etc/init.d/nodered及び、/etc/rc.d/S99nodered**が作成されるようです。
再起動後、Omega2にブラウザでアクセスすると、Node-REDのアイコンが追加されています。アイコンをクリックすると、Node-REDのフローエディタにアクセスできます。
ちなみに、起動後停止する場合は、/etc/init.d/nodered stopをコンソールから入力します。stopのところをstartで再開となります。
$ /etc/init.d/nodered stop
引数 | 説明 |
---|---|
start | サービスを起動する |
stop | サービスを停止する |
restart | サービスを再起動する |
reload | サービスの設定をリロードする(Node-RED未実装?) |
enable | サービスの自動起動を有効化する |
disable | サービスの自動起動を無効化する |
サービスを利用せず、nodeコマンドで起動する場合は、以下となります。
$ /usr/bin/node --max-old-space-size=128 /usr/lib/node_modules/node-red/red.js --userDir /root/.node-red
以下、上記コマンドで実行した際、コンソール出力されたログに出力されるバージョン情報を記録しておきます。
Item | Version |
---|---|
Node-RED | version: v0.19.5 |
Node.js | version: v8.10.0 |
Linux | 4.14.81 mipsel LE |
関連ツールのインストール
公式ガイドに従い、追加の関連ツールをインストールします。
まずは、npmをインストールします。
$ opkg update
$ opkg install node-npm
次にコンパイルが必要なNodeパッケージのインストールに備え、gccとmakeをインストールします。インストールにあたり、node-gypのインストールと設定が必要です。
$ opkg update ; opkg install python
$ cd /root/.node-red
$ node --max_old_space_size=512 $(which npm) install -g node-gyp
/etc/opkg/distfeeds.confのコメントアウトしてある***"src/gz openwrt_base http://....."、"src/gz openwrt_packages http://....."***のリポジトリを有効化します。
# src/gz openwrt_core http://downloads.openwrt.org/releases/18.06-SNAPSHOT/targets/ramips/mt76x8/packages
- #src/gz openwrt_base http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/base
+ src/gz openwrt_base http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/base
# src/gz openwrt_luci http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/luci
# src/gz openwrt_onion http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/onion
- #src/gz openwrt_packages http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/packages
+ src/gz openwrt_packages http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/packages
# src/gz openwrt_routing http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/routing
# src/gz openwrt_telephony http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/telephony
src/gz omega2_core http://repo.onioniot.com/omega2/packages/core
src/gz omega2_base http://repo.onioniot.com/omega2/packages/base
src/gz omega2_packages http://repo.onioniot.com/omega2/packages/packages
src/gz omega2_routing http://repo.onioniot.com/omega2/packages/routing
src/gz omega2_onion http://repo.onioniot.com/omega2/packages/onion
/etc/opkg/distfeeds.confを保存後、以下を実行します。
$ opkg update
$ opkg install make gcc
$ ar -rc /usr/lib/libpthread.a
Node-RED認証有効化
Node-REDの認証を有効化します。
【2019/04/29時点】
有効化できますが、bcryptjsが遅いためか(?)認証が上手くいきませんでした。
現状、無効化してます。
**/root/.node-red認証時に使用するモジュール(bcryptjs)をインストールします。
$ cd /root/.node-red
$ node --max_old_space_size=512 $(which npm) install bcryptjs
認証用パスワードのハッシュコードを得ます。
(ハッシュコードが得られるまで約3分かかります)
$ cd /root/.node-red
$ node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" your-passwd
$2a$08$8KgbG3bxk9Dg0cJUw/i2oOQf72zhcn9nUzqp6m.jJ8DF4X/b6cU82
ハッシュコードが得られたら、/root/.node-red/settings.jsの122行目あたりにあるadminAuth部分を有効化(コメントアウトを削除)してpasswordの部分に取得したハッシュコードを定義します。
adminAuth: {
type: "credentials",
users: [{
username: "admin",
password: "$2a$08$8KgbG3bxk9Dg0cJUw/i2oOQf72zhcn9nUzqp6m.jJ8DF4X/b6cU82",
permissions: "*"
}]
},
Node-REDを再起動し、ブラウザでアクセスすると、以下のようにユーザ名とパスワードを入力する画面が表示されます。
【2019/04/29時点】認証でFailedになっちゃいます。
とりあえず、一旦休憩!
Node-REDインストール迄を**「その1」**とします。
次回は、
- broadlink RM mini3の設定
- Alexa Home Skill Bridgeの設定
を行っていく予定です。