Armadilloフォーラム

A/Bアップデートの動作及びタイミング

hata

2024年3月7日 17時20分

Armadillo Base OS でA/Bの2面を切り替えてアップデートできる機能がありますが、動作で確認したいところ、わからないところがありますので教えて下さい。
A:1 ,B:2 O (初期状態とします。A,B面があって、Aがバージョン1、Bがバージョン2を表し、Oがある方が実行している面)

・SWUアップデート ' (ダッシュ)を適用すると以下の状態になるという認識であっていますか。
A:2' O, B:2

・SDカードによるインストールディスク 3 を適用すると以下でしょうか。
また、SDカードによるインストールはSWUを使用しないためダウングレードの制約を受けないということで合っていますか。
A:3 O, B:2

・podman_partial_imageによる差分アップデート '(ダッシュ)を適用すると以下でしょうか。
また、このアップデートがセミナー資料で記載のある ”差分アップデート" でしょうか。
A:1 ,B:2' O

・初期状態から手動でロールバックして A:1 O, B:2にしてからSWUアップデート '(ダッシュ)すると以下でしょうか。
A:1 ,B:1' O

・インストールイメージをUSBメモリに作成するとき(マニュアルの4.4項)、swuインストールという表現になっていますが
A/B面の切替は発生しますか?もし発生する場合どうなりますか。

以上、よろしくお願いします。

コメント

at_syunya.ohshio

2024年3月7日 18時58分

大塩です。

以下質問にお答えします。

> ・SWUアップデート ' (ダッシュ)を適用すると以下の状態になるという認識であっていますか。
> A:2' O, B:2
前提として 同じバージョンをswupdate で入れることはできないため、2' と 2 が同じバージョンであればアップデートはできません。
2' が 2 より高いバージョンであれば、上記認識の通りアップデートすることが可能です。

> ・SDカードによるインストールディスク 3 を適用すると以下でしょうか。
> また、SDカードによるインストールはSWUを使用しないためダウングレードの制約を受けないということで合っていますか。
> A:3 O, B:2
インストールディスクイメージを使用した場合、Armadilloの中身をリセットしてアップデートを行います。
そのため、ここでいうBは空になります。

> ・podman_partial_imageによる差分アップデート '(ダッシュ)を適用すると以下でしょうか。
> また、このアップデートがセミナー資料で記載のある ”差分アップデート" でしょうか。
> A:1 ,B:2' O
上記内容につきまして、どのようなアップデートを想定しているでしょうか。
例: version 2 が現在動いている。 version 1 -> version 3 の差分アップデートを作って適用したい

> ・初期状態から手動でロールバックして A:1 O, B:2にしてからSWUアップデート '(ダッシュ)すると以下でしょうか。
> A:1 ,B:1' O
以下となります。
A:1 O, B: 1'
ロールバックでインストールされているソフトウェアに変更はありません。

> ・インストールイメージをUSBメモリに作成するとき(マニュアルの4.4項)、swuインストールという表現になっていますが
> A/B面の切替は発生しますか?もし発生する場合どうなりますか。

このときに使用しているswu は、Armadilloの情報をUSBにインストールディスクとして抜き出すためのswu ですので、アップデートを行うswuではありません。
USBにはインストールディスクイメージが作成されますので、それを使用した場合、B面が空になり、Aが更新されます。

以上です。

hataです。

ご回答ありがとうございます。
追加で確認があります。

> インストールディスクイメージを使用した場合、Armadilloの中身をリセットしてアップデートを行います。
> そのため、ここでいうBは空になります。
特に量産時、A, Bの両面ともに同じ状態にしたいと思うのですが、
インストールディスクイメージを使用した場合はどのようにしたら良いのでしょうか。

> 上記内容につきまして、どのようなアップデートを想定しているでしょうか。
> 例: version 2 が現在動いている。 version 1 -> version 3 の差分アップデートを作って適用したい
勘違いをしておりました。問題はありません。

> > ・初期状態から手動でロールバックして A:1 O, B:2にしてからSWUアップデート '(ダッシュ)すると以下でしょうか。
> > A:1 ,B:1' O
> 以下となります。
> A:1 O, B: 1'
> ロールバックでインストールされているソフトウェアに変更はありません。
もし、最初の状態でB面の起動が失敗し、A面で起動。そのままA面をアップデートした場合は
起動がB面に切り替わらず、A面の起動のままでしょうか。

以上、よろしくお願いします。

at_syunya.ohshio

2024年3月11日 10時26分

大塩です。

> 特に量産時、A, Bの両面ともに同じ状態にしたいと思うのですが、
> インストールディスクイメージを使用した場合はどのようにしたら良いのでしょうか。

以下の製品マニュアルに記載している通り、Armadilloのクローン用インストールディスクを作成することができます。
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
そのため、インストールディスク作成時にA/Bのパーティション情報もコピーされているので特別な操作は必要ないはずです。
一度A/Bに両方書き込んだ状態でクローン用インストールディスクを作成して動作確認してみてください。

> もし、最初の状態でB面の起動が失敗し、A面で起動。そのままA面をアップデートした場合は
> 起動がB面に切り替わらず、A面の起動のままでしょうか。

上記内容ですとB面が起動しない状態のままなので、A面が起動し続けることになります。

以上です。

at_dominique.m…

2024年3月11日 10時46分

hataさん、

よこからすみません、
マルティネです。

ただいまの回答は少し分かりにくいと思いましたので、訂正させてください。

> > 特に量産時、A, Bの両面ともに同じ状態にしたいと思うのですが、
> > インストールディスクイメージを使用した場合はどのようにしたら良いのでしょうか。
>
> 以下の製品マニュアルに記載している通り、Armadilloのクローン用インストールディスクを作成することができます。
> https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
> そのため、インストールディスク作成時にA/Bのパーティション情報もコピーされているので特別な操作は必要ないはずです。
> 一度A/Bに両方書き込んだ状態でクローン用インストールディスクを作成して動作確認してみてください。

具体的に、イメージを生成する時に起動している面だけがコピーされて、そのイメージをインストールすると A 面となります(B面空の状態)。

B面(現在起動していない面)がない状態(あるいはアップデート失敗の後に起動できないと判断している場合)にロールバック機能が無効になっていますので、B面の状態を特に意識する必要がありません。
それでも内容を複製したい場合は「abos-ctrl rollback-clone」コマンドで現在実行中の面をB面にコピーすることができます。

> > もし、最初の状態でB面の起動が失敗し、A面で起動。そのままA面をアップデートした場合は
> > 起動がB面に切り替わらず、A面の起動のままでしょうか。
>
> 上記内容ですとB面が起動しない状態のままなので、A面が起動し続けることになります。

こちらに関しては前提を勘違いしていますが、「A面をアップデートした場合」というのは「A面を起動している状態にアップデートをインストールして、そのアップデートされた OS に起動しました」とのことでしたら、B 面を起動します。

アップデートは必ず現在起動していない面に書込みされますので、以下の流れになります:
* A面を起動しています
* アップデートを開始します。アップデート開始とともに、A面をB面にコピーします。アップデート開始の時点で B 面は起動できない状態になります。
* アップデートが実行されます。B面にアップデートの内容が書込みされます。
* アップデートが終了されます。B面は起動できる状態にして、B面に切り替えて再起動します。
* B 面に起動します。

アップデートする前の状況(B面でエラーしていたなど)は関係ありません。

よろしくお願いします。

hataです。

SDカードによるインストールがようやく理解できました気がします。A, Bの片面だけのインストールかと思っておりました。
本トピックでの語句の意味は、以下の認識であっていますでしょうか。

インストールディスクイメージ = 初期化用のイメージ。ダウンロードかビルドして作成する。B面は空になる(というよりBが空のイメージを移す)。「イメージ」がつくとこれ。
インストールディスク = クローン用のもの(イメージ?)。開発して余計なものを削除した状態をそのまま移せる。A, B両面もそのまま。

少し前の質問に戻り、量産用のクローン用インストールディスクを作る際、A, B両面を同じにしたいです。
同じバージョンにはできませんので、空のSWUアップデートを行えばよいでしょうか。また、その適切な手順を教えて下さい。

以上、よろしくお願いします。

at_dominique.m…

2024年3月12日 14時05分

hataさん、

マルティネです。

> インストールディスクイメージ = 初期化用のイメージ。ダウンロードかビルドして作成する。B面は空になる(というよりBが空のイメージを移す)。「イメージ」がつくとこれ。
> インストールディスク = クローン用のもの(イメージ?)。開発して余計なものを削除した状態をそのまま移せる。A, B両面もそのまま。

違います。
言葉自体ですが、「インストールディスク」は単に「起動すれば Armadillo がインストールされるSDカード」で、「インストールディスクイメージ」はその SD カードのデータのことです。
初期化用と(量産の目的の)クローン用は関係なく同じ仕組みなので、こちらとしては区別せずに同じ言葉を使ってました。

クローン用のインストールディスクでも、インストールされた状態には A面しか書込みされません。B面は空です。
A面には、クローン用のインストールディスクを生成した時に起動していた面です(その時に「B」面だったとしても、インストールされると「A」面になります)

> 少し前の質問に戻り、量産用のクローン用インストールディスクを作る際、A, B両面を同じにしたいです。

お手数ですがまだ何か勘違いしていると思いますのでなんで、A,B両面を書込みしたいか教えてください。
書き込まれてない理由はただメリットがないだけです。

よろしくお願いします

hataです。

マルティネさんの追記を読まないで返信したので、とんちんかんな内容で申し訳ありません。
理解できました。

> お手数ですがまだ何か勘違いしていると思いますのでなんで、A,B両面を書込みしたいか教えてください。
> 書き込まれてない理由はただメリットがないだけです。
弊社の業界というか文化的にアップデートは、すべての機器で強制的に行う必要があり、漏れは許されません。
何が不具合でロールバックして、古いバージョンが動くことも基本的にはNGです。
今回、量産時にA,B両面に同じものにしておけば、ロールバックしても同じバージョンが動作するので、同じにしたいという意図です。

ここで困るのが、運用中にアップデートをすると、逆面に古いバージョンが残ります。
ロールバックの機能を無効にするとか、A/B両面にアップデートをお手軽に適用するような手法が欲しいなと思っていました。

以上、よろしくお願いします。

at_dominique.m…

2024年3月14日 9時54分

hataさん、

マルティネです。

> > お手数ですがまだ何か勘違いしていると思いますのでなんで、A,B両面を書込みしたいか教えてください。
> > 書き込まれてない理由はただメリットがないだけです。
> 弊社の業界というか文化的にアップデートは、すべての機器で強制的に行う必要があり、漏れは許されません。
> 何が不具合でロールバックして、古いバージョンが動くことも基本的にはNGです。
> 今回、量産時にA,B両面に同じものにしておけば、ロールバックしても同じバージョンが動作するので、同じにしたいという意図です。
>
> ここで困るのが、運用中にアップデートをすると、逆面に古いバージョンが残ります。
> ロールバックの機能を無効にするとか、A/B両面にアップデートをお手軽に適用するような手法が欲しいなと思っていました。

なるほど、了解しました。
それでしたらインストール時で A面しかないので、そこは問題ないと思いますが、各アップデートの後に困りますね。

その要望は想定していて、対応する方法は二つを用意しています:

1/ rollback の無効化は可能です。マニュアルでの説明が分かりにくいで申し訳ございません(一応 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p… に一言書いてますが、具体的なやり方を書いた方がいいですね…)

/boot/uboot_env.d/no_rollback ファイルを作成して「upgrade_available=」の内容で保存すれば、アップデート終了時に rollback 機能が無効になります。

2/ また、新しい目の機能でまだマニュアルに記載していないので恥ずかしいですが、以前の回答で記載した「abos-ctrl rollback-clone」もあります。
そのコマンドの使い方の想定は、アップデートした後に起動した際に何かの動作確認チェックを行って、成功した場合にそのコマンドで B面を同期します。それで再び rollback することはなくなります(実際に rollback しても影響はない)。
rollback の無効化のメリットはアップデートで想定外の不具合を察知することで rollback するタイミングもできますので、場合によってはいいかもしれません。
また、細かいですが upgrade_available を無効にするよりは次のアップデートを行う時に rootfs のコピーする必要がなくなるので、少し早くなります(A6E の場合はそのコピーが19秒ぐらいかかりますので、アップデートは USB メモリ等でだれかが直接に行う場合に作業する人の時間を少し節約できます)

よろしくお願いします。

hataです。

古いバージョンに対応する方法について承知しました。
実運用でどうしていくかを検討していきます。
ありがとうございました。