開発の基本的な流れ

8.1. アプリケーション開発の流れ

8.1.1. Armadilloへの接続

8.1.1.1. シリアルコンソール

Armadillo-640の標準状態では、UART1 (CON9)をシリアルコンソールとして使用します。シリアル通信設定等については、「シリアル通信ソフトウェア(minicom)の使用」を参照してください。

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

8.1.1.2. ssh

Armadillo-640には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に設定を保存しています。

8.1.2. overlayfsの扱い

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

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

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

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

8.1.3. 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 のストレージはコンテナのイメージやランタイムのデータのみです。

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

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

ベースとなるOSを取得します。alpineやdebian等、任意の環境でアプリケーションを作成することができます。

ベースとなる OS はイメージの公開・共有サービスである Docker Hub から取得することができます。目的に合わせて選択してください。

マルチメディアや機械学習を行うアプリケーションを作成する場合は、アットマークテクノが配布しているdebianコンテナがおすすめです。

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

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

podman_start のコンテナコンフィグに add_devices コマンドでデバイスファイルを指定します。詳細は 「コンテナの自動起動」 を参照ください。

[ティップ]

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

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

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

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

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

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

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

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

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

8.2.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-640 に刺すとインストールされます。

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

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

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

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

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

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

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

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

    [armadillo ~]# podman run --name update myimage:1 sh -c "apk upgrade --no-cache"
    [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. コンテナを新しく構築する

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

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

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