開発の基本的な流れ

9.1. Armadilloへの接続

9.1.1. シリアルコンソール

Armadillo-IoT ゲートウェイ A6E +Di8+Ai4ではCON7 (USBコンソールインターフェース)をシリアルコンソールとして使用できます。シリアル通信設定等については、「シリアル通信ソフトウェア(minicom)の使用」を参照してください。

ログイン方法については、「ログイン」を参照してください。

9.1.2. ssh

Armadillo-IoT ゲートウェイ A6E +Di8+Ai4 には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に設定を保存しています。

[注記]

Cat.1 モデルは、初期状態では LTE ネットワーク経由の ssh が使用できません。「Cat.1 モデル搭載 ELS31-J ファイアーウォール設定 (Cat.1 モデル)」 を参考にファイアーウォール設定を変更後ご利用ください。

9.2. overlayfsの扱い

Armadillo BaseOS ではルートファイルシステムに overlayfs を採用しています。

その為、ファイルを変更した後 Armadillo の電源を切ると変更内容は保持されません。 開発中などに rootfs の変更内容を保持するには、変更したファイルに対して persist_file コマンドを使用します。 persist_file コマンドの詳細は 「overlayfs と persist_file について」 参照してください。

開発以外の時は安全のため、ソフトウェアアップデートによる更新を実行してください。 アップデート手順に関しては 「Armadilloのソフトウェアをアップデートする」 を参照してください。

rootfs の内容を変更しても、ソフトウェアアップデートを実施した際に変更した内容が保持されない可能性があります。 ソフトウェアアップデート実施後も変更内容を保持する手順に関しては 「swupdate_preserve_files について」 を参照してください。

9.3. アプリケーション開発パターン

Armadillo-IoT ゲートウェイ A6E +Di8+Ai4 でアプリケーションを開発する手順は、以下のパターンに分類されます。

  • ゲートウェイアプリケーション開発:ゲートウェイコンテナを使用してアプリケーションを開発する
  • ゲートウェイコンテナを利用せず、一からコンテナを作成する

各パターンにおける詳細な手順は 「ゲートウェイアプリケーション開発の流れ」 に記載しています。 ゲートウェイコンテナに関しては 「ゲートウェイコンテナとは」 で説明します。

9.3.1. ゲートウェイコンテナとは

Armadillo-IoT ゲートウェイ A6E +Di8+Ai4 には、ゲートウェイコンテナがプリインストールされています。 このコンテナを利用することで、インターフェースの操作やクラウドへのデータアップロードなどを簡単に行うことができます。

ゲートウェイコンテナを利用して実施できる内容は下記の通りです。

表9.1 利用できるインターフェース・機能

インターフェース機能

RS485 (ModbusRTU)

レジスタ読み出し

レジスタ書き込み

接点入力 10ch

ポーリング監視

エッジ検出

接点出力 2ch

指定レベル出力

アプリケーションLED

点灯/消灯操作

ユーザースイッチ

状態取得

外部電源制御出力

指定レベル出力

入力電圧

入力電圧計測

アナログ入力 4ch

入力電圧計測


表9.2 利用できるクラウドベンダー・サービス

クラウドベンダークラウドサービス

AWS

AWS IoT Core

Azure

Azure IoT


インターフェースやクラウドサービスの選択はコンフィグ設定で行う事ができます。 また、センサーデータのログ出力やネットワーク断時のキャッシュ機能にも対応しています。

利用方法や仕様については、「ゲートウェイコンテナを動かす」 を参照してください。

9.4. ゲートウェイアプリケーション開発の流れ

ここでは、 「アプリケーション開発パターン」 に記載した各パターンの手順を記載します。

9.4.1. ゲートウェイアプリケーション開発

ゲートウェイアプリケーション開発ではゲートウェイコンテナを利用します。 以下のパターンに分類されます。

  • ゲートウェイコンテナを改変せず利用する
  • ゲートウェイアプリケーションを拡張する
  • ゲートウェイコンテナイメージを改変する

9.4.1.1. ゲートウェイコンテナを改変せず利用する

ゲートウェイコンテナを改変せず利用する場合は、コードを書く必要はありません。 各種設定を行うだけで、ゲートウェイアプリケーションを動作させることができます。 設定、実行方法については 「ゲートウェイアプリケーションを開発する」 を参照してください。

9.4.1.2. ゲートウェイアプリケーションを拡張する

操作するインターフェースを追加したい場合や、インターフェースの制御仕様を変更したい場合は、所定のディレクトリにソースコードを配置することで実現することができます。 詳細については 「ゲートウェイコンテナを拡張する」 を参照してください。

9.4.1.3. ゲートウェイコンテナイメージを改変する

基本的に、アットマークテクノではゲートウェイコンテナイメージの改変を推奨しておりません。もし改変を行う場合、以下の手順に沿って、対応することができます。 なお、手順中のコマンドで指定するコンテナ名は a6e-gw-container となります。

[警告]

ただし、ゲートウェイコンテナイメージの改変を行った場合、今後アットマークテクノが提供するゲートウェイコンテナのアップデートを そのまま適用することが出来なくなります。そのため、「ゲートウェイコンテナを拡張する」 に記載している方法をお勧めいたします。

  1. 「PodmanのデータをeMMCに保存する」 を実行

    このとき、起動しているコンテナがある場合は podman stop コマンドで停止します。(図11.53「コンテナを停止する実行例」)

  2. ゲートウェイコンテナのコンフィグファイルを修正する

    ゲートウェイコンテナは、コンテナ起動時にコンテナアプリケーションの起動スクリプトを実行するように設定されています。そのため、下記の通り sleep infinity コマンドを実行して待ち続けるだけの設定に変更します。 また、Armadillo Base OS ブート時に自動的に起動する設定となっているため、自動起動を無効にする設定も加えます。

    armadillo:~# cat /etc/atmark/containers/a6e-gw-container.conf
    : (省略)
    
    set_autostart no 1
    
    #set_command sh /usr/bin/gw-app.sh 2
    set_command sleep infinity 3

    1

    自動起動の無効化

    2

    起動スクリプト実行部分をコメントアウト

    3

    sleep infinity コマンドを実行するように修正

    設定後は persist_file コマンドで変更を保存してください。

    [armadillo ~]# persist_file -P /etc/atmark/containers/a6e-gw-container.conf
  3. 「実行中のコンテナに接続する」 の通り、コンテナを起動・接続する
  4. コンテナ内で開発を行う
  5. 「コンテナの変更を保存する」 を実行

9.4.2. ゲートウェイコンテナを利用せず、一からコンテナを作成する

ゲートウェイコンテナを利用せずに、新たに一からコンテナを作成することもできます。 次項より、その場合の手順を示します。

[注記]

ゲートウェイコンテナと、それに関連するファイルは 「コンテナとコンテナに関連するデータを削除する」 に記載している方法で Armadillo から削除することができます。

9.4.2.1. PodmanのデータをeMMCに保存する

デフォルトでは、Podmanのデータはtmpfsに保存されます。そのため、Armadillo を再起動するとデータは消えてしまいます。 この挙動は、Armadilloの運用時を想定したものです。

eMMCへの書き込みを最小限にする等の観点から、 Armadilloの運用時は、 Podmanのデータはtmpfsに保存するのが適切です。 eMMCへの保存が必要な場合のみ SWUpdate または abos-ctrl で読み取り専用のイメージを保存します。

Armadillo開発時のみ、 eMMCにPodmanのデータが保存されるようにすることを推奨します。

eMMCにPodmanのデータが保存されるようにするには、以下のコマンドを実行します。

[armadillo ~]# abos-ctrl podman-storage --disk
Creating configuration for persistent container storage
Create subvolume '/mnt/containers_storage'
[ 2145.288677] EXT4-fs (mmcblk0p1): re-mounted. Opts: (null)
[armadillo ~]# abos-ctrl podman-storage --status
Currently in disk mode, run with --tmpfs to switch
[警告]

podman のストレージはコンテナのイメージやランタイムのデータのみです。

コンテナのデータをボリュームに入れたら消えません。詳しくは 「コンテナの変更を保存する」 を参照してください。

9.4.2.2. ベースとなるコンテナを取得する

一からコンテナを作成する場合は、イメージの公開・共有サービスである Docker Hub からベースとなる OS を取得し、開発を行います。OS は alpine や debian 等があり、任意の環境でアプリケーションを作成することができます。目的に合わせて選択してください。

9.4.2.3. デバイスのアクセス権を与える

開発中のアプリケーションがデバイスを利用する場合は、コンテナにデバイスを渡す必要があります。

podman run コマンドに --device オプションでデバイスファイルを指定します。

[ティップ]

--privileged オプションを指定するとすべてのセキュリティーメカニズムが無効になる為、全てのデバイスが利用できるようになります。このオプションを利用することは、セキュリティー上問題がある為、デバッグ用途でのみご利用ください。

9.4.2.4. アプリケーションを作成する

「アプリケーションコンテナを作成、実行する」 を参考にして、オリジナルのアプリケーションを開発します。

9.4.2.5. コンテナやデータを保存する

ログやデータベース、自分のアプリケーションのデータを保存する場合にボリュームを使ってください。 実行中のコンテナイメージを保存するには podman commit コマンドで保存してください。 詳しい手順は 「コンテナの変更を保存する」 を参考にしてください。

9.5. アプリケーションコンテナの運用

「コンテナの運用」 を参考にしてください。

9.5.1. アプリケーションの自動起動

podman_start用の設定ファイル(/etc/atmark/containers/*.conf)を作成します。その後、 podman_start -a コマンドを実行するか、armadilloを再起動してコンテナが自動起動することを確認してください。コンテナの自動起動に関する詳しい説明は 「コンテナの自動起動」 を参考にしてください。

9.5.2. アプリケーションの送信

まず、コンテナをコンテナレジストリに送るか、 podman save コマンドを実行してアーカイブを作成します。

以下の例では ATDE に mkswu のキーを作成して、 docker.ioのイメージをこのまま使います。

手順の詳しい説明やオプションは 「Armadilloのソフトウェアをアップデートする」 を参考にしてください。

[ATDE ~]$ sudo apt update && sudo apt install mkswu
[ATDE ~]$ mkswu --init
: (省略)
[ATDE ~]$ cd mkswu
[ATDE ~/mkswu]$ cp /usr/share/mkswu/examples/pull_container_nginx.desc .
[ATDE ~/mkswu]$ cp -r /usr/share/mkswu/examples/nginx_start .
[ATDE ~/mkswu]$ vi pull_container_nginx.desc
swdesc_option version=1

swdesc_pull_container "docker.io/nginx:alpine"
swdesc_files --extra-os nginx_start
[ATDE ~/mkswu]$ mkswu -o initial_setup_container.swu \
        initial_setup.desc pull_container_nginx.desc

ここで作成した initial_setup_container.swu ファイルを USB メモリに配置して、 Armadillo-IoT ゲートウェイ A6E +Di8+Ai4 に刺すとインストールされます。

インストールが終了して再起動すると docker.io/nginx:alpine のコンテナを 起動します。

9.5.3. インストール確認:初期化

購入状態でSWUをインストールできるか確認をするために、ソフトウェアの初期化を行います。

「Armadilloのソフトウェアの初期化」 を参照し、Armadillo Base OSを初期化してからアプリケーションをアップデートしてください。

9.5.4. アプリケーションのアップデート

アップデートを行う方法は以下の二通りです:

  1. podman runコマンドで、差分アップデートを行う

    ここでは例として、アプリケーションのコンテナをmyimage:1、アップデート後をmyimage:2とします。

    [armadillo ~]# podman run --name update myimage:1 sh -c "apk update && apk upgrade && apk cache --purge"
    [armadillo ~]# podman commit update myimage:2
    [armadillo ~]# podman rm update
    [armadillo ~]# podman_partial_image -b myimage:1 -o myimage2_update.tar myimage:2

    出来上がったmyimage2_update.tarは普通のコンテナと同じように扱うことができます。myimage:1が存在しない場合はエラーとなります。

    詳しいコンテナアップデートの手順は 「コンテナの自動作成やアップデート」 を参考にしてください。

    繰り返し差分アップデートをすると、イメージサイズが大きくなってしまいます。ストレージ容量が不足する場合は、次に示す手順でコンテナを新しく構築してください。

  2. コンテナを新しく構築する

    ベースとなるコンテナをアップデートして、そのコンテナに自分のアプリケーションを入れます。

    差分アップデートと異なり共有部分が無い為、コンテナ全体を送る必要があります。

自動的にイメージを作る方法は 「コンテナの自動作成やアップデート」 を参考にしてください。