| | 本章では、ここまでの内容で紹介しきれなかった、より細かな Armadillo の設定方法や、開発に役立つヒントなどを紹介します。 各トピックを羅列していますので、目次の節タイトルからやりたいことを探して辞書的にご使用ください。 本章では、Armadillo-IoTゲートウェイ A6E の 省電力・間欠動作機能や動作モード、状態遷移について説明します。 シャットダウンモードへ遷移するには、poweroffコマンド、またはaiot-alarm-poweroffコマンドを実行します。 poweroffコマンドを実行してシャットダウンモードに遷移した場合、電源の切断・接続のみでアクティブモードに遷移が可能です。
poweroffコマンドの実行例を次に示します。 [armadillo ~]# poweroff
[ OK ] Stopped target Timers.
[ OK ] Stopped Daily man-db regeneration.
[ OK ] Stopped Daily rotation of log files.
※省略
[39578.876586] usb usb1: USB disconnect, device number 1
[39578.882754] ci_hdrc ci_hdrc.0: USB bus 1 deregistered
[39578.888133] reboot: Power down 6.1.1.2. aiot-alarm-poweroffコマンドaiot-alarm-poweroffコマンドを実行することで、シャットダウンモードに遷移後、
RTCのアラーム割り込みをトリガで起床(アクティブモードに遷移)することができます。
なお、RTC を起床要因に使って間欠動作させる場合は、 「RTC を使用する」 を参考に、必ず RTC の日時設定を行ってください。 | |
---|
RTC 未設定によるエラーが発生した場合、シャットダウンモードへの遷移は行われません。 |
シャットダウンモードに遷移し、300秒後にアラーム割り込みを発生させるには、次のようにコマンドを実行します。 [armadillo ~]# aiot-alarm-poweroff +300
aiot-alarm-poweroff: alarm_timer +300 second 現在時刻からの経過秒数は180秒以上を指定する必要があります。 aiot-sleepコマンドを実行することで、スリープモードに遷移することができます。
スリープモードからの起床(アクティブモードに遷移する)条件は、aiot-sleepコマンドを実行する前にaiot-set-wake-triggerコマンドで事前指定します。
ユーザースイッチによる起床は標準で有効になっています。また、起床条件はOR条件での設定が可能です。 6.1.2.1. RTCアラーム割り込み以外での起床aiot-set-wake-triggerコマンドの書式と設定可能なパラメータを以下に示します。 表6.1 aiot-set-wake-trigger TRIGGER一覧 TRIGGER | 説明 |
---|
usb | CON9(USB ホストインターフェース)にUSBデバイスを挿抜したとき | uart3 | CON3(シリアルインターフェース /dev/ttymxc2)にデータ受信があったとき | rs485 | UART5(シリアルインターフェース /dev/ttymxc4)にデータ受信があったとき | gpio | GPIO 割り込みが発生したとき | sw1 | SW1 が押下されたとき | ain [] | アナログ入力電圧閾値割り込み発生時 |
コンソール(/dev/ttymxc2)から入力があった場合にスリープモードから起床するには、次に示すコマンドを実行します。 [armadillo ~]# aiot-set-wake-trigger uart3 enabled
aiot-set-wake-trigger: uart3 enabled
[armadillo ~]# aiot-sleep
aiot-sleep: Power Management suspend-to-ram
[ 1767.050404] PM: suspend entry (deep)
[ 1767.054019] PM: Syncing filesystems ...
[ 1767.236546] fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full -
flow control rx/tx
[ 1767.428714] done.
[ 1767.431262] Freezing user space processes ... (elapsed 0.001 seconds) done.
[ 1767.439582] OOM killer disabled.
[ 1767.442834] Freezing remaining freezable tasks ... (elapsed 0.001
seconds) done.
[ 1767.451485] Suspending console(s) (use no_console_suspend to debug)
※ コンソールに入力
[ 1767.567686] OOM killer enabled.
[ 1767.570875] Restarting tasks ... done.
[ 1767.606048] PM: suspend exit
aiot-sleep: change mode CPU Idle RTCアラーム割り込みでの起床を行う場合、パラメーター設定が異なります。
なお、RTC を起床要因に使って間欠動作させる場合は、 「RTC を使用する」 を参考に、必ず RTC の日時設定を行ってください。 現在時刻からの経過秒数 は60秒以上を指定する必要があります。 300秒後にRTCアラーム割り込みを発生させ、スリープモードから起床させるコマンド実行例を以下に示します。 [armadillo ~]# aiot-set-wake-trigger rtc enabled +300
aiot-set-wake-trigger: rtc enabled
aiot-set-wake-trigger: alarm_timer +300 second
[armadillo ~]# aiot-sleep
aiot-sleep: Power Management suspend-to-ram
[ 1767.050404] PM: suspend entry (deep)
[ 1767.054019] PM: Syncing filesystems ...
[ 1767.236546] fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full -
flow control rx/tx
[ 1767.428714] done.
[ 1767.431262] Freezing user space processes ... (elapsed 0.001 seconds) done.
[ 1767.439582] OOM killer disabled.
[ 1767.442834] Freezing remaining freezable tasks ... (elapsed 0.001
seconds) done.
[ 1767.451485] Suspending console(s) (use no_console_suspend to debug)
※ 約300秒待つ
[ 1767.567686] OOM killer enabled.
[ 1767.570875] Restarting tasks ... done.
[ 1767.606048] PM: suspend exit
aiot-sleep: change mode CPU Idle | |
---|
アラーム割り込みは分単位(毎分00秒)で発生します。そのため、300秒(5分)を指定した場合、実際に割り込みが発生するまでの時間は5分00秒〜5分59秒の間となります。 |
すべての起床要因をクリアするには次に示すコマンドを実行します。ユーザースイッチによる起床設定は無効化できません。 [armadillo ~]# aiot-set-wake-trigger all disabled
aiot-set-wake-trigger: clear_all disabled 6.1.3. スリープ(SMS 起床可能)モードへの遷移と起床aiot-sleep-smsコマンドを実行することで、スリープ(SMS 起床可能)モードに遷移することができます。
スリープモードからの起床(アクティブモードに遷移する)条件は、aiot-sleep-smsコマンドを実行する前にaiot-set-wake-triggerコマンドで事前指定します。
ユーザースイッチによる起床は標準で有効になっています。aiot-sleep-smsコマンドを実行した場合SMS受信による起床は強制的に有効になります。
また、起床条件はOR条件での設定が可能です。 aiot-sleep-smsコマンドの実行例を次に示します。 [armadillo ~]# aiot-sleep-sms
aiot-sleep-sms: Power Management suspend-to-ram
AT+CMGF=1
OK
AT^SIND="message",0
^SIND: message,0,0
OK
AT+CMGD=1,4
OK
AT+CMGL="ALL"
OK
[ 3508.609638] PM: suspend entry (deep)
^SIND: message,1,0
OK
[ 3508.613982] PM: Syncing filesystems ... done.
[ 3508.637946] Freezing user space processes ... (elapsed 0.001 seconds) done.
[ 3508.646276] OOM killer disabled.
[ 3508.649527] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
[ 3508.658161] Suspending console(s) (use no_console_suspend to debug)
※ SMS受信
[ 1767.567686] OOM killer enabled.
[ 1767.570875] Restarting tasks ... done.
[ 1767.606048] PM: suspend exit
aiot-sleep: change mode CPU Idle | |
---|
ご利用の SMS 送信サービスの SMS 送信制限により SMS の送信ができないことがあります。また、ネットワーク状態によって SMS の受信を検知できなかったり、検知が遅れることがあります。 起床要因として SMS のみを設定されるシステムを想定されている場合は、上記検知できない可能性を考慮して RTC など別な起床要因で周期的に起床することを推奨します。 また「LTE モデム EMS31-J 省電力などの設定 (Cat.M1 モデル)」の初期値では、SMS 受信を検知して起床するまでに最長で 3 分かかります。より短時間で起床する必要がある場合は psm と edrx を disable に設定する対応をご検討ください。 |
| |
---|
aiot-sleep-sms でスリープモードへ遷移する際、LTE モジュールの SMS 保存用ストレージに空きがない場合 SMS 受信での起床ができなくなるため、LTE モジュールのストレージから 1 件 SMS を削除してからスリープモードへ遷移します。 SMS で受信した内容が必要な場合は、 SMS の内容を別なファイルなどに保存してから aiot-sleep-sms を実施してください。 |
6.1.4. 状態遷移トリガにコンテナ終了通知を利用する動作中のコンテナの終了をトリガに、省電力状態のモードへの遷移を行うことができます。 | |
---|
コンテナの終了契機は「/etc/atmark/containers/*.confファイルの set_command で指定したコンテナ起動時に実行するコマンド」のプロセスが終了した時」となります。
ファイルの詳細は 「イメージからコンテナを作成する」 を参照してください。 |
遷移先の動作モードと起床条件は設定ファイルで指定し、
コンテナが終了すると指定した動作モードへ遷移、指定した起床条件が発生すると
省電力モードから復帰します。また、その際自動的にコンテナも開始します。 コンテナ終了時に遷移する動作モードと起床条件については、設定ファイル(/etc/atmark/power-utils.conf)で指定します。
設定ファイルは下記の通り、 TARGET , MODE , WAKEUP を指定します。 [armadillo ~]# cat /etc/atmark/power-utils.conf
TARGET='a6e-gw-container'
MODE='NONE'
WAKEUP='SW1', 'USB', 'UART', 'GPIO', 'SMS', 'RTC:60', 'AIN' 設定ファイルの概要を以下に示します。 表6.2 設定パラメーター パラメーター名 | 意味 |
---|
TARGET | 状態遷移トリガの対象となるコンテナ名 | MODE | 遷移先の動作モード | WAKEUP | 起床条件 |
表6.3 遷移先の動作モード モード名 | 設定値 |
---|
省電力・間欠動作OFF | NONE (初期値) | シャットダウンモード | SHUTDOWN | スリープモード | SLEEP |
表6.4 起床条件 起床条件 | 設定値 |
---|
RTC | RTC:[コンテナ終了からの経過秒数[]] | SW1 押下 | SW1 | GPIO 割り込み | GPIO | USB デバイス接続 | USB | UART データ受信 | UART | SMS 受信 | SMS | AIN [] | アナログ入力電圧閾値割り込み発生時 |
| |
---|
Cat.1 モデルで SMS 受信を起床条件に指定すると、間欠動作が正常に動作しません。SMS はデフォルトで起床条件に含まれているため、 Cat.1 モデルで間欠動作を実施する際は WAKEUP から削除してください。 |
以下は遷移する動作モードがシャットダウンモード、起床条件が RTC(300秒後起床) のパターンです。
なお、デフォルトでは省電力・間欠動作は OFF (MODE=NONE) となっています。 [armadillo ~]# vi /etc/atmark/power-utils.conf
TARGET='a6e-gw-container'
MODE='SHUTDOWN'
WAKEUP='RTC:300' 設定ファイル(/etc/atmark/power-utils.conf)変更後、変更内容を永続化するには図6.4「状態遷移トリガにコンテナ終了通知を利用する場合の設定値を永続化する」に示すコマンドを実行してください。 状態遷移トリガの対象はデフォルトでゲートウェイコンテナが指定されていますが、任意のコンテナを指定することも可能です。
ここでは、 "my_container" というコンテナを状態遷移トリガの対象にする場合の設定を記載します。 |
設定ファイル(/etc/atmark/power-utils.conf)を編集します。
| |
コンテナ名 my_container を指定します。
| |
設定内容を永続化します。
| |
コンテナの設定ファイル(/etc/atmark/containers/my_container.conf)を編集します。記載内容の詳細は「イメージからコンテナを作成する」を参照してください。
| |
コンテナの終了を検知するため、フックを設定します。
| |
コンテナの設定内容を永続化します。
|
Armadillo BaseOS ではルートファイルシステムに overlayfs を採用しています。 そのため、ファイルを変更した後 Armadillo の電源を切ると変更内容は保持されません。
開発中などに rootfs の変更内容を保持するには、変更したファイルに対して persist_file コマンドを使用します。 開発以外の時は安全のため、ソフトウェアアップデートによる更新を実行してください。
SWUpdate に関しては 「アップデート機能について」 を参照してください。 rootfs の内容を変更しても、ソフトウェアアップデートを実施した際に変更した内容が保持されない可能性があります。
ソフトウェアアップデート実施後も変更内容を保持する手順に関しては 「swupdate_preserve_files について」 を参照してください。 persist_file コマンドの概要を 図6.6「persist_file のヘルプ」 に示します。
ファイルの保存・削除手順例
|
追加・変更したファイルを rootfs へコピーします。
| |
-r を指定すると、ひとつ前の rm -f コマンドで削除したファイルがrootfsからも削除されますのでご注意ください。
| |
すでに rootfs に存在するファイルも一度削除してからコピーするため、このようなメッセージが表示されます。
|
ソフトウェアアップデート後も変更を維持する手順例
|
何らかのファイルの内容を変更します。
| |
-P オプションを付与して persist_file を実行します。
| |
swupdate_preserve_files に追加されたことを確認します。
|
変更ファイルの一覧表示例
|
rootfs のファイルを見せないディレクトリは opaque directory と表示されます。
| |
削除したファイルは whiteout と表示されます。
|
パッケージをインストールする時はapkコマンドを使用してメモリ上にインストールできますが、
persist_file コマンドで rootfs に直接インストールすることも可能です。
|
この例では Armadillo を再起動せずにインストールしたコマンドを使用できましたが、Armadillo の再起動が必要となるパッケージもありますので、その場合は Armadillo を再起動してください。
|
6.3. swupdateを使用してアップデートする6.3.1. swupdate で可能なアップデートswupdate を実行する目的としては以下が考えられます。
コンテナをアップデートしたい
開発したコンテナのアップデートが可能です。
ユーザーデータディレクトリや Armadillo Base OS のファイルを差分アップデートしたい
ユーザーデータをアップデートする場合は、以下のディレクトリを更新します。 -
/var/app/rollback/volumes
ユーザーディレクトリについては「電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)」を参照してください。 | |
---|
SWUpdate による /var/app/volumes の更新は推奨しません。 /var/app/volumes が二面化されていないため、書込みの途中で問題が発生した場合、
不完全な書込みになる恐れがあります。
また、アップデート中にアプリケーションがそのデータに
アクセスすると、書込み中のデータにアクセスすることになります。 /var/app/volumes のデータに対して更新が必要な場合、SWUpdate では /var/app/rollback/volumes に更新するデータを書き込んでください。
その後、次回起動時にアプリケーション側から /var/app/rollback/volumes に書き込んだデータを /var/app/volumes に移動するようにしてください。
|
Armadillo Base OS を一括アップデートしたい
アットマークテクノがリリースする Armadillo Base OS の機能追加、更新、セキュリティパッチの追加が可能です。
ブートローダーをアップデートしたい
アットマークテクノがリリースするブートローダーのアップデートが可能です。
「Armadillo Base OSとは」で示すように、Armadillo Base OS は OS・ブートローダー・コンテナ部分の安全性を担保するため二面化しています。 それにより、万が一アップデートに失敗した場合でも起動中のシステムに影響ありません。 以降、それぞれの目的ごとに swupdate によるアップデートの流れを示します。 6.3.2. コンテナのアップデート、ユーザーデータディレクトリや Armadillo Base OS の差分アップデート以下にアップデートの流れを示します。 ここでは、boot して起動中の面を A 面、アップデート先の面を B 面とします。
Armadillo Base OS を B 面へコピー
Armadillo Base OS を B 面にコピーする流れを図6.11「Armadillo Base OS を B 面にコピー」に示します。 A 面と B 面の Armadillo Base OS が同期しているか確認します。 同期していない場合、 A 面の Armadillo Base OS を B 面にコピーします。 同期している場合はコピーしません。 swdesc_option version で指定するバージョンの書き方については「インストールバージョンを指定する」を参照してください。
コマンドを順番に実行
図6.12「desc ファイルに記述したswudesc_* コマンドを実行」に示すように、desc ファイルに記述した順番に従って swudesc_* コマンドを実行します。 「インストールバージョンを指定する」に示すように、swdesc_* コマンドによって Armadillo Base OS に対して書き込みをする場合は --extra-os オプションをつけてください。
swudesc_* コマンドの種類を表6.5「swudesc_* コマンドの種類」に示します。 表6.5 swudesc_* コマンドの種類 おおまかな機能 | コマンド名 | 説明 |
---|
ファイル転送
参照先:「Armadillo へファイルを転送する」 | swdesc_files | 指定したファイルをアップデート先の環境にコピー | swdesc_tar | 指定した tar アーカイブをアップデート先の環境に展開してコピー | コマンド実行
参照先:「Armadillo 上で任意のコマンドを実行する」 | swdesc_command | 指定したコマンドをアップデート先の環境で実行 | swdesc_script | 指定したスクリプトをアップデート先の環境で実行 | ファイル転送 + コマンド実行
参照先:「Armadillo にファイルを転送し、そのファイルをコマンド内で使用する」 | swdesc_exec | 指定したファイルをアップデート先の環境にコピーした後、そのファイル名を"$1"としてコマンドを実行 | 起動中の面に対してコマンド実行(非推奨)
参照先:「動作中の環境でのコマンドの実行」 | swdesc_command_nochroot | 指定したコマンドを起動中の環境で実行 | swdesc_script_nochroot | 指定したスクリプトを起動中の環境で実行 | 起動中の面に対してファイル転送 + コマンド実行(非推奨)
参照先:「動作中の環境でのコマンドの実行」 | swdesc_exec_nochroot | 指定したファイルを起動中の環境にコピーした後、そのファイル名を"$1"としてコマンドを実行 | コンテナイメージの転送
参照先:「Armadillo にコンテナイメージを転送する」 | swdesc_embed_container | SWU ファイルに含まれるコンテナイメージの tar アーカイブをアップデート先の環境に展開 | swdesc_pull_container | アップデート先の環境でコンテナイメージをダウンロード | swdesc_usb_container | SWU ファイルに含めない形で用意したコンテナイメージの tar アーカイブをアップデート先の環境に展開 |
アップデート完了後の挙動
デフォルトではアップデート後に再起動( POST_ACTION=reboot )が行われます。
アップデート後の挙動を変更するには desc ファイルに swdesc_option POST_ACTION を追加してください。 swdesc_option POST_ACTION に指定できる挙動の種類を表6.6「アップデート完了後の挙動の種類」に示します。
表6.6 アップデート完了後の挙動の種類 オプション名 | 説明 |
---|
container | アップデート後にコンテナのみを再起動
(ただし、アップデート時に --extra_os オプションを指定したコマンドが実行された場合は reboot になる) | poweroff | アップデート後にシャットダウン | reboot | アップデートの後に再起動 | wait | アップデート後に再起動は行われず、次回起動時に B 面に切り替わる |
swdesc_option POST_ACTION の詳細は「SWUpdate 実行中/完了後の挙動を指定する」を参照してください。
B 面への切り替え
図6.14「B 面への切り替え」に示すように、正常にアップデートが行われると、次回起動時に B 面に切り替わります。
desc ファイルの書き方の例
下記に SWUpdate を用いたアップデートの例を示します。
6.3.3. Armadillo Base OS の一括アップデートアップデートの流れを示します。 ここでは、boot して起動中の面を A 面、アップデート先の面を B 面とします。 swdesc_* コマンドには、swdesc_boot を指定してください。 swdesc_boot については「Armadillo のブートローダーを更新する」を参照してください。 ブートローダーのアップデートの流れは以下の通りです。
desc ファイルに swdesc_boot がある場合
SWU ファイルに含まれるブートローダーを B 面に書き込む
desc ファイルに swdesc_boot がない場合
A 面のブートローダーを B 面にコピーする
下記に SWUpdate を用いたアップデートの例を示します。 6.3.5. swupdate がエラーする場合の対処SWU イメージのインストール動作は、「SWU イメージとは」で述べたように swupdate が実行します。
mkswu で作成した SWU イメージの内容が適切でなかったり、あるいは、ストレージの空き容量が不足していたりするなど、いくつかの理由で swupdate のインストール動作が失敗することがあります。
インストールに失敗すると、swupdate は /var/log/messages にエラーメッセージのログを残しますので、エラーメッセージを見ると、エラーの内容・原因が分かります。 エラーの原因ごとに、エラーメッセージとエラーの内容および対処方法を記した FAQ ページ (https://armadillo.atmark-techno.com/faq/swupdate-troubleshooting-abos) を公開しています。
SWU イメージのインストールに失敗して対処法が分からないときは、この FAQ ページをご覧ください。 6.4. mkswu の .desc ファイルを編集するmkswu で SWU イメージを生成するためには、 desc ファイルを正しく作成する必要があります。
以下では、 desc ファイルの記法について紹介します。 swdesc_option component=<component>
swdesc_option version=<version>
か
swdesc_xxx --version <component> <version> [options]
<component>は以下のどれかにしてください (デフォルトでは .desc ファイルのファイル名を使います)
base_os : rootfs (Armadillo Base OS)を最初から書き込む時に使います。現在のファイルシステムは保存されないです。
この場合、/etc/swupdate_preserve_filesに載ってるファイルのみをコピーして新しいbase OSを展開します。 このcomponentがないと現在のrootfsのすべてがコピーされます。 swdesc_tar コマンドで rootfs (Armadillo Base OS) の tar アーカイブを展開する時に、--base-os オプションをつけることで component に base_os を指定したときと同じ動作となります。
extra_os.<文字列> : rootfsの変更を行う時に使います。<文字列> には任意の文字列を指定します。
rootfsを変更を行う時に使います。 swdesc_* コマンドに --extra-os オプションを追加すると、 component に自動的に extra_os. を足します。
<文字列> (コンテナの名前などの任意の文字列): rootfsの変更がないときに使います。
このcomponentを使うとrootfsの変更ができませんのでご注意ください。
アップデートを行う際にこのバージョンと現在のバージョンを比べてアップデートの判断を行います。
<component> がまだインストールされてなかった時や <version> が上がる時にインストールします。 デフォルトではダウングレードはできませんが、 --install-if=different オプションを追加することで <version> が変わる際にインストール可能になります。 アップデートの一部をインストールすることもありますので、複数の component で管理し、いくつかの古いバージョンに対応するアップデートも作成可能です。
バージョンの指定方法
swdesc_option version で指定可能なバージョンのフォーマットは以下の 2 種類があります。
x[.y[.z[-t]]]
x, y, z にはそれぞれ 0 ~ 2147483647 の整数を適用してください。
t には任意のアルファベットまたは 0 ~ 147483647 の整数を適用してください。 成功例は以下です: -
1
-
1.2.3
-
1.2.3-4
-
1.2.3-abc.4
-
1.2.3-a.b.c.4
失敗例は以下です:
2147483648
x には 0 ~ 2147483647 の整数を適用してください
1.2.3-a.2147483648
t には 0 ~ 2147483647 の整数を適用してください
1.2.3-abc123
t には 数字とアルファベットを混在しないでください。
1.2.3-abc.123 ならば可能です。
a.2.3
x にはアルファベットではなく 0 ~ 2147483647 の整数を適用してください
1.1.1.1-a
x[.y[.z[-t]]]の形式で書いてください。
x.y.z.t
x, y, z, t にはそれぞれ 0 ~ 65535 の整数を適用してください。 成功例は以下です: -
1.2.3.4
-
65535.65535.65535.65535
-
65535.2.3.4
失敗例は以下です:
6.4.2. Armadillo へファイルを転送する
swdesc_tar と swdesc_files でファイルを転送します。
swdesc_tar [--dest <dest>] [--preserve-attributes] <tar_file>
swdesc_files [--dest <dest>] [--basedir <basedir>] [--preserve-attributes] \
<file> [<more files>] swdesc_tar の場合、予め用意されてあるtarアーカイブをこのままデバイスで展開します。
--dest <dest> で展開先を選ぶことができます。デフォルトは / (--extra-os を含め、バージョンの component は base_os か extra_os.* の場合)か /var/app/rollback/volumes/ (それ以外のcomponent)。
後者の場合は /var/app/volumes と /var/app/rollback/volumes 以外は書けないので必要な場合に --extra-os を使ってください。
--preserve-attributes を指定しない場合はファイルのオーナー、モード、タイムスタンプ等が保存されませんので、必要な場合は設定してください。バージョンが base_os の場合は自動的に設定されます。
swdesc_files の場合、mkswu がアーカイブを作ってくれますが同じ仕組みです。
--basedir <basedir> でアーカイブ内のパスをどこで切るかを決めます。
-
例えば、
swdesc_files --extra-os --basedir /dir /dir/subdir/file ではデバイスに /subdir/file を作成します。
-
デフォルトは <file> から設定されます。ディレクトリであればそのまま basedir として使います。それ以外であれば親ディレクトリを使います。
6.4.3. Armadillo 上で任意のコマンドを実行する
swdesc_command や swdesc_script でコマンドを実行します。
swdesc_command <command> [<more commands>]
swdesc_script <script> アップデート先の環境でコマンドやスクリプトファイルを実行します。 バージョンの component は base_os と extra_os 以外の場合、 /var/app/volumes と /var/app/rollback/volumes 以外は変更できないのでご注意ください。 コマンドの実行が失敗した場合、アップデートも失敗します。
6.4.4. Armadillo にファイルを転送し、そのファイルをコマンド内で使用する
swdesc_exec でファイルを配り、コマンド内でそのファイルを使用します。
swdesc_exec <file> <command> swdesc_command と同じくコマンドを実行しますが、<file> を先に転送してコマンド内で転送したファイル名を"$1"として使えます。
| |
---|
本節で紹介する swdesc_command_nochroot 、swdesc_script_nochroot 、swdesc_exec_nochroot は基本的に使用することはありません。 swdesc_command 、swdesc_script 、swdesc_exec をご使用ください。
|
swdesc_command_nochroot , swdesc_script_nochroot , swdesc_exec_nochroot は アップデート先の環境ではなく動作中の環境でコマンドを実行します。
使い方は「Armadillo へファイルを転送する」と「Armadillo にファイルを転送し、そのファイルをコマンド内で使用する」に示した nochroot なしのバージョンと同じです。 アップデート先の環境は /target にマウントされるので、nochroot のコマンドを用いてアップデート先の環境に対してアクセスすることは可能です。 しかし、その方法によるアップデート先の環境に対するコマンドの実行は nochroot なしのコマンドでは実現できない特殊な場合にのみ行ってください。 | |
---|
nochroot コマンドは確認を一切しないため、Armadillo が起動できない状態になる可能性もあります。充分にご注意ください。
例が必要な場合は /usr/share/mkswu/examples/firmware_update.desc を参考にしてください。 |
6.4.6. Armadillo にコンテナイメージを転送する
swdesc_embed_container , swdesc_usb_container , swdesc_pull_container で予め作成したコンテナを転送します。
swdesc_embed_container <container_archive>
swdesc_usb_container <container_archive>
swdesc_pull_container <container_url> 例は「リモートリポジトリにコンテナを送信する」、「イメージを SWUpdate で転送する」を参考にしてください。
6.4.7. Armadillo のブートローダーを更新するコマンドの他には、設定変数もあります。以下の設定は /home/atmark/mkswu/mkswu.conf に設定できます。 -
DESCRIPTION="<text>" : イメージの説明、ログに残ります。
-
PRIVKEY=<path> , PUBKEY=<path> : 署名鍵と証明書
PRIVKEY_PASS=<val> : 鍵のパスワード(自動用)
openssl のPass Phraseをそのまま使いますので、pass:password , env:var や file:pathname のどれかを使えます。
pass や env の場合他のプロセスに見られる恐れがありますのでfileをおすすめします。
-
ENCRYPT_KEYFILE=<path> : 暗号化の鍵
6.4.9. Armadillo 上のコンテナイメージと自動起動用confファイルを削除する以下のオプションも mkswu.conf に設定できますが、.descファイルにも設定可能です。swdesc_option で指定することで、
誤った使い方をした場合 mkswu の段階でエラーを出力しますので、必要な場合は使用してください。 6.4.10. SWUpdate 実行中/完了後の挙動を指定する以下のオプションは Armadillo 上の /etc/atmark/baseos.conf に、例えば MKSWU_POST_ACTION=xxx として設定することができます。 その場合に swu に設定されなければ /etc の設定で実行されますので、
アットマークテクノが用意している Base OS のアップデートでも動作の変更は可能です。
swu に特定のオプションが設定された場合は設定されたオプションが優先されますので、一時的な変更も可能です。 -
swdesc_option POST_ACTION=container : コンテナのみのアップデート後に再起動を行いません。
コンテナの中身だけをアップデートする場合、Armadillo-IoT ゲートウェイ A6Eを再起動せずにコンテナだけを再起動させます。
-
swdesc_option POST_ACTION=poweroff : アップデート後にシャットダウンを行います。
-
swdesc_option POST_ACTION=wait : アップデート後に自動的に再起動は行われず、次回起動時にアップデートが適用されます。
-
swdesc_option POST_ACTION=reboot : デフォルトの状態に戻します。アップデートの後に再起動します。
swdesc_option NOTIFY_STARTING_CMD="command" , swdesc_option NOTIFY_SUCCESS_CMD="command" , swdesc_option NOTIFY_FAIL_CMD="command" : アップデートをインストール中、成功した場合と失敗した場合に実行されるコマンドです。
コマンドを実行する事で、アプリケーションやユーザーにアップデートを知らせることができます。 LEDで知らせる例を /usr/share/mkswu/examples/enable_notify_led.desc に用意してあります。
/usr/share/mkswu/examples/enable_sshd.desc を参考にします。
descファイルを編集する必要がありませんが自分の公開鍵を指定された場所に配置してください。 [ATDE ~/mkswu]$ cp -r /usr/share/mkswu/examples/enable_sshd* .
[ATDE ~/mkswu]$ cat enable_sshd.desc
swdesc_option component=extra_os.sshd version=1
# add your public key in enable_sshd/root/.ssh/authorized_keys
if [ -z "$SWDESC_TEST" ]; then
grep -qE '^ssh-' enable_sshd/root/.ssh/authorized_keys \
|| error "Add your keys in enable_sshd/root/.ssh/authorized_keys"
fi
swdesc_files --dest /root enable_sshd/root
swdesc_command "ssh-keygen -A" \
"rc-update add sshd"
[ATDE ~/mkswu]$ cp ~/.ssh/id_rsa.pub \
enable_sshd/root/.ssh/authorized_keys
[ATDE ~/mkswu]$ mkswu enable_sshd.desc
Enter pass phrase for /home/atmark/mkswu/swupdate.key:
enable_sshd.swu を作成しました。 |
自分の公開鍵を転送します。デフォルトのオプションなので enable_sshd/root ディレクトリの中身をこのまま /root に転送されます。
| |
再起動する度に新しいサーバーの鍵が変わらないように、アップデートの時に一回作成します。
| |
サービスを有効にします。
| |
自分の公開鍵を指定された場所に配置します。
| |
イメージを作成します。パスワードは証明鍵のパスワードです。
|
6.4.11.2. 例: Armadillo Base OSアップデートここでは、「Armadilloのソフトウェアをビルドする」でメインシステム向けのビルドで作成したファイルを使用します。 /usr/share/mkswu/examples/OS_update.desc を参考にします。
[ATDE ~/mkswu]$ cp /usr/share/mkswu/examples/OS_update.desc update-[VERSION].desc
[ATDE ~/mkswu]$ vi update-[VERSION].desc
# uboot image can be generated with atmark imx-boot script
swdesc_uboot imx-boot_armadillo_x2
# base OS is a tar that will be extracted on a blank filesystem,
# after copying just a few key config files.
#
# OS updates are only installed if version is greater than previous update
# so if you install your own updates atmark-techno provided Armadillo Base OS
# updates might not get installed
swdesc_tar "baseos-x2-[VERSION].tar.zst" \
--version base_os [VERSION]
[ATDE ~/mkswu]$ mkswu update-[VERSION].desc
Enter pass phrase for /home/atmark/mkswu/swupdate.key:
update-[VERSION].swu を作成しました。 |
imx-bootでビルドしたイメージを使います。
| |
build-rootfsでビルドしたイメージを使います。
| |
バージョンが上がるときにしかインストールされませんので、現在の/etc/sw-versionsを確認して適切に設定してください。
| |
イメージを作成します。パスワードは証明鍵の時のパスワードです。
|
6.4.11.3. 例: swupdate_preserve_files で Linux カーネル以外の Armadillo-IoT ゲートウェイ A6E 向けのイメージをインストールする方法Armadillo-IoT ゲートウェイ A6E 向けのアップデートイメージに Linux カーネルが含まれています。 swupdate_preserve_files を使って、以下のコマンドでインストール後に現在のカーネルをコピーして更新させないようにします。
[armadillo ~]# echo 'POST /boot' >> /etc/swupdate_preserve_files
[armadillo ~]# echo 'POST /lib/modules' >> /etc/swupdate_preserve_files
[armadillo ~]# persist_file /etc/swupdate_preserve_files |
swupdate_preserve_files に /boot と /lib/modules を保存するように追加します。
| |
変更した設定ファイルを保存します
|
| |
---|
/usr/share/mkswu/examples/kernel_update*.desc のように update_preserve_files.sh のヘルパーで、パスを自動的に /etc/swupdate_preserve_files に追加することができます。
[ATDE ~/mkswu]$ cat example.desc
swdesc_script "$SCRIPT_DIR/examples/update_preserve_files.sh" -- \
"POST /boot" \
"POST /lib/modules" |
スクリプトの内容確認する場合は /usr/share/mkswu/examples/update_preserve_files.sh を参照してください。
|
|
| |
---|
Armadillo Base OS のカーネルを再び使用したい場合は同じスクリプトの --del オプションで行を削除することができます。 [ATDE ~/mkswu]$ cat example.desc
swdesc_script "$SCRIPT_DIR/examples/update_preserve_files.sh" -- \
--del "POST /boot" "POST /lib/modules" |
6.5. swupdate_preserve_files についてextra_os のアップデートで rootfs にファイルを配置することができますが、次の OS アップデートの際に削除される可能性があります。
デフォルトでは、 /etc/atmark と、 swupdate 、 sshd やネットワークの設定を保存しますがそれ以外はコピーされてません。 そうでないファイルを更新する際には /etc/swupdate_preserve_files に記載します。「例: swupdate_preserve_files で Linux カーネル以外の Armadillo-IoT ゲートウェイ A6E 向けのイメージをインストールする方法」 を参考にしてください。 コピーのタイミングによって、以下のどれかを使用してください:
単にファイルを記載する
この場合、アップデートする前にファイルをコピーします。 baseos のイメージと同じ swu にアップデートしたいファイルを記載していても、
このファイルが Armadillo Base OS に含まれないのであれば問題なくアップデートできます。 例: echo "/root/.profile" >> /etc/swupdate_preserve_files
POST のキーワードの後に記載する
この場合、アップデートの最後でコピーします。 Armadillo Base OS に含まれてるファイルであれば、インストール前にコピーしても保存されないのでコピーのタイミングをずらします。 そのコピーが最後に行われるので、同じアップデートでファイルの変更ができません。アップデートを別けて、 baseos のイメージをインストールしてからこのファイルを更新することができます。 例: echo "POST /etc/conf.d/podman-atmark" >> /etc/swupdate_preserve_files
mkswu --show [file.swu] で SWU イメージの内容を確認することができます。
出力は desc ファイルに似ていますが、そのまま desc ファイルとして利用できませんので確認用としてお使いください。 [ATDE ~/mkswu]$ mkswu --show enable_sshd.swu
enable_sshd.swu
# built with mkswu 4.1
swdesc_files --dest /root enable_sshd/root
--version extra_os.sshd 1
(encrypted)
swdesc_command ssh-keygen -A && rc-update add sshd default
--version extra_os.sshd 1 mkswu --init の時に暗号化を有効にする場合は AES でファイルを暗号化します。
現在使われてる SWUpdate の暗号化はコマンドやメタデータを含む sw-description ファイルは暗号化されてません。
そのため、通信の暗号化(HTTPSで送信するなど)を使うことを推奨します。 Armadillo Base OS において、ユーザーアプリケーションは基本的にコンテナ内で実行されます。
3章開発編で紹介した開発手順では、基本的に SWUpdate を使用してコンテナを生成・実行していました。 以下では、より自由度の高いコンテナの操作のためにコマンドラインからの操作方法について紹介します。 6.8.1. Podman - コンテナ仮想化ソフトウェアとはコンテナとはホスト OS 上に展開される仮想的なユーザ空間のことです。
コンテナを使用することで複数の Armadillo-IoT ゲートウェイ A6E でも同一の環境がすぐに再現できます。
ゲスト OS を必要としない仮想化であるため、アプリケーションの起動が素早いという特徴があります。 Podman とはこのようなコンテナを管理するためのソフトウェアであり、使用方法は
コンテナ管理ソフトウェアの 1 つである Docker と互換性があります。 この章では、コンテナ仮想化ソフトウェアの 1 つである Podman の基本的な使い方について説明します。
Armadillo-IoT ゲートウェイ A6E で実行させたいアプリケーションとその実行環境自体を 1 つの Podman イメージとして扱うことで、
複数の Armadillo-IoT ゲートウェイ A6E がある場合でも、全てのボード上で同一の環境を再現させることが可能となります。 この章全体を通して、イメージの公開・共有サービスである Docker Hub から取得した、Alpine Linux のイメージを
使って説明します。 イメージからコンテナを作成するためには、podman_start コマンドを実行します。
podman や docker にすでに詳しいかたは podman run コマンドでも実行できますが、ここでは 「コンテナ起動設定ファイルを作成する」 で紹介するコンテナの自動起動の準備も重ねて podman_start を使います。
イメージは Docker Hub から自動的に取得されます。
ここでは、簡単な例として "ls /" コマンドを実行するコンテナを作成します。 |
コンテナのコンフィグを作成します。このファイルでは、コンテナのイメージやコマンド、デバイスへのアクセス権限を設定します。詳しい設定の説明には 「コンテナ起動設定ファイルを作成する」 を参照ください。
| |
コンテナのイメージを取得します。イメージが Armadillo に置いてない場合は「Error: docker.io/alpine: image not known」の様なエラーで失敗します。
| |
コンテナを起動します。これは Armadillo 起動時に自動的に起動されるコンテナと同じものになります。自動起動が不要な場合には set_autostart no で無効化できます。
| |
podman logs コマンドで出力を確認します。
|
"ls /" を実行するだけの "my_container" という名前のコンテナが作成されました。
コンテナが作成されると同時に "ls /" が実行され、その結果がログに残ります。
ここで表示されているのは、コンテナ内部の "/" ディレクトリのフォルダの一覧です。 | |
---|
podman_start でコンテナが正しく起動できない場合は podman_start -v <my_container> で podman run のコマンドを確認し、 podman logs <my_container> で出力を確認してください。
|
コンテナを作成するためのイメージは、イメージ一覧を表示する podman images コマンドで確認できます。 podman images コマンドの詳細は --help オプションで確認できます。 作成済みコンテナ一覧を表示するためには podman ps コマンドを実行します。 一覧表示により、コンテナ名やコンテナ ID を確認することができます。-a オプションを付けない場合は、動作中のコンテナのみ表示されます。
podman ps コマンドの詳細は --help オプションで確認できます。 作成済みのコンテナを起動するためには podman start コマンドを実行します。 -a オプションを与えると、コンテナ内で実行されたアプリケーションの出力を確認できます。 ここで起動している my_container は、起動時に "ls /" を実行するようになっているので、その結果が出力されます。
podman start コマンドの詳細は --help オプションで確認できます。 動作中のコンテナを停止するためには podman stop コマンドを実行します。 podman stop コマンドの詳細は --help オプションで確認できます。 コンテナに対して変更が行われた状態で、そのままコンテナを停止してしまうと変更が失なわれてしまいます。 変更を保存するには二つの方法があります。
podman commit コマンドで保存する。
podman commitで保存する度に、変更が行なわれた差分が保存されます。
繰り返し差分を保存すると、イメージサイズが大きくなってしまいます。
ストレージ容量が不足する場合は、ベースとなるOSのイメージから作り直してください。
「電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)」を使用する。
podman_start の add_volumes コマンドでコンテナに Armadillo Base OS のディレクトリをコンテナで使うことができます。
保存するデータの性質によって、保存先を選択してください。 -
/var/app/volumes/myvolume : アップデートした場合はコピーされません。
ログやデータベースなど、アプリケーションが作成し続けるようなデータの保存に向いています。
-
myvolume か /var/app/rollback/volumes/myvolume : アップデートの際にコピーしてアップデートを行うので、アップデート中でも安全に使いつづけます。
アプリケーションと一緒にアップデートするようなデータの保存に向いています。
6.8.2.7. コンテナの自動作成やアップデートpodman run, podman commitでコンテナを作成できますが、定期的にアップデートをする際には
コンテナの作成やアップデートを自動化できると便利です。 これを実現するために、Dockerfileとpodman buildを使います。この手順はArmadilloで実行可能です。
イメージを docker.io のイメージから作りなおします
イメージを前のバージョンからアップデートします
この場合、 podman_partial_image コマンドを使って、差分だけをインストールすることもできます。 [armadillo ~/podman-build-update]# podman_partial_image -b my_image:1 \
-o my_image_2_partial.tar my_image:2
[armadillo ~/podman-build-update]# ls -lh
-rw-r--r-- 1 root root 88 Dec 21 15:24 Dockerfile
-rw-r--r-- 1 root root 9.4M Dec 21 15:26 my_image_1.tar
-rw-r--r-- 1 root root 9.4M Dec 21 15:26 my_image_2.tar
-rw-r--r-- 1 root root 51K Dec 21 15:26 my_image_2_partial.tar
作成した .tar アーカイブは 「mkswu の .desc ファイルを編集する」 の swdesc_embed_container と swdesc_usb_container で使えます。 作成済みコンテナを削除する場合は podman rm コマンドを実行します。 podman ps コマンドの出力結果より、コンテナが削除されていることが確認できます。
podman rm コマンドの詳細は --help オプションで確認できます。 [armadillo ~]# podman rm --help podmanのイメージを削除するには podman rmi コマンドを実行します。
イメージを削除するためには、そのイメージから作成したコンテナを先に削除しておく必要があります。
podman rmi コマンドにはイメージ ID を指定する必要があるため、podman images コマンドで確認します。 podman images コマンドの出力結果より、コンテナが削除されていることが確認できます。
podman rmi コマンドの詳細は --help オプションで確認できます。 | |
---|
SWU で転送されたイメージは podman images で Read-Only として表示されますので、
podman rmi を実行するとエラーとなります。
その場合は abos-ctrl podman-rw rmi をご使用ください。 abos-ctrl podman-rw については 「イメージを eMMC に保存する」 を参照してください。
|
実行中のコンテナに接続し、コンテナ内で指定したコマンドを実行するには podman exec コマンドを実行します。
podman exec コマンドでコンテナ内部のシェルを起動すると、コンテナ内部を操作できるようになります。ここでは、sleep infinity コマンドを
実行して待ち続けるだけのコンテナを作成し、そのコンテナに対して podman exec コマンドでシェルを起動する例を示します。 podman_start コマンドでコンテナを作成し、その後作成したコンテナ内で sh を実行しています。
sh を実行すると、コンテナ内のプロンプトが表示されコンテナ内部を操作できるようになります。
上記ではコンテナ内で、ps コマンドを実行しています。コンテナ作成時に実行した sleep と podman exec で実行した
sh がプロセスとして存在していることが確認できます。
コンテナ内のシェルから抜ける時は exit コマンドを実行します。 podman exec コマンドから抜けても、コンテナがまだ実行中です。コンテナを停止したい場合は podman stop sleep_container か podman kill sleep_container で停止して podman rm sleep_container でそのコンテナを削除してください。
podman exec コマンドの詳細は --help オプションで確認できます。 複数のコンテナを実行している環境で、それらのコンテナ間で通信を行う方法を示します。
これにより、例えば SQL サーバを実行しているコンテナに対し別のコンテナから接続するといった
使い方ができます。 コンテナには作成した時点でローカル IP アドレスが割り当てられるので、コンテナの名前かその IP アドレスで通信を行うことができます。 準備として、2 つのコンテナを作成します。 コンテナに割り当てられた IP アドレスを確認するには podman inspect コマンドを実行します。 これらの IP アドレスを使って、一方のコンテナからもう一方のコンテナへ対し ping コマンドで疎通確認を行うことができます。 このように、my_container_1(10.88.0.108) から my_container_2(10.88.0.109) への通信が確認できます。 6.8.2.12. podでコンテナのネットワークネームスペースを共有するpodman_start で pod 機能を使うことができます。
pod を使うことで、複数のコンテナが同じネットワークネームスペースを共有することができます。
同じ pod の中のコンテナが IP の場合 localhost で、 unix socket の場合 abstract path で相互に接続することができます。
コンテナと同じく、 /etc/atmark/containers/[NAME].conf ファイルを作って、 set_type pod を設定することで pod を作成します。 pod を使う時にコンテナの設定ファイルに set_pod [NAME] の設定を追加します。 ネットワークネームスペースは pod を作成するときに必要なため、 ports , network と ip の設定は pod
のコンフィグファイルに入れなければなりません。 必要であれば、他の podman pod create のオプションを add_args で設定することができます。 .conf ファイルで使用できる各種パラメータについては、「コンテナ起動設定ファイルを作成する」を参照してください。
podman_start で podman の network も作成できます。
デフォルトの 10.88.0.0/16 が使えない場合、あるいはコンテナ同士で接続できないようにしたい場合は使ってください。 コンテナと同じく、 /etc/atmark/containers/[NAME].conf ファイルを作って、 set_type network を設定することで network を作成します。 そのネットワークを使う時にコンテナの設定ファイルに set_network [NAME] の設定をいれます。 ネットワークのサブネットは set_subnet [SUBNET] で設定します。
この設定は set_type network の後しか使えませんので、set_type はファイルの最初のところに使ってください 他の podman network create のオプションが必要であれば、 add_args で設定することができます。 .conf ファイルで使用できる各種パラメータについては、「コンテナ起動設定ファイルを作成する」を参照してください。
podman では REST API による管理アクセスも可能です。 自分のコンテナから他のコンテナの管理が必要な場合に、ホストの podman サービスを有効にして、
コンテナに /run/podman をボリュームマウントすれば podman --remote で管理できます。 | |
---|
コンテナの設定によって podman の socket へのパスが自動設定されない場合もあります。
podman --remote でエラーが発生した場合に CONTAINER_HOST=unix:/path/to/podman.sock で
socket へのパスを設定してください。 |
Armadillo のホスト側の udev rules からコンテナを起動する場合は podman_start 等を直接実行すると
udev の子プロセス管理によってコンテナが停止されますので、その場合はサービスを有効にし、
podman_start --create <container> コマンドまたは set_autostart create の設定でコンテナを生成した上
podman --remote start <container> で起動してください。 6.8.2.15. リモートリポジトリにコンテナを送信する
イメージをリモートリポジトリに送信する:
[armadillo ~]$ podman image push <localimage> docker://<registry>/<remoteimage>:<tag>
set_pull always を設定しないかぎり、SWUpdateでダウンロードの命令を送らないとアップデートを行いません。
(mkswuについては「Armadillo のソフトウェアをアップデートする」を参考にしてください) [ATDE ~/mkswu]$ cp /usr/share/mkswu/examples/pull_container_nginx.desc .
[ATDE ~/mkswu]$ cp -r /usr/share/mkswu/examples/nginx_start .
[ATDE ~/mkswu]$ cat pull_container_nginx.desc
swdesc_option version=1
swdesc_pull_container "docker.io/nginx:alpine"
swdesc_files --extra-os nginx_start
[ATDE ~/mkswu]$ mkswu pull_container_nginx.desc
Enter pass phrase for /home/atmark/mkswu/swupdate.key:
pull_container_nginx.swu を作成しました。
6.8.2.16. イメージを eMMC に保存するArmadillo Base OS のデフォルトでは、Podman のデータは tmpfs に保存されます。 起動時にコンテナを起動するにはイメージを eMMC に書き込む必要があります。
開発が終わって運用の場合は 「イメージを SWUpdate で転送する」 でコンテナのイメージを転送します。この場合は読み取り専用の app パーティションのサブボリュームに展開します。 開発の時に以下の abos-ctrl podman-rw か abos-ctrl podman-storage --disk のコマンドを使って直接にイメージを編集することができます。 | |
---|
ここで紹介する内容はコンテナのイメージの管理の説明です。データベース等のコンテナから書き込みが必要な場合には 「コンテナの変更を保存する」 にあるボリュームの説明を参照してください。 |
abos-ctrl podman-rw を使えば、read-only になっているイメージを扱う事ができます。
abos-ctrl podman-storage はメモリとディスクの切り替えの他に、読み書きストレージから読み取り専用ストレージへのコピーもできます。
|
イメージを書き込み可能ストレージに取得します。
| |
abos-ctrl podman-storage をオプション無しで実行します。
| |
書き込み可能ストレージにイメージがある場合に対応を聞かれます。今回はコピー(copy)します。
| |
abos-ctrl podman-storage にオプションを指定しなかったので、ストレージが tmpfs のままになります。すでに --disk で切り替えた場合にディスクのままでも可能です。
| |
コピーされたイメージを確認します。イメージが読み取り専用(R/O, Read only)になりました。
|
| |
---|
podman が壊れやすいので、デフォルトの「abos-ctrl podman-storage --tmpfs」で運用することを推奨しますが、tmpfs の容量が小さくてイメージの操作には向いてません。 開発時には「abos-ctrl podman-storage --disk」の状態で作業を行い、運用時には「abos-ctrl podman-storage --tmpfs」に戻してください。
戻る際に「copy」を選択する場合は一時的なストレージをそのまま使いつづけますので、すべての変更が残ります。 |
| |
---|
SWUpdate でアップデートをインストールする際には、/var/lib/containers/storage_readonly ディレクトリの不要になったイメージを自動的に削除します。 自動起動させる予定がなくても、「コンテナ起動設定ファイルを作成する」 を参考にして、 /etc/atmark/containers/*.conf を使ってください。 set_autostart no を設定することで自動実行されません。 |
6.8.2.17. イメージを SWUpdate で転送する
イメージをファイルに保存する:
[armadillo ~]$ podman image save -o <myimage>.tar <localimage>
ファイルをSWUpdateのイメージに入れる。
二つのやり方があります:
swuイメージ内に組み込む
[ATDE ~/mkswu]$ cp /usr/share/mkswu/examples/embed_container_nginx.desc .
[ATDE ~/mkswu]$ cp -r /usr/share/mkswu/examples/nginx_start .
[ATDE ~/mkswu]$ cat embed_container_nginx.desc
swdesc_option version=1
swdesc_embed_container "nginx_alpine.tar"
swdesc_files --extra-os nginx_start
[ATDE ~/mkswu]$ podman pull --arch arm64 docker.io/nginx:alpine
[ATDE ~/mkswu]$ podman run --rm docker.io/nginx:alpine uname -m
aarch64
[ATDE ~/mkswu]$ podman save docker.io/nginx:alpine > nginx_alpine.tar
[ATDE ~/mkswu]$ mkswu embed_container_nginx.desc
Enter pass phrase for /home/atmark/mkswu/swupdate.key:
embed_container_nginx.swu を作成しました
USBドライブに保存する
[ATDE ~/mkswu]$ cp /usr/share/mkswu/examples/usb_container_nginx.desc .
[ATDE ~/mkswu]$ cp -r /usr/share/mkswu/examples/nginx_start .
[ATDE ~/mkswu]$ cat usb_container_nginx.desc
swdesc_option version=1
swdesc_usb_container "nginx_alpine.tar"
swdesc_files --extra-os nginx_start
[ATDE ~/mkswu]$ podman pull --arch arm64 docker.io/nginx:alpine
[ATDE ~/mkswu]$ podman run --rm docker.io/nginx:alpine uname -m
aarch64
[ATDE ~/mkswu]$ podman save docker.io/nginx:alpine > nginx_alpine.tar
[ATDE ~/mkswu]$ mkswu -o usb_container_nginx.swu usb_container_nginx.desc
Enter pass phrase for /home/atmark/mkswu/swupdate.key:
以下のファイルをUSBメモリにコピーしてください:
'/home/atmark/mkswu/usb_container_nginx.swu'
'/home/atmark/mkswu/nginx_alpine.tar'
'/home/atmark/mkswu/.usb_container_nginx/nginx_alpine.tar.sig'
usb_container_nginx.swu を作成しました。
6.8.2.18. 開発時に有用な—privilegedオプションコンテナに、全権限と全てのデバイスへのアクセスを許可するオプション --privileged があります。このオプションを利用すると、コンテナに与えるべき最小の権限を洗い出す必要が無いため、開発時に有用です。 実運用の際、このオプションを利用することはセキュリティー上問題がある為、開発時にのみご利用ください。コンテナに必要な最低限の権限を与えることをおすすめします。 6.8.3. コンテナとコンテナに関連するデータを削除する | |
---|
全てのコンテナとコンテナイメージ、コンテナに関するデータが削除されるため、充分に注意して使用してください。 |
VSCode 上で ABOSDE(Armadillo Base OS Development Environment) から、
Armadillo のコンテナイメージを全て削除する SWU イメージを作成することができます。 VSCode の左ペインの [COMMON PROJECT COMMAND] から [Generate Container Clear Swu] を実行すると、SWU イメージが作成されます。
SWU イメージは ~/mkswu/container_clear.swu に保存されます。 この SWU イメージを 「SWU イメージのインストール」 を参照して Armadillo へインストールしてください。 abos-ctrl container-clear を使用すると、コンテナ、コンテナイメージ、コンテナに関するデータを削除することができます。
abos-ctrl container-clear は以下の通り動作します。
Armadillo Base OSでは、/etc/atmark/containers/*.confファイルに指定されているコンテナがブート時に自動的に起動します。
nginx.confの記載例を以下に示します。 .conf ファイルに設定可能なパラメーターの説明を以下に記載します。
podman_start --long-help コマンドでも詳細を確認できます。
set_image [イメージ名]
イメージの名前を設定できます。 例: set_image docker.io/debian:latest , set_image localhost/myimage イメージをrootfsとして扱う場合に --rootfs オプションで指定できます。 例: set_image --rootfs /var/app/volumes/debian add_ports [ホストポート]:[コンテナポート]
設定したポートで外部からコンテナへのアクセスが可能となります。 デフォルトはTCPで、UDPも /udp を付けて使えます。スペースで分けて複数のポートを設定することができます。 以下の例では、ポート80、443(web)、UDPの69(tftp)にアクセスすることができ、コンテナのポート22(ssh)にはポート2222からアクセスすることができます。 例: add_ports 80:80 443:443 2222:22 69:69/udp | |
---|
pod を使う場合、このオプションはpodの設定にしないと有効になりませんのでご注意ください。 |
add_devices [ホストパス]:[コンテナパス]
コンテナでデバイスを作成して、使用可能となります。 コンテナパスを設定しない場合はホストと同じパスを使います。 複数のデバイスを作成したい場合はスペースで分けて設定してください。 例: add_devices /dev/galcore /dev/v4l/by-id/usb-046d_HD_Pro_Webcam_C920_78DA8CAF-video-index0:/dev/video3 ホストパスに「:」を含む場合は add_device "[ホストパス]" "[コンテナパス]" で追加できます。 例: add_device "/dev/v4l/by-path/platform-xhci-hcd.1.auto-usb-0:1.1:1.0-video-index1" "/dev/video3" コンテナパスに「:」を含むようなパスは設定できません。 add_volumes [ホストパス]:[コンテナパス]:[オプション]
指定するパスをコンテナ内でマウントして、データの保存や共有ができます。 ホストパスは以下のどれかを指定してください。
/var/app/rollback/volumes/<folder> か <folder> :
アップデートの際に新しくコピー(snapshot)した場合、コピー先のみ変更しますので、
アップデート中でもこのデータを使うことができます。
途中で電源が落ちた場合でも、このデータに影響はありません。 SWUpdateでアップデートするデータに向いています。
/var/app/volumes/<folder> : appパーティションに書きます。
アップデートの際にコピーされませんので、アップデート中の新たな変更は
更新されたコンテナ内のアプリケーションで見れます。 ログやデータベースに向いています。 -
/tmp/<folder> : 複数のコンテナでメモリファイルシステムを共有したい場合に使ってください。
-
/opt/firmware : 学習能力に必要なファムウェアライブラリーのパス。
コンテナパスを設定しない場合はホストパスと同じパスを使います。 オプションは podman run の --volume のオプションになりますので、 ro (read-only), nodev , nosuid , noexec , shared , slave 等を設定できます。 例:add_volumes /var/app/volumes/database:/database : ロールバックされないデータを/databaseで保存します。 例: add_volumes assets:/assets:ro,nodev,nosuid /opt/firmware : アプリケーションのデータを/assetsで読み取り、/opt/firmwareのファームウェアを使えます。 「:」はホスト側のパスとコンテナの側のパスを分割する意味があるため、ファイル名に「:」を使用することはできません。
ホスト側のパスにのみ「:」が含まれてる場合は「 add_volumes "[ホストパス]" "[コンテナパス]" "[オプション]" 」と指定することで設定できます。 | |
---|
複数のコンテナでマウントコマンドを実行することがあれば、shared のフラグで起動後のマウントを共有することができます。
|
マウントを行うコンテナに shared の設定とマウント権限 (SYS_ADMIN ) を与えます。
| |
マウントを使うコンテナに slave だけを設定すれば一方にしか共有されません。
| |
USB デバイスをマウントします。
| |
マウントされたことを確認します。
|
|
add_hotplugs [デバイスタイプ]
コンテナ起動後に挿抜を行なっても認識される(ホットプラグ)デバイスを設定できます。 通常、コンテナ内からデバイスを扱うためには、あらかじめ Armadillo 本体に当該のデバイスを接続した状態で、コンテナを起動する必要がありますが、 add_hotplugs を使用することでホットプラグに対応できます。 例: add_hotplugs input add_hotplugs に指定できる主要な文字列とデバイスファイルの対応について、表6.9「add_hotplugsオプションに指定できる主要な文字列」に示します。
表6.9 add_hotplugsオプションに指定できる主要な文字列 文字列 | 引数の説明 | 対象のデバイスファイル |
---|
input | マウスやキーボードなどの入力デバイス | /dev/input/mouse0, /dev/input/event0 など | video4linux | USB カメラなどの video4linux デバイスファイル | /dev/video0 など | sd | USB メモリなどの SCSI ディスクデバイスファイル | /dev/sda1 など |
表6.9「add_hotplugsオプションに指定できる主要な文字列」に示した文字列の他にも、/proc/devicesの数字から始まる行に記載されている文字列を指定することができます。
図6.50「/proc/devicesの内容例」に示す状態の場合、デバイスタイプを示す文字列としては、各行の先頭の数字を除いた mem や pty などを指定できることがわかります。 デバイスタイプと実際のデバイスファイルの対応については、 カーネルドキュメント: devices.txt(Github) を参照してください。 複数のデバイスタイプを指定したい場合はスペースで分けて設定してください。 例: add_hotplugs input video4linux sd set_network [ネットワーク名]
この設定に「networkの作成」で作成したネットワーク以外に none と host の特殊な設定も選べます。 none の場合、コンテナに localhost しかないネームスペースに入ります。
host の場合はOSのネームスペースをそのまま使います。
例: set_network mynetwork set_ip [アドレス]
コンテナの IP アドレスを設定することができます。 例: set_ip 10.88.0.100 | |
---|
コンテナ間の接続が目的であれば、podを使ってlocalhostかpodの名前でアクセスすることができます。 |
set_readonly yes
コンテナ内からのファイルシステムへの書き込み許可を設定します。 デフォルトで書き込み可能となっています。 コンテナ内からのファイルシステムへの書き込みを禁止することで、
tmpfs として使うメモリの消費を明示的に抑えることができますが、
アプリケーションによっては読み込み専用のファイルシステムでは動作しない可能性もあります。 6.8.4.11. イメージの自動ダウンロード設定set_pull [設定]
この設定を missing にすると、イメージが見つからない場合にイメージを自動的にダウンロードします。 always にすると、イメージがすでにダウンロード済みでも起動前に必ず更新の確認を取ります。
デフォルトでは never で、イメージが見つからない場合にエラーを表示します。 例:set_pull missing か set_pull always set_restart [設定]
コンテナが停止した時にリスタートさせます。 podman kill か podman stop で停止する場合、この設定と関係なくリスタートしません。
デフォルトで on-failure になっています。 例: set_restart always か set_restart no 6.8.4.13. 信号を受信するサービスの無効化set_init no
コンテナのメインプロセスが PID 1 で起動していますが、その場合のデフォルトの信号の扱いが変わります: SIGTERM などのデフォルトハンドラが無効です。 そのため、init 以外のコマンドを set_command で設定する場合は podman-init のプロセスを PID 1 として立ち上げて、設定したコマンドをその子プロセスとして起動します。 例: set_init no 6.8.4.14. podman logs 用のログサイズ設定set_log_max_size <サイズ>
podman logs でログを表示するために /run にログファイルを保存しています。
そのログのサイズが設定したサイズを越えるとクリアされます。デフォルトは「1MB」です。 6.8.4.15. podman のフックの仕組みadd_hook --stage <ステージ> [--] コマンド [コマンド引数]
コンテナが起動されるなど、動作ステージの変化をフックとしてコマンドを実行します。
複数のステージで実行したい場合は --stage オプションを複数設定してください。 指定可能なステージは precreate , prestart , createRuntime , createContainer , startContainer , poststart , と poststop です。
ステージの意味や使用方法の詳細は podman のドキュメンテーションを参照してください。 | |
---|
Armadillo Base OS 3.19.1-at.4 現在では set_restart によるコンテナの再起動でも 1 度目の停止時のみ poststop フックが実行されます。
2 度目以降の停止では実行されませんのでご注意ください。 |
set_healthcheck [引数] [--] コマンド [コマンド引数]
定期的にコマンドを実行して、コンテナの正常性を確認します。
指定可能な引数は以下のとおりです: また、いくつかのタイミングでコマンドを実行させることができます: -
set_healthcheck_start_command コマンド [コマンド引数] : コンテナ起動後にヘルスチェックが初めて成功した際に実行されるコマンドです。
-
set_healthcheck_fail_command コマンド [コマンド引数] : ヘルスチェックが retries 回失敗した後に実行されるコマンドです。このコマンドは set_healthcheck の --action 設定の前に実行されますので、コマンドだけを実行したい場合は --action none で無効化してください。
-
set_healthcheck_recovery_command コマンド [コマンド引数] : ヘルスチェックが retries 回失敗した後に再び成功した際に実行されるコマンドです。コンテナを起動する際に成功せずに失敗した場合は、その 1 回目の成功の際に set_healthcheck_start_command で設定されたコマンドのみが実行されます。
例: set_healtcheck -- curl -s --fail http://localhost:8080/status
例: set_healthcheck_start_command abos-ctrl rollback-clone set_autostart no または set_autostart create
Armadillo の起動時にコンテナを自動起動しないように設定できます。 create を指定した場合はコンテナは生成されており、podman start <name> で起動させることができます。
no を指定した場合は podman_start <name> で起動させることができます。
| |
---|
コンフィグに記載していないイメージはアップデートの際に削除されますので、そういったイメージに対して設定してください。 |
set_command [コマンド]
コンテナを起動するときのコマンド。設定されなかった場合、コンテナイメージのデフォルトを使います。 例: set_command /bin/sh -c "echo bad example" 6.8.4.19. podman run に引数を渡す設定add_args [引数]
ここまでで説明した設定項目以外の設定を行いたい場合は、この設定で podman run に直接引数を渡すことができます。 例:add_args --cap-add=SYS_TTY_CONFIG --env=XDG_RUNTIME_DIR=/run/xdg_home 6.8.5. アットマークテクノが提供するイメージを使うアットマークテクノは、動作確認環境として使用できる Debian ベースのイメージを提供しています。
ここでは以下の 3 つの手順について説明します。 -
ABOSDE からインストールする方法
-
Docker ファイルからイメージをビルドする方法
-
すでにビルド済みのイメージを使う方法
6.8.5.1. ABOSDE からインストールする
インストール用のプロジェクトを作成する
VSCode の左ペインの [A6E] から [Atmark Container New Project] を実行し、
表示されるディレクトリ選択画面からプロジェクトを保存するディレクトリを選択してください。
保存先を選択すると、プロジェクト名を入力するダイアログが表示されるので、
任意のプロジェクト名を入力してエンターキーを押してください。ここでは、
ホームディレクトリ直下に my_project として保存しています。
SWU イメージを作成する
VSCode の左ペインの [my_project] から [Generate at-debian-image container setup swu] を実行してください。
作成した SWU ファイルは container_setup/at-debian-image/at-debian-image-armv7.swu に保存されています。
この SWU イメージを 「SWU イメージのインストール」 を参照して Armadillo へインストールしてください。
6.8.5.2. Docker ファイルからイメージをビルドするArmadillo-IoT ゲートウェイ A6E コンテナ から
「Debian [VERSION] サンプル Dockerfile」 ファイル (at-debian-image-dockerfile-[VERSION].tar.gz) をダウンロードします。
その後 podman build コマンドを実行します。 podman images コマンドにより at-debian-image がビルドされたことが確認できます。
library/debian イメージはベースとなっている Debian イメージです。 Armadillo-IoT ゲートウェイ A6E コンテナ から
「Debian [VERSION] サンプルコンテナイメージ」 ファイル (at-debian-image-[VERSION].tar) をダウンロードします。
その後 podman load コマンドを実行します。 podman images コマンドにより at-debian-image がビルドされたことが確認できます。 6.8.6. alpine のコンテナイメージをインストールするalpine のコンテナイメージは、 ABOSDE を用いてインストールすることが可能です。
「ABOSDE からインストールする」 を参照して、 インストール用のプロジェクトを作成しておいてください。 VSCode の左ペインの [my_project] から [Generate alpine container setup swu] を実行してください。 作成した SWU ファイルは container_setup/alpine/alpine.swu に保存されています。
この SWU イメージを 「SWU イメージのインストール」 を参照して Armadillo へインストールしてください。 この章では、コンテナ内のネットワークを扱う方法について示します。 6.8.7.1. コンテナの IP アドレスを確認する基本的にコンテナの IP アドレスは Podman イメージからコンテナを作成したときに自動的に割り振られます。
コンテナに割り振られている IP アドレスはホスト OS 側からは podman inspect コマンドを用いて、以下のように確認することができます。 コンテナ内の ip コマンドを用いて確認することもできます。 6.8.7.2. コンテナに固定 IP アドレスを設定する | |
---|
podman はデフォルトで 10.88.0.0/16 を使います。 他に使用しているIPアドレスと被った場合等はコンテナに別のIPアドレスを設定してください。 |
コンテナに固定 IP アドレスを設定するためには、最初にユーザ定義のネットワークを作成する必要があります。
以下に 192.168.1.0/24 にユーザ定義のネットワークを作成する例を示します。 コンテナを作成する際に、上記で作成したネットワークと設定したい IP アドレスを渡すことで、
コンテナの IP アドレスを固定することができます。
以下の例では、IPアドレスを 192.168.1.10 に固定します。 コンテナの IP アドレスが、192.168.1.10 に設定されていることが確認できます。 この章では、コンテナ内で様々なサーバを構築する方法について示します。
この章で取り上げているサーバは alpine の apk コマンドでインストールすることが可能です。 ここでは、HTTP サーバとして Apache と lighttpd の 2 種類を使用する場合について説明します。 alpine イメージからコンテナを作成し、そのコンテナ内に Apache をインストールします。
コンテナ作成の際に、ホスト OS の 8080 番ポートをコンテナ内の 80 番ポートに転送する指定を行っています。 他の PC などの Web ブラウザから、ホスト OS の IP アドレスの 8080 番ポートに接続すると、
動作確認用ページが表示されます。
デフォルトでは、/var/www/localhost/htdocs ディレクトリにファイルを置くことで Web ブラウザから閲覧できます。
Apache の詳細な設定は、/etc/apache2 ディレクトリにある設定ファイルを編集することで変更可能です。 alpine イメージからコンテナを作成し、そのコンテナ内に lighttpd をインストールします。
コンテナ作成の際に、ホスト OS の 8080 番ポートをコンテナ内の 80 番ポートに転送する指定を行っています。 lighttpd はデフォルトでは動作確認用ページが用意されていないため、上記の手順では簡単なページを
/var/www/localhost/htdocs ディレクトリの下に配置しています。
他の PC などの Web ブラウザから、ホスト OS の IP アドレスの 8080 番ポートに接続すると表示されます。
lighttpd の詳細な設定は、/etc/lighttpd ディレクトリにある設定ファイルを編集することで変更可能です。 ここでは、FTP サーバとして vsftp を使用する場合について説明します。
alpine イメージからコンテナを作成し、そのコンテナ内に vsftpd をインストールします。
コンテナ作成の際に、FTP 通信で使用するポートについてホスト OS 側からコンテナ内のポートに転送する指定と、
コンテナ内の環境変数として PASV_ADDRESS にホスト OS 側の IP アドレスの指定を行っています。 コンテナ内にユーザアカウントを作成し、このユーザで ftp ログインできるようにします。 作成したユーザで ftp ログインできるように、vsftpd の設定ファイルを編集します。 編集した設定ファイルを指定して vftpd を起動することにより、ftp 接続可能となります。
ftp ログイン時のアカウントは前述の手順で作成したものを使用します。 ここでは、Samba サーバの構築方法について説明します。
alpine イメージからコンテナを作成し、そのコンテナ内に samba をインストールします。
コンテナ作成の際に、samba で使用するポートについてホスト OS 側からコンテナ内のポートに転送する指定を行っています。 コンテナ内にユーザアカウントを作成し、このユーザで samba にログインできるようにします。 samba を起動すると、前述の手順で作成したユーザアカウントで他の PC などからログインすることができます。 共有するディレクトリの指定などの詳細設定は /etc/samba/smb.conf ファイルを編集することで変更可能です。 ここでは、RDMS として sqlite を使用する場合について説明します。
alpine イメージからコンテナを作成し、そのコンテナ内に sqlite をインストールします。 コンテナ内に入り、sqlite3 コマンドを実行すると sqlite のプロンプトが表示され
データベースの操作ができるようになります。 6.8.9. コンテナからのpoweroff及びrebootArmadillo Base OSはbusybox initでshutdownとrebootを対応します。 busybox initでPID 1にsignalを送ることでshutdownやrebootとなります。
コンテナからsignalを送るように、pid namespaceを共有する必要がありますが、共有されたらkillで実行できます。 この章では、コンテナ内で動作しているアプリケーションに何らかの異常が発生し停止してしまった際に、
ソフトウェアウォッチドッグタイマーを使って、システムを再起動する方法について示します。 6.8.10.1. ソフトウェアウォッチドッグタイマーを扱うコンテナ内で動作するアプリケーションからソフトウェアウォッチドッグタイマーを扱うためには、Podman のイメージからコンテナを作成する際にホスト OS 側の
デバイスファイル /dev/watchdogN を渡す必要があります。以下は、/dev/watchdog0 を渡して alpine イメージからコンテナを作成する例です。 ソフトウェアウォッチドッグタイマーは、プログラム内からデバイスファイル /dev/watchdog0 を open した時点で起動します。
コンテナ内に入ってソフトウェアウォッチドッグタイマーを echo コマンドで起動する例を以下に示します。 ソフトウェアウォッチドッグタイマーを起動した後、/dev/watchdog0 に( V 以外の)任意の文字を書き込むことで
ソフトウェアウォッチドッグタイマーをリセットすることができます。
60 秒間( V 以外の)任意の文字の書き込みがない場合は、システムが再起動します。 ソフトウェアウォッチドッグタイマーを停止したい場合は、/dev/watchdog0 に V を書き込みます。 Armadillo-IoT ゲートウェイ A6E にはゲートウェイコンテナがプリインストールされています。
本章は、ゲートウェイコンテナを動かす方法について記載しています。 ゲートウェイコンテナは 「ゲートウェイコンテナの概要」 に記載している通り、各インターフェースから取得するデータの設定や、接続するクラウドの情報を設定するだけで、
コンテナ内で動作するアプリケーションを修正することなく、クラウドにデータを送信することができます。 以下では、必要機器の接続やネットワークの設定は完了しているものとして説明を進めます。
一連の流れは下記の通りです。 ゲートウェイコンテナでは AWS IoT Core と Azure IoT への接続をサポートしています。
それぞれについて、データの可視化までを行うことが出来る環境を構築するためのテンプレートを提供しています。 -
ゲートウェイコンテナ起動確認
接続先の クラウド 環境を構築 (クラウドにデータを送信する場合)
-
AWS IoT Core
-
Azure IoT Hub
コンフィグ 設定
-
コンテナ起動・実行
-
コンテナ終了
ゲートウェイコンテナは、デフォルトで Armadillo-IoT ゲートウェイ A6E に電源を入れると自動的に起動する設定となっています。
Armadillo が起動し、ゲートウェイコンテナが起動・実行されると、 アプリケーション LED が点滅します。 6.9.3. 接続先の クラウド 環境を構築 (AWS)AWS では、 AWS IoT Core と Amazon CloudWatch を組み合わせてデータの可視化を行います。
本項では、 AWS 上で実施する設定を記載します。 手順中で使用するファイルは、Armadillo-IoT ゲートウェイ A6E ゲートウェイコンテナ から「Armadillo-IoT ゲートウェイ A6E クラウド設定データ」ファイル (a6e-gw-container-cloudsetting-[VERSION].zip) から予めダウンロードしておきます。 AWS IAM (Identity and Access Management) は、AWS リソースへのアクセスを安全に管理するためのウェブサービスです。IAM により、誰を認証(サインイン)し、誰にリソースの使用を承認する(アクセス許可を持たせる)かを管理することができます。
IAM へ移動し、「アクセス管理」→「ポリシー」を開き、「ポリシー作成」をクリックします。
「JSON」を選択し、「Armadillo-IoT ゲートウェイ A6E クラウド設定データ」ファイル (a6e-gw-container-cloudsetting-[VERSION].zip) AWS フォルダ内の a6e_aws_iam_policy.json のファイルの内容を貼り付け、「次のステップ:タグ」をクリックします。
-
何も選択せずに、「次のステップ:確認」をクリックします。
ポリシー名を入力し、「ポリシーの作成」をクリックします。ここでは、ポリシー名を "policy_for_A6E" としています。
IAM から、「アクセス管理」→「ユーザー」を開き、「ユーザーを追加」をクリックします。
下記の通り入力、選択し、「次へ」をクリックします。
-
ユーザー名を入力する
-
「AWS マネジメントコンソールへのユーザーアクセスを提供する - オプション」を選択する
-
コンソールパスワードは「自動生成されたパスワード」を選択する
-
「ユーザーは次回のサインイン時に新しいパスワードを作成する必要があります (推奨)。」にチェックを入れる
「ポリシーを直接アタッチする」をクリックし、先ほど作成したポリシーを選択して、「次へ」をクリックします。
表示される内容を確認し、「ユーザーの作成」をクリックします。
「.csv ファイルをダウンロード」をクリックし、"<ユーザー名>_credentials.csv" をダウンロードして、「ユーザーリストに戻る」をクリックします。
作成したユーザーをユーザーリストの中から選択します。
ユーザー情報画面の「セキュリティ認証情報」-「アクセスキーを作成」をクリックします。
「AWS の外部で実行されるアプリケーション」を選択し、「次へ」をクリックします。
-
「アクセスキーを作成」をクリックします。
「.csv ファイルをダウンロード」をクリックし、"<ユーザー名>_accessKeys.csv" をダウンロードして、「完了」をクリックします。
6.9.3.4. Armadillo-IoT ゲートウェイ A6E のシリアル番号を取得するAWS IoT Core に登録する Thing 名は Armadillo のシリアル番号を使用します。
環境設定時、パラメータに指定する必要があるため、下記のコマンドを実行しシリアル番号を取得します。 armadillo:~# hexdump -v -s 0xa0 -n 8 -e '/4 "%08X"' /sys/bus/nvmem/devices/imx-ocotp0/nvmem | cut -c 5-
00CD11112222 |
この場合、00CD11112222 がシリアル番号になります
|
6.9.3.5. AWS IoT Core と Amazon CloudWatch の設定を行うAWS IoT Core に送信したデータを Amazon CloudWatch のダッシュボード上で可視化します。
ここでは、CloudFormation を用いて AWS IoT Core と Amazon CloudWatch の設定を行います。
CloudFormation へ移動し、「スタックの作成」→「新しいリソースを使用(標準)」をクリックします。
「テンプレートファイルのアップロード」で「Armadillo-IoT ゲートウェイ A6E クラウド設定データ」ファイル (a6e-gw-container-cloudsetting-[VERSION].zip) AWS フォルダ内の a6e_aws_cfn_template.yml を選択し、「次へ」をクリックします。
スタック名を入力します。また、 「Armadillo-IoT ゲートウェイ A6E のシリアル番号を取得する」 で取得したシリアル番号をパラメータに指定し、「次へ」をクリックします。
-
そのまま「次へ」をクリックします。
チェックボックスを選択し、「スタックの作成」をクリックします。
作成したスタックのステータスが"CREATE_COMPLETE" になったら作成完了です。
6.9.3.6. 設定に必要となるパラメータを取得する「接続先クラウド情報の設定」 で設定するパラメータを取得します。
AWS IoT Core エンドポイント
IoT Core へ移動し、サイドバー下部にある設定をクリックします。
IoT Core エンドポイントが表示されます。
アカウント ID
AWS コンソール画面右上の ▼ をクリックします。
下記画像の丸で囲んだマークをクリックすると、コピーすることができます。
6.9.4. 接続先の クラウド 環境を構築 (Azure)Azure の場合は、 Azure IoT Hub にデータを送信します。
本項では、 Azure portal 上で実施する設定を記載します。 手順中で使用するファイルは、Armadillo-IoT ゲートウェイ A6E ゲートウェイコンテナ から「Armadillo-IoT ゲートウェイ A6E クラウド設定データ」ファイル (a6e-gw-container-cloudsetting-[VERSION].zip) にアップロードしています。 リソースグループの作成を行います。 -
Azure portal から [リソース グループ] を開き、[作成] を選択します。
サブスクリプションとリージョンを選択し、リソースグループ名を入力の後、[確認および作成] を選択します。
6.9.4.3. Azure IoT Hub と Azure IoT Hub Device Provisioning Service の設定を行うここでは、データの送信先となる Azure IoT Hub と、デバイスプロビジョニングのヘルパーサービスである Azure IoT Hub Device Provisioning Service (以降、DPS と記載) の設定を行います。 | |
---|
「Armadillo-IoT ゲートウェイ A6E クラウド設定データ」v2.1.0 から、DPS のデバイスプロビジョニング方法が個別登録に変更となりました。
v2.0.0 以前を使用してクラウド環境を構築および Azure portal で作成した DPS にグループ登録で設定を行った場合は、再度環境の構築および設定を行ってください。 |
-
Azure portal https://account.microsoft.com/ にサインインします。
Cloud Shell アイコンを選択し、 Azure Cloud Shell を起動します。
[Bash] を選択します。
ストレージアカウントの設定を行います。サブスクリプションを選択し、ストレージの作成をクリックすると自動的にストレージアカウントが作成されます。
Cloud Shell が起動したら、以下のコマンドで Armadillo-IoT ゲートウェイ A6E クラウド設定データをダウンロードします。
Cloud Shell 上でエディタを開き、コンフィグファイルを編集します。
|
リソースグループを指定します
| |
作成する Azure IoT Hub 名を入力します
| |
作成する DPS 名を入力します
|
| |
---|
Azure IoT Hub 名、 DPS 名はそれぞれグローバルで一意である必要があります。既に使用されている名称を指定した場合、エラーとなります。 |
コンフィグファイルの編集が終了したら、[保存] を行い、 [エディターを閉じる] を選択し、エディタを終了します。
DPS に登録する証明書を Cloud Shell にアップロードします。
証明書ファイルは Armadillo 上の /var/app/volumes/gw_container/device/cert/device_cert.pem を使用します。 開発 PC にコピーした後、Cloud Shell の以下のアイコンを選択し、アップロードを行います。 アップロード完了後、スクリプトと同階層に証明書ファイルをコピーします。 [Azure: ~]$ cp /home/<ユーザー名>/device_cert.pem .
設定スクリプトを実行し、 Azure IoT Hub と DPS の設定を行います。
|
環境設定時に使用するため、控えておきます
|
利用したい内容に合わせて、 設定ファイルを編集します。
設定内容はコンテナ起動時の内容が適用されるため、一度コンテナを終了させます。 | |
---|
本マニュアルに記載しているゲートウェイコンテナの設定ファイルの内容は、最新バージョンの内容となります。 ご利用のゲートウェイコンテナのバージョンが最新ではない場合、ゲートウェイコンテナを最新のバージョンにアップデートするか、ゲートウェイコンテナのバージョンに対応した製品マニュアルをご参照ください。 製品マニュアルのバージョンとゲートウェイコンテナのバージョンについては Armadillo-IoT A6E の製品アップデートページをご参照ください。 |
設定ファイルの内容は「接続先クラウド情報の設定」及び「インターフェース設定」を参照ください。 設定ファイルの修正が完了したら、コンテナを起動します。
コンテナが起動すると、設定に従ってコンテナ内のアプリケーションが実行される仕組みとなっています。 [armadillo ~]# podman_start a6e-gw-container
Starting 'a6e-gw-container'
a3b719c355de677f733fa8208686c29424be24e57662d3972bc4131ab7d145ad 表3.53「[DEFAULT] 設定可能パラメータ」 でクラウドにデータを送信する設定を行った場合は、クラウド接続後、アプリケーションLEDの状態が点滅から点灯に変化します。 6.9.6.1. Armadillo からクラウドに送信するデータArmadillo からクラウドに送信するデータは以下の通りです。
デバイス情報
表6.11 デバイス情報データ一覧 項目 | 概要 |
---|
DevInfo_SerialNumber | シリアル番号 | DevInfo_LAN_MAC_Addr | LAN MAC アドレス | DevInfo_ABOS_Ver | Armadillo Base OS バージョン | DevInfo_Container_Ver | コンテナイメージバージョン |
CPU 温度
接点入力
表6.13 接点入力データ一覧 項目 | 概要 |
---|
DI1_polling | DI1 のポーリング結果 | DI2_polling | DI2 のポーリング結果 | DI1_edge | DI1 のエッジ検出結果 | DI2_edge | DI2 のエッジ検出結果 |
接点出力
クラウドに送信するデータはありません。
RS485
表6.14 RS485データ一覧 項目 | 概要 |
---|
RS485_Data1 | RS485_Data1 の読み出し値 | RS485_Data2 | RS485_Data2 の読み出し値 | RS485_Data3 | RS485_Data3 の読み出し値 | RS485_Data4 | RS485_Data4 の読み出し値 |
ユーザースイッチ
クラウドにデータが届いているかどうかは、次項の方法で確認することができます。 Amazon CloudWatch ダッシュボードで、データが届いているかの確認を行う事ができます。
CloudWatch に移動し、「ダッシュボード」を選択します。
「AWS IoT Core と Amazon CloudWatch の設定を行う」 で CloudWatch ダッシュボードが作成されています。
ダッシュボード名は armadillo_iot_a6e_<シリアル番号> です。
ダッシュボード名をクリックすると、下記のような画面が表示されます。
接点入力
RS485
CPU温度
ユーザースイッチ
また、実際にデバイスから届いているデータを確認する場合は、 AWS IoT Core の Device Shadow で確認を行います。
AWS IoT Core に移動し、「管理」→「すべてのデバイス」→「モノ」を選択します。
デバイスの名前は 「Armadillo-IoT ゲートウェイ A6E のシリアル番号を取得する」 で取得したシリアル番号で登録されています。
「Device Shadow」の「Classic Shadow」を選択します。
下記の通り、 Armadillo から送信されてきたデータを確認することができます。
| |
---|
以下では可視化の手順を記載していますが、実際にデバイスから届いているデータを確認する場合は、Azure IoT Explorer を用いて確認することが可能です。
詳細はこちらのドキュメント https://docs.microsoft.com/ja-jp/azure/iot-pnp/howto-use-iot-explorer をご参照ください。 Azure IoT Hub に登録されるデバイス ID は、デバイス認証に使用している証明書の CN となります。
以下のコマンドで確認することが可能です。 [armadillo ~]# openssl x509 -noout -subject -in /var/app/volumes/gw_container/device/cert/device_cert.pem | grep subject | awk '{print $NF}' |
可視化の方法は様々ありますが、本書では一例として、Power BI を使用して Azure IoT Hub に送信したデータの可視化を行う方法を記載します。 以下の手順では、 「Armadillo からクラウドに送信するデータ」 のうち CPU_temp を例に記載します。 -
こちらのページで https://powerbi.microsoft.com/ja-jp/ Power BI アカウントを作成します。なお、 Pro アカウントでの登録が必要となります。
-
PowerBI にログインし、グループワークスペースを作成します。
Azure IoT Hub にコンシューマーグループを追加します。 Azure portal から [IoT Hub] を開き、 「Azure IoT Hub と Azure IoT Hub Device Provisioning Service の設定を行う」 で作成した IoT Hub を選択します。
[組み込みのエンドポイント] を選択し、[コンシューマーグループ] の下のテキストボックスに、新しいコンシューマーグループの名前を入力、保存します。
Azure IoT Hub のデータを Power BI のデータセットにルーティングする Azure Stream Analytics ジョブを作成します。
Azure portal から [Stream Analytics ジョブ] を開き、 [Stream Analytics ジョブ] 概要ページで [作成] を選択します。 [基本] タブに、 表6.16「Azure Stream Analytics ジョブ設定値」 の情報を入力し、 [確認と作成] を選択した後、 [作成] を選択して Stream Analytics ジョブを作成します。 表6.16 Azure Stream Analytics ジョブ設定値 項目 | 設定値 |
---|
サブスクリプション | IoT Hub のサブスクリプション | リソースグループ | IoT Hub のサブスクリプション | 名前 | ジョブの名前(任意) | リージョン | IoT Hub のリージョン |
Stream Analytics ジョブに入力を追加します。
作成した Stream Analytics ジョブを開きます。 [ジョブ トポロジ] - [入力] から [ストリーム入力の追加] を選択し、ドロップダウンリスト内の [IoT Hub] を選択します。 表6.17「Azure Stream Analytics ジョブ入力設定値」 の情報を入力し、それ以外の内容はデフォルトのまま [保存] を選択します。 表6.17 Azure Stream Analytics ジョブ入力設定値 項目 | 設定値 |
---|
入力のエイリアス | 一意の名前を入力 | サブスクリプションから IoT Hub を選択する | 選択 | サブスクリプション | IoT Hub 用のサブスクリプション | IoT Hub | 使用する IoT Hub | コンシューマーグループ | 作成したコンシューマーグループを選択 | 共有アクセスポリシー名 | iothubowner |
Stream Analytics ジョブに出力を追加します。なお、複数の値を PowerBI で可視化する場合は、値の数分の出力設定が必要になります。
[ジョブ トポロジ] - [出力] から [追加] を選択し、ドロップダウンリスト内の [Power BI] を選択します。 [認証モード] で「ユーザートークン」を選択、[接続を承認する] の [承認] を選択し、Power BI アカウントにサインインします。 作成したグループワークスペースの ID を [グループワークスペース] に入力します。
グループワークスペースの ID は、グループワークスペースの URL から取得することができます。
[データセット名] と [テーブル名] は任意の値を指定してください。ここではそれぞれ cputemp を指定しています。
情報登録完了後、 [保存] を選択します。
Stream Analytics ジョブのクエリを構成します。
[ジョブ トポロジ] の [クエリ] を選択します。 赤枠内にクエリを指定します。入力完了後、[クエリの保存] を選択してください。
フォーマットは下記の通りです。 <パラメータ名> には、 「Armadillo からクラウドに送信するデータ」 の「項目」を指定してください。 SELECT
<パラメータ名>,
DATEADD(hour, 9, System.Timestamp) AS time,
IoTHub.ConnectionDeviceId AS DeviceID
INTO
[<ジョブ出力エイリアス名>]
FROM
[<ジョブ入力エイリアス名>] timestamp by dateadd(second, epoch, '1970-01-01T00:00:00Z')
WHERE <パラメータ名> IS NOT NULL これに従い、CPU_temp の場合は以下の通りとなります。 SELECT
CPU_temp,
DATEADD(hour, 9, System.Timestamp) AS time,
IoTHub.ConnectionDeviceId AS DeviceID
INTO
[cputemp]
FROM
[<ジョブ入力エイリアス名>] timestamp by dateadd(second, epoch, '1970-01-01T00:00:00Z')
WHERE CPU_temp IS NOT NULL なお、複数の出力がある場合は、クエリ入力欄に下記の通り複数のクエリを列挙してください。INTO 句で指定するパラメータ(データセット名)が異なることに注意してください。 SELECT
CPU_temp,
DATEADD(hour, 9, System.Timestamp) AS time,
IoTHub.ConnectionDeviceId AS DeviceID
INTO
[cputemp]
FROM
[<ジョブ入力エイリアス名>] timestamp by dateadd(second, epoch, '1970-01-01T00:00:00Z')
WHERE CPU_temp IS NOT NULL
SELECT
DI1_polling,
DATEADD(hour, 9, System.Timestamp) AS time,
IoTHub.ConnectionDeviceId AS DeviceID
INTO
[di1polling]
FROM
[<ジョブ入力エイリアス名>] timestamp by dateadd(second, epoch, '1970-01-01T00:00:00Z')
WHERE DI1_polling IS NOT NULL
Stream Analytics ジョブを実行します。
[概要] 画面で [開始] を選択します。 [ジョブの開始] 画面の [ジョブ出力の開始時刻] で [現在] が選択されていることを確認し、 [開始] を選択します。
ジョブが正常に開始されると、[概要] 画面の [状態] が [実行中] に変わります。
ゲートウェイコンテナを停止している場合、下記のコマンドを実行しゲートウェイコンテナを開始します。
[armadillo ~]# podman_start a6e-gw-container
Starting 'a6e-gw-container'
a3b719c355de677f733fa8208686c29424be24e57662d3972bc4131ab7d145ad
PowerBI アカウントにサインインし、使用したワークスペースを右側のメニューから選択すると、 Stream Analytics ジョブ出力で指定した名称のデータセットが作成されています。
データセットの [レポートの作成] を選択します。
[視覚化] で [折れ線グラフ] を選択、X軸に EventEnqueuedUtcTime 、 Y軸に CPU_temp を指定することにより、グラフ化を行うことが出来ます。各設定を行った後、 [保存] すると、レポートが作成されます。
-
複数のデータセットが存在している場合は、それぞれについてレポートの作成を行います。なお、各レポートを一括して表示したい場合はダッシュボード機能を選択してください。手順についてはこちらのドキュメント https://learn.microsoft.com/ja-jp/power-bi/create-reports/service-dashboard-create を参照してください。
各インターフェースの設定については、 「インターフェース設定」 に記載している通り Armadillo 上の設定ファイルで行いますが、クラウドから設定値を変更することも可能です。 なお、クラウドからデータ設定を行うためには、 表3.53「[DEFAULT] 設定可能パラメータ」 の cloud_config を true に設定する必要があります。 設定を変更できる項目は以下の通りです。 -
接点入力設定
-
接点出力設定
-
RS485 レジスタ読み出し
下記の手順でデータを設定します。 各機能それぞれ、下記の通りのフォーマットとなっています。 podman_start で起動したゲートウェイコンテナを終了させる場合は、以下のコマンドを実行してください。 [armadillo ~]# podman stop a6e-gw-container 「ゲートウェイコンテナの設定ファイル」 でログファイルにログを出力する設定にした場合、インターフェース部とクラウド部にわかれて、それぞれ以下のファイルに出力されます。
インターフェース部
-
/var/app/volumes/gw_container/device/log/sensing_mgr.log
クラウド部
-
/var/app/volumes/gw_container/device/log/cloud_agent.log
ログファイルは自動的にローテートされるように設定されています。
ローテートされると、各ファイルの末尾に番号が付与されます。
なお、ファイル数が10を超えた場合は古いファイルから削除されます。 また、ログファイルの内容はテキストデータであり、以下のようなフォーマットになっています。 ゲートウェイコンテナは下記の通り構成されています。
コンテナ内外関わらず、誤ってファイルを削除した場合はインストールディスクで初期化を行ってください。 -
起動スクリプト
コンテナ起動時、下記のスクリプトを実行します。
-
ゲートウェイコンテナアプリケーション
ゲートウェイコンテナアプリケーションは下記に配置されています。
-
/usr/lib/python3.10/site-packages/atgateway/
-
ボリュームマウント
以下のパスをコンテナ内でマウントしています。
6.10. ゲートウェイコンテナアプリケーションを改造する「ゲートウェイコンテナアプリケーションの開発」で説明したとおり、VSCode 上でゲートウェイコンテナアプリケーションの設定を行えますが、メインファイルを変更することで独自のアプリケーションを開始することも可能です。
ゲートウェイコンテナアプリケーションの拡張例のファイルは app/example ディレクトリに配置してあります。
実行する場合は app/example ディレクトリのファイル一式を app/src ディレクトリにコピーしてください。
拡張例のゲートウェイコンテナでは以下の動作を実行します。 -
5秒毎に Count_value のカウントアップ
-
Count_value が 100 に達すると 0 クリア
Count_value がカウントアップしていく様子はログファイルで確認できます。
ゲートウェイコンテナのログについての詳細は 「ログ内容確認」 をご参照ください。 6.11. Web UI から Armadillo をセットアップする (ABOS Web)ABOS Web は、Web ブラウザから Armadillo の動作設定を行う機能で、ABOS (Armadillo Base OS) を搭載する全ての Armadillo に対応しています。 詳細は、「ABOS Web とは」を参照してください。 6.11.1. ABOS Web ではできないことABOS Web は、ABOS の詳細や Linux のコマンドシェルの操作に詳しくない方でも、簡単に Armadillo のセットアップを行なえることを目的にしています。
そのための、Armadillo の動作設定を行う機能ですから、動作設定以外のこと、たとえば、Armadillo の動作状態を監視したりすることは、できません。
さらに、Armadillo をインターネットから設定操作する、リモート操作もできません。
セキュリティの観点から、ABOS Web は、同じ LAN 内からの接続しか受け付けないように実装しています。 ABOS Web でできる Armadillo の設定については、「ABOS Web の設定機能一覧と設定手順」を参照してください。
なお、ABOS Web は OSS で提供していますので、現在の ABOS Web に無い設定機能を、ご自分で実装して機能追加することも可能です。 6.11.2. ABOS Web の設定機能一覧と設定手順現在、ネットワークに関して ABOS Web で設定できるのは以下のものです。 -
WWAN設定
-
WLAN設定
-
各接続設定(各ネットワークインターフェースの設定)
-
DHCPサーバー設定
-
NAT設定
-
VPN設定
これらについては、「ネットワーク設定」で紹介していますので、そちらを参照してください。 ネットワーク以外にも ABOS Web は以下の機能を持っています。 -
コンテナ管理
-
SWUインストール
-
時刻設定
-
アプリケーション向けのインターフェース (Rest API)
-
カスタマイズ
本章では、これらのネットワーク以外の設定項目について紹介します。 ABOS Web から Armadillo 上のコンテナを一覧表示して、コンテナごとに起動・停止を行うことができます。 ABOS Web のトップページから、"コンテナ管理"をクリックすると、図6.92「コンテナ管理」の画面に遷移します。 この画面では、ABOS 上にあるコンテナ全てについて、イメージ名やコンテナ名、現在状態を一覧表示します。
コンテナの一覧表示欄で選択したコンテナに対し、起動と停止、および、コンテナから出力されたログの表示を行うことができます。 | |
---|
「VPN設定」に記載のとおり、VPN 接続を設定すると、abos_web_openvpn のコンテナが作成されます。
VPN 接続中は、このコンテナが動作状態になっており、このコンテナをコンテナ管理画面で停止すると、VPN 接続が切断されます。 |
ABOS Web から PC 上の SWU イメージや HTTP サーバー上の SWU イメージを Armadillo にインストールすることができます。 SWU イメージについては、「SWU イメージとは」を参照してください。 ABOS Web のトップページから、"SWU インストール"をクリックすると、図6.93「SWU インストール」の画面に遷移します。 この画面では、PC 上の SWU イメージファイルまたは、HTTP サーバー上の SWU イメージファイルの URL を指定して、Armadillo にインストールすることができます。
Armadillo のソフトウェアのアップデート用に最初に行う設定で作成する initial_setup.swu が、まだ Armadillo にインストールされていなければ、"mkswu --init で作成した initial_setup.swu をインストールしてください。" というメッセージを画面上部に表示します。 SWU イメージのインストール動作を実行する時には、進行状況を示すログを表示します。
"現在の SWU で管理されているバージョン" 欄には、ABOS の各ソフトウェアコンポーネントの名前とバージョン情報を一覧表示します。 6.11.6. アプリケーション向けのインターフェース (Rest API)コンテナやスクリプトから ABOS Web の一部の機能を使用できます。 6.11.6.1. Rest API へのアクセス権の管理Rest API は ABOS Web のパスワードと Rest API 用のトークンで認証されます。 また、接続可能なネットワークにも制限をかけております。初期状態では、同一サブネットからのアクセスのみ許容しています。
同一サブネット外の IP アドレスからアクセスしたい場合は設定が必要です。
設定方法は 「ABOS Web へのアクセス」 を参照してください。 各リクエストは以下のどちらかの Authorization ヘッダーで認証されます: -
Basic (パスワード認証): curl の -u :<password> 等で認証可能です。<password> の文字列は ABOS Web で設定したパスワードです。
-
Bearer (トークン認証): curl の -H "Authorization: Bearer <token> 等で認証可能です。<token> は /api/tokens であらかじめ生成した文字列です。
また、トークンには権限も設定できます。Admin で生成されたトークンはすべてのインターフェースにアクセスできますが、
一部のインターフェースしか使用しない場合はそのインターフェースに必要な権限だけを持つトークンを生成してください。 トークンの管理は ABOS Web の「設定管理」ページで行えます: | |
---|
ABOS Web の バージョン 1.2.3 以降では、Token ID の横にあるクリップボードアイコンをクリックするとクリップボードにコピーすることができます。 |
6.11.6.2. Rest API 使用例の前提条件各 Rest API の使用例を説明します。使用例では以下を前提としています。: -
ABOS Web に
https://armadillo.local:58080 でアクセスします。
-
「
AUTH 」環境変数に ABOS Web で生成したトークンを設定します。
例: AUTH="Authorization: Bearer 35ac39a8-1eeb-4bb2-84d2-cb542cdbc873"
-
curl コマンドを省略するため、以下のように alias を使用します:
[ATDE ~]$ alias curl_rest='curl -k -H "$AUTH" -w "\nhttp code: %{http_code}\n" ' | |
---|
コンテナから ABOS Web には「https://host.containers.internal:58080」でアクセスできます。 |
| |
---|
この章で説明する例では、curl のオプションに -k を指定して証明書を無視するようにしています。
もし、証明書を使用したい場合は以下のように設定してください。 [ATDE ~]$ openssl s_client -showcerts -connect armadillo.local:58080 </dev/null 2>/dev/null | openssl x509 -outform PEM > abosweb.pem
[ATDE ~]$ CERT="$PWD/abosweb.pem"
[ATDE ~]$ alias curl_rest='curl -H "$AUTH" --cacert "$CERT" -w "\nhttp code: %{http_code}\n" ' |
6.11.6.3. Rest API の入力と出力インターフェースの一部にはパラメータを取るものがあります。パラメータがある場合は json (Content-Type を application/json に設定する)と
form(デフォルトの application/x-www-form-urlencoded でのパラメータ)のどちらでも使用可能です。 インターフェースの出力がある場合は json object で出力されます。
今後のバージョンアップで json object のキーが増える可能性があるため、
出力された値を処理する場合はその点に留意してください。 エラーの場合は json object の「error 」キーに文字列のエラーが記載されています。
http のステータスコードも 50x になります。 エラーの例: [ATDE ~]$ curl_rest -X DELETE https://armadillo.local:58080/api/tokens/3b2d830d-2f64-4e76-9e59-316da82eefc4
{"error":"No such token"}
http code: 500 6.11.6.4. Rest API : トークン管理トークン管理のためのインターフェースは以下のとおりです:
トークン一覧
GET "/api/tokens"
必要権限: Admin
パラメータ: 無し
出力: トークンリスト
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/tokens
{"tokens":[{"token":"35ac39a8-1eeb-4bb2-84d2-cb542cdbc873","permissions":["Admin"]},{"token":"5c426ce5-8fcb-4e54-9ff6-80aba50935ee","permissions":["Reboot","NetworkView"]}]}
http code: 200
トークン取得
GET "/api/tokens/<token>"
必要権限: Admin
パラメータ: 無し
出力: トークン情報
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/tokens/35ac39a8-1eeb-4bb2-84d2-cb542cdbc873
{"token":"35ac39a8-1eeb-4bb2-84d2-cb542cdbc873","permissions":["Admin"]}
http code: 200
トークン生成
POST "/api/tokens"
必要権限: Admin
パラメータ: 付与したい permissions 権限リスト(ない場合は「Admin」で生成されます)
出力: 生成されたトークン情報
[ATDE ~]$ curl_rest -H "Content-type: application/json" -d '{"permissions": ["SwuInstall", "ContainerView"]}' https://armadillo.local:58080/api/tokens
{"token":"3b2d830d-2f64-4e76-9e59-316da82eefc4","permissions":["SwuInstall","ContainerView"]}
http code: 200
トークン編集 (存在しない場合は指定のトークンで生成されます)
POST "/api/tokens/{token_id}"
必要権限: Admin
パラメータ: 付与したい permissions 権限リスト(ない場合は編集しません)
出力: 編集か生成されたトークン情報
[ATDE ~]$ curl_rest -X POST -d permissions=Poweroff -d permissions=ContainerAdmin https://armadillo.local:58080/api/tokens/3b2d830d-2f64-4e76-9e59-316da82eefc4
{"token":"3b2d830d-2f64-4e76-9e59-316da82eefc4","permissions":["Poweroff","ContainerAdmin"]}
トークン削除
DELETE "/api/tokens/{token_id}"
必要権限: Admin
パラメータ: 無し
出力: 無し
[ATDE ~]$ curl_rest -X DELETE https://armadillo.local:58080/api/tokens/3b2d830d-2f64-4e76-9e59-316da82eefc4
http code: 200
abos-web パスワード変更
POST "/api/password"
必要権限: Admin
パラメータ: password でハッシュ済みのパスワード文字列か hashed=false が設定されている場合は平文の文字列
出力: 無し
[ATDE ~]$ PWD_HASH=$(openssl passwd -6)
Password:
Verifying - Password:
[ATDE ~]$ echo $PWD_HASH
$6$LuXQduN7L3PwbMaZ$txrw8vLJqEVUreQnZhM0CYMQ5U5B9b58L0mpVRULDiVCh2O46GKscq/xsDPskjxg.x8ym0ri1/8NqFBu..IZE0
[ATDE ~]$ curl_rest --data-urlencode "password=$PWD_HASH" -X POST https://armadillo.local:58080/api/password
http code: 200
インストール済み SWU のバージョン情報取得
GET "/api/swu/versions"
必要権限: SwuView
パラメータ: 無し
出力: Swupdate の各バージョン情報
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/swu/versions
{"extra_os.custom":"54","extra_os.container":"1","custom":"54","extra_os.initial_setup":"4","boot":"2020.4-at19","base_os":"3.18.4-at.6","extra_os.sshd":"1"}
http code: 200 -
アップデートステータス取得
GET "/api/swu/status"
必要権限: SwuView
パラメータ: 無し
出力: rollback_ok : ロールバック状態 (false の場合は rollback されています)、last_update_timestamp : UTC の unix epoch (数字での日付)、
last_update_versions : 最新のアップデートで更新されたバージョン情報 (コンポーネント → [更新前のバージョン, 更新後のバージョン]。
更新前に存在しなかったコンポーネントの場合は null で記載されています)
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/swu/status
{"rollback_ok":true,"last_update_timestamp":1703208559,"last_update_versions":{"custom":[null,"54"],"extra_os.custom":["53","54"]}}
http code: 200
SWU をファイルアップロードでインストール
POST "/api/swu/install/upload"
必要権限: SwuInstall
パラメータ: multipart/form-data で swu の転送
出力: swupdate プロセスの出力 (stdout または stderr )、またはアップデートプロセスの出力ステータス (exit_code または exit_signal )
[ATDE ~]$ curl_rest -F swu=@"$HOME/mkswu/file.swu" https://armadillo.local:58080/api/swu/install/upload
{"stdout":"SWUpdate v2023.05_git20231025-r0\n"}
{"stdout":"\n"}
{"stdout":"Licensed under GPLv2. See source distribution for detailed copyright notices.\n"}
{"stdout":"\n"}
{"stdout":"[INFO ] : SWUPDATE running : [main] : Running on AGX4500 Revision at1\n"}
{"stdout":"[INFO ] : SWUPDATE started : Software Update started !\n"}
{"stdout":"[INFO ] : SWUPDATE running : [install_single_image] : Installing pre_script\n"}
{"stdout":"[INFO ] : SWUPDATE running : [read_lines_notify] : No base os update: copying current os over\n"}
: (省略)
{"stdout":"[INFO ] : SWUPDATE running : [install_single_image] : Installing post_script\n"}
{"stdout":"[INFO ] : SWUPDATE running : [read_lines_notify] : Removing unused containers\n"}
{"stdout":"[INFO ] : SWUPDATE running : [read_lines_notify] : swupdate triggering reboot!\n"}
{"stderr":"Killed\n"}
{"exit_code":0}
http code: 200
SWU を URL でインストール
POST "/api/swu/install/url"
必要権限: SwuInstall
パラメータ: url=<SWU をダウンロードできる URL>
出力: swupdate プロセスの出力 (stdout または stderr )、またはアップデートプロセスの出力ステータス (exit_code または exit_signal )
[ATDE ~]$ curl_rest -d url=https://url/to/file.swu https://armadillo.local:58080/api/swu/install/url
{"stdout":"Downloading https://url/to/file.swu...\n"}
{"stdout":"SWUpdate v2023.05_git20231025-r0\n"}
{"stdout":"\n"}
{"stdout":"Licensed under GPLv2. See source distribution for detailed copyright notices.\n"}
{"stdout":"\n"}
{"stdout":"[INFO ] : SWUPDATE running : [main] : Running on AGX4500 Revision at1\n"}
{"stdout":"[INFO ] : SWUPDATE started : Software Update started !\n"}
{"stdout":"[INFO ] : SWUPDATE running : [install_single_image] : Installing pre_script\n"}
{"stdout":"[INFO ] : SWUPDATE running : [read_lines_notify] : No base os update: copying current os over\n"}
: (省略)
{"stdout":"[INFO ] : SWUPDATE running : [install_single_image] : Installing post_script\n"}
{"stdout":"[INFO ] : SWUPDATE running : [read_lines_notify] : Removing unused containers\n"}
{"stdout":"[INFO ] : SWUPDATE running : [read_lines_notify] : swupdate triggering reboot!\n"}
{"stderr":"Killed\n"}
{"exit_code":0}
http code: 200
6.11.6.6. Rest API : コンテナ操作
コンテナ一覧
GET "/api/containers"
必要権限: ContainerView
パラメータ: 無し
出力: 各コンテナの id , name , state , command , image 情報
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/containers
{"containers":[{"id":"02616122dcea5bd75c551b29b2ef54f54e09f59c50ce3282684773bc6bfb86a8","name":"python_app","state":"running","command":["python3","/vol_app/src/main.py"],"image":"localhost/python_arm64_app_image:latest"}]}
http code: 200
コンテナログ取得
GET "/api/containers/{container}/logs"
必要権限: ContainerView
パラメータ: follow=true (podman logs -f と同様の効果)
出力: podman logs プロセスの出力 (stdout または stderr )、またはアップデートプロセスの出力ステータス (exit_code または exit_signal )
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/containers/python_app/logs
{"stdout":"Some message\n"}
{"exit_code":0}
http code: 200 follow=true を付与する例 [ATDE ~]$ curl_rest https://armadillo.local:58080/api/containers/python_app/logs?follow=true
{"stdout":"Some message\n"}
Ctrl-C で終了
コンテナ起動
POST "/api/containers/{container}/start"
必要権限: ContainerAdmin
パラメータ: 無し
出力: 無し
[ATDE ~]$ curl_rest -X POST https://armadillo.local:58080/api/containers/python_app/start
http code: 200
コンテナ停止
POST "/api/containers/{container}/stop"
必要権限: ContainerAdmin
パラメータ: 無し
出力: 無し
[ATDE ~]$ curl_rest -X POST https://armadillo.local:58080/api/containers/python_app/stop
http code: 200
6.11.6.7. Rest API : ネットワーク設定
ネットワーク設定一覧
GET "/api/connections"
必要権限: NetworkView
パラメータ: 無し
出力: ネットワーク設定一覧と各接続の uuid , name , state , ctype , 存在すれば device 情報
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/connections
{"connections":[{"name":"Wired connection 1","state":"activated","uuid":"18d241f1-946c-3325-974f-65cda3e6eea5","ctype":"802-3-ethernet","device":"eth0"},{"name":"lo","state":"activated","uuid":"529ec241-f122-4cb2-843f-ec9787b2aee7","ctype":"loopback","device":"lo"},{"name":"podman0","state":"activated","uuid":"be4583bc-3498-4df2-a31c-773d781433aa","ctype":"bridge","device":"podman0"},{"name":"veth0","state":"activated","uuid":"03446b77-b1ab-47d0-98fc-f167c3f3778a","ctype":"802-3-ethernet","device":"veth0"},{"name":"Wired connection 2","state":"","uuid":"181f44df-850e-36c1-a5a4-6e461c768acb","ctype":"802-3-ethernet"},{"name":"Wired connection 3","state":"","uuid":"e4381368-6351-3985-ba6e-2625c62b8d39","ctype":"802-3-ethernet"}]}
http code: 200
ネットワーク設定詳細取得
GET "/api/connections/{connection}"
必要権限: NetworkView
パラメータ: 無し(URL の connection は UUID または接続名で使用可能)
出力: 接続の詳細情報(Network Manager のプロパティ)
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/connections/Wired%20connection%201
{"name":"Wired connection 1","state":"activated","uuid":"18d241f1-946c-3325-974f-65cda3e6eea5","ctype":"802-3-ethernet","device":"eth0","props":{"802-3-ethernet.accept-all-mac-addresses":"-1","802-3-ethernet.auto-negotiate":"no","802-3-ethernet.cloned-mac-address":"","802-3-ethernet.duplex":"","802-3-ethernet.generate-mac-address-mask":"","802-3-ethernet.mac-address":"","802-3-ethernet.mac-address-blacklist":"","802-3-ethernet.mtu":"auto","802-3-ethernet.port":"","802-3-ethernet.s390-nettype":"","802-3-ethernet.s390-options":"","802-3-ethernet.s390-subchannels":"","802-3-ethernet.speed":"0","802-3-ethernet.wake-on-lan":"default","802-3-ethernet.wake-on-lan-password":"","GENERAL.CON-PATH":"/org/freedesktop/NetworkManager/Settings/1","GENERAL.DBUS-PATH":"/org/freedesktop/NetworkManager/ActiveConnection/6","GENERAL.DEFAULT":"yes","GENERAL.DEFAULT6":"no","GENERAL.DEVICES":"eth0","GENERAL.IP-IFACE":"eth0","GENERAL.MASTER-PATH":"","GENERAL.NAME":"Wired connection 1","GENERAL.SPEC-OBJECT":"","GENERAL.STATE":"activated","GENERAL.UUID":"18d241f1-946c-3325-974f-65cda3e6eea5","GENERAL.VPN":"no","GENERAL.ZONE":"","IP4.ADDRESS[1]":"198.51.100.123/16","IP4.DNS[1]":"192.0.2.1","IP4.DNS[2]":"192.0.2.2","IP4.GATEWAY":"198.51.100.1","IP4.ROUTE[1]":"dst = 198.51.100.0/16, nh = 0.0.0.0, mt = 100","IP4.ROUTE[2]":"dst = 0.0.0.0/0, nh = 198.51.100.1, mt = 100","IP6.ADDRESS[1]":"fe80::211:cff:fe00:b13/64","IP6.GATEWAY":"","IP6.ROUTE[1]":"dst = fe80::/64, nh = ::, mt = 1024","connection.auth-retries":"-1","connection.autoconnect":"yes","connection.autoconnect-priority":"-999","connection.autoconnect-retries":"-1","connection.autoconnect-slaves":"-1","connection.dns-over-tls":"-1","connection.gateway-ping-timeout":"0","connection.id":"Wired connection 1","connection.interface-name":"eth0","connection.lldp":"default","connection.llmnr":"-1","connection.master":"","connection.mdns":"-1","connection.metered":"unknown","connection.mptcp-flags":"0x0","connection.multi-connect":"0","connection.permissions":"","connection.read-only":"no","connection.secondaries":"","connection.slave-type":"","connection.stable-id":"","connection.timestamp":"1703208824","connection.type":"802-3-ethernet","connection.uuid":"18d241f1-946c-3325-974f-65cda3e6eea5","connection.wait-activation-delay":"-1","connection.wait-device-timeout":"-1","connection.zone":"","ipv4.addresses":"198.51.100.123/16","ipv4.auto-route-ext-gw":"-1","ipv4.dad-timeout":"-1","ipv4.dhcp-client-id":"","ipv4.dhcp-fqdn":"","ipv4.dhcp-hostname":"","ipv4.dhcp-hostname-flags":"0x0","ipv4.dhcp-iaid":"","ipv4.dhcp-reject-servers":"","ipv4.dhcp-send-hostname":"yes","ipv4.dhcp-timeout":"0","ipv4.dhcp-vendor-class-identifier":"","ipv4.dns":"192.0.2.1,192.0.2.2","ipv4.dns-options":"","ipv4.dns-priority":"0","ipv4.dns-search":"","ipv4.gateway":"198.51.100.1","ipv4.ignore-auto-dns":"no","ipv4.ignore-auto-routes":"no","ipv4.link-local":"0","ipv4.may-fail":"yes","ipv4.method":"manual","ipv4.never-default":"no","ipv4.replace-local-rule":"-1","ipv4.required-timeout":"-1","ipv4.route-metric":"-1","ipv4.route-table":"0","ipv4.routes":"","ipv4.routing-rules":"","ipv6.addr-gen-mode":"eui64","ipv6.addresses":"","ipv6.auto-route-ext-gw":"-1","ipv6.dhcp-duid":"","ipv6.dhcp-hostname":"","ipv6.dhcp-hostname-flags":"0x0","ipv6.dhcp-iaid":"","ipv6.dhcp-send-hostname":"yes","ipv6.dhcp-timeout":"0","ipv6.dns":"","ipv6.dns-options":"","ipv6.dns-priority":"0","ipv6.dns-search":"","ipv6.gateway":"","ipv6.ignore-auto-dns":"no","ipv6.ignore-auto-routes":"no","ipv6.ip6-privacy":"-1","ipv6.may-fail":"yes","ipv6.method":"auto","ipv6.mtu":"auto","ipv6.never-default":"no","ipv6.ra-timeout":"0","ipv6.replace-local-rule":"-1","ipv6.required-timeout":"-1","ipv6.route-metric":"-1","ipv6.route-table":"0","ipv6.routes":"","ipv6.routing-rules":"","ipv6.token":"","proxy.browser-only":"no","proxy.method":"none","proxy.pac-script":"","proxy.pac-url":""}}
http code: 200
ネットワーク設定の変更
PATCH "/api/connections/{connection}"
必要権限: NetworkAdmin
パラメータ: Network Manager で編集可能な値
出力: 無し
[ATDE ~]$ curl_rest -X PATCH -d ipv4.method=manual -d ipv4.addresses=198.51.100.123/16 https://armadillo.local:58080/api/connections/Wired%20connection%201
http code: 200
ネットワークの接続
POST "/api/connections/{connection}/up"
必要権限: NetworkAdmin
パラメータ: 無し
出力: 無し
[ATDE ~]$ curl_rest -X POST https://armadillo.local:58080/api/connections/Wired%20connection%201/up
http code: 200
ネットワークの切断
POST "/api/connections/{connection}/down"
必要権限: NetworkAdmin
パラメータ: 無し
出力: 無し
[ATDE ~]$ curl_rest -X POST https://armadillo.local:58080/api/connections/Wired%20connection%201/down
http code: 200 | |
---|
「LTE再接続サービス」が動作している状態で LTE を切断した場合、LTE 再接続サービスにより再度接続を試み、接続可能であれば接続状態へ戻ります。 |
ネットワーク設定の削除
DELETE "/api/connections/{connection}"
必要権限: NetworkAdmin
パラメータ: 無し
出力: 無し
[ATDE ~]$ curl_rest -X DELETE https://armadillo.local:58080/api/connections/178b8c95-fcad-4bb1-8040-5a02b9ad046f
http code: 200 | |
---|
通信に使用しているネットワークの設定を削除した場合は Armadillo へアクセスできなくなりますので、ご注意ください。 |
6.11.6.8. Rest API : WLAN
無線ネットワークのリスト取得
GET "/api/wlan/scan"
必要制限: NetworkView
パラメータ: (任意)rescan=true/false, false を指定するとキャッシュされているスキャン結果を出力します。
出力: リスト
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/wlan/scan
[{"id":"my_ap","signal":74,"bssid":"04:42:1A:E4:78:0C","chan":44,"rate":"540 Mbit/s","security":"WPA2 WPA3"},{"id":"other_ap","signal":65,"bssid":"AC:44:F2:56:22:38","chan":1,"rate":"130 Mbit/s","security":"WPA2"}]
http code: 200
*無線ネットワークの接続
POST "/api/wlan/connect"
必要制限: NetworkAdmin
パラメータ: ssid, passphrase, ifname, bssid, hidden. ssid 以外は任意です。
出力: 生成した接続の uuid
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/wlan/connect -d ssid=my_ap -d passphrase=my_passphrase
{"uuid":"178b8c95-fcad-4bb1-8040-5a02b9ad046f"}
http code: 200
無線ネットワーク アクセスポイントの設定
POST "/api/wlan/ap"
必要制限: NetworkAdmin
パラメータ: ssid, passphrase, bridge_addr, hw_mode/channel, interface.
interface は任意です。hw_mode:2.4GHz を使用する場合は "g"、5GHz を使用する場合は "a" を設定します。
channel: 2.4GHz の場合は 1 〜 13、5GHz の場合は 36、40、44、48 を設定します。
hw_mode/channnel を設定しない場合は自動的に選択されますが、両方を未設定にすることはできません。
出力: 無し
[ATDE ~]$ curl_rest -d ssid=my_ap -d passphrase=my_passphrase -d bridge_addr=198.51.100.1/24 -d channel=3 https://armadillo.local:58080/api/wlan/ap
http code: 200 | |
---|
アクセスポイントを設定するとクライアントの接続が無効になります。 |
| |
---|
クライアントの接続の削除は DELETE "/api/connections/\{connection}" で行えます。 |
無線ネットワーク アクセスポイントの削除
DELETE "/api/wlan/ap"
必要制限: NetworkAdmin
パラメータ: interface (任意)
出力: 無し
[ATDE ~]$ curl_rest -X DELETE https://armadillo.local:58080/api/wlan/ap
http code: 200
6.11.6.9. Rest API : WWAN の設定
WWAN の設定追加
POST "/api/wwan"
必要制限: NetworkAdmin
パラメータ: apn, user, password, auth_type (CHAP/PAP, デフォルト CHAP), mccmnc, ipv6 (bool、デフォルト true)
apn 以外は任意です。
出力: 追加された接続の uuid
[ATDE ~]$ curl_rest -d apn=provider.tld -d user=provider -d password=provider https://armadillo.local:58080/api/wwan
{"uuid":"ce603d3e-838b-4ac8-b7fd-6a3f1abe4003"}
http code: 200
WWAN の設定削除
DELETE "/api/wwan"
必要制限: NetworkAdmin
パラメータ: 無し
出力: 無し
[ATDE ~]$ curl_rest -X DELETE https://armadillo.local:58080/api/wwan
http code: 200
6.11.6.10. Rest API : DHCP の設定
DHCP の設定確認
GET "/api/dhcp"
必要制限: NetworkView
パラメータ: 無し
出力: interface , ip_addr , start_addr , end_addr , lease_time のリスト
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/dhcp
[{"interface":"br_ap","ip_addr":"198.51.100.1/24","start_addr":"198.51.100.10","end_addr":"198.51.100.20","lease_time":"3600"}]
http code: 200
DHCP の設定
POST "/api/dhcp/{interface}"
必要制限: NetworkAdmin
パラメータ: start_addr , end_addr , lease_time
lease_time を設定しなかった場合は 3600 (秒)とする
出力: 無し
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/dhcp/br_ap -d start_addr=198.51.100.10 -d end_addr=198.51.100.20
http code: 200
DHCP の設定削除
DELETE "/api/dhcp/{interface}"
必要制限: NetworkAdmin
パラメータ: 無し
出力: 無し
[ATDE ~]$ curl_rest -X DELETE https://armadillo.local:58080/api/dhcp/br_ap
http code: 200
6.11.6.11. Rest API : NAT の設定
NAT (masquerade) の設定確認
GET "/api/nat"
必要制限: NetworkView
パラメータ: 無し
出力: NAT されている interface のリスト
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/nat
[{"interface":"eth0"}]
http code: 200
NAT の設定
POST "/api/nat/{interface}"
必要制限: NetworkAdmin
パラメータ: 無し
出力: 無し
[ATDE ~]$ curl_rest -X POST https://armadillo.local:58080/api/nat/eth0
http code: 200
NAT の削除
DELETE "/api/nat/{interface}"
必要制限: NetworkAdmin
パラメータ: 無し
出力: 無し
[ATDE ~]$ curl_rest -X DELETE https://armadillo.local:58080/api/nat/eth0
http code: 200
ポートフォワードの設定確認
GET "/api/port_forwarding"
必要制限: NetworkView
パラメータ: 無し
出力: フォワードされてるポート
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/port_forwarding
[{"interface":"eth0","protocol":"tcp","dport":"22","destination":"127.0.0.1","destination_port":"2222"}]
http code: 200
ポートフォワードの設定
POST "/api/port_forwarding"
必要制限: NetworkAdmin
パラメータ: interface, protocol (デフォルト tcp), dport, destination, destination_port
出力: 無し
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/port_forwarding -d interface=eth0 -d dport=22 -d de
stination=127.0.0.1 -d destination_port=2222
http code: 200
ポートフォワードの削除
DELETE "/api/port_forwarding"
必要制限: NetworkAdmin
パラメータ: interface, protocol (デフォルト tcp), dport, destination, destination_port
出力: 無し
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/port_forwarding -X DELETE -H "Content-Type: application/json" -d '{"interface":"eth0","protocol":"tcp","dport":"22","destination":"127.0.0.1","destination_port":"2222"}'
http code: 200
6.11.6.12. Rest API : 時刻の設定-
時刻の状況確認
GET "/api/time/ntp_info"
必要権限: TimeView
パラメータ: 無し
出力: time_now : epoch 形式の現在時刻、ntp_server_ip : 現在同期中のサーバーアドレス。同期されていない場合は「null」となります。
ntp_server_offset : 現在同期中のサーバーとの時刻の遅れ(マイナスの場合は Armadillo がサーバーより早いです)
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/time/ntp_info
{"ntp_server_ip":"203.0.113.10","ntp_server_offset":"-0.000015824","time_now":1710139558}
http code: 200 -
NTP の設定確認
GET "/api/time/ntp_config"
必要権限: TimeView
パラメータ: 無し
出力: servers : 同期する対象、initstepslew : Armadillo 起動時に同期するかどうかの設定
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/time/ntp_config
{"servers":["pool pool.ntp.org iburst"],"initstepslew":"10 pool.ntp.org"}
http code: 200 -
NTP の設定
POST "/api/time/ntp_config"
必要権限: TimeAdmin
パラメータ: servers : 同期する対象、initstepslew : Armadillo 起動時に同期するかどうかの設定。パラメータを送信しない場合は設定されません。
値が空の場合は設定が削除されて、「 default 」の場合は Armadillo Base OS のデフォルトに戻ります。
出力: 取得時と同じ
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/time/ntp_config -X POST -d "servers=server 203.0.113.10 iburst" -d "servers=server 203.0.113.11 iburst" -d "initstepslew="
{"servers":["server 203.0.113.10 iburst","server 203.0.113.11 iburst"],"initstepslew":null}
http code: 200
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/time/ntp_config -X POST -d "servers=default&initstepslew=default"
{"servers":["pool pool.ntp.org iburst"],"initstepslew":"10 pool.ntp.org"}
http code: 200 -
タイムゾーンの確認
GET "/api/time/timezone"
必要権限: TimeView
パラメータ: 無し
出力: timezone : 使用されているタイムゾーン
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/time/timezone
{"timezone":"Asia/Tokyo"}
http code: 200 -
タイムゾーンの設定
POST "/api/time/timezone"
必要権限: TimeAdmin
パラメータ: timezone : 設定するタイムゾーン
出力: 無し
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/time/timezone -X POST -d "timezone=Asia/Tokyo"
http code: 200 -
時刻を強制的に設定する
POST "/api/time/set"
必要権限: TimeAdmin
パラメータ: timestamp : epoch 形式の時刻
出力: 無し
[ATDE ~]$ curl_rest https://armadillo.local:58080/api/time/set -X POST -d "timestamp=$(date +%s)"
http code: 200 6.11.6.13. Rest API : 電源制御
再起動
POST "/api/reboot"
必要権限: Reboot
パラメータ: 無し
出力: 無し
[ATDE ~]$ curl_rest -X POST https://armadillo.local:58080/api/reboot
http code: 200
停止
POST "/api/poweroff"
必要権限: Poweroff
パラメータ: 無し
出力: 無し
[ATDE ~]$ curl_rest -X POST https://armadillo.local:58080/api/poweroff
http code: 200
6.11.6.14. Rest API : ABOS Web 制御
リスタート
POST "/api/abosweb/restart"
必要権限: AbosWebRestart
パラメータ: 無し
出力: コネクションリセット。ABOS Web はリスタートする前に一度終了するためコネクションリセットが発生します。
[ATDE ~]$ curl_rest -X POST https://armadillo.local:58080/api/abosweb/restart
http code: 000
curl: (52) Empty reply from server
6.11.6.15. Rest API : カスタムスクリプトの実行ユーザが Armadillo に追加したスクリプトを Rest API を使用して実行することができます。
実行したいスクリプトに実行権限を付与し、Armadillo の /etc/atmark/abos_web/customize_rest ディレクトリ下に置いてください。 実行に root 権限が必要なスクリプトの場合は、 以下のように /etc/doas.d/abos_web_customize.conf にスクリプトを追加してください。 [armadillo ~]# cat /etc/doas.d/abos_web_customize.conf
permit nopass abos-web-admin as root cmd /etc/atmark/abos_web/customize_rest/root_command.sh
任意のスクリプト実行
POST "/api/custom/{script}"
必要制限: Custom
パラメータ: args でスクリプトの引数を順番に指定できます。
root を true に設定すると root 権限でスクリプトを実行します。
出力: /etc/atmark/abos_web/customize_rest/{script} {args} {args...} を実行して、
そのスクリプトの出力を stdout/stderr で返します。スクリプトが終了した際の出力ステータスは exit_code または exit_signal (どちらも int) です。
[armadillo ~]# cat /etc/atmark/abos_web/customize_rest/print_args.sh
#!/bin/sh
printf "arg: %s\n" "$@"
[ATDE ~]$ curl_rest -X POST https://armadillo.local:58080/api/custom/print_args.sh \
-H 'Content-type: application/json' -d '{"args": ["param", "second arg"]}'
{"stdout":"arg: param\n"}
{"stdout":"arg: second arg\n"}
{"exit_code":0}
| |
---|
標準の ABOS Web には最小限の権限しか与えていません。
root 権限でスクリプトを実行する場合、 Armadillo の故障やセキュリティにも関わりますので、十分注意して追加してください。 |
6.12. ABOSDE から ABOS Web の機能を使用するABOSDE は以下に示す ABOS Web の情報取得や動作を行うことができます。 -
Armadillo の SWU バージョンを取得する
-
Armadillo のコンテナの情報を取得する
-
Armadillo のコンテナを起動・停止する
-
Armadillo のコンテナのログを取得する
-
Armadillo に SWU をインストールする
ABOSDE は ABOS Web の Rest API を用いて通信を行っていますので、ABOS Web にパスワードでログインができる状態である必要があります。
ABOS Web へのログインを行っていない場合は「ABOS Web とは」を参考にしてください。 ABOSDE から ABOS Web の機能を使用するには通信を行う対象の Armadillo を選択する必要があります。
図6.100「ABOSDE で ローカルネットワーク上の Armadillo をスキャンする」 の赤枠で囲まれているボタンをクリックすることで、ローカルネットワーク上で ABOS Web が動作している Armadillo をスキャンすることができます。
ただし、ATDE のネットワークを NAT に設定している場合は Armadillo がリストに表示されません。 ABOSDE から ABOS Web に初めて通信を行う時、ABOS Web は通信に使用するためのトークンを発行します。
そのため、ABOSDE では 図6.101「ABOSDE の ABOS Web パスワード入力画面」 のように ABOS Web のパスワードを求められますので、設定したパスワードを入力してください。 6.12.2. Armadillo のコンテナの情報を取得するローカルネットワーク上の Armadillo をスキャンした後に、
図6.103「ABOSDE で Armadillo のコンテナ情報を取得」 の赤枠で囲まれているボタンをクリックすることで、選択した Armadillo のコンテナの情報を取得できます。
表示されるコンテナの情報は以下の通りとなります。 -
state : コンテナが起動中の場合は running、コンテナが停止中の場合は exited
-
image : コンテナのイメージ名
-
command : コンテナ起動時に実行しているコマンド
6.12.5. Armadillo に SWU をインストールするローカルネットワーク上の Armadillo をスキャンした後に、
図6.107「ABOSDE で Armadillo に SWU をインストール」 の赤枠で囲まれているボタンをクリックすることで、選択した Armadillo に SWU をインストールすることができます。
SWU インストールのログは VSCode 画面下部の OUTPUT に表示されます。 6.13. ssh 経由で Armadillo Base OS にアクセスするArmadillo-IoT ゲートウェイ A6E にはopensshがインストールされていますが、デフォルトではSSHサーバーが起動していません。 SSHサーバーを自動的に起動するようにするためには、以下のコマンドを実行してください。 [armadillo:~]# rc-update add sshd
* service sshd added to runlevel default
[armadillo ~]# persist_file /etc/runlevels/default/sshd
[ 2819.277066] EXT4-fs (mmcblk0p1): re-mounted. Opts: (null)
[armadillo ~]# reboot 上記の例では、再起動後も設定が反映されるように、 persist_file コマンドでeMMCに設定を保存しています。 6.14. コマンドラインからネットワーク設定を行うここでは、コマンドラインによるネットワークの設定方法について説明します。 表6.21 ネットワークとネットワークデバイス ネットワーク | 搭載モデル | ネットワークデバイス | 出荷時の設定 |
---|
Ethernet | 全モデル | eth0
| DHCP | LTE | Cat.1 | usb0
| SIM / 料金プランに依存します | Cat.M1 | ppp0
| 無線LAN | Cat.1[], WLAN | wlan0
| クライアントモード |
Armadillo-IoT ゲートウェイ A6E では、通常の Linux システムと同様、ネットワークインターフェースの設定は NetworkManager を使用します。
NetworkManager はすべてのネットワーク設定をコネクションとして管理します。コネクションには「どのようにネットワークへ接続するか」、
「どのようにネットワークを作成するか」を記述し、 /etc/NetworkManager/system-connections/ に保存します。
また、1つのデバイスに対して複数のコネクションを保存することは可能ですが、1つのデバイスに対して有効化にできるコネクションは1つだけです。 NetworkManager は、従来の /etc/network/interfaces を使った設定方法もサポートしていますが、本書では nmcli を用いた方法を中心に紹介します。 nmcli は NetworkManager を操作するためのコマンドラインツールです。
図6.108「nmcli のコマンド書式」に nmcli の書式を示します。このことから、 nmcli は「オブジェクト (OBJECT) というものが存在し、
それぞれのオブジェクトに対してコマンド (COMMAND) を実行する。」という書式でコマンドを入力することがわかります。
また、オブジェクトそれぞれに help が用意されていることもここから読み取れます。
ここでは nmcli の、基本的な使い方を説明します。 登録されているコネクションの一覧表示するには、図6.109「コネクションの一覧表示」に示すコマンドを実行します。
[] 表示された NAME については、以降 [ID] として利用することができます。 コネクションを作成するには、図6.112「コネクションの作成」に示すコマンドを実行します。 [ID] にはコネクションの名前(任意)、[type] には ethernet、wifi といった接続タイプ、
[interfacename] にはインターフェース名(デバイス)を入力します。
これにより /etc/NetworkManager/system-connections/ に[ID]の名前でコネクション
ファイルが作成されます。このファイルを vi などで編集し、コネクションを修正する
ことも可能です。 Armadillo-IoT ゲートウェイ A6E を再起動したときにコネクションファイルが消えてしまわないように、
persist_file コマンドで永続化する必要があります。
persist_file コマンドに関する詳細は 「persist_file について」 を参照してください。 | |
---|
別の Armadillo-IoT ゲートウェイ A6E からコネクションファイルをコピーした場合は、コネクションファイルの
パーミッションを 600 に設定してください。
600 に設定後、 nmcli c reload コマンドでコネクションファイルを再読込します。 [armadillo ~]# chmod 600 /etc/NetworkManager/system-connections/<コネクションファイル名>
[armadillo ~]# persist_file /etc/NetworkManager/system-connections/<コネクションファイル名>
[armadillo ~]# nmcli c reload swu イメージを使用してコネクションファイルのアップデートを行う場合は、
swu イメージに含めるコネクションファイルのパーミッションを 600 に設定してから、
swu イメージを作成してください。
アップデート実行時には swu イメージ作成時のパーミッションが維持されるため、
上記のコマンド実行手順は不要です。
swu イメージに関しては 「SWU イメージのインストール」 を参考にしてください。 |
コネクションを削除するには、図6.114「コネクションの削除」に示すコマンドを実行します。 これにより /etc/NetworkManager/system-connections/ のコネクションファイルも同時に削除されます。
コネクションの作成と同様に persist_file コマンドで永続化する必要があります。 DHCP に設定する例を、図6.117「DHCP の設定」に示します。 | |
---|
-ipv4.addresses のように、プロパティ名の先頭に "-" を付けることで設
定したプロパティを削除することができます。反対に "+" を付けることで
プロパティを追加することができます。
|
有効化されているコネクションを修正した場合、かならず修正したコネクションを再度有効化してください。 デバイスを接続するには、図6.121「デバイスの接続」に示すコマンドを実行します。 | |
---|
デバイスを接続するには、接続しようとしているデバイスの有効なコネクションが必要です。
"Error: neither a valid connection nor device given" というメッセージが表示された場合には、
nmcli connection などで有効なコネクションが存在するかを確認してください。 |
有線 LAN で正常に通信が可能かを確認します。設定を変更した場合、必ず変更したインターフェースを再度有効化してください。 同じネットワーク内にある通信機器と PING 通信を行います。以下の例では、通信機器が「192.0.2.20」という IP アドレスを持っていると想定しています。 | |
---|
有線 LAN 以外のインターフェースが有効化されている場合、ルーティングの設定などにより、ネットワーク通信に有線 LAN が使用されない場合があります。
確実に有線 LAN の接続確認をするために、有線 LAN 以外のインターフェースを無効化してください。 |
6.14.5. LTE (Cat.1/Cat.M1 モデル)本章では、Armadillo-IoT ゲートウェイ A6E に搭載されている LTEモジュールの使用方法について説明します。 | |
---|
Armadillo-IoT ゲートウェイ A6E Cat.1 モデルに搭載しております Telit 製 LTE 通信モジュール ELS31-J は、ドコモの相互接続性試験を完了しています。 |
| |
---|
Armadillo-IoT ゲートウェイ A6E Cat.M1 モデルに搭載しております Telit 製 LTE 通信モジュール EMS31-J は、ドコモ/KDDI/ソフトバンクそれぞれの相互接続性試験を完了しています。 |
6.14.5.1. LTE データ通信設定を行う前にLTEデータ通信を利用するには、通信事業者との契約が必要です。契約時に通信事業者から貸与されたnanoSIM(UIMカード)とAPN情報を準備します。 | |
---|
Armadillo-IoT ゲートウェイ A6E Cat.1 及び Cat.M1 モデルでの動作検証済み nanoSIM (料金プラン)に関しては、 Armadillo サイトの「Armadillo-IoTゲートウェイ 動作確認済みSIM一覧」を確認ください。 Armadillo-IoTゲートウェイ 動作確認済みSIM一覧 |
| |
---|
Armadillo-IoT ゲートウェイ A6E の電源が切断されていることを確認してから nanoSIM(UIMカード)を取り付けてください。 |
| |
---|
本製品は、nanoSIMスロットを搭載しています。 標準/microSIMサイズのSIMカードをnanoSIMサイズにカットしたもの、サイズの異なるものを使用すると、nanoSIMスロットが故障する原因となります。
これらを使用し本製品が故障した場合は、保証期間内であっても保証適用外となります。 |
nanoSIM(UIMカード)の切り欠きを挿入方向に向け、刻印面を上にして挿入してください。挿入位置などは、図3.14「Armadillo-IoT ゲートウェイ A6Eの接続例」 を参照してください。 APNの設定を行うには、表6.23「APN 設定情報」に示す情報が必要です。モデル毎の文字長を超える設定はできませんので、SIM の料金プランを選択する際にはご注意ください。特に Cat.1 モデル (ELS31-J) の最大パスワード文字数が短いのでご注意ください。 表6.23 APN 設定情報 項目 | Cat.1 モデル (ELS31-J) | Cat.M1 モデル (EMS31-J) |
---|
APN | 最大 99 文字 | 最大 99 文字 | ユーザー名 | 最大 30 文字 | 最大 64 文字 | パスワード | 最大 20 文字 | 最大 64 文字 | 認証方式 | PAP または CHAP | PDP Type | IP のみをサポート |
6.14.5.2. Cat.1 モデルの LTE ネットワーク構成について (Cat.1 モデル)Cat.1 モデル搭載の LTE モデム ELS31-J は、USB インターフェースで Armadillo のプロセッサと接続しています。USB インターフェースは USB CDC ACM、USB CDC Ethernet として動作します。 この USB CDC Ethernet によって LTE モジュールと Armadillo Base OS の間で LAN を構成します。 それぞれの IP アドレスの割り当てを、図6.124「Cat.1 モデル (ELS31-J) LTE ネットワーク構成」 に示します。Armadillo Base OS 側の IP アドレスを 24 ビットマスクのアドレス空間で示しているのは、 LTE モジュール内部で動作している DHCP サーバーがIPアドレスを提供するためです。 6.14.5.4. LTE モデム EMS31-J 省電力などの設定 (Cat.M1 モデル)Cat.M1 モデル搭載の LTE モデム EMS31-J 起動時に設定する内容を、設定ファイル(/etc/atmark/ems31-boot.conf)に記載します。 設定ファイルの記載例として、サンプルファイル(/etc/atmark/ems31-boot.conf.example)がありますので、こちらをリネームまたはコピーしてご利用ください。 /etc/atmark/ems31-boot.conf に設定できる内容を表6.24「ems31-boot.conf の設定内容」に示します。 ems31-boot.conf のフォーマットは以下の通りです。 -
パラメータは、「パラメータ名=値」のフォーマットで記載してください。
-
fix_profile の値のみダブルクォテーションで囲む必要があります。
-
行頭に # が存在する場合、その行を無視します。
-
パラメーターが存在しない場合、その項目に関して何も設定をしません。
表6.24 ems31-boot.conf の設定内容 パラメーター名 | 初期値 | 設定可能値 | 説明 |
---|
fix_profile | "auto" | "docomojp","sbmjp","kddijp" | 接続プロファイルの指定
"auto" で接続できないときに、設定を変更すると接続できることがあります。 | suspend | disable | enable または disable | サスペンドの有効無効 | psm | 3m,1m | disable または tau,act-time | Power Save Mode の設定 | edrx | 20.48,5.12 | disable または pcl,ptw | eDRX の設定 |
PSM (Power Save Mode) の設定値を表6.25「psm の tau と act-time に設定可能な値」に示します。disable にしない場合、tau (Periodic TAU cycle (T3412)) は act_time (Active time (T3324)) より大きい値にする必要があります。 表6.25 psm の tau と act-time に設定可能な値 パラメーター名 | 設定可能値 |
---|
tau (s=秒,m=分,h=時間) | 2s,4s,6s…62s,90s,120s,150s…930s,1m,2m,3m…31m,40m,50m,60m…310m, 1h,2h,3h…31h,40h,50h,60h…310h | act-time (s=秒,m=分,h=時間) | 2s,4s,6s…62s,1m,2m,3m…31m,36m,42m,48m…186m |
eDRX (extended Discontinuous Reception) の設定値を表6.26「edrx の pcl と ptw に設定可能な値」に示します。disable にしない場合、pcl (Paging Cycle Length) は ptw (Paging Time Window eDRX) より大きい値にする必要があります。 表6.26 edrx の pcl と ptw に設定可能な値 パラメーター名 | 設定可能値 |
---|
pcl (秒) | 5.12, 10.24, 20.48, 40.96, 61.44, 81.92, 102.4, 122.88, 143.36, 163.84, 327.68, 655.36, 1310.72, 2621.44 | ptw (秒) | 1.28, 2.56, 5.12, 6.40, 7.68, 8.96, 10.24, 11.52, 12.80, 14.08, 15.36, 16.64, 17.92, 19.20, 20.48 |
6.14.5.5. LTEのコネクションを作成する表6.27「APN情報設定例」の内容に設定する例を図6.130「LTEのコネクションの作成」に示します。 表6.27 APN情報設定例 項目 | 設定 |
---|
APN | [apn] | ユーザー名 | [user] | パスワード | [password] | ネットワークデバイス | [wwan] |
ネットワークデバイス [wwan] は、表6.28「通信モジュールのネットワークデバイス」 を参照ください。 表6.28 通信モジュールのネットワークデバイス 通信モジュール | ネットワークデバイス |
---|
Telit 製 ELS31-J (Cat.1 モデル) | ttyCommModem | Telit 製 EMS31-J (Cat.M1 モデル) |
コネクション設定を永続化するには、以下のコマンドを入力してください。設定を永続化すると、Armadillo 起動時に自動的にデータ接続を行うようになります。 同一インタフェースへの設定が複数存在する場合、 gsm-[wwan]-1.nmconnection など後ろに数値が付与されますので、図6.130「LTEのコネクションの作成」 入力時のメッセージで生成されたファイル名を確認した上で永続化を実施ください。 6.14.5.7. MCC/MNC を指定した LTE のコネクションを作成する (Cat.M1 モデルのみ)マルチキャリア SIM などを使用する際、MCC (Mobile Country Code) と MNC (Mobile Network Code) を指定してコネクションを作成すると LTE ネットワークに接続できることがあります。指定する場合は 図6.133「MCC/MNC を指定した LTE コネクションの作成」 に示すコマンドを実行してください。 [mccmnc] には 44010 などの数字を入力してください。実際に設定する値に関しては、ご契約の通信事業者へお問い合わせください。 Cat.1 モデルに搭載の LTE モデム ELS31-J はドコモ網のみに接続可能ですので、この設定は不要です。 ご利用になるサービスとの通信を検証する、ICMP に対応しているアドレス (8.8.8.8など) と PING 通信を行うなどの方法で LTE の接続を確認してください。 [network device] には、表6.21「ネットワークとネットワークデバイス」を参照し、ご使用の製品モデルで使用しているLTEのネットワークデバイスを指定してください。 6.14.5.11. LTEコネクションを切断するLTEコネクションを切断するには、図6.137「LTEコネクションを切断する」に示すコマンドを実行します。
LTEコネクションを切断する前に、LTE 再接続サービスを停止しないと再接続処理が実行される為、事前に停止します。 |
LTE 再接続サービスを停止します。
| |
LTE コネクションを切断します。
|
LTE 再接続サービスは、LTE のデータ接続の状態を定期的に監視し、切断を検出した場合に再接続を行うサービスです。 Cat.1 モデルは初期状態でこのサービスが有効になっております。 | |
---|
Cat.M1 モデルでは、LTE モデムの省電力動作のため、初期状態では LTE 再接続サービスを無効にしております。有効にする手順は、図6.144「LTE 再接続サービスを有効にする」を参照ください。LTE 再接続サービスを有効にした場合、定期的に ping 導通確認を実施するため、スリープ状態の LTE モデムが都度起床する、サスペンド状態の LTE モデムですと ping 導通が確認できないなど、制約が発生しますので、その辺りを考慮された上でのご利用をお願いします。 |
| |
---|
閉塞 LTE 網を使用する料金プランをご契約で本サービスをご利用になられる際の注意点。 コネクション状態確認時 PING 送付先の初期値は 8.8.8.8 ですが、この IP アドレスに対して ping 導通ができない場合、 ping 導通可能な IP アドレスを指定する必要があります。 |
SIM カードが挿入されており、NetworkManager に有効な LTE コネクションの設定がされているとき、初期設定では 120 秒に一度コネクションの状態を監視します。オプションで SIM カードの認識ができないときに Armadillo の再起動を実施することも可能です。 コネクションが無効になっている場合、切断状態と判定しコネクションを有効にします。 コネクションが有効になっている場合、特定の宛先に PING を実行します。PING がエラーになったとき切断状態と判定し、コネクションの無効化・有効化を行うことで再接続を実施します。 コネクションの無効化・有効化による再接続を実施しても PING がエラーになる場合、電波のオン・オフまたは LTE モジュールの電源をオン・オフを実施して LTE 再接続を試みます。どちらを実施するかは設定ファイルの WWAN_FORCE_RESTART_COUNT に依存します。 WWAN_FORCE_RESTART_COUNT が初期値の 10 である場合、1 から 9 回目は電波のオン・オフを実施し、10 回目はLTE モジュールの電源オン・オフを実施します。それ以降も NG が続く場合、同じく 10 回に一度 LTE モジュールの電源オン・オフを実施します。 LTE モジュールが検出できない状態が 2 回連続で発生した場合、LTE モジュールの再起動を実施します。(Armadillo Base OS 3.18.5-at.7 以降) LTE 接続中状態が 3 回連続で発生した場合、LTE モジュールの再起動を実施します。(Armadillo Base OS 3.19.1-at.2 以降) Cat.1 モデルの場合、工場出荷状態で本サービスは有効化されており、システム起動時にサービスが自動的に開始されます。PING を実行する宛先は、初期設定では "8.8.8.8" です。 atmark-wwan-utils のバージョンが 1.5.0-r0 以降の場合は、設定ファイルは /etc/atmark/connection-recover.conf を使用します。 設定ファイルの記載例として、サンプルファイル(/etc/atmark/connection-recover.conf.example)がありますので、こちらをリネームまたはコピーしてご利用ください。 | |
---|
atmark-wwan-utils 1.5.0-r0 (Armadillo Base OS 3.17.3-at.6) 以降、旧設定ファイル Cat.1 モデル:/etc/atmark/connection-recover/gsm-ttyACM0_connection-recover.conf、Cat.M1 モデル:/etc/atmark/connection-recover/gsm-ttyMux0_connection-recover.conf が存在する場合、/etc/atmark/connection-recover.conf よりも優先して設定ファイルとして使用します。 旧設定ファイルが不要である場合は、図6.138「再接続サービス 旧設定ファイルの削除」に示すとおりに削除してご利用ください。
|
設定ファイルの概要を表6.29「再接続サービス設定パラメーター」に示します。必要に応じて設定値を変更してください。 設定ファイルが存在しない場合は初期値で動作します。 表6.29 再接続サービス設定パラメーター パラメーター名 | 初期値 | 意味 | 変更 |
---|
PRODUCT_NAME | - | 製品名 | 不可 | CHECK_INTERVAL_SEC | 120 | 監視周期(秒) | 可 | PING_DEST_IP | 8.8.8.8 | コネクション状態確認時 PING 送付先 | 可 | DEVICE | - | ネットワークデバイス名 | 不可 | TYPE | - | ネットワークタイプ | 不可 | NETWORK_IF | - | ネットワーク I/F 名 | 不可 | FORCE_REBOOT | FALSE | TRUE に設定すると PING 導通チェックが 4 回連続 NG だった場合、 Armadillo を再起動します。 | 可 | REBOOT_IF_SIM_NOT_FOUND | FALSE | TRUE に設定すると SIM を検出できない状態が 2 回連続で発生した場合、 Armadillo を再起動します。 | 可 | WWAN_FORCE_RESTART_COUNT | 10 | PING 導通確認を設定した回数連続で失敗した場合 LTE モジュールを再起動します。設定した回数に満たない場合 、電波のオフ・オン実施のみで LTE 再接続を試みます。 | 可 |
設定ファイル変更後、変更内容を永続化するには図6.139「LTE 再接続サービスの設定値を永続化する」に示すコマンドを実行してください。 LTE再接続サービスの状態を確認するには、図6.140「LTE 再接続サービスの状態を確認する」に示すコマンドを実行してください。 LTE再接続サービスを停止するには、図6.141「LTE 再接続サービスを停止する」に示すコマンドを実行してください。 LTE再接続サービスを開始するには、図6.142「LTE 再接続サービスを開始する」に示すコマンドを実行してください。 独自に接続状態を確認するサービスを実装されるなどの理由で標準のLTE再接続サービスが不要な場合、図6.143「LTE 再接続サービスを無効にする」に示す手順で再接続サービスを永続的に無効にできます。 |
再接続サービスを停止します。
| |
再接続サービスを無効にします。
| |
サービス設定ファイルの削除を永続化します。
|
LTE再接続サービスを無効化した後、再度有効にする場合、図6.144「LTE 再接続サービスを有効にする」に示す手順を実行してください。 |
再接続サービスを有効にします。
| |
再接続サービスを開始します。
| |
サービス設定ファイルを永続化します。
|
6.14.5.13. ModemManager - mmcli についてここでは ModemManager と mmcli について説明します。 Armadillo-IoT ゲートウェイ A6E にはネットワークを管理する NetworkManager とは別に、モデムを管理する ModemManager がインストールされています。
ModemManager はモバイルブロードバンドデバイス(LTEモジュールなど)の操作および、接続状況の管理などを行います。 ModemManager のコマンドラインツールである mmcli を使用することで、LTE通信の電波強度やSIMカードの情報(電話番号やIMEIなど)を取得することが可能です。mmcli の詳しい使いかたについては man mmcli を参照してください。 ModemManager はモデムデバイスに応じたプラグインを選択して動作します。Cat.M1 モデルでは、cinterion-ems31 という名称のプラグインで動作しています。 6.14.5.15. mmcli - モデムの情報を取得するモデムの情報を取得するには、図6.146「モデムの情報を取得する」に示すコマンドを実行します。 | |
---|
モデムの情報を取得するには、SIM カードが取り付けられている必要があります。正しく SIM カードが取り付けられていることを確認してください。 |
本章では、Armadillo-IoT ゲートウェイ A6E に搭載されている無線LANモジュールの使用方法について説明します。 例として、WPA2-PSK(AES)のアクセスポイントに接続します。WPA2-PSK(AES)以外のアクセスポイントへの接続方法などについては、man nm-settings を参考にしてください。
また、以降の説明では、アクセスポイントのESSIDを[essid]、パスフレーズを[passphrase]と表記します。 6.14.6.1. 無線LANアクセスポイントに接続する無線LANアクセスポイントに接続するためには、次のようにコマンドを実行してコネクションを作成します。 作成されたコネクションの ID は nmcli connection コマンドで確認できます。 | |
---|
NetworkManagerの仕様により、無線LANの接続にはランダムなMACアドレスが使用されます。搭載されている無線LANモジュール固有のMACアドレスを使用したい場合は、以下の例のようにNetworkManagerの設定を変更し、再起動を行ってください。 [armadillo ~]# echo "[device-mac-randomization]" > /etc/NetworkManager/conf.d/no-random-mac.conf
[armadillo ~]# echo "wifi.scan-rand-mac-address=no" >> /etc/NetworkManager/conf.d/no-random-mac.conf
[armadillo ~]# echo "[connection-mac-randomization]" >> /etc/NetworkManager/conf.d/no-random-mac.conf
[armadillo ~]# echo "wifi.cloned-mac-address=permanent" >> /etc/NetworkManager/conf.d/no-random-mac.conf
[armadillo ~]# persist_file /etc/NetworkManager/conf.d/no-random-mac.conf |
無線LANで正常に通信が可能か確認します。 同じネットワーク内にある通信機器とPING通信を行います。以下の例では、通信機器が「192.0.2.20」というIPアドレスを持っていると想定しています。 | |
---|
無線LAN以外のコネクションが有効化されている場合、ネットワーク通信に無線LANが使用されない場合があります。
確実に無線LANの接続確認をする場合は、事前に無線LAN以外のコネクションを無効化してください。 |
6.14.7. 無線 LAN アクセスポイント (AP) として設定するWLAN+BT コンボ搭載モデルの無線 LAN をアクセスポイント (以降 AP) として設定する方法を説明します。AP 設定は hostapd というソフトウェアと、 DNS/DHCP サーバである dnsmasq というソフトウェアを使用します。 hostapd と dnsmasq は Armadillo Base OS にデフォルトでインストール済みとなっているため、インストール作業は不要です。インストールされていない場合は、 Armadillo Base OS を最新バージョンに更新してください。 | |
---|
アクセスポイントモード (AP) と ステーションモード (STA) の同時利用はできません。 |
6.14.7.1. bridge インターフェースを追加するNetworkManager を使用し bridge インターフェース (br0) を追加します。同時に AP の IP アドレスも設定します。ここでは 192.0.2.1 を設定しています。 |
設定ファイルを永続化します。
|
また、NetworkManager のデフォルト状態では定期的に wlan0 のスキャンを行っています。スキャン中は AP の性能が低下するため wlan0 を NetworkManager の管理から外します。 |
nmcli で NetworkManager をリスタートせずに設定します。
|
hostapd の設定ファイルの雛形として用意してある /etc/hostapd/hostapd.conf.example をコピーして使用します。 |
5GHz であれば a を、2.4GHz であれば g を設定します。
| |
使用するチャンネルを設定します。
| |
子機から接続するための任意の SSID を設定します。この例では myap を設定しています。
| |
子機から接続するための任意のパスフレーズを設定します。この例では myap_pass を設定しています。
| |
Armadillo-IoT ゲートウェイ A6E では interface には wlan0 を設定します。
| |
設定ファイルを永続化します。
| |
hostapd を起動します。
| |
Armadillo 起動時に hostapd が自動的に起動されるようにします。
| |
hostapd 自動起動の設定を永続化します。
|
dnsmasq の設定ファイルを以下の内容で作成し /etc/dnsmasq.d/ 下に配置します。ファイル名は任意ですが、拡張子は .conf としてください。ここでは dhcp.conf としています。 |
子機に割り当てる IP アドレスの範囲とリース期間を設定します。
| |
設定ファイルを永続化します。
| |
dnsmasq を再起動します。
|
hostapd と dnsmasq の起動完了後、子機から hostapd.conf で設定した SSID とパスフレーズで接続できます。 6.15. コマンドラインからストレージを使用するここでは、SDHCカードを接続した場合を例にストレージの使用方法を説明します。以降の説明では、共通の操作が可能な場合に、SD/SDHC/SDXCカードをSDカードと表記します。 | |
---|
SDXC/microSDXCカードを使用する場合は、事前に「ストレージのパーティション変更とフォーマット」を参照してフォーマットを行う必要があります。これは、LinuxカーネルがexFATファイルシステムを扱うことができないためです。通常、購入したばかりのSDXC/microSDXCカードはexFATファイルシステムでフォーマットされています。 |
Linuxでは、アクセス可能なファイルやディレクトリは、一つの木構造にまとめられています。あるストレージデバイスのファイルシステムを、この木構造に追加することを、マウントするといいます。マウントを行うコマンドは、 mount です。 mount コマンドの典型的なフォーマットは、次の通りです。
-t オプションに続く fstype には、ファイルシステムタイプを指定します。ファイルシステムタイプの指定は省略可能です。省略した場合、mount コマンドはファイルシステムタイプを推測します。この推測は必ずしも適切なものとは限りませんので、事前にファイルシステムタイプが分かっている場合は明示的に指定してください。FAT32ファイルシステムの場合は vfat 、EXT3ファイルシステムの場合はext3を指定します。
| |
---|
通常、購入したばかりのSDHCカードはFAT32 または exFATファイルシステムでフォーマットされています。 |
device には、ストレージデバイスのデバイスファイル名を指定します。microSDカードのパーティション1の場合は /dev/mmcblk1p1 、パーティション2の場合は /dev/mmcblk1p2 となります。
dir には、ストレージデバイスのファイルシステムをマウントするディレクトリを指定します。
microSDスロット (CON1) にSDHCカードを挿入し、以下に示すコマンドを実行すると、 /media ディレクトリにSDHCカードのファイルシステムをマウントすることができます。microSDカード内のファイルは、/media ディレクトリ以下に見えるようになります。 ストレージを安全に取り外すには、アンマウントという作業が必要です。アンマウントを行うコマンドは、 umount です。オプションとして、アンマウントしたいデバイスがマウントされているディレクトリを指定します。 6.15.1. ストレージのパーティション変更とフォーマット通常、購入したばかりのSDHCカードやUSBメモリは、一つのパーティションを持ち、FAT32ファイルシステムでフォーマットされています。 パーティション構成を変更したい場合、 fdisk コマンドを使用します。 fdisk コマンドの使用例として、一つのパーティションで構成されている microSDカードのパーティションを、2つに分割する例を図6.159「fdiskコマンドによるパーティション変更」に示します。一度、既存のパーティションを削除してから、新たにプライマリパーティションを二つ作成しています。先頭のパーティションには100MByte、二つめのパーティションに残りの容量を割り当てています。先頭のパーティションは /dev/mmcblk1p1 、二つめは /dev/mmcblk1p2 となります。 fdisk コマンドの詳細な使い方は、manページ等を参照してください。 FAT32ファイルシステムでストレージデバイスをフォーマットするには、 mkfs.vfat コマンドを使用します。また、EXT2やEXT3、 EXT4ファイルシステムでフォーマットするには、mkfs.ext2 や mkfs.ext3 、 mkfs.ext4 コマンドを使用します。microSDカードのパーティション1をEXT4ファイルシステムでフォーマットするコマンド例を、次に示します 6.16. コマンドラインから CPU の測定温度を取得するArmadillo-IoT ゲートウェイ A6E の温度センサーは、i.MX6ULL の TEMPMON(Temperature Monitor)を利用しています。 起動直後の設定では、i.MX6ULL の測定温度が 100℃以上になった場合、Linuxカーネルが /sbin/poweroff コマンドを実行し、システムを停止します。 /sys/class/thermal/thermal_zone0/temp ファイルの値を読み出すことによって、i.MX6ULL の測定温度を取得することができます。 |
温度はミリ°C の単位で表示されます。この例では 50.000°C を示しています。
|
6.17. SMS を利用する (Cat.1/Cat.M1 モデル)Armadillo-IoT ゲートウェイ A6E は、LTE モジュール を使用した SMS の送受信を行うことができます。
SMS の送信、受信した SMS の確認および削除などの操作は ModemManager の mmcli コマンドで行うことができます。 本章では mmcli コマンドでの SMS の使用方法について説明します。 | |
---|
「スリープ(SMS 起床可能)モードへの遷移と起床」 の手順でスリープモードへ遷移する際、LTE モジュールのストレージから 1 件 SMS を削除してからスリープモードへ遷移します。 SMS で受信した内容が必要な場合は、 SMS の内容を別なファイルなどに保存してから aiot-sleep-sms を実施してください。 |
SMS が利用可能な SIM を挿入して Armadillo-IoT ゲートウェイ A6E の電源を入れると、 ModemManager が必要な初期設定を行い、 SMS が利用可能になります。 SMS の受信は自動的に行われます。 図6.162「言語設定」に示すコマンドを実行し、言語設定を行います。 SMS を作成するには、図6.163「SMS の作成」に示すコマンドを実行します。 SMSの作成に成功すると、以下のようにSMS番号が表示されます。SMS番号は送信時に使用します。 図6.165「SMS の送信」に示すコマンドを実行し、SMS 送信を行います。 [SMS番号] には、 SMS の作成時に表示された番号を指定します。 SMS を送信可能な端末から Armadillo-IoT ゲートウェイ A6E に SMS を送信すると、 Armadillo-IoT ゲートウェイ A6E は自動的に SMS を受信します。 また、 ELS31-J/EMS31-J の内蔵ストレージに 10 件 SMS を保存した状態で Armadillo-IoT ゲートウェイ A6E に SMS を送信した場合は、Armadillo-IoT ゲートウェイ A6E は受信を行いません。 受信を行うには、 ELS31-J/EMS31-J の内蔵ストレージに保存している SMS を削除するか、他のストレージに移動する必要があります。 図6.166「SMS の一覧表示」のコマンドを実行することで、 SMS 一覧を表示できます。 末尾が "(sent)" となっているものが送信した SMS で "(received)" となっているものが受信した SMS です。 SMS の内容を表示するには、図6.167「SMSの内容を表示」に示すコマンドを実行します。 受信した SMS は自動的に LTE モジュールの内蔵ストレージに保存されます。Armadillo-IoT ゲートウェイ A6E に搭載されている、 ELS31-J/EMS31-J は、最大 10 件まで SMS を保存することが可能です。 SMS の内容を表示した際の「storage: me」は、 LTE モジュールの内蔵ストレージに SMS が保存されていることを意味しています。 「storage: sm」と表示された場合、 SIM カードのストレージに SMS が保存されています。 SIM カードのストレージに保存できる SMS の件数は SIM カードによって異なります。 ストレージに保存されている SMS は、Armadillo-IoT ゲートウェイ A6E の電源を切断してもデータが保持されます。 buttond サービスを使用することで、ボタンやキー入力をトリガーとする処理を簡単に実装できます。
/etc/atmark/buttond.conf に BUTTOND_ARGS を指定することで、動作を指定することができます:
以下にデフォルトを維持したままで SW1 の短押しと長押しのそれぞれの場合にコマンドを実行させる例を示します。 |
buttond の設定ファイルを編集します。この例では、短押しの場合 /tmp/shotpress に、5 秒以上の長押しの場合 /tmp/longpress に日付を出力します。
| |
設定ファイルを保存します。
| |
buttond サービスを再起動させます。ここでは再起動後短押しを 2 回、長押しを 1 回行ったとします。
| |
押された回数を確認します。
|
USB キーボードや他の入力デバイスにも対応できます。
デバイスを接続してから、 buttond でデバイス名とキーコードを確認します。
|
buttond を -vvv で冗長出力にして、すべてのデバイスを指定します。
| |
希望のキーを押すと、LEFTCTRL が三つのパスで認識されました。 一番安定する by-id のパスを控えておきます。
|
USB デバイスを外すこともありますので、-i (inotify) で管理されてる入力デバイスとして追加します。
そうしないとデバイスを外したときにbuttondが停止します。
6.18.3. Armadillo 起動時にのみボタンに反応する方法Armadillo 起動時にのみ、例として SW1 の長押しに反応する方法を紹介します。 /etc/local.d/boot_switch.start に稼働期間を指定した buttond を起動させる設定を記載します。
buttond が起動してから 10秒以内に SW1 を一秒以上長押しすると myapp のコンテナの親プロセスに USR1 信号を送ります(アプリケーション側で信号を受信して、デバッグモードなどに切り替える想定です)。
SW1 が Armadillo 起動前に押された場合は、buttond の起動一秒後に実行されます。 |
SW1 の入力を /dev/input/by-path/platform-gpio-keys-event ファイルの PROG1 として認識できます。
| |
buttond 起動後 10 秒経過すると終了します。
| |
SW1 を一度検知した後すぐに終了します。
| |
サービスとして動作させる必要がないため & を付けてバックグラウンド起動します。
|
6.19. 動作中の Armadillo の温度を測定するこの章では、Armadillo Base OS 搭載製品を組み込んだユーザー製品の熱設計時に役立つ温度プロファイラツールである「atmark-thermal-profiler」について紹介します。 Armadillo は製品ごとに動作温度範囲が設定されていますが、それらはあくまでも標準筐体に放熱材と共に取り付けて使用した場合の目安であり、実運用時には自作の筐体の使用や放熱の有無などで記載のスペック通りにならない場合があります。
また、 Armadillo には CPU または SoC が特定の温度以上になると、自動的にシャットダウンするサーマルシャットダウン機能が搭載されています。
そのため、現実的には Armadillo を組み込んだ製品を運用時と同等の環境で動作させつつ、実際に温度を計測して実運用時の CPU 及び SoC 温度がどの程度まで上がるか、サーマルシャットダウンは起こらないかを確かめる必要があります。 Armadillo Base OS 搭載製品では、動作中の Armadillo の各種温度等を取得しCSV形式で出力する atmark-thermal-profiler を利用することができますので、温度測定に役立てることができます。 6.19.2. atmark-thermal-profiler をインストールするatmark-thermal-profiler は apk パッケージで公開されていますので、apk add コマンドでインストールすることが可能です。 | |
---|
atmark-thermal-profiler はデバッグ(開発)用途で温度情報を収集及び解析するツールです。
atmark-thermal-profiler は、他の apk パッケージと同様に persist_file -a コマンドで永続的にインストールしておくことが可能ですが、
ログの保存のために Armadillo が起動している間 eMMC への書き込みを続けるので、 Armadillo を組み込んだ製品の運用時に動かしたままにしておくことは推奨しません。 atmark-thermal-profiler を永続的にインストールする場合は、運用時には必ず削除してください。 |
6.19.4. atmark-thermal-profiler が出力するログファイルを確認するatmark-thermal-profiler は、インストール直後から自動的に温度やCPU負荷率、Load Averageなどの情報を30秒に1度の周期で集め、/var/log/thermal_profile.csvに追記していきます。 thermal_profile.csv の1行目はヘッダ行です。
各列についての説明を表6.30「thermal_profile.csvの各列の説明」に記載します。 表6.30 thermal_profile.csvの各列の説明 ヘッダ | 説明 |
---|
DATE | その行のデータ取得日時です。 "年-月-日T時:分:秒+タイムゾーン" の形式で出力されます。 | ONESHOT | この列が1の行のデータは、サーマルシャットダウンを含むシャットダウンが実行された時に取得されたことを示します。 | CPU_TEMP | 計測時点の CPU 温度を示します。単位は℃です。 | SOC_TEMP | 計測時点の SoC 温度を示します。単位は℃です。製品よっては非対応で、その場合は空白になります。 | LOAD_AVE | 計測時点から直近1分間のLoad Averageです。 | CPU_1 | 計測時点のCPU使用率1位のプロセスです。 | CPU_2 | 計測時点のCPU使用率2位のプロセスです。 | CPU_3 | 計測時点のCPU使用率3位のプロセスです。 | CPU_4 | 計測時点のCPU使用率4位のプロセスです。 | CPU_5 | 計測時点のCPU使用率5位のプロセスです。 | USE_1 | 計測時点のCPU使用率1位のプロセスのCPU使用率です。 | USE_2 | 計測時点のCPU使用率2位のプロセスのCPU使用率です。 | USE_3 | 計測時点のCPU使用率3位のプロセスのCPU使用率です。 | USE_4 | 計測時点のCPU使用率4位のプロセスのCPU使用率です。 | USE_5 | 計測時点のCPU使用率5位のプロセスのCPU使用率です。 |
atmark-thermal-profiler を使用して得られたログファイルの内容を分析してみます。 6.19.5.1. サーマルシャットダウン温度の確認予め、使用している Armadillo が何℃でサーマルシャットダウンするか確認しておきます。
ここでは、 Armadillo Base OS を搭載している Armadillo-IoT ゲートウェイ G4 を例とします。
他の製品では得られる結果が異なる場合があることに注意してください。 |
CPU のサーマルシャットダウン温度です。ミリ℃で表記されているので、105℃でサーマルシャットダウンすることがわかります。
| |
SoC のサーマルシャットダウン温度です。ミリ℃で表記されているので、105℃でサーマルシャットダウンすることがわかります。
|
atmark-thermal-profiler が出力するログ(thermal_profile.csv)はCSVファイルなので、各種表計算ソフトでインポートしてグラフ化することが可能です。
これにより Armadillo 動作中の温度の変化が可視化され、得られる情報が見やすくなります。 図6.180「Armadillo-IoT ゲートウェイ G4で取得した温度のグラフ」は Armadillo-IoT ゲートウェイ G4上で一定期間 atmark-thermal-profiler を実行して取得した thermal_profile.csv を Google スプレッドシートでグラフ化したものです。
例のために、途中で stress-ng コマンドを実行して CPU に負荷を与えた後、 stress-ng コマンドを停止して CPU と SoC の温度が下がるのを待った際のデータです。 グラフの縦軸は温度(℃)で、横軸は時間です。青い線は CPU の温度、赤い線は SoC の温度を表しています。
このグラフと、「サーマルシャットダウン温度の確認」で得たサーマルシャットダウン温度を見比べると、 CPU に負荷をかけた際であっても SoC の温度は 60℃ 前後ほどまでしか上がらず、 この条件で動く Armadillo が温度的にどれほど余裕を持っているかをひと目で確認できます。 atmark-thermal-profiler は、時間毎の温度だけでなく CPU 使用率と CPU 使用率の高いプロセスについても取得して記録します。
CPU 使用率については thermal_profile.csv の CPU_1〜CPU_5 列と、 USE_1〜USE_5 列を参照してください。
各列について詳しくは表6.30「thermal_profile.csvの各列の説明」にまとまっています。 一般的に CPU 使用率が高くなると、 CPU 周辺の温度も高くなります。
そのため、測定した温度が高い場合は、 CPU 使用率の高いプロセスに注目して、 CPU を無駄に使用している意図しない処理が行なわれていないかなどを確認することをおすすめします。 Armadillo Base OS には、シャットダウン中に電源を切っても安全なタイミングで通知する機能があります。通知は GPIO 出力を用いて行います。どの GPIO 出力ピンを使うのかを Device Tree で設定します。Device Tree で通知用に設定された GPIO 出力ピンの出力レベルを変化させる動作は、シャットダウン中に実行される signal_indicator が行います。通知用に設定した GPIO 出力ピンに割り当てた名前を、signal_indicator の設定ファイルに記述することにより、電源を切っても安全なタイミングで、その GPIO 出力ピンの出力が変化します。 以下、signal_indicator の設定手順と、通知用の Device Tree の設定手順を順に述べます。Device Tree の設定は、DTS overlays を使用して行います。 | |
---|
以下の手順は Armadillo Base OS v3.17.2-at.4 以降に存在します /boot/armadillo-iotg-a6e-stdwn-ind-do1.dtbo または /boot/armadillo-iotg-a6e-stdwn-ind-con8-pin7.dtbo を使用します。v3.17.2-at.4 より前のバージョンをご利用の場合はアップデートしてのご利用をお願いします。 |
6.20.1. signal_indicator の設定signal_indicator を設定するには、/etc/conf.d ディレクトリに indicator_signals という名前で、次の内容のテキストファイルを作成してください。 図6.182「/etc/conf.d/indicator_signals の永続化」 に示すコマンドで /etc/conf.d/indicator_signals の追加を永続化します。 以下の 「CON6(入出力インターフェース)の接点出力 1 を使用する」、「CON8(拡張インターフェース)の7番ピンを使用する」 どちらかの設定を行ってください。これ以外のピンを使用する場合はデバイスツリーを記載してビルドする必要があります。 6.20.2.1. CON6(入出力インターフェース)の接点出力 1 を使用する | |
---|
CON6(入出力インターフェース)の接点出力ピンは、ゲートウェイコンテナアプリケーションも使用しており、接点出力1を本機能に割り当てると、ゲートウェイコンテナアプリケーションでは、そのピンを使用できなくなります。本機能に接点出力1を割り当てる場合は、ゲートウェイコンテナアプリケーションで接点出力1を使わないように設定してください。 接点出力に対するゲートウェイコンテナアプリケーションの設定は、「ゲートウェイコンテナの設定ファイル」 を参照してください。ゲートウェイコンテナアプリケーションで接点出力1を使用する場合、本機能には CON8(拡張インターフェース)のピンを割り当ててください。 |
「DTS overlays によるカスタマイズ」 を参考にして /boot/overlays.txt に armadillo-iotg-a6e-stdwn-ind-do1.dtbo を追加してください。 6.20.2.2. CON8(拡張インターフェース)の7番ピンを使用する「DTS overlays によるカスタマイズ」 を参考にして /boot/overlays.txt に armadillo-iotg-a6e-stdwn-ind-con8-pin7.dtbo を追加してください。 ここまで述べた設定を行うと、シャットダウン動作中に通知が行われるようになります。シャットダウン動作の最後の方で、以下のメッセージを出力するのと同じタイミングで通知を行います。つまり、通知用に割り当てた GPIO 出力ピンの出力レベルが、0/Low から 1/High に変わります。シャットダウンが完了して SoC (CPU) への給電がオフすると、出力レベルが 0/Low に戻ります。出力レベルが 0/Low から 1/High に変化した時点以降であれば、Armadillo-IoT A6E の電源を切っても安全です。 6.21. Armadillo Base OS をアップデートするArmadillo Base OS は SWUpdate によってアップデートすることができます。 アップデートする際には、rootfs ファイルシステムにインストールされたファイルをすべて消して、アップデートの中身と /etc/swupdate_preserve_files に記載されているファイルで新しい rootfs を作ります。「swupdate_preserve_files について」 を参照してください。 アップデートでファイルを削除してしまった場合に abos-ctrl mount-old で前のシステムを read-only でマウントして、
削除されたファイルをコピーすることもできます。 Armadillo Base OS のルートファイルシステムが破損し起動できなくなった場合、自動的に以前のバージョンで再起動します。 abos-ctrl status コマンドでロールバックされてるかどうかを確認できます。
表6.31 rollback-status の出力と意味 出力 | 説明 |
---|
OK
| ロールバックされていません。 | rolled back
| ロールバックされています。 |
表6.32 rollback-status 追加情報の出力と意味 出力 | 説明 |
---|
no fallback (fresh install)
| 初期化状態。 | no fallback
| 何かの理由でB面が起動できない状態になっています(アップデート失敗後等)。 | auto-rollback enabled (post-update)
| アップデート直後でまだ再起動していない状態です。再起動して失敗した場合にロールバックが発生します。 | auto-rollback enabled (cloned)
| abos-ctrl rollback-clone コマンドを実行した後の状態です。同じくロールバック可能です。
| available, no auto-rollback
| アップデートの後に正常に起動できたので、自動ロールバックが無効になっていますが abos-ctrl rollback --allow-downgrade コマンドで手動ロールバック可能です。 |
| |
---|
Armadillo Base OS 3.19.1-at.4 以下のバージョンでは「アップデート直後」の概念がなかったため、ステータスは「no fallback」(B面がない状態)、
「optimal」(ロールバック可能)、と「rolled back」の3択だけでした。 |
必要な場合(例えば、自分のアプリケーションがアップデート直後に問題があった場合)、 abos-ctrl rollback で手動のロールバックも可能です。ロールバックにエラーがなければ、再起動してロールバックを完了します。 なお、/var/at-log/atlog に切り替えの際に必ずログを書きますので、調査の時に使ってください。
以下の例では、Armadillo Base OS を更新した後に起動できないカーネルをインストールして、起動できなかったためにロールバックされました。 6.23. Armadillo 起動時にコンテナの外でスクリプトを実行する起動時に何かスクリプトを走らせるためにはコンテナとして実行することを推奨します。 「コンテナ起動設定ファイルを作成する」 を参照してください。 コンテナで実行不可能な場合に、「local」サービスを使うことができます: /etc/local.d ディレクトリに
.start ファイルを置いておくと起動時に実行されて、 .stop ファイルは終了時に実行されます。 |
スクリプトを作ります。
| |
スクリプトを実行可能にします。
| |
スクリプトを保存して、再起動します。
| |
実行されたことを確認します。
|
u-boot の環境変数を変更するには /boot/uboot_env.d/ ディレクトリに環境変数が書かれた設定ファイルを配置します。 ファイルの構文は fw_setenv が扱うことができるもので、以下のとおりです: -
# で始まる行はコメントと扱われる為、無視されます。また、 環境変数への代入を示す = がない場合も無視されます。
-
[変数]=[値] で変数を設定します。スペースや引用符を含め他の文字は有効ですので、変数の名前と値に不要な文字を入れないように注意してください。
-
[変数]= で変数を消します。値がない場合に変数が消去されます。
このファイルによるアップデート内容は swupdate でアップデートする際に適用されます。 実行中のシステムに影響がありませんので、設定ファイルを swupdate で転送しない場合はファイル永続化後に fw_setenv -s /boot/uboot_env.d/[ファイル名] で変数を書き込んでください。 swupdate でファイルを転送した場合には、変数はすぐに利用されます。 |
コンフィグファイルを生成します。
| |
ファイルを永続化します。
| |
変数を書き込みます。
| |
書き込んだ変数を確認します。
|
| |
---|
mkswu バージョン 4.4 以降が必要です。必要な場合はアップデートしてください。 [ATDE ~]$ sudo apt update && sudo apt upgrade 書き方は、 /usr/share/mkswu/examples/uboot_env.desc を参考にしてください。 |
| |
---|
「ブートローダーをビルドする」 の際に u-boot のデフォルトを変更した場合や、u-boot のプロンプトで「setenv」や「saveenv」を実行しても、 /boot/uboot_env.d/00_defaults によって変更がアップデートの際にリセットされます。 00_defaults のファイルは Base OS の一部で更新されることもありますので、変更を望む場合は別のファイルを作って設定してください。
ファイルはアルファベット順で処理されます。 00_defaults にある変数を後のファイルにも設定した場合はそのファイルの値だけが残ります。
|
主要なu-bootの環境変数を以下に示します。 表6.33 u-bootの主要な環境変数 環境変数 | 説明 | デフォルト値 |
---|
console | コンソールのデバイスノードと、UARTのボーレート等を指定します。 | ttymxc2,115200 | bootcount | 起動回数を示します。初回起動時に1となり、起動に失敗する度にインクリメントされます。ユーザーランドのreset_bootcountサービスが起動されると、この値はクリアされます。この値が"bootlimit"を越えた場合はロールバックします。ロールバックの詳細については、「ロールバック(リカバリー)」を参照してください。 | 1 | bootlimit | "bootcount"のロールバックを行うしきい値を指定します。 | 3 | upgrade_available | 1以上の場合は bootcount を管理してロールバック可能になります。0 か空の場合はロールバックできません。値を abos-ctrl status で確認できます。 | 状況による | bootdelay | 保守モードに遷移するためのキー入力を待つ時間を指定します(単位:秒)。次の値は特別な意味を持ちます。
-
-1: キー入力の有無に関らず保守モードに遷移します。
-
-2: キー入力の有無に関らず保守モードに遷移しません。
-
-3: キー入力の有無に関らず保守モードに遷移しません。ただし、SW1が押下されている場合は保守モードに遷移します。
| 0 | image | Linuxカーネルイメージファイルのパスです。"mmcdev"で指定されたデバイスの、"mmcpart"で指定されたパーティションのルートディレクトリからの相対パスで指定します。 | boot/uImage | fdt_file | DTBファイルのパスです。"mmcdev"で指定されたデバイスの、"mmcpart"で指定されたパーティションのルートディレクトリからの相対パスで指定します。 | boot/armadillo.dtb | overlays_list | DT overlayの設定ファイルのパスです。"mmcdev"で指定されたデバイスの、"mmcpart"で指定されたパーティションのルートディレクトリからの相対パスで指定します。DT overlayの詳細については、「DTS overlays によるカスタマイズ」を参照してください。 | boot/overlays.txt | mmcautodetect | mmcデバイスの自動検出機能の有効/無効を指定します。yesを指定した場合のみ、u-bootが起動されたmmcデバイスが自動的にmmcdevとして利用されます。 | yes | mmcdev | "image"や"fdt_file"で指定されたファイルが配置してあるmmcデバイスのインデックスを指定します。インデックスとmmcデバイスの対応は次の通りです。
-
0: eMMC
-
1: microSD/microSDHC/microSDXC カード
"mmcautodetect"にyesが指定されている場合は、u-bootの起動時に上書きされます。 | 0 | mmcpart | "image"や"fdt_file"で指定されたファイルが配置してある、"mmcdev"で指定されたmmcデバイスのパーティション番号を指定します。"mmcautodetect"にyesが指定されている場合は、u-bootの起動時に上書きされます。 | 1 | mmcroot | ルートファイルシステムが配置されているデバイスノードと、マウントオプションを指定します。"mmcautodetect"にyesが指定されている場合は、u-bootの起動時に上書きされます。overlayfsが正しく機能しなくなる場合があるので、roの指定は変更しないでください。 | /dev/mmcblk0p1 rootwait ro | optargs | Linuxカーネル起動時パラメータを指定します。"quiet"を削除すると、コンソールに起動ログが出力されるようになりますが、起動時間が長くなります。 | quiet | loadaddr | LinuxカーネルがRAMにロードされる物理アドレスを指定します。 | 0x80800000 | fdt_addr | DTBがRAMにロードされる物理アドレスを指定します。 | 0x83500000 | overlay_addr | DT overlayのワーク領域として利用されるRAMの物理アドレスを指定します。 | 0x83520000 |
本章では、microSD カードから直接起動(以降「SDブート」と表記します)する手順を示します。
SD ブートを活用すると、microSD カードを取り替えることでシステムイメージを変更することができます。
本章に示す手順を実行するためには、容量が 8Gbyte 以上の microSD カードを必要とします。 | |
---|
SD ブートを行った場合、ブートローダーの設定は microSDカード に保存されます。 |
| |
---|
WLAN 搭載モデルでは、SD コントローラ(uSDHC2) を WLAN/BT コンボモジュールが使用するため SD ブートができません。 |
[ATDE ~/build-rootfs-[VERSION]]$ sudo ./build_image.sh --board a6e \
--boot ~/u-boot-[VERSION]/u-boot-dtb.imx
: (省略)
[ATDE ~/build-rootfs-[VERSION]]$ ls baseos-6e*img
baseos-6e-[VERSION].img -
ATDE に microSD カードを接続します。詳しくは 「取り外し可能デバイスの使用」 を参考にしてください。
microSD カードのデバイス名を確認します
[ATDE ~]$ ls /dev/sd?
/dev/sda /dev/sdb
[ATDE ~]$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 7.22 GiB, 7751073792 bytes, 15138816 sectors
Disk model: SD/MMC
: (省略)
microSD カードがマウントされている場合、アンマウントします。
ブートディスクイメージの書き込み
[ATDE ~]$ sudo dd if=~/build-rootfs-[VERSION]/baseos-6e-[VERSION].img \
of=/dev/sdb bs=1M oflag=direct status=progress microSDカードの性能にもよりますが、書き込みには5分程度かかります。
| |
---|
microSDカードのパーティション構成は次のようになっています。 表6.34 microSDカードのパーティション構成 パーティション | オフセット | サイズ | 説明 |
---|
- | 0 | 10MiB | ブートローダー | 1 | 10MiB | 300MiB | A/B アップデートのA面パーティション | 2 | 310MiB | 300MiB | A/B アップデートのB面パーティション | 3 | 610MiB | 50MiB | ログ用パーティション | 4 | 660MiB | 200MiB | ファームウェア | 5 | 860MiB | 残り | アプリケーション用パーティション |
gdiskで確認すると次のようになります。 [ATDE ~]$ sudo gdisk -l /dev/sdb
GPT fdisk (gdisk) version 1.0.6
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 60506112 sectors, 28.9 GiB
Model: VMware Virtual I
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 44B816AC-8E38-4B71-8A96-308F503238E3
Partition table holds up to 128 entries
Main partition table begins at sector 20448 and ends at sector 20479
First usable sector is 20480, last usable sector is 60485632
Partitions will be aligned on 2048-sector boundaries
Total free space is 0 sectors (0 bytes)
Number Start (sector) End (sector) Size Code Name
1 20480 634879 300.0 MiB 8300 rootfs_0
2 634880 1249279 300.0 MiB 8300 rootfs_1
3 1249280 1351679 50.0 MiB 8300 logs
4 1351680 1761279 200.0 MiB 8300 firm
5 1761280 60485632 28.0 GiB 8300 app |
「ブートディスクの作成」で作成したブートディスクから起動する方法を説明します。 -
Armadillo-IoT ゲートウェイ A6Eに電源を投入する前に、ブートディスクをCON1(SD インターフェース)に挿入します。
また、SW2 を 起動デバイスは microSD 側設定します。SW2 に関しては、図3.92「スイッチの状態と起動デバイス」 を参照ください。
電源を投入します。
U-Boot 2020.04 (Oct 25 2022 - 10:37:29 +0900)
CPU: i.MX6ULL rev1.1 at 396 MHz
Model: Atmark Techno Armadillo-IoT Gateway A6E Board
DRAM: 512 MiB
PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11
MMC: FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... *** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Saving Environment to MMC... Writing to redundant MMC(1)... OK
switch to partitions #0, OK
mmc1 is current device
flash target is MMC:1
Net:
Warning: ethernet@2188000 using MAC address from ROM
eth0: ethernet@2188000
Fastboot: Normal
Normal Boot
Hit any key to stop autoboot: 0
switch to partitions #0, OK
mmc1 is current device
11660400 bytes read in 524 ms (21.2 MiB/s)
Booting from mmc ...
38603 bytes read in 22 ms (1.7 MiB/s)
Loading fdt boot/armadillo.dtb
## Booting kernel from Legacy Image at 80800000 ...
...中略...
Welcome to Alpine Linux 3.16
Kernel 5.10.149-1-at on an armv7l (/dev/ttymxc2)
armadillo login:
6.25.3. ゲートウェイコンテナのインストール「ブートディスクの作成」で作成したブートディスクには、ゲートウェイコンテナが含まれていません。
必要な場合は、ゲートウェイコンテナの SWU イメージを作成してインストールする必要があります。 -
「SWUイメージの作成」 記載の手順で、最初の書き込み用の SWU イメージ
initial_setup.swu を作成します。
ゲートウェイコンテナの SWU イメージを作成
SWU イメージのインストール
「SWU イメージのインストール」 の手順に従い、最初の書き込み用の SWU イメージと、ゲートウェイコンテナ SWU イメージをインストールします。
なお、必ず最初の書き込み用の SWU イメージを先にインストールするよう注意してください。
6.26. Device Treeをカスタマイズする拡張基板を追加するなど、拡張インターフェース(CON8)のピンを使用する場合、ATDE 上のアプリケーション at-dtweb を利用して Device Tree をカスタイマイズすることが可能です。 at-dtweb は、 Web ブラウザ上のマウス操作で dtbo ファイルおよび desc ファイルを生成することができます。 カスタマイズの対象は拡張インターフェース(CON8)です。 | |
---|
拡張インターフェース(CON8) の 12、13 ピン は I2C4 として予約しています。 |
ATDE9 に at-dtweb パッケージをインストールします。 [ATDE ~]$ sudo apt update
[ATDE ~]$ sudo apt install at-dtweb インストール済みの場合は、以下のコマンドを実行し最新版への更新を行ってください。 [ATDE ~]$ sudo apt update
[ATDE ~]$ sudo apt upgrade
at-dtweb の起動開始
at-dtweb の起動を開始するには、デスクトップ左上のアプリケーションの「システムツール」から「at-dtweb」を選択してください。
コマンドライン上からでも、at-dtweb コマンドで起動できます。 [ATDE ~]$ at-dtweb
ボードの選択
ボードを選択します。Armadillo-IoT_A6E を選択して、「OK」をクリックします。
Linux カーネルディレクトリの選択
Linux カーネルディレクトリを選択します。コンフィギュレーション済みの Linux カーネルディレクトリを選択して、「OK」をクリックします。
at-dtweb の起動完了
at-dtweb が起動し、次のように画面が表示されます。
6.26.3. Device Tree をカスタマイズ機能の選択は、ドラッグ&ドロップで行います。画面左上の「Available features」から有効にしたい機能をドラッグし、画面右側の「Armadillo-IoT Gateway A6E」の白色に変化したピンにドロップします。例として CON8 8/9 ピンを UART1(RXD/TXD) に設定します。 | |
---|
何も機能が選択されていないピンには GPIO の機能が割り当てられます。 |
画面右側の「Armadillo-IoT Gateway A6E」にドロップして設定したピンを左クリックすると信号名が表示されます。
どのピンがどの信号に対応しているのかを確認することができます。 例として UART1(RXD/TXD) の信号名を確認します。 | |
---|
再度ピンを左クリックすると機能名の表示に戻ります。 |
いくつかの機能にプロパティを設定することができます。画面右側の「Armadillo-IoT Gateway A6E」に選択した機能を左クリックすると、画面左下の「Properties」からプロパティを選択することができます。 例としてCON8 29-32 ピンの ECSPI1 の spi-max-frequency プロパティを設定します。 設定したプロパティを確定させるには「Apply」をクリックします。 全ての機能を削除する場合は、画面右上の「Reset configuration」をクリックします。機能ごとに削除する場合は、画面右側の「Armadillo-IoT Gateway A6E」のピンを右クリックして「Remove」をクリックします。 dtbo ファイルおよび desc ファイルを生成するには、画面右上の「Save」をクリックします。 以下の画面ようなメッセージが表示されると、dtbo ファイルおよび desc ファイルの生成は完了です。 ビルドが終了すると、ホームディレクトリ下の mkswu/at-dtweb-Armadillo-IoT_A6E/
ディレクトリに、DTS overlays ファイル(dtboファイル)と desc ファイルが生成されます。
Armadillo-IoT ゲートウェイ A6E 本体に書き込む場合は、mkswu コマンドで desc ファイルから SWU イメージを生成してアップデートしてください。 [ATDE ~]$ ls ~/mkswu/at-dtweb-Armadillo-IoT_A6E/
armadillo-iotg-a6e-at-dtweb.dtbo update_overlays.sh
at-dtweb.desc update_preserve_files.sh
[ATDE ~]$ cd ~/mkswu/at-dtweb-Armadillo-IoT_A6E/
[ATDE ~/mkswu/at-dtweb-Armadillo-IoT_A6E]$ mkswu at-dtweb.desc
Enter pass phrase for /home/atmark/mkswu/swupdate.key:
at-dtweb.swu を作成しました。 |
SWU イメージを生成します。
|
SWU イメージを使ったアップデートの詳細は 「SWU イメージのインストール」 を参照してください。 6.26.4. DTS overlays によるカスタマイズDevice Treeは「DTS overlay」(dtbo) を使用することでも変更できます。 DTS overlay を使用することで、通常の dts の更新が自動的に入りつづける状態で
dts の変更でしかできない設定を行うことができます。 /boot/overlays.txt に fdt_overlays を dtbo 名で設定することで、
u-bootが起動時にその DTS overlay を通常の dtb と結合して起動します。
複数の DTS overlay を使う場合は以下の例のようにスペースで別けたファイル名を記載することができます。 |
at-dtweb で作成した dtbo ファイルを USB メモリや microSD カード等の外部記憶装置を用いて転送し、 /boot/ ディレクトリ下に配置します。
| |
配置した dtbo ファイルを保存します。
| |
/boot/overlays.txt ファイルに「armadillo-iotg-a6e-at-dtweb.dtbo」を追加します。
ファイルが存在しない場合は新規に作成してください。
このファイルの詳細については 「DTS overlays によるカスタマイズ」 を参照してください。
| |
/boot/overlays.txt を保存し、アップデートの場合でも保存します。
| |
overlay の実行のために再起動します。
| |
シリアルコンソールの場合に、u-bootによるメッセージを確認できます。
|
6.26.4.1. 提供している DTS overlay以下の DTS overlay を用意しています: -
armadillo-iotg-a6e-els31.dtbo: LTE Cat.1 モジュール搭載モデルで自動的に使用します。
-
armadillo-iotg-a6e-ems31.dtbo: LTE Cat.M1 モジュール搭載モデルで自動的に使用します。
-
armadillo-iotg-a6e-lwb5plus.dtbo: WLAN+BT コンボモジュール搭載モデルで自動的に使用します。
-
armadillo-iotg-a6e-stdwn-ind-do1.dtbo: /boot/overlays.txt に記載することで使用できます。使用方法は「電源を安全に切るタイミングを通知する」を参照ください。
-
armadillo-iotg-a6e-stdwn-ind-con8-pin7.dtbo: /boot/overlays.txt に記載することで使用できます。使用方法は「電源を安全に切るタイミングを通知する」を参照ください。
6.26.5. 独自の DTS overlay を追加する標準イメージで提供している DTS overlay や at-dtweb で作成できないような DTS overlay が必要となった場合に、独自の DTS overlay を作成し Armadillo へ適用する手順を示します。
「Linux カーネルをビルドする」 を参照の上、最新版カーネルのビルドまで実施してください。
以下、ATDE のホームディレクトリに linux-[VERSION] ディレクトリができている前提で進めます。
カスタマイズ用に用意しています arch/arm/boot/dts/armadillo-600-customize.dts を編集します。
編集したファイルをビルドします。
ビルドしてできた armadillo-600-customize.dtbo を Armadillo の /boot/ に配置します。
配置した dtbo を永続化します。
/boot/overlays.txt に armadillo-600-customize.dtbo を追記し、/boot/overlays.txt を永続化します。
|
Cat.M1 モデルの例です。すでに別の dtbo ファイルが記載されている場合、スペースを挿入して後ろに追加してください。
|
-
Armadillo を再起動し、動作確認をします。
6.27. Armadilloのソフトウェアをビルドするここでは、Armadillo-IoT ゲートウェイ A6E で使用するソフトウェアのビルド方法を説明します。 ここでは、ATDE 上で Armadillo-IoT ゲートウェイ A6E 向けのブートローダーイメージをビルドする方法を説明します。 ここでは、Armadillo-IoT ゲートウェイ A6E 向けのLinuxカーネルイメージをビルドする方法を説明します。 | |
---|
Armadillo-IoT ゲートウェイ A6Eでは、基本的にはLinuxカーネルイメージをビルドする必要はありません。
「Alpine Linux ルートファイルシステムをビルドする」の手順を実施することで、標準のLinuxカーネルイメージがルートファイルシステムに組み込まれます。 標準のLinuxカーネルイメージは、アットマークテクノが提供する linux-at というAlpine Linux用のパッケージに含まれています。 カスタマイズしたLinuxカーネルイメージを利用する場合は、
以下に示す手順を参照してください。 |
ソースコードの取得
Armadillo-IoT ゲートウェイ A6E Linuxカーネル から「Linuxカーネル」ファイル (linux-at-a6-[VERSION].tar) をダウンロードして、図6.213「Linux カーネルソースコードの展開」に示すコマンドを実行して展開します。
デフォルトコンフィギュレーションの適用
図6.214「Linux カーネルデフォルトコンフィギュレーションの適用」に示すコマンドを実行します。
Linux カーネルコンフィギュレーションの変更
コンフィギュレーションの変更を行わない場合はこの手順は不要です。
変更する際は、図6.215「Linux カーネルコンフィギュレーションの変更」に示すコマンドを実行します。
コマンドを実行するとカーネルコンフィギュレーション設定画面が表示されます。
カーネルコンフィギュレーションを変更後、"Exit"を選択して「Do you wish to save your new kernel configuration? (Press <ESC><ESC> to continue kernel configuration.)」で "Yes" を選択し、 カーネルコンフィギュレーションを確定します。
| |
---|
Linux Kernel Configuration メニューで"/"キーを押下すると、カーネルコンフィギュレーションの検索を行うことができます。
カーネルコンフィギュレーションのシンボル名(の一部)を入力して"Ok"を選択すると、部分一致するシンボル名を持つカーネルコンフィギュレーションの情報が一覧されます。 |
ビルド
Linux カーネルをビルドするには、図6.217「Linux カーネルのビルド」に示すコマンドを実行します。
インストール
ビルドしたカーネルは、以下に示すどちらかの方法でインストールしてください。
「SWU イメージのインストール」 でインストールする
mkswu の初期化を行った後に 提供されているスクリプトを使ってSWUイメージを作成してください。
作成された kernel.swu のインストールについては 「SWU イメージのインストール」 を参照ください。
build_rootfs で新しいルートファイルシステムをビルドする
build_rootfs を展開した後に以下のコマンドでインストールしてください。
|
build_rootfs のディレクトリ名を設定します。これによって、長いディレクトリ名を何度も入力する必要が無くなります。
| |
アットマークテクノが提供するカーネルをインストールしない様に、 linux-at-a6@atmark と記載された行を削除します。
| |
別のカーネルをすでにインストールしている場合は、新しいモジュールをインストールする前に古いモジュールを削除する必要があります。
|
6.27.3. Alpine Linux ルートファイルシステムをビルドするここでは、build-rootfs を使って、 Alpine Linux ルートファイルシステムを構築する方法を説明します。 build-rootfs は、ATDE 上で Armadillo-IoT ゲートウェイ A6E 用の Alpine Linux ルートファイルシステムを構築することができるツールです。
ルートファイルシステムのビルドに必要な Podman のインストール
次のコマンドを実行します。 [ATDE ~]$ sudo apt install podman btrfs-progs xxhash
build-rootfs の入手
Armadillo-IoT ゲートウェイ A6E 開発用ツール から 「Alpine Linuxルートファイルシステムビルドツール」 ファイル (build-rootfs-[VERSION].tar.gz) を次のようにダウンロードします。 [ATDE ~/]$ wget https://download.atmark-techno.com/armadillo-iot-a6e/tool/build-rootfs-latest.tar.gz
[ATDE ~/]$ tar xf build-rootfs-latest.tar.gz
[ATDE ~/]$ cd build-rootfs-[VERSION]
Alpine Linux ルートファイルシステムの変更
a6eディレクトリ以下のファイルを変更することで、
ルートファイルシステムをカスタマイズすることができます。 | |
---|
commonとa6e ディレクトリ直下にあるfixupやpackagesなどの同名ファイルは、それぞれのファイルを連結して利用されます。パッケージの削除などを行う場合は、commonディレクトリ以下のファイルも確認してください。 commonとa6e内のサブディレクトリにある同名ファイルは、a6eのファイルが利用されます。 |
build-rootfsに含まれるファイルの説明は次の通りです。 表6.35 build-rootfsのファイル説明 ファイル | 説明 |
---|
a6e/resources/* | 配置したファイルやディレクトリは、そのままルートファイルシステム直下にコピーされます。
ファイルを追加する場合は、このディレクトリに入れてください。 | a6e/packages | このファイルに記載されているパッケージはルートファイルシステムにインストールされます。
パッケージを追加する場合はこのファイルに追加してください。 | a6e/fixup | このファイルに記載されているコマンドはパッケージのインストールが完了した後に実行されます。 | a6e/image_firstboot/* | 配置したファイルやディレクトリは、「ブートディスクの作成」や「初期化インストールディスクの作成」の手順
のようにブートディスクイメージを作成する際、そのままルートファイルシステム直下にコピーされます。 | a6e/image_installer/* | 配置したファイルやディレクトリは、「初期化インストールディスクの作成」の手順
のようにインストールディスクイメージを作成する際、
そのままインストーラーにコピーされます。ルートファイルシステムに影響はありません。 | a6e/image_common/* | 配置したファイルやディレクトリは、ブートディスクイメージおよびインストールディスクイメージを
作成する際、ルートファイルシステム、インストーラにそれぞれコピーされます。 |
| |
---|
利用可能なパッケージは以下のページで検索することができます。 Alpine Linuxルートファイルシステムを起動している
Armadilloでも検索することができます。 [armadillo ~]# apk update
[armadillo ~]# apk search ruby
ruby-test-unit-rr-1.0.5-r0
ruby-rmagick-5.1.0-r0
ruby-public_suffix-5.0.0-r0
:
: (省略)
:
ruby-mustache-1.1.1-r5
ruby-nokogiri-1.13.10-r0 |
ビルド
次のコマンドを実行します。 パッケージをインターネット上から取得するため回線速度に依存しますが、ビルドには数分かかります。 [ATDE ~/build-rootfs-[VERSION]]$ sudo ./build_rootfs.sh -b a6e
use default(outdir=/home/atmark/git/build-rootfs)
use default(output=baseos-6e-ATVERSION.tar.zst)
:
: (略)
:
> Creating rootfs archive
-rw-r--r-- 1 root root 231700480 Oct 11 07:18 rootfs.tar
ERROR: No such package: .make-alpine-make-rootfs
============================================
footprint[byte] tarball[byte] packages
229904000 74942331 alpine-base coreutils chrony ...(省略)
============================================
done. | |
---|
リリース時にバージョンに日付を含めたくないときは --release を引数に追加してください。 |
| |
---|
任意のパス、ファイル名で結果を出力することもできます。 [ATDE ~/build-rootfs-[VERSION]]$ ./build_rootfs.sh -b a6e ~/alpine.tar.zst
:
: (略)
:
[ATDE ~/build-rootfs-[VERSION]]$ ls ~/alpine.tar.zst
~/alpine.tar.zst |
「Alpine Linux ルートファイルシステムビルドツール」のバージョンが3.18-at.7以降を使用している場合は、ビルドが終わると SBOM も [output].spdx.json として出力されます。
ライセンス情報等を記載するためのコンフィグファイルはデフォルトは baseos_sbom.yaml となっています。コンフィグファイルを変更する場合は --sbom-config <config> に引数を入れてください。
SBOM が不要な場合は --nosbom を引数に追加してください。 SBOM のライセンス情報やコンフィグファイルの設定方法については 「ビルドしたルートファイルシステムの SBOM を作成する」 をご覧ください。
インストール
ビルドしたルートファイルシステムは、以下に示すどちらかの方法でインストールしてください。
「SWU イメージのインストール」 でインストールする
mkswu の初期化を行った後に 提供されているスクリプトを使ってSWUイメージを作成してください。 [ATDE ~/build-rootfs-[VERSION]]$ vi OS_update.desc
swdesc_tar --version base_os [VERSION] \
--preserve-attributes baseos-6e-[VERSION].tar.zst
[ATDE ~/build-rootfs-[VERSION]]$ mkswu OS_update.desc
OS_update.swu を作成しました。 作成された OS_update.swu のインストールについては 「SWU イメージのインストール」 を参照ください。
「ブートディスクの作成」 でインストールする
手順を実行すると、ビルドされた baseos-6e-[VERSION].tar.zst が自動的に利用されます。
6.27.4. ビルドしたルートファイルシステムの SBOM を作成するここでは例として、「Alpine Linux ルートファイルシステムをビルドする」 で作成した OS_update.swu の SBOM を作成します。
SBOM を作成するには、作成する対象のファイルとライセンス情報等を記載するためのコンフィグファイルが必要となります。
また、baseos-6e-[VERSION].package_list.txt から、パッケージの情報を記載することができます。 ライセンス情報等を記載するためのコンフィグファイルの例は以下のコマンドで確認することができます。
各項目に関する説明はコメントに記載しておりますので、必要に応じて値を変更してください。
各項目の詳細な説明については SPDX specification v2.2.2 (https://spdx.github.io/spdx-spec/v2.2.2/) をご覧ください。 [ATDE ~/build-rootfs-[VERSION]]$ cat submodules/make-sbom/config.yaml 作成した コンフィグファイルとパッケージ情報から SBOM を作成するには以下のコマンドを実行します。 [ATDE ~/build-rootfs-[VERSION]]$ ./make_sbom.sh -i OS_update.swu -c <コンフィグファイル> -p baseos-6e-[VERSION].package_list.txt
INFO:root:created OS_update.swu.spdx.json このツールで作成される SBOM は json 形式で ISO/IEC5962で国際標準となっているSPDX2.2のフォーマットに準拠しています。 アットマークテクノが提供している SBOM は
ソフトウェアダウンロード
の各ソフトウェアダウンロードページからダウンロードすることができます。 eMMC は主に NAND Flash メモリから構成されるデバイスです。NAND Flash メモリには書き込みしてから1年から3年程度の長期間データが読み出されないと電荷が抜けてしまう可能性があります。その際、電荷が抜けて正しくデータが読めない場合は、eMMC 内部で ECC (Error Correcting Code) を利用してデータを訂正します。しかし、訂正ができないほどにデータが化けてしまう場合もあります。そのため、一度書いてから長期間利用しない、高温の環境で利用するなどのケースでは、データ保持期間内に電荷の補充が必要になります。電荷の補充にはデータの読み出し処理を実行し、このデータの読み出し処理をデータリテンションと呼びます。 Armadillo-IoT ゲートウェイ A6Eに搭載のeMMCは、eMMC自身にデータリテンション機能が備わっており、A6Eに電源が接続されてeMMCに電源供給されている状態で、eMMC内部でデータリテンション処理が自動実行されます。 Armadillo-IoT ゲートウェイ A6E ではシステムが出力するログの一部は、
一般的な /var/log ディレクトリではなく、/var/at-log ディレクトリに出力されます。
/var/at-log は、ルートファイルシステムとは別のパーティションになっているので、
ルートファイルシステムに障害が発生した場合でも、/var/at-log のパーティションが無事であれば、
ログファイルを取り出して、不具合等の解析に利用することができます。 Armadillo-IoT ゲートウェイ A6E で /var/log 配下に出力するログに関しては 「/var/log/ 配下のログに関して」 を参照ください。 ログファイルは /var/at-log ディレクトリ内に atlog というファイル名で作成されているので、
これを任意のディレクトリにコピーすることで取り出せます。
もし、eMMC 上のルートファイルシステムが壊れてしまい起動できない場合は、
microSD カードから起動することでログファイルを取り出すことができます。 | |
---|
/var/at-log/atlog はファイルサイズが 3MiB になるとローテートされ /var/at-log/atlog.1 に移動されます。 /var/at-log/atlog.1 が存在する状態で、更に /var/at-log/atlog のファイルサイズが 3MiB になった場合は、 /var/at-log/atlog の内容が /var/at-log/atlog.1 に上書きされます。 /var/at-log/atlog.2 は生成されません。 |
ログファイルの内容はテキストデータであり、以下のようなフォーマットになっています。 atlog には以下の内容が保存されています。 -
インストール状態のバージョン情報
-
swupdate によるアップデートの日付とバージョン変更
-
abos-ctrl / uboot の rollback 日付
-
uboot で wdt による再起動があった場合にその日付
ログ出力先である /var/at-log ディレクトリには、
GPP である /dev/mmcblk0gp1 パーティションがマウントされています。
このパーティションに論理的な障害が発生した場合は、/dev/mmcblk0gp1 の
データを /dev/mmcblk0gp2 にコピーし、/dev/mmcblk0gp1 は FAT ファイルシステムで
フォーマットされます。
このパーティションの障害チェックはシステム起動時に自動的に実行されます。 6.29.5. /var/log/ 配下のログに関して表6.36「/var/log/ 配下のログ」 に Armadillo-IoT ゲートウェイ A6E で /var/log/ 配下に出力するログを示します。 最大ファイルサイズを超えると 表6.36「/var/log/ 配下のログ」 の「ファイル名」の 2 行目に記載されたファイル名にコピーします。 その状態から更に最大ファイルサイズを超えた場合、 表6.36「/var/log/ 配下のログ」 の「ファイル名」の 2 行目に記載されたファイル名に上書きします。 表6.36 /var/log/ 配下のログ ファイル名 | 説明 | 最大ファイルサイズ | 最大ファイル数 |
---|
/var/log/messages
/var/log/messages.0 | 通常のログです。 | 4MiB | 2 | /var/log/connection-recover.log
/var/log/connection-recover.log.0 | 3G/LTE 搭載モデルで 3G/LTE 再接続サービスを稼働させているときに出力されるログです。
Armadillo Base OS バージョン 3.19.1-at5 以降で対応しております。 | 128KiB | 2 | /var/log/armadillo-twin-agent/agent_log
/var/log/armadillo-twin-agent/agent_log.1 | Armadillo Twin Agent の動作ログです。 | 1MiB | 2 |
viエディタは、Armadilloに標準でインストールされているテキストエディタです。本書では、Armadilloの設定ファイルの編集などにviエディタを使用します。 viエディタは、ATDEにインストールされてるgeditやemacsなどのテキストエディタとは異なり、モードを持っていることが大きな特徴です。viのモードには、コマンドモードと入力モードがあります。コマンドモードの時に入力した文字はすべてコマンドとして扱われます。入力モードでは文字の入力ができます。 本章で示すコマンド例はATDEで実行するよう記載していますが、Armadilloでも同じように実行することができます。 viを起動するには、以下のコマンドを入力します。 file にファイル名のパスを指定すると、ファイルの編集( file が存在しない場合は新規作成)を行います。viはコマンドモードの状態で起動します。
文字を入力するにはコマンドモードから入力モードへ移行する必要があります。コマンドモードから入力モードに移行するには、表6.37「入力モードに移行するコマンド」に示すコマンドを入力します。入力モードへ移行後は、キーを入力すればそのまま文字が入力されます。 表6.37 入力モードに移行するコマンド コマンド | 動作 |
---|
i | カーソルのある場所から文字入力を開始 | a | カーソルの後ろから文字入力を開始 |
「i」、「a」それぞれのコマンドを入力した場合の文字入力の開始位置を図6.222「入力モードに移行するコマンドの説明」に示します。 入力モードからコマンドモードに戻りたい場合は、ESCキーを入力することで戻ることができます。現在のモードが分からなくなった場合は、ESCキーを入力し、一旦コマンドモードへ戻ることにより混乱を防げます。 | |
---|
日本語変換機能をOFFに viのコマンドを入力する時はATDEの日本語入力システム(Mozc)をOFFにしてください。日本語入力システムのON/OFFは、半角/全角キーで行うことができます。 |
| |
---|
viでの文字削除 コンソールの環境によってはBS(Backspace)キーで文字が削除できず、「^H」文字が入力される場合があります。その場合は、「文字の削除」で説明するコマンドを使用し、文字を削除してください。 |
方向キーでカーソルの移動ができますが、コマンドモードで表6.38「カーソルの移動コマンド」に示すコマンドを入力することでもカーソルを移動することができます。 表6.38 カーソルの移動コマンド コマンド | 動作 |
---|
h | 左に1文字移動 | j | 下に1文字移動 | k | 上に1文字移動 | l | 右に1文字移動 |
ファイルの保存、終了を行うコマンドを表6.40「保存・終了コマンド」に示します。 表6.40 保存・終了コマンド コマンド | 動作 |
---|
:q!
| 変更を保存せずに終了 | :w[file]
| ファイルを file に指定して保存 | :wq
| ファイルを上書き保存して終了 |
保存と終了を行うコマンドは「 : 」(コロン)からはじまるコマンドを使用します。" : "キーを入力すると画面下部にカーソルが移り入力したコマンドが表示されます。コマンドを入力した後Enterキーを押すことで、コマンドが実行されます。 本章では、Armadillo-IoT ゲートウェイ A6Eのオプション品について説明します。 表6.41 Armadillo-IoT ゲートウェイ A6E 関連のオプション品 名称 | 型番 |
---|
ACアダプタ(12V/2.0A φ2.1mm)温度拡張品 効率レベルVI品 | OP-AC12V4-00 | Armadillo-IoTゲートウェイA6E 標準ケースセットロング(9M) | OP-CASEA6E-PLA-20 |
6.31.1. Armadillo-IoTゲートウェイA6E 標準ケースセットロング(9M)Armadillo-IoTゲートウェイA6E用のプラスチック製ケースです。 | |
---|
Armadillo-IoTゲートウェイA6E 標準ケースセットロング(9M)はArmadillo-IoTゲートウェイA6E +Di8+Ai4 に付属しています。
ケースのみ必要なお客様のためにオプション品として別売りもしています。 |
表6.42 Armadillo-IoTゲートウェイA6E 標準ケースセットロング(9M)について 商品名 | Armadillo-IoTゲートウェイA6E 標準ケースセットロング(9M) | 型番 | OP-CASEA6E-PLA-20 | 内容 | ケース(トップ/ボトム)、カバーパーツ(A(アンテナ穴有り)/A(アンテナ穴無し)/B(アンテナ穴有り)/B(アンテナ穴無し)/C/D)、LEDライトパイプ、フック |
表6.43 ケース(トップ/ボトム)の仕様 材質 | PC/ABS 混合樹脂 | 難燃性 | UL94 V-0 | 色 | グレー | 使用温度範囲 | -20〜90℃ |
表6.44 フックの仕様 材質 | PRO 樹脂 | 難燃性 | UL94 V-0 | 色 | 黒 | 使用温度範囲 | -20〜90℃ |
表6.45 カバーパーツ A/B/C/Dの仕様 材質 | PC 樹脂 | 難燃性 | UL94 V-0 | 色 | グレー | 使用温度範囲 | -20〜90℃ |
| |
---|
最高使用温度よりも高い温度で保管または使用した場合、樹脂ケースが変形する可能性があります。 |
組み立て方法についてはArmadillo-IoT ゲートウェイ A6E +Di8+Ai4 製品マニュアルの「組み立てと分解」の章をご参照ください。 | |
| | | |
| |