ブログ

Armadillo Base OS:開発したArmadilloをインストールディスクを使わずに複製する

at_shinya.matsumoto
2023年8月4日 19時58分

Armadillo Base OS搭載製品で製品化する際にはmake-installerで量産用のインストールディスクを作成し、
それを使ってeMMCに書き込む事を推奨しております。
しかし、インストールディスクを使用できない場合にはswupdateでアップデートする事で書き込みを
行う事が出来ますので、本ブログではその手順を紹介します。(注意点がございますので下記熟読下さい)

注意事項

Armadillo Base OSはOSやブートローダー、コンテナは2面化管理されており、swupdateを使って
アップデートを行うと、アップデート分は現在使用していない面にコピーされます。
しかし、意図せずロールバックが発生してしまうと前のバージョンに戻ってしまい、出荷状態に戻る可能性が
ある為、この2面とも同じデータとすることで仮にロールバックしても安全な状態にしておく必要があります。

swupdateで2面書き込む方法

ここでは説明する上で、出荷状態をA面とし、もう一方をB面と仮に呼びます。
一度目のアップデートでB面に書き込み、二度目のアップデートでA面に書き込みます。


実施手順

下記の手順で実行します。
1.initial_setup.descを作成する
2.開発済みの実機から各種ファイルを取得する
3.Armadillo Base OSを準備する
4.ブートローダーを準備する
5.アップデート用descファイルを作成し、swuを作成する
6.コピー用descファイルを作成し、swuを作成する
7.USBにswuファイルをコピーし、アップデート実行して書き込む

1.initial_setup.descを作成

ABOS Development Envirementで既にinitial_setup.swuを作成済みの場合は
mkswuインストール と mkswu--init 実行はスキップしてください。


ATDE環境で、mkswuをインストールします。
バージョンが古い場合はapt upgradeでアップグレード出来ます。

mkswuインストール
[ATDE]$ sudo apt update && apt upgrade -y && apt install mkswu
 
mkswu --init実行で署名ファイル等を作成する(詳細はマニュアル参照)
[ATDE]$ mkswu --init
[ATDE]$ ls ~/mkswu/initial_setup.desc
initial_setup.desc

以上でinitial_setup.descが作成されました。

作成したファイルをアップデート用ディレクトリを作成し、コピーしておきます。
ここではファイル名は1_initial_setup.descとします。(頭の数字はアップデート順に影響します)

[ATDE]$ mkdir ~/mkswu/update_20230101
[ATDE]$ cp ~/mkswu/initial_setup.desc ~/mkswu/update_20230101/1_initial_setup.desc


2.開発済みの実機から各種ファイルを取得する

ここではArmadillo Base OSで開発したコンテナや独自に作成したファイル等を
メモリーカードにコピーします。

今回は例として以下をコピーします。実際には独自に作成/編集したファイル全てコピーします。
※コンテナイメージ以外はpersist_fileで保存したファイルが該当します。
・開発済みのコンテナイメージ
・コンテナのコンフィグファイル
・LTEのコネクションファイル
・swupdate_preserve_files(追記した場合のみ)

コピー先のUSBメモリをマウント(/dev/sda1は適宜調整)
[Armadillo]# mount /dev/sda1 /mnt 
 
◆開発済みのコンテナイメージをArmadilloからアーカイブとして保存
 (コンテナイメージ名:test_image , タグ名:v1.0.0 , 保存ファイル名は任意)
[Armadillo]# podman save -o /mnt/test_image_v1.0.0.tar test_image:v1.0.0 
 
◆コンテナのコンフィグファイルをコピー
 ここでは例としてtest.confをコピーする
[Armadillo]# cp /etc/atmark/containers/test.conf /mnt
 
◆LTEや無線LANなどのコネクションファイルを保存(ここではLTEの例)
[Armadillo]# cp /etc/NetworkManager/system-connections/gsm-ttyCommModem.nmconnection /mnt
 
◆swupdate_preserve_filesをコピー(上書き保護)
※本ファイルを編集した場合のみ(persist_file -p/-Pを使用した場合を含む)
[Armadillo]# cp /etc/swupdate_preserve_files /mnt
 
ファイル保存が終了したらUSBメモリのマウントを解除
[Armadillo]# umount /mnt
 
ATDEにUSBメモリから各種ファイルをコピー
[ATDE]$ sudo mount /dev/sdb1 /mnt       //sdb1は適宜変更
[ATDE]$ cp /mnt/[各種ファイル名] ~/mkswu/update_20230101
[ATDE]$ sudo umount /mnt
 
《注意》
 LTEやWifi等のコネクションファイルは権限を600に設定してください
 600ではない場合、コネクションが正常に動作しません。
[ATDE]$ chmod 600 ~/mkswu/update_20230101/gsm-ttyCommModem.nmconnection


3.Armadillo Base OSを準備する

Armadillo Base OSは上記でコピーしたファイル以外に変更がない場合はビルドが不要ですので
ArmadilloサイトからArmadillo Base OSアーカイブをダウンロードします。
※独自にビルドする場合は製品マニュアル参照

Armadilloサイトで対象製品のTOPページから「技術情報・ダウンロード」>「ソフトウェア」>
「Armadillo Base OS」の順に開き、ATDEに「Armadillo Base OSアーカイブ」をダウンロードします。

Armadillo Base OSアーカイブのダウンロード
[ATDE]$ wget -P ~/mkswu/update_20230101 [URL]


4.ブートローダーを準備する

ブートローダーは変更する必要がない場合はビルドが不要ですので、Armadilloサイトから
ブートローダーイメージファイルをダウンロードします。
※独自にビルドする場合は製品マニュアル参照

Armadilloサイトで対象製品のTOPページから「技術情報・ダウンロード」>「ソフトウェア」>
「ブートローダー」の順に開き、ATDEに「ブートローダーイメージ」をダウンロードします。

ブートローダーイメージのダウンロード
[ATDE]$ wget -P ~/mkswu/update_20230101 [URL]


5.アップデート用descファイルを作成し、swuを作成する

アップデート用のSWUファイルを作成します。
ここでは以下を一括で書き込むようにします。署名情報は最後にマージします。
・署名情報(initial_setup.desc)
・Armadillo Base OS
・ブートローダー
・開発済みのコンテナイメージ
・コンテナのコンフィグファイル
・LTEのコネクションファイル
・swupdate_preserve_files

アップデート用descファイルを作成する
[ATDE]$ cd ~/mkswu/update_20230101
[ATDE]$ vi tmp.desc
#Armadillo Base OS
swdesc_tar "baseos-x2-3.18.3-at.2.tar.zst" \
           --version base_os 3.18.3-at.2 \
           --preserve-attributes \
           --install-if different
 
#bootloader
swdesc_boot imx-boot_armadillo_x2_2020.04-at16
 
#version
swdesc_option component=extra_os.install version=1
 
#container & config file
swdesc_embed_container "test_image_v1.tar"
swdesc_files --extra-os \
     --dest /etc/atmark/containers/ "test.conf"
 
#LTE connection file
swdesc_files --extra-os \
     --dest /etc/NetworkManager/system-connections/ "gsm-ttyCommModem.nmconnection"
 
#swupdate_preserve_files
swdesc_files --extra-os \
     --dest /etc/ "swupdate_preserve_files"
 
署名ファイル(initial_setup.desc)とアップデートファイル(tmp.desc)を結合してswuファイル作成
※1つ目のファイル名に統合される
[ATDE]$ mkswu 1_initial_setup.desc tmp.desc
[ATDE]$ ls 1_initial_setup.swu
1_initial_setup.swu


6.コピー用descファイルを作成し、swuを作成する

ブートローダー、OS、コンテナについてアップデートが無い場合は現状の内容がアップデート先に
コピーされる為、これを利用して空のアップデートを行うswuを作成します。
POST_ACTIONは省略可能で、アップデート後にリブート(省略時)、パワーオフ、コンテナだけ再起動、
自動リブートしない(次回起動時に適用)を選択可能です。(詳細は製品マニュアル参照)

[ATDE]$ vi 2_copy.desc
#version
swdesc_option component=extra_os.install version=2
swdesc_option POST_ACTION=poweroff
swdesc_command true
 
[ATDE]$ mkswu 2_copy.desc
[ATDE]$ ls 2_copy.swu
2_copy.swu


7.USBにswuファイルをコピーし、アップデート実行

作成した2つのSWUファイルをUSBメモリのTOP階層にコピー

[ATDE]$ sudo mount /dev/sdb1 /mnt
[ATDE]$ cp 1_initial_setup.swu /mnt
[ATDE]$ cp 2_copy.swu /mnt
[ATDE]$ sudo umount /mnt

起動後(ログイン不要)のArmadilloにUSBメモリを挿入するとファイル名順に自動で書き込みが
スタートします。今回の場合swuファイルが2つの為、先に1_initial_setup.swuがアップデートされ、
再起動後に2_copy.swuがアップデートされます。
最後にPOST_ACTION=poweroffによりpoweroffすると書き込みが完了です。

アップデート完了後に/etc/sw-versionsを確認すると、descファイルで指定したバージョン名に
書き変わっている(=アップデートされている)事が分かります。

[Armadillo]# cat /etc/sw-versions
base_os 3.18.3-at.2
other_boot 2020.4-at16 
boot 2020.4-at16
extra_os.initial_setup 2
extra_os.install 2