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のユーザランドと同等のコンテナを作る事も出来ます。
ただし、一つのコンテナに多くのパッケージをインストールするとコンテナサイズが肥大化します。
開発初期段階ではリッチなコンテナを使って開発を加速させ、製品運用時までによりシンプルなコンテナを構築しなおすことをおすすめいたします。