ブログ

Armadillo Base OS:SWUpdateのdescファイル書式について

at_shinya.matsumoto
2022年2月28日 10時50分

本ブログはArmadillo Base OSにおいて、SWUpdate用ファイル(swuファイル)を作成するdescファイルの書式
について説明します。

はじめに

descファイルの作成~swuファイル作成については全てATDE環境で行います。また、ATDE環境にmkswuを
インストールしている前提で進めます。mkswuの詳細につきましては製品マニュアルをご参照願います。

SWUpdateの事例に合わせたdescファイル書式の説明

下記の変更が必要になる場合を想定し、SWUpdateする事例に合わせてdescファイルの作成方法を紹介します。

descファイル作成事例
1.SWUpdateの初期設定(初回のみ)
2.Armadillo Base OSのアップデート
3.コンテナの配置
4.ブートローダーのアップデート
5.その他コマンド
6.複数ファイルのアップデート例

1.SWUpdateの初期設定(初回のみ)

ATDE環境でmkswuをインストールした後、mkswu --initを実行すると"initial_setup.swu"が自動生成されます。
初回は本swuファイルのみでアップデートが可能です。mkswu --initについては製品マニュアルを参照ください。
この時に作成されたmkswu.confと鍵のswupdate.*は今後も使用しますので、無くさない様にご注意ください。

swuファイルをUSBメモリやSDカードのTOPに保存し、Armadillo-IoT G4が起動している時に挿入する事で、
10秒程度で初期設定(アップデート)が始まり、自動でリブート(※)します。サーバー上に置いたswuファイルで
自動/手動でアップデートする事も出来ます。
※後述するコマンドで自動でリブートしない設定やシャットダウンする設定もあります。

アップデート(自動リブート)が実施されない場合、下記ログにエラーが出ている可能性があります。

ログを見るコマンド
# tail /var/log/messages

また、別で作ったdescファイルをinitial_setup.descに組み込むことも可能です。
これにより、SDブートと同様に製品の組み込みとSWUpdateの初期設定を一度で実施出来ます。

初期設定ファイルinitial_setup.descファイルにアップデート用descファイルを組み込む
# mkswu initial_setup.desc  [アップデート用descファイル]

2.Armadillo Base OSのアップデート

アップデートする際にrootfs全体を一括アップデートするか差分アップデートするかでdescファイルの記載内容が一部異なります。
・rootfsの一括アップデート: --versionの後に"base_os”を付ける
・rootfsの差分アップデート:--versionの後に"extra_os.文字列"を付ける

①rootfsを一括アップデートする場合
ATDE環境にArmadillo Base OSのSWUイメージ作成用アーカイブファイルをダウンロードし、descファイルと
同じ階層に配置します。ここではアップデートするアーカイブファイル名を"baseos-x2-3.15.0-at.3.tar.zst"、
バージョン名を"base_os 3.15.0-at.3"とします。
ルートファイルシステムをビルドした場合も同様です。

#アーカイブファイルをArmadillo内に展開する
swdesc_tar "baseos-x2-3.15.0-at.3.tar.zst" \
	--version base_os 3.15.0-at.3

《補足》
 --versionに続く"base_os"はrootfs全体を一括アップデートする場合に指定します。
 --versionの英数字(base_osの後)の最後には数字orアルファベット(混在不可)で指定します。
 以後、アップデートする際にはバージョンをカウントアップさせる必要があります。
  例)1回目:3.15.0-at.3
    2回目:3.15.0-at.4

②rootfsを差分アップデートする場合
現在のrootfsからカーネルイメージ"Image"とデバイスツリー"armadillo_iotg_g4.dtb"をアップデートする例です。
予めアップデートするファイルはdescファイルと同階層に準備しておきます。
ここではアップデートの名前を"kernel"、バージョンを"5.10.82-1"としています。

#ファイルを配置するコマンド
swdesc_files --version extra_os.kernel 5.10.82-1 \
	--dest /boot \
	"Image" "armadillo_iotg_g4.dtb"

《補足》
 swdesc_filesコマンドは上記の"Image"と"armadillo_iotg_g4.dtb"を--destで指定されたディレクトリに配置します。
 --versionの後にはextra_os.<任意の文字列> <バージョン>を指定します。

3.コンテナの配置

コンテナを配置するにはdescファイルに下記2つのファイルを設定する必要があります。
①コンテナイメージファイル
②コンテナ設定情報を記載したconfファイル

以下にそれぞれについて説明します。
※コンテナ自動起動用のconfファイルの書式についてはこちらをご参照ください。

①コンテナイメージの設定方法
コンテナイメージ(ここではnginx_alpine.tar)を設定する方法は3種類あり、swuファイルに取り込む方法、
USBメモリからロードする方法、docker Hubからロードする方法があります。

#swuファイルに取り込む場合(descファイルと同階層に"nginx_alpine.tar"を配置)
swdesc_embed_container "nginx_alpine.tar" \
	--version container_nginx 1

#USBメモリからコンテナイメージをロードする場合
swdesc_usb_container "nginx_alpine.tar" 
	--version container_nginx 1

#Docker Hubからpullする場合
swdesc_pull_container "docker.io/nginx:alpine" \
	--version container_nginx 1

《補足》
 --versionの後の"container_nginx"は任意の文字列、"1"はバージョンです。

②confファイルの設定方法
次に、自動起動用のconfファイルを設置します。
confファイルはArmadillo-IoT G4の/etc/atmark/containers/ディレクトリに保存する事でconfファイルと同名の
コンテナをconfファイルに記載された設定で自動または手動で起動する事が出来ます。(対象のコンテナイメージが必要)

ここではnginx_startディレクトリ内にあるnginx_start/etc/atmark/containers/nginx.confをArmadillo-IoT G4の
/etc/atmark/containers/にコピーする方法(nginx_startディレクトリがルート"/"の階層)と、ディレクトリ指定した
場所にファイルをコピーする方法を説明します。

#nginx_startディレクトリごと中身をコピーする方法
swdesc_files --version extra_os.nginx 1  nginx_start

#confファイルを指定ディレクトリにコピーする方法
swdesc_files --version extra_os.nginx 1 \
	--dist /etc/atmark/containers \
	"nginx.conf"

《補足》
 --destを指定しない場合は指定したディレクトリの中身を階層ごとコピーします。
 --destを指定した場合はコピー先のディレクトリを指定し、そこに””で囲まれたファイルをコピーします。

また、Armadillo BASE OSのバージョンが古いとコンテナイメージアップデート時に下記の様なメッセージが
出ますが、問題はありません。

Mar  1 17:57:13 armadillo user.info swupdate: START Software Update started !
Mar  1 17:57:41 armadillo user.err swupdate: FAILURE ERROR : Getting image source signatures
Mar  1 17:57:41 armadillo user.err swupdate: FAILURE ERROR : Copying blob sha256:70629e5e0f0e4ebfc09f35757ae2c5d763ba324f59bd0a834064a25a0b41064a
Mar  1 17:57:41 armadillo user.err swupdate: FAILURE ERROR : Copying blob sha256:dd5b48ca5196c48f1a866eec959e88eb41d9aaf47b708e343e1b12802a421264
Mar  1 17:57:41 armadillo user.err swupdate: FAILURE ERROR : Copying blob sha256:f54bdf68737784c2a82241e97479557f10e12b21e960e3d7b57219b02b7b817c
Mar  1 17:57:41 armadillo user.err swupdate: FAILURE ERROR : Copying blob sha256:cbf85836ac31f4964e107dca2af9fbc60e27cec186294f2e745f30dde1b40370
Mar  1 17:57:41 armadillo user.err swupdate: FAILURE ERROR : Copying blob sha256:a06f2c03eab8ed581b46e0504d3898f4845e791d2d9e4178f4242a0921f8618c

4.ブートローダーのアップデート

ブートローダーのアップデートはバージョンが自動的に設定される為、下記コマンドのみでアップデートが可能です。
ここではブートローダー"imx-boot_armadillo_x2"をアップデートする例を紹介します。
このコマンドのみバージョンを記載する必要はありません。

#ブートローダーを更新する
swdesc_boot "imx-boot_armadillo_x2" 

5.その他コマンド

アップデート時にArmadillo内でコマンドを実行したい場合に使用するコマンドを紹介します。
ここではrootfsの変更には--versionの後にbase_osまたはextra_osを指定する必要があります。
base_osまたはextra_osを指定しない場合、/var/app/volumes と /var/app/rollback/volumes 以外変更できません。

#アップデート時にArmadillo-IoT G4側でコマンドを実行する
swdesc_command --version <component> <version> <command> [<more commands>]

#アップデート時にArmadillo-IoT G4側でスクリプトを実行する
swdesc_script --version <component> <version> <script>

その他変数設定
 POST_ACTION=container: コンテナのみのアップデート後に再起動を行わず、コンテナのみ再起動する
 POST_ACTION=poweroff: アップデート後にシャットダウンを行う
 POST_ACTION=wait: アップデート後に自動的に再起動は行わず、次回起動時にアップデートが適用

6.複数ファイルのアップデート例

一度に複数のファイルやコンテナイメージなどをアップデートを実施する場合の例です。
基本的な書式は今までの説明の通りで、基本的に上から実行されますが順序は関係ありません。

アップデート内容
1.デバイスツリー(dtb)を書き換える
2.コンテナイメージを読み込み
3.confファイルを配置

#DTBの入れ替え
swdesc_files --version extra_os.custom_dtb 1 \
        --dest /boot \
        "armadillo_iotg_g4.dtb"

#コンテナイメージ設定(swuファイルに組み込み)
swdesc_embed_container "con_test.tar" \
        --version container_test 1

#confファイルの設置
swdesc_files --version extra_os.container_test 1 \
        --dest /etc/atmark/containers \
        "container_test.conf"