ブログ

Armadillo Base OS:通信容量制限のある状況下でのアップデート方法(スクリプトで実行)

at_shinya.matsumoto
2024年10月25日 9時33分

本ブログでは、SIMの契約上の都合で一定の容量を超えて通信できない場合を想定し、アップデートファイルを
分割してダウンロードし、Armadillo側でファイル結合してアップデートする方法をご紹介します。
※別途アップデートファイルを配置するサーバーが必要になります。

Armadillo Twinを使用する場合は、各Armadilloに個別にコマンドを実行させることが出来る為、下記手順を大幅に
簡略化する事が出来ます。
Armadillo Twinについて

Armadillo Twinで実行する方法は下記ブログを参照下さい。
Armadillo Base OS:通信容量制限のある状況下でのアップデート方法(Armadillo Twinで実行)

主な手順

1.アップデートファイルを分割する
2.アップデートファイルとmd5をサーバーに配置する
3.アップデート用スクリプトを実行する
4.ABOS WebのREST APIを使用してアップデートを実行する

1.アップデートファイルを分割する

ATDE環境などで下記コマンドを実行してダウンロードしたいアップデートファイルを分割します。
ここでは例として、Armadillo Base OSを25MBずつに分割してアップデートしてみます。

分割前のファイルを確認
[ATDE]$ ls -l
合計 65M
-rw-r--r-- 1 atmark atmark 67589120  9月 25 10:49 baseos-x2-3.20.3-at.3.swu
 
ファイル分割を25MBずつに分割(最後のファイルサイズは残り)
[ATDE]$ split -b 25MB baseos-x2-3.20.3-at.3.swu
[ATDE]$ ls -l
合計 129M
-rw-r--r-- 1 atmark atmark 67589120  9月 25 10:49 baseos-x2-3.20.3-at.3.swu  //分割前のファイル
-rw-r--r-- 1 atmark atmark 25000000 10月 25 10:19 xaa  //分割後のファイルA
-rw-r--r-- 1 atmark atmark 25000000 10月 25 10:19 xab  //分割後のファイルB
-rw-r--r-- 1 atmark atmark 17589120 10月 25 10:19 xac  //分割後のファイルC
 
ダウンロードしたファイルが正常にダウンロード出来ているか確認用に、md5も作成しておくと良いです。
※Armadillo Base OSの場合はArmadilloサイトにmd5を用意しています。
[ATDE]$ md5sum baseos-x2-3.20.3-at.3.swu > baseos-x2-3.20.3-at.3.swu.md5
[ATDE]$ ls
baseos-x2-3.20.3-at.3.swu  baseos-x2-3.20.3-at.3.swu.md5  xaa  xab  xac


2.アップデートファイルとmd5をサーバーに配置する

Armadilloからアクセス可能なサーバーを立てて、下記ファイルを配置します。
・xaa
・xab
・xac
・baseos-x2-3.20.3-at.3.swu.md5 (任意)

3.アップデート用スクリプトを実行する

ここはどの様に作るかは様々な方法が考えられる為、スクリプトの内容は記載しておりません。
ポイントとなる部分を含めてアップデートの流れについて参考手順として記載しますので参考にしてください。
※Armadillo Twinでは外部からコマンド実行できる為、この作業を簡略化出来ます。


①アップデート用スクリプトをダウンロード

 スクリプトをダウンロードする為にコンテナ内でcrontabを使ったり、アプリケーション内にスクリプトを
 ダウンロード⇒実行するような仕組みを作っておきます。

②今回ダウンロードしたスクリプトを実行する必要があるか確認

 前回と同じスクリプトの場合
 ・既にインストールしているバージョンと同じなら実行不要
 ・スクリプトを実行途中の場合は続きから実行

 前回と異なるスクリプトの場合
 ・前回スクリプトを破棄するか、実行中の処理があれば継続するかを判断

 《備考》
  ・Armadilloにはバージョン情報が管理されており、アップデートファイルにも同じ情報が含まれています。
   Armadillo内のバージョン情報:/etc/sw-versions
   アップデートのバージョン:アップデート作成時の.descファイル
  ・現在より古いバージョンはインストールできない為、アップデートする際はバージョンが新しくなるように
   アップデートファイルを作成下さい(swu作成時の.descファイルでバージョンを指定します)

③スクリプトを実行し、分割したファイルを順次ダウンロード

 curlコマンドなどでダウンロードし、保存先は /var/app/volumes以下を指定します。(eMMCに保存出来ます)
 本ブログでは例として/var/app/volumes/swuに保存する事とします。また、コンテナからは/swuでマウントします。

 app.confには下記の様に設定します。トークンについてはマニュアルやこちらのブログを参照下さい。
 あらかじめ/var/app/volumes/swuのディレクトリは作成しておきます。

add_volumes /var/app/volumes/swu:/swu
add_args --env=AUTH="Authorization:Bearer [トークン]"


④ダウンロードしたファイルを結合

 ダウンロードしたファイルは下記の様に結合できます。
 任意でダウンロードしたファイルでmd5を作成してbaseos-x2-3.20.3-at.3.swu.md5と比較します。

結合順に注意してファイルを結合(下記はxaa , xab , xac の順に結合)
[container]# cat /swu/xa* > /swu/baseos-x2-3.20.3-at.3.swu


4.ABOS WebのREST APIを使用してアップデートを実行する

ABOS WebのREST APIを使用して、コンテナ内からswupdateコマンドを実行します。
書式ファイル(.desc)で再起動しない指定にしない限り、アップデートが完了すると自動で再起動します。

コンテナ内からアップデートファイルを指定して実行
[container]# curl -k -H "$AUTH" \
-d url=file:///var/app/volumes/swu/baseos-x2-3.20.3-at.3.swu \
https://host.containers.internal:58080/api/swu/install/url


以上で完了となります。