Armadillo-IoT(G4)で、スイッチ長押しで起動するコンテナを選択する方法です。
用例としては、スイッチが長押しされていればメンテナンスモードのコンテナを起動し、
長押しされてなければ、通常モードのコンテナを起動する、といった場合が考えられます。
以下では、podman_startコマンド
podman_start example1
podman_start example2
で起動する2つのコンテナ(example1、example2)用のコンテナイメージと
コンフィグファイル(example1.conf、example2.conf)が準備済みとします。
ここでは例として、下記のように動作するものです。
Armadillo-IoT ゲートウェイ G4製品マニュアル「図13.6 Armadillo-IoT ゲートウェイ G4のインターフェース」より
LED(LED3):Hertbeatでチカチカ点滅する間、コンテナ選択可能状態
スイッチ(SW1):
コンテナ選択可能状態:5秒長押しでexample2、それ以外はexample1を起動する
コンテナ起動後:5秒長押しでreboot、10秒長押しでpoweroffする
1. コンテナのコンフィグファイルを自動起動しないように設定する
コンテナ(example1、example2)のコンフィグファイル
/etc/atmark/containers/example1.conf
/etc/atmark/containers/example2.conf
に
set_autostart no
を記述します。
2. 以降の設定ファイルを置くディレクトリ(/etc/my_etc)を作成
下記コマンドで/etc/my_etcを作成します。
armadillo:~# mkdir /etc/my_etc
3. 「コンテナ選択可能状態」のスイッチ(SW1)のコンフィグファイルを作成
「5秒長押しでexample2、それ以外はexample1を起動する」buttondのコンフィグファイル
(select_container_buttond.conf)を上記手順2で作成した/etc/my_etcディレクトリ内に下記の内容で作成します。
/etc/my_etc/select_container_buttond.conf
BUTTOND_ARGS="$BUTTOND_ARGS -l prog1 -t 5000 -a 'echo example2 > /tmp/select_container'"
補足)スイッチ(SW1)を5秒以上長押しすると、/tmp/select_containerに"example2"と記述します。
/etc/my_etc/select_container_buttond.confをeMMCに保存します。
armadillo:~# persist_file /etc/my_etc/select_container_buttond.conf
4. 「コンテナ起動後」のスイッチ(SW1)のコンフィグファイルを作成
「5秒長押しでreboot、10秒長押しでpoweroffする」buttondのコンフィグファイル
(normal_buttond.conf)を上記手順2で作成した/etc/my_etcディレクトリ内に下記の内容で作成します。
/etc/my_etc/normal_buttond.conf
BUTTOND_ARGS="$BUTTOND_ARGS -l prog1 -t 5000 -a 'reboot'"
BUTTOND_ARGS="$BUTTOND_ARGS -l prog1 -t 10000 -a 'poweroff'"
補足)スイッチ(SW1)を5秒以上長押しでreboot、10秒長押しでpoweroffを実行します。
/etc/my_etc/normal_buttond.confをeMMCに保存します。
armadillo:~# persist_file /etc/my_etc/normal_buttond.conf
5. 「コンテナ選択可能状態」と「コンテナ起動後」のスイッチ(SW1)の機能を切り替えるスクリプトの作成
スイッチ(SW1)の機能を切り替えるスクリプト(select_container.start)を下記の内容で
/etc/local.dディレクトリに作成します。
補足)/etc/local.dディレクトリに、.start ファイルを置いておくと起動時に実行されます。
/etc/local.d/select_container.start
#!/bin/sh
echo example1 > /tmp/select_container
echo heartbeat > /sys/class/leds/led1/trigger
cp /etc/my_etc/select_container_buttond.conf /etc/atmark/buttond.conf
rc-service buttond restart
sleep 10
echo none > /sys/class/leds/led1/trigger
echo 1 > /sys/class/leds/led1/brightness
cp /etc/my_etc/normal_buttond.conf /etc/atmark/buttond.conf
rc-service buttond restart
CONTAINER=`cat /tmp/select_container`
podman_start $CONTAINER
補足)上記スクリプトはArmadilloが起動する自動実行され、下記のように動作します。
・/tmp/select_containerに、デフォルトで起動するコンテナ名"example1"を記述します。
・スイッチ(SW1)を「コンテナ選択可能状態」(上記手順3)での機能(※)にします。
※)5秒長押しで、/tmp/select_containerにコンテナ名"example2"を記述します。
・10秒経過後、/tmp/select_containerに記述されているコンテナ名のコンテナを起動します。
・スイッチ(SW1)を「コンテナ起動後」(上記手順4)での機能(※)にします。
※)5秒以上長押しでreboot、10秒長押しでpoweroffします。
/etc/local.d/select_container.startに実行権限を付けて、eMMCに保存します。
armadillo:~# chmod +x /etc/local.d/select_container.start
armadillo:~# persist_file /etc/local.d/select_container.start
以上を実施後、再起動すると、下記のように動作します。
LED(LED3)がHertbeatでチカチカ点滅する間(10秒間)に、スイッチ(SW1)で起動するコンテナを選択できます。
5秒長押しでexample2を起動
それ以外はexample1を起動
コンテナ起動後は、スイッチ(SW1)の5秒以上長押しでreboot、10秒長押しでpoweroffを実行します。
参考情報)上記で使用した機能(スイッチ、起動スクリプト)については、下記も合わせて参考ください。
Armadillo-IoT ゲートウェイ G4製品マニュアル「9.11.4. ボタンやキーを扱う」
Armadillo-IoT ゲートウェイ G4製品マニュアル「9.11.5. Armadillo Base OS 側の起動スクリプト」
G4:ユーザースイッチのみでシャットダウン、リブートを行う方法