Armadillo Base OS の基本操作

Armadillo Base OS に移行が完了したので、実際に動かしてみながら従来の Debian がインストールされた Armadillo-600 シリーズと使い方を比べてみましょう。

5.1. ログインする

電源投入後にしばらくすると、ログインプロンプトが出てきます。

Welcome to Alpine Linux 3.17
Kernel 5.10.180-0-at on an armv7l (/dev/ttymxc0)

armadillo login:

デフォルトでは Debian と同じくユーザー名、パスワードともに root でログインできます。 正しくログインが完了するとコマンドプロンプトが表示されます。

armadillo:~#

5.2. Armadillo Base OS 上でファイルを保存(永続化)する

Armadillo Base OS 上のファイルは変更しただけでは次回再起動時に失われていまいます。 これは、 Armadillo Base OS の rootfs が overlayfs であるためです。

変更したファイルを永続化するには、変更したファイルに対して persist_file コマンドを実行する必要があります。

armadillo:~# persist_file -v hoge
'/root/hoge' -> '/mnt/root/hoge'

これにより hoge は、 Armadillo 再起動後も保持されます。

5.3. コンテナを立ち上げる

このままの状態でも Debian と同様に任意のファイルを配置したり、コマンドを実行したりできますが、 Armadillo Base OS ではユーザーの開発する対象はコンテナ内の環境です。

コンテナを管理するためのツールとして有名なものといえば Docker が挙げられますが、 Armadillo Base OS では Docker と同じく OCI 規格に準拠した Podman というソフトウェアを使用します。 Podman では、 docker コマンドと基本的に互換性のある podman コマンドを使用してコンテナを操作します。

ここでは、 podman コマンドを使用して Debian のコンテナを作成し、その中で開発を行います。

5.3.1. Podman のデータの保存先を eMMC に変更する

コンテナ内は仮想的な Linux マシンとして利用できますが、不意の電源の遮断等でデータの破損を防いだり、 eMMC の寿命消費をおさえるため、基本的にコンテナ内での変更はメモリ上に書き込まれ、電源を切ると消えてしまいます。 あえて永続的に保存したいデータがある場合は特定のディレクトリを指定しておきます。 この仕様については製品マニュアルの「Podman のデータを eMMC に保存する」及び、「コンテナの変更を保存する」を参照してください。

一方で、この機構は長期運用時には役に立ちますが、開発の初期にはソフトウェアの追加やツールの配置を試行錯誤することが多くあるため不便だと思います。 ここでは、一旦メモリ上に書き込む機能を停止して直接 eMMC に変更を書き込む状態に変更します。

本書の後に、製品マニュアルを参照することで最終的にメモリ上に書き込む状態へ再び移行することで、長期間安定して動作するシステムを構築することが可能です。

armadillo:~# abos-ctrl podman-storage --disk 1
Creating configuration for persistent container storage
Create a snapshot of '/var/lib/containers/storage_readonly' in '/mnt/containers_storage'
Successfully switched podman-storage to disk

armadillo:~# podman pull docker.io/debian:bullseye 2
Trying to pull docker.io/library/debian:bullseye...
Getting image source signatures
Writing manifest to image destination
Storing signatures
d352b92ddb5df3919bb910c3e7f46b1cbea5a6072f96eb837d7147a3c3f84d39

1

Podman のデータの保存先を tmpfs から eMMC に変更する

2

Debian 11 (bullseye)のコンテナイメージを取得する

5.3.2. コンテナ起動用confファイルの作成

vi コマンドなどで/etc/atmark/containers/sample_container.confファイルを作成し、再起動後も消えないように persist_file します。

armadillo:~# cat /etc/atmark/containers/sample_container.conf
set_image docker.io/debian:bullseye 1
set_command sleep infinity 2
armadillo:~# persist_file -v /etc/atmark/containers/sample_container.conf
'/etc/atmark/containers/sample_container.conf' -> '/mnt/etc/atmark/containers/sample_container.conf'

1

ベースとなるコンテナイメージとして、先程 podman pull した Debian 11 のイメージを指定します

2

コンテナ起動時に実行するコマンドを指定します。ここでは sleep infinity です

5.3.3. コンテナを起動する

podman_start コマンドでconfファイルの設定どおりにコンテナが起動します。

armadillo:~# podman_start sample_container
Starting 'sample_container'
dfc9660d3ff974bd9c4e45d0cf512b96c9bff34975f21809da199b300343dfeb

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

5.3.4. コンテナ内に入る

以下のコマンドを実行して、作成したコンテナ内に入ります。

armadillo:~# podman exec -it sample_container bash

root@dfc9660d3ff9:/# cat /etc/debian_version 1
11.7

1

cat コマンドで Debian のバージョンを表示しています

Armadillo Base OS では、このように作成したコンテナの中で開発を行っていただきます。

上記の手順で作成したコンテナは Debian 環境ですので、ほとんど従来の Debian がインストールされた Armadillo-600 シリーズと同じように開発することができます。

もし既に Debian がインストールされた Armadillo-600 シリーズでソフトウェアを開発されていた場合でも、 このコンテナ内や ATDE9 などの bullseye 環境でコンパイルし直してこのコンテナ内に配置すると実行できるはずです。 必要なライブラリがある場合は今までどおり apt install コマンドでインストールできます。

5.4. コンテナを保存する

コンテナの中で exit コマンドを実行することで、コンテナから抜けて Armadillo Base OS に戻ることができます。

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

この状態で、作成したコンテナを podman commit コマンドでコンテナイメージとして保存できます。

armadillo:~# podman commit sample_container sample_container_image:latest

これで再起動後もコンテナイメージを保持し続けます。

5.5. Armadillo の起動時にコンテナを自動起動する

「コンテナ起動用confファイルの作成」のように /etc/atmark/containers/ の下に.confファイルを配置することで、 Armadillo の起動時に自動的にコンテナを起動できます。 これにより、従来の Debian での /etc/rc.local や systemd でのアプリケーションの自動実行と同等のことを実現できます。

sample_container.conf を以下のように編集し、 persist_file コマンドで永続化することで、 Armadillo 起動時に「コンテナを保存する」で保存したコンテナイメージからコンテナを起動し、コンテナ内の sample.sh を実行します。

armadillo:~# cat /etc/atmark/containers/sample_container.conf
set_image localhost/sample_container_image:latest
set_command sh sample.sh

5.6. Armadillo Base OS で開発を進める

ここまでは Armadillo Base OS での開発のスタートラインに立つまでの内容です。 これ以降の本格的な開発の手順については、 Armadillo Base OS に対応した製品マニュアルを参照してください。

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