ブログ

Armadillo-IoT G4:Armadillo-IoT G3のユーザランドと同等のコンテナを作成する

at_takuma.fukuda
2022年8月18日 9時38分

Armadillo-IoT G3やArmadillo-IoT G3Lなどでの開発経験のあるユーザがArmadillo-IoT G4でアプリケーション開発を行う場合、
Debianコンテナを作成してその上でアプリケーション開発をしようとしても様々なコマンドが使用出来ず戸惑う事があるかと思います。
当社から配布しているArmadillo-IoT G3のユーザランドへは開発に役立つ様々なパッケージをプリインストールしていますが、
Docker HubからダウンロードしたDebianコンテナのイメージは、より素の状態に近いために、ほとんどのパッケージがインストールされていないためです。
そこで、Dockerfileを使用してArmadillo-IoT G3と同等に操作可能なコンテナを構築する方法をご案内します。

前提知識

podman buildコマンド

podman buildコマンドを使用すると、指定したコンテナイメージに変更を加えて新しいコンテナイメージを作成することが出来ます。

Dockerfile

どのようにイメージをビルドするかを示すものがDockerfileです。
基礎となるイメージを指定して、さらにそのイメージに対してファイルのコピーやコマンド実行を行う事で変更を加えます。

at-debian-builder

ATDE 等の、PCで動作しているLinux上で、Armadilloシリーズ用のarmhfアーキテクチャに対応したDebian GNU/Linux ルートファイルシステムを構築することができるツールです。
今回の手順では、このツールに含まれるスクリプトやファイルを使用します。

準備

当社から配布しているat-debian-builderには、Armadillo-IoT G3のユーザランドを構築するために必要なスクリプトや設定ファイルが含まれています。
予めダウンロードして解凍しておいてください。
Armadillo-IoTゲートウェイ G3 開発用ツール
解凍したディレクトリの直下から、aiotg3_resources\resourcesディレクトリに移動し、以下のファイルをコピーしてください。

  • fixup
  • packages

fixup

fixupにはArmadillo-IoT G3のユーザランドを構築するために必要な処理が記述されたスクリプトファイルです。
このスクリプトを実行することでArmadillo-IoT G3のユーザランドと同等の状態を構築する事が出来ます。
ただし、ハードウェア固有の設定等もあるため、下記のように編集しておきます。

#!/bin/sh
 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 
PKGS=$(cat /resources/packages | grep -v ^# | xargs)
 
 
apt-get -y update
apt-get -y install $PKGS
 
#Setup locales
sed -i 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
 
#Setup timezone
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
dpkg-reconfigure -f noninteractive tzdata
 
#user/password/hostname
useradd atmark
echo "atmark:atmark" | chpasswd
usermod -s /bin/bash -Gcdrom,floppy,audio,dip,video,plugdev atmark
mkhomedir_helper atmark
 
echo "root:root" | chpasswd
usermod -Guucp,dialout root
echo "armadillo" > /etc/hostname
 
apt-get clean

packages

fixup実行時にインストールするパッケージを列挙したファイルです。
基本的にはat-debian-builderからコピーしたままで良いですが、atmark-x1-baseやmodemmanager等は不要なので削除しておいてください。

Dockerfile

Docker HubからDebian Busterのコンテナイメージを取得し、その上でfixupを実行したイメージを再作成します。
fixupとpackagesはresourcesというディレクトリに格納しておくことを想定しています。
設定に使用したファイルはディレクトリごと削除してコンテナ上には残さないようにしています。

FROM docker.io/debian:buster
 
LABEL version="1.0.0"
 
COPY resources /resources
 
RUN chmod +x resources/fixup && resources/fixup && apt-get clean && rm -r /resources

コンテナイメージのビルド

作成したファイルをArmadillo-IoT G4上で実行してコンテナイメージをビルドします。
Armadillo-IoT G4がインターネットに繋がっていない状態では正常にビルド出来ないのでご注意ください。

Dockerfileと、resourcesディレクトリ(fixupとpackagesを格納したもの)を同じ階層に配置します。

armadillo:~# ls
Dockerfile  resources

podman buildコマンドを実行します。最後の「.」がカレントディレクトリのDockerfileを使用する事を指しています。

armadillo:~# podman build -t 〇〇(コンテナイメージ名) .

以下のようなメッセージが表示されれば完了です。

STEP 1/5: FROM docker.io/debian:buster
(中略)
Successfully tagged localhost/〇〇:latest
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

コンテナ作成・操作

ビルドしたコンテナイメージからコンテナを作成して実行します。

コンテナ作成

armadillo:~# podman run -it --name=■■(コンテナ名) 〇〇(コンテナイメージ名) /bin/bash

操作

上記コマンドでコンテナを作成すると、そのままコンテナ内に移動します。
様々なコマンドが実行可能な状態になっていますが、より操作感をArmadillo-IoT G3に近づけるために入力補完機能を有効にしましょう
入力補完機能はbash-completionパッケージによるものですが、ユーザログインが行われないと有効になりません。
以下のコマンドでrootユーザに遷移してください。

armadillo:~# su root

これで入力補完機能が有効になります。例えば「ca」と入力した後にtabキーを入力すると、caから始まるコマンドやファイル名がサジェストされます。

まとめ

以上の手順で、Armadillo-IoT G4のコンテナで、Armadillo-IoT G3のユーザランドと同等の操作が可能となります。
同じように、Armadillo-IoT G3LやArmadillo-X1のユーザランドと同等のコンテナを作る事も出来ます。
ただし、一つのコンテナに多くのパッケージをインストールするとコンテナサイズが肥大化します。
開発初期段階ではリッチなコンテナを使って開発を加速させ、製品運用時までによりシンプルなコンテナを構築しなおすことをおすすめいたします。