Armadillo-IoT ゲートウェイ G4には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 (mmcblk2p1): re-mounted. Opts: (null)
[armadillo ~]# reboot
上記の例では、再起動後も設定が反映されるように、 persist_file
コマンドでeMMCに設定を保存しています。
Armadillo BaseOS では、rootfsである / ディレクトリを常に read-only にして、
overlayfs でメモリに変更を可能にします。
開発の時に rootfs の変更を保存するには、 persist_file
コマンドを使用します。
開発以外の時は安全のため、 「Armadilloのソフトウェアをアップデートする」 を参考にしてアップデートで更新してください。
開発用なので、何かを保存しても OS の アップデートが入る時に消えてしまう恐れがあります。詳しくはは 「swupdate_preserve_files について」 を参考にしてください。
ファイルを保存します。
|
テストファイルをコピーしました。
|
|
-r を指定すると前の手順で rm -f で削除ファイルもrootfsから削除されますので注意してください。
|
|
すでにrootfsに存在するファイルも削除してからコピーしますので、このようなメッセージがでます。
|
コピーして、 `swupdate_preserve_files`にファイルを追加させます。
|
何らかのファイルの内容を変更します。
|
|
-P でコピーします。
|
|
swupdate_preserve_files に追加されたことを確認します。
|
変更されたファイルをリストします。
|
rootfsのデータを見せないようなディレクトリは opaque directory として表示されます。
|
|
削除したファイルは whiteout として表示されます。
|
パッケージをインストールする時はapkを使ってメモリ上にインストールできますが、
persist_file
で rootfs
に直接インストールすることもできます。
|
この例ではインストールされたコマンドを使えましたが、仕様上、インストールしたプログラムが使用できない場合もあります。
そのような場合は一度再起動してから使用してください。
|
8.1.3. PodmanのデータをeMMCに保存する
デフォルトでは、Podmanのデータはtmpfsに保存されます。そのため、再起動すると消えてしまいます。
この挙動は、Armadilloの運用時を想定したものです。
eMMCへの書き込みを最小限にする等の観点から、
Armadilloの運用時は、
Podmanのデータはtmpfsに保存するのが適切です。
Armadilloの開発時のみ、
eMMCにPodmanのデータが保存されるようにすることを推奨します。
eMMCにPodmanのデータが保存されるようにするには、以下のコマンドを実行します。
[armadillo ~]# podman_switch_storage --disk
Creating configuration for persistent container storage
Create subvolume '/mnt/containers_storage'
[ 2145.288677] EXT4-fs (mmcblk2p1): re-mounted. Opts: (null)
[armadillo ~]# podman_switch_storage --status
Currently in disk mode, run with --tmpfs to switch
| |
---|
podman のストレージはコンテナのイメージやランタイムのデータのみです。 コンテナのデータをボリュームに入れたら消えません。詳しくは 「データを保存する」 を参考にしてください。 |
ベースとなるOSを取得します。alpineやdebian等、任意の環境でアプリケーションを作成することができます。
ベースとなる OS はイメージの公開・共有サービスである Docker Hub
から取得することができます。目的に合わせて選択してください。
マルチメディアや機械学習を行うアプリケーションを作成する場合は、アットマークテクノが配布しているdebianコンテナがおすすめです。
開発中のアプリケーションがデバイスを利用する場合は、コンテナにデバイスを渡す必要があります。
podman run
コマンドに --device
オプションでデバイスファイルを指定します。
| |
---|
--privileged オプションを指定するとすべてのセキュリティーメカニズムが無効になる為、全てのデバイスが利用できるようになります。このオプションを利用することは、セキュリティー上問題がある為、デバッグ用途でのみご利用ください。
|
アプリケーションからデータを保存する場合は、eMMCに保存する必要があります。コンテナ自体のデータは基本的にRAMに保存されているか書き込み不可であるため、再起動すると消えてしまいます。
保存するデータの性質によって、保存先を選択してください。
-
/var/app/volumes/: アップデートした場合はコピーされません。ログやデータベースなど、アプリケーションが作成し続けるようなデータの保存に向いています。
-
/var/app/rollback/volumes/: アップデートした場合はコピーされます。SWUpdateなどで、アプリケーションと一緒にアップデートするようなデータの保存に向いています。
| |
---|
不具合が発生したなどの理由でコンテナを前のバージョンに戻(ロールバック)した場合、/var/app/rollback/volumes/のデータの前のバージョンに戻ります。その為、アプリケーションのバージョンに依存するようなデータは、/var/app/rollback/volumes/に保存しておくと管理が容易になります。 |
コンテナが完成したら、 podman commit
コマンドを実行してPodman内のストレージに保存します。詳しい手順は「コンテナの変更を保存する」を参考にしてください。
「コンテナの運用」を参考にしてください。
podman_start用の設定ファイル(/etc/atmark/containers/*.conf)を作成します。その後、 podman_start -a
コマンドを実行するか、armadilloを再起動してコンテナが自動起動することを確認してください。
まず、コンテナをコンテナレジストリに送るか、 podman save
コマンドを実行してアーカイブを作成します。
以下の例では ATDE に swupdate-mkimage
のキーを作成して、
docker.ioのイメージをこのまま使います。
手順の詳しい説明やオプションは「Armadilloのソフトウェアをアップデートする」を参考にしてください。
[ATDE ~]$ git clone https://github.com/atmark-techno/swupdate-mkimage
[ATDE ~]$ cd swupdate-mkimage
[ATDE ~]$ ./genkey.sh --cn [COMMON_NAME] # 任意の文字列
[ATDE ~]$ vi examples/initial_setup.desc # パスワードの設定
[ATDE ~]$ cat examples/pull_container_nginx.desc
swdesc_pull_container "docker.io/nginx:alpine" --version container_nginx 1
swdesc_files --version extra_os.nginx 1 \
nginx_start
[ATDE ~]$ ./mkimage.sh -o initial_setup_container.swu \
examples/initial_setup.desc examples/pull_container_nginx.desc
ここで作成した initial_setup_container.swu
ファイルを USB メモリに配置して、
Armadillo-IoTゲートウェイ G4 に刺すとインストールされます。
インストールが終了して再起動すると docker.io/nginx:alpine
のコンテナを
起動します。
購入状態でSWUをインストールできるか確認をするために、ソフトウェアの初期化を行います。
「Armadilloのソフトウェアの初期化」を参照し、Armadillo Base OSを初期化してからアプリケーションをアップデートしてください。
アップデートを行う方法は以下の二通りです:
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が存在しない場合はエラーとなります。
詳しいコンテナアップデートの手順は「コンテナの自動作成やアップデート」を参考にしてください。
繰り返し差分アップデートをすると、イメージサイズが大きくなってしまいます。ストレージ容量が不足する場合は、次に示す手順でコンテナを新しく構築してください。
コンテナを新しく構築する
ベースとなるコンテナをアップデートして、そのコンテナに自分のアプリケーションを入れます。
差分アップデートと異なり共有部分が無い為、コンテナ全体を送る必要があります。
自動的にイメージを作る方法は「コンテナの自動作成やアップデート」を参考にしてください。
VPU や NPU などを使うアプリケーションを ATDE 上で開発する場合や、Armadillo Base OS 上のコンテナ内で動作させる場合、ライブラリを ATDE 上でビルドする必要があります。
ここではその手順について説明します。
8.3.1. ATDEにクロスコンパイル用ライブラリをインストールする
ライブラリのビルドツールを実行する準備として、gitのユーザ名とメールアドレスの設定を行い、
ビルドツールである at-imxlibpackage をインストールします。
その後、ビルドツールを実行します。
実行中にライセンスへの同意を求められます。内容を確認の上、同意する場合は y を入力して処理を進めてください。
実行が完了すると、ATDE にクロスコンパイル用のライブラリがインストールされます。
8.3.2. Armadillo へ書き込むためのライブラリイメージを作成する
以下に示す製品では、出荷状態でライブラリイメージが Armadillo に書き込まれています。
表8.1 ライブラリイメージ書き込み済みの製品
名称 | 型番 |
---|
Armadillo-IoTゲートウェイ G4 LANモデル開発セット | AGX4500-C00D0 |
Armadillo-IoTゲートウェイ G4 LANモデル量産用 | AGX4500-C00Z |
Armadillo-IoTゲートウェイ G4 LANモデル量産ボード | AGX4500-U00Z |
ライブラリをアップデートする手順を説明します。
Armadillo Base OS 上のコンテナ内から利用できるイメージを作成します。
VPU を使用しない場合は、--without-vpu オプションを付けてください。
実行が完了すると imx_lib.img というファイルが生成されます。
8.3.3. Armadillo にライブラリイメージを書き込む
Armadillo Base OS 上で、「Armadillo へ書き込むためのライブラリイメージを作成する」で作成した imx_lib.img を eMMC の /dev/mmcblk2p4 パーティションに書き込みます。
次のコマンドは、 imx_lib.img が /tmp にある場合の実行例です。
書き込みが完了した後、/opt/firmware にマウントします。
8.3.4. コンテナ内からライブラリを使用するための準備
コンテナ内からライブラリを使用するためには、コンテナ作成時にライブラリの場所を明示する必要があります。
--volume オプションにファームウェアが書き込まれているディレクトリ(/opt/firmware)を、--env オプションにライブラリのパスを指定します。次の例では、コンテナイメージに Debian(bullseye) を利用しています。
|
--volume に /opt/firmware を指定します。
|
|
--env に LD_LIBRARY_PATH を指定し、コンテナ内のアプリケーションからライブラリをリンクできるようにします。
|
次に、コンテナにログインし、/opt/firmware/usr/lib/aarch64-linux-gnu/imx-mm へのシンボリックリンクを
/usr/lib/aarch64-linux-gnu/ に作成します。
以上で、コンテナからライブラリを使用できるようになります。