ブログ

Armadillo Base OS:DebianからABOSへの移行手順(シェルスクリプト編)

at_shinya.matsumoto
2025年2月28日 17時54分

DebianやUbuntu等で作成したアプリケーションをArmadillo Base OSに移行する手順をご紹介します。
今回はVScodeでABOSDEを使用して行います。ABOSDEにつきましては製品マニュアルを参照下さい。

そのほかの手段としてコマンドラインでも開発が可能です。その場合は以下の資料を参考にして頂ければと思います。
Armadillo Base OS基礎セミナー資料(コマンドライン版)

移行手順

主に以下の手順で移植します。
1.VScodeを立ち上げ、シェルプロジェクトを作成する
2.シェルスクリプトを作成する
3.Dockerfileを編集する
4.app.confを編集する

※開発環境の準備については製品マニュアルを参照下さい。

1.VScodeを立ち上げ、シェルプロジェクトを作成する

VScodeでシェルプロジェクトを作成します。プロジェクト名などは任意に設定下さい。

VScodeのExplorer(左の帯の一番上のボタン=プロジェクト作成直後の画面)で、app , config , container の
3つのディレクトリが作成され、各種ファイルが入っています。これらのファイルを変更する事でコンテナを
開発していきます。

後の手順で編集する各ファイルの概要について説明します。
任意と書いているファイルは必要なものだけ編集します。
※本ブログでは最小限の編集のみ実施します。

appディレクトリ

 ・(必須)main.sh     ・・・メインスクリプトファイル

configディレクトリ

 ・(必須)app.conf    ・・・コンテナ起動ファイル(podman run コマンドの引数に相当するファイル)
 ・(任意)app.desc    ・・・オプションを指定する場合に記載(アップデート後のpoweroff、SBOM出力設定等)
 ・(任意)ssh_config   ・・・VScodeでデバッグを行う場合に使用(HostnameにArmadilloのIPアドレスを記入)
 ・(任意)sbom_config.yaml.tmpl  ・・・SBOM出力のコンフィグファイル

containerディレクトリ

 ・(必須)Dockerfile    ・・・コンテナ一括ビルド用の書式
 ・(任意)packages.txt   ・・・コンテナにインストールするパッケージを記載(Dockerfileで使用)
 ・(任意)resources    ・・・コンテナにコピーするファイルを配置(Dockerfileで使用)


上記の内、重点的に使用するファイルは主に下記となります。
次項からそれぞれの使用方法を解説します。
・(必須)main.sh
・(必須)app.conf
・(必須)Dockerfile
・(任意)packages.txt
・(任意)resources

2.シェルスクリプトを作成する

まずmain.shにはデフォルトプロジェクトではLED点滅のスクリプトが書かれていますが、中身は削除します。
既に完成しているスクリプトがある場合は張り付けて完了です。 また、スクリプトは後でデバッグを行いつつ編集が可能です。


3.Dockerfileを編集する

Dockerfileとはコンテナイメージを一括ビルドする書式になります。
Debianでいうところのユーザーランドを開発するものと考えて頂ければ分かりやすいと思います。
Dockerの書式は非常に簡単なものですので、Web等で調べて頂ければすぐに理解出来ると思います。

コンテナやコンテナイメージについてご存じない方は下記も参照頂ければと思います。
参考ブログ:コンテナの簡単な解説



①デフォルトのコンテナイメージの指定(=ディストリビューションの指定)

下記で使用するコンテナイメ―ジを指定しています。デフォルトはDebianのbullseye-slimを指定しています。

FROM docker.io/${ARCH}/debian:bullseye-slim   //コンテナイメージ変更する場合はここを変更


使用するコンテナイメージはDocker Hubから選択可能です。下記ブログを参考にして頂ければと思います。
※VScodeではイメージを探すだけで、ブログの様に直接取得する必要はありません。
参考ブログ:コンテナイメージの取得方法
参考ブログ:コンテナイメージのバージョンについて

②インストールするパッケージの指定

パッケージのインストールは下記で実施しています。

RUN apt-get update && apt-get upgrade -y \
    && apt-get install -y ${PACKAGES} \
    && apt-get clean

上記の apt-get install -y ${PACKAGES} で、packages.txt に記載したパッケージを一括で
インストールします。よって、本コマンドでパッケージをインストールする際は、packages.txt
必要なパッケージを記載下さい。
※上記はDebianでのコマンドの為、コンテナイメージを変更した場合はRUNの後のコマンドも変更します。
※RUNに続くコマンドはコンテナ内でLinuxのコマンドを使用することが出来ます。

③コピーするファイルをresourcesディレクトリにコピーする

下記の行で各種resourcesディレクトリをコンテナ内の/直下にコピーします。
コピーするファイルが無い場合は特に何も(行削除も)する必要はありません。

COPY resources [r]esources_${PRODUCT} /

例えば、コンテナ内に /bin/app.exe をコピーしたい場合は、resources/bin/app.exe とファイルを格納
しておくことでビルド時にコピーされるようになります。あらかじめ編集したコンフィグファイル等を
コピーすると楽と思います。

④任意のコマンドを実行する

上記でも使用している様にRUNの後にはLinuxコマンドを使用する事が出来ます。
ファイルの作成や編集、ユーザーの追加、ビルドなども行う事が出来ます。

《参考》
 ビルドツールは実運用では不要と思いますので、ビルドした結果だけをコピーする方法もあります。
 下記ブログの様にビルド用のコンテナを一時的に作る事でビルドツールを含まないコンテナを作ることが出来ます。
 参考ブログ:Dockerfileを用いたコンテナイメージ作成方法

4.app.confを編集する

app.confはDockerfile等でビルド済みのコンテナイメージからコンテナを起動する為の起動設定ファイルです。
podman run コマンドに相当する書式でアットマークテクノ独自書式となります。
詳細説明は製品マニュアルを参照下さい。

以下に各項目について簡単に説明します。
※記載内容の順番は不問です。


①アプリ実行のコンテナイメージを指定

以下の一文でコンテナ起動(アプリ起動)するコンテナイメージ(これからビルドするもの)を指定しています。
{{PROJECT}}はVScodeでのプロジェクト名がそのまま入りますので、VScodeでビルドした場合は特に本内容を
変更する必要はございません。

set_image localhost/{{PROJECT}}:latest


《備考》
 一般的にコンテナイメージは 任意のイメージ名:任意のタグ名 で記載します。

②vol_app,vol_dataへのアクセス権限

以下の二行はファイルやディレクトリへのアクセス権限を与えています。基本的には変更不要です。
※{{PROJECT}}はプロジェクト名のディレクトリを指しています。

add_volumes /var/app/rollback/volumes/{{PROJECT}}:/vol_app:ro
add_volumes /var/app/volumes/{{PROJECT}}:/vol_data


コンテナ内の /vol_app にアクセスすると、Armadillo Base OS側の /var/app/rollback/volumes/{{PROJECT}}
アクセスする事が出来ます。この時、コンテナ側に /vol_app を作成する必要はありません。
※/vol_app:roの:roを付ける事で読み取り専用をとしています。(:roを消す事で書き込みも可能)

《備考》
 ・/var/app/rollback/volumes/{{PROJECT}}:アプリのスクリプトを格納、ロールバック対象のデータを保存する領域
 ・/var/app/volumes/{{PROJECT}}    :アプリのデータ等を格納、ロールバック問わずデータを保存する領域
 ※上記2つのvolumesディレクトリはeMMCに直接保存可能な領域でユーザーデータを格納する事も可能です。

③その他のアクセス権限

以下はユーザー用LED点滅用のアクセス権限として追加されています。不要であれば削除可能です。
下記以外にも add_devices /dev/xxxx といったデバイスのアクセス権限も必要に応じて追加します。

add_volumes /sys:/sys


《お役立ち情報》
 流用するソースにデバイス名が含まれている場合、コンテナ内でデバイス名を変更する事でソースファイル側を
 修正する手間がなくなります。

 コンテナ内のデバイス名を変更する例)
  add_devices /dev/ttymxc2:/dev/ttymxc4
  ホスト側 :/dev/ttymxc2
  コンテナ側:/dev/ttymxc4

④ログ出力

コンテナに入力を許可し、ログを出力する場合に使用します。基本的に変更不要です。(削除も可)
コンテナに入る際には必須のオプションです。

add_args -it

⑤Armadilloの情報取得

OSのバージョンやMACアドレス、シリアル番号をコンテナで取得する際の環境変数設定です。
基本的に変更不要です。(削除も可)

add_armadillo_env


取得できる情報(環境変数)は下記です。
・AT_ABOS_VERSION ・・・ABOSのバージョン
・AT_LAN_MAC1   ・・・アットマークテクノが設定したLAN1(eth0)のMACアドレス
・AT_LAN_MAC2   ・・・アットマークテクノが設定したLAN2(eth1)のMACアドレス(G4のみ)
・AT_PRODUCT_NAME ・・・製品名
・AT_SERIAL_NUMBER ・・・個体番号

⑥コンテナ起動時のコマンド

コンテナ起動時に実行するコマンドを記載します。set_commandは一つのみ記載可能です。

set_command bash /vol_app/src/main.sh



以上で、アプリケーションの移植は完了です。
この後はVScode(ABOSDE)で Generate development swu でコンテナをビルド⇒Armadilloに書き込み、
デバッグを行います。


開発手順・TIPS集のTOPに戻る