Debian で開発済みのシステムを Armadillo Base OS に移行する

既に Debian 搭載の Armadillo でシステムを開発しており、そのシステムを Armadillo Base OS 環境に移行する方向けに手順を紹介します。

本書では移行時によくあるケースについて説明します。 説明しきれない部分もありますので、製品マニュアルの対応する箇所も合わせて参照してください。

以下の手順は、5章Armadillo Base OS の基本操作の手順を一度実行している前提で進めます。 一度も実行していない場合は、5章Armadillo Base OS の基本操作の手順を実行してからこの先に進んでください。

ここでは Debian で開発済である以下のようなシステムを Armadillo Base OS に移行することを例として説明します。

  • アプリケーションをArmadillo 起動時に自動的に app.py という名前の Python スクリプトを実行する
  • app.py は USBメモリに読み書きアクセスする

6.1. Debian コンテナを起動する

任意の名前で Debian コンテナを作成します。 以下の手順では、 user_app という名前の Debian コンテナを作成します。

/etc/atmark/containers/に user_app.conf というファイルを作成し、中身を以下のように編集します。

set_image docker.io/debian:bullseye
add_args --privileged
set_command sleep infinity

上記の例では add_args --privileged を指定しています。 これを指定することで、コンテナに全権限と全てのデバイスへのアクセス許可を与えます。 開発したアプリケーションが使用する最低限の権限を洗い出す必要がないため、初めの動作確認には有用です。

ただし、本来コンテナには必要最低限の権限のみを与えるべきです。 この add_args --privileged は、開発中のみのご利用に留めることを強く推奨します。

その後、 podman_start コマンドでコンテナを起動し、 podman ps コマンドで起動していることを確認します。

armadillo:~# podman_start user_app
Starting 'user_app'
9aaf31b7275798fc0c6d53bec3b47bbe9548b631b6c0845c482028a830c3148c

armadillo:~# podman ps
CONTAINER ID  IMAGE                              COMMAND         CREATED         STATUS             PORTS       NAMES
9aaf31b72757  docker.io/library/debian:bullseye  sleep infinity  12 seconds ago  Up 13 seconds ago              user_app

6.2. コンテナ内にアプリケーションの実行環境を整える

「Debian コンテナを起動する」で作成・起動したコンテナ内で、開発したアプリケーションの実行環境を作成します。 以下のコマンドを実行して、コンテナ内に入ります。

armadillo:~# podman exec -it user_app bash
root@dfc9660d3ff9:/# 1

1

ここはコンテナのルートディレクトリです

6.2.1. コンテナ内に必要なファイルを配置する

まず、アプリケーション本体やアプリケーションの設定ファイルなどをコンテナ内の任意の場所に配置しましょう。

/root/ に、 app.py を配置します。 このコンテナは add_args --privileged が設定されているので、USBメモリを Armadillo に挿入していつも通り mount して使用することもできますし、ネットワーク経由でダウンロードすることも可能です。 お好きな手順でコンテナ内にアプリケーションを配置してください。

root@dfc9660d3ff9:/# ls /root/app.py
/root/app.py 1

1

/root/app.py が存在することを確認しています

6.2.2. コンテナ内に必要なパッケージをインストールする

アプリケーションの実行のために特定のパッケージが必要な場合は. Debian コンテナなので apt install コマンドでインストールできます。

app.py は Python スクリプトなので、 python3 パッケージをインストールします。

root@dfc9660d3ff9:/# apt update && apt upgrade -y
root@dfc9660d3ff9:/# apt install python3

6.2.3. アプリケーションの動作確認をする

実行環境が整ったので、実際にアプリケーションを実行して期待したとおりの動作をすることを確認してください。

アプリケーションによってはネットワーク設定などが必要で、この段階では期待した動作をしない場合もあると思います。 それらの必要な設定はこのあと行うので、ここでは最低でも必要なパッケージ類が足りていて、アプリケーションが実行できることを確認してください。

root@dfc9660d3ff9:/# python3 /root/app.py 1

1

パッケージの不足等なく、動作することを確認してください

6.2.4. コンテナの変更を保存する

コンテナ内で exit コマンドを実行することでコンテナから抜けて Armadillo Base OS に戻ります。

root@dfc9660d3ff9:/# exit
exit
armadillo:~#

ここで、コンテナの変更をコンテナイメージとして保存するために、 podman commit コマンドを実行します。 以下の実行例では、 user_app_image という名前、 1.0.0 というタグ名で、 user_app コンテナを保存します。

armadillo:~# podman commit user_app user_app_container:1.0.0

保存したコンテナイメージは、 podman images コマンドを実行すると確認できます。

armadillo:~# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
localhost/user_app_container  1.0.0       9f8fa6515340  3 seconds ago  123 MB
docker.io/library/debian      bullseye    d352b92ddb5d  3 weeks ago    123 MB

6.3. コンテナ外の設定を行う

コンテナ内にアプリケーションを配置しただけでは Debian で開発したシステムを再現できないケースが多いです。

アプリケーションの自動実行やネットワーク設定など、アプリケーション以外の設定項目も必要になりますが、これらはコンテナ内ではなく Armadillo Base OS 上で設定します。

6.3.1. コンテナに与える権限を変更する

この段階では user_app コンテナには add_args --privileged が指定されており、全てのリソースにアクセスできる状態になっているため、セキュリティ的に運用に向きません。 必要最低限の権限に設定することを強く推奨します。

コンテナの権限は、/etc/atmark/containers 以下の conf ファイルによって制御できます。 今回の例では、 user_app.conf を以下のように編集します。

set_image docker.io/debian:bullseye
add_hotplug usb 1
set_command sleep infinity

1

コンテナに、USBメモリをホットプラグで認識し、読み書きできる権限を与えます

conf ファイルに記載できる文言については、対応する製品マニュアルの「コンテナの運用」の箇所を参照してください。

6.3.2. アプリケーションを自動実行する

Debian の頃は systemd や rc.local によって自動実行していましたが、 Armadillo Base OS ではコンテナを Armadillo の起動時に自動的に生成、そのコンテナ中でコマンドを自動実行する仕様になっています。

具体的には、「Debian コンテナを起動する」で /etc/atmark/containers の下に、 user_app.conf ファイルを作成して配置しましたが、このファイルがあることによってコンテナが自動的に起動されます。

今回の例では、 user_app.conf の以下の2点を変更します。

  • 使用するコンテナイメージ( set_image )
  • 実行するコマンド( set_command )

修正後の user_app.conf は以下の通りです。

set_image localhost/user_app_container:1.0.0 1
add_hotplug usb
set_command python3 /root/app.py 2

1

「コンテナの変更を保存する」で保存したコンテナイメージから起動するようにします

2

コンテナ起動時に、 python3 /root/app.py が実行されるようにします

ここまで設定できたら、 user_app.conf 永続化するために、 persist_file コマンドを実行します。

armadillo:~# persist_file -v /etc/atmark/containers/user_app.conf
'/etc/atmark/containers/user_app.conf' -> '/mnt/etc/atmark/containers/user_app.conf'

これで Armadillo 起動時に user_app_container 内で app.py が自動実行されるようになりました。

6.3.3. Armadillo 本体の設定をする

今回の例では扱いませんが、場合によっては固定IPアドレスを割り当てるためのネットワーク設定など、 Armadillo 本体の設定が必要な場合があります。

ユーザーアプリケーション以外の Armadillo 本体の設定については、基本的にコンテナの外で設定する場合がほとんどです。

例えばネットワークの設定は、 Debian 搭載 Armadillo-600 シリーズにおいては ifupdown を使用していましたが、 Armadillo Base OS では NetworkManager を使用しています。 このように、 Debian と Armadillo Base OS では各種本体設定のやり方についても差があるものがあるので、詳細は対応する製品マニュアルを参照してください。

6.4. 動作確認をする

開発済みシステムの移行が完了した後には、動作確認をしてください。

正しく設定できているならば、 Armadillo に電源を投入すると自動的にコンテナが起動し、その中でユーザーアプリケーションが実行されるはずです。 それが確認できたならば移行完了です。

6.5. Podman のデータの保存先を tmpfs に戻す

「Podman のデータの保存先を eMMC に変更する」で、開発前に Podman のデータの保存先を一時的に eMMC にしました。

開発が完了したタイミングで、必ず Podman のデータの保存先を tmpfs に戻しておいてください。

Podman のデータの保存先を tmpfs に戻す前に、不要なコンテナイメージを削除します。 以下の例では、必要なコンテナイメージは user_app_container のみで、 debian のコンテナイメージは必要ありません。

armadillo:~# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
localhost/user_app_container  1.0.0       9f8fa6515340  3 seconds ago  123 MB
docker.io/library/debian      bullseye    d352b92ddb5d  3 weeks ago    123 MB

podman rmi コマンドを実行して、 debian コンテナイメージを削除します。

armadillo:~# podman rmi -f docker.io/library/debian:bullseye 1
Untagged: docker.io/library/debian:bullseye

1

debian コンテナイメージを削除します

不要なコンテナイメージを削除できたら、 Podman のデータの保存先を tmpfs に戻します。

armadillo:~# abos-ctrl podman-storage --tmpfs
List of images configured on development storage:
REPOSITORY                    TAG         IMAGE ID      CREATED      SIZE
localhost/user_app_container  1.0.0       9f8fa6515340  12 days ago  123 MB

What should we do? ([C]opy (default), [N]othing, [D]elete)
Copy 1
Delete subvolume (no-commit): '/mnt/containers_storage'
Replacing development images to readonly storage succeeded
Switching back to tmpfs container storage.
Successfully reverted podman storage to tmpfs

1

eMMC に保存済みのコンテナイメージをどう扱うかを聞かれるので、 Copy と入力して Enter キーを押下してください

これで、 Podman のデータの保存先が tmpfs に戻りました。

6.6. Armadillo Base OS への移行後

Armadillo Base OS は、クローン用のインストールディスクの作成や、OTA機能など、開発だけでなく量産及び運用時に便利な機能を多く備えています。 詳細は対応する製品マニュアルを参照の上、ぜひご活用ください。

ここまでの内容および、 Armadillo Base OS で開発を進めていくにあたって不明な点がございましたら、「Armadillo フォーラム」にてご質問ください。