Armadilloフォーラム

コンテナロールバックのタイミングでのデバイス認識復旧について

ito_m_iwaya

2024年6月13日 19時36分

お世話になっております。

Armadillo-640を使用しております。
コンテナであるアプリケーションを実行していましたが、
電源の瞬断が続き、コンテナがロールバックしました。

このロールバックのタイミングだと考えているのですが、
ETHに接続されているLANケーブルを認識しなくなりました。
armadilloにUSBシリアル経由でログインし、"ip addr"を実行すると
eth0のinetおよびinet6が表示されなくなっていました。

事象発生時、
"nmcli connection add con-name Wired type ethernet ifname eth0 ..."
を手動で実行して、復旧しました。

ロールバックのタイミングでETH0のデバイス認識を自動で復旧するにはどのように設定すればよいでしょうか?

宜しくお願い致します。

[使用環境]
・Armadillo-640 Linuxカーネル : v4.14-at65
・armadillo-640 Armadillo Base OS : v3.19.1-at.4

コメント

at_dominique.m…

2024年6月14日 9時59分

ito_m_iwayaさん

お世話になっています、
マルティネです。

> 電源の瞬断が続き、コンテナがロールバックしました。

返事する前に、「コンテナのロールバック」という概念がありません。
/var/app/volumes (と/var/log)の共有ディレクトリ以外は、rootfs (Armadillo Base OS の / の部分)、コンテナイメージと /var/app/rollback/volumes のコンテナボリュームディレクトリ全てが2面化されていて、ロールバックの際はコンテナイメージだけではなくネットワークの設定を含む Armadillo Base OSと/var/app/rollback/volumes も同時にロールバックされます。

「コンテナロールバック」を言わせた文書があれば訂正したいと思いますので、まだ覚えていたらその言葉を見た資料を教えていただけますでしょうか?

> 事象発生時、"nmcli ..." を手動で実行して、復旧しました。

もう復帰できたので不要かもしれませんが、ロールバック状態では「abos-ctrl rollback --reboot」で正常面に戻れますので、それで設定が戻ります。

> ロールバックのタイミングでETH0のデバイス認識を自動で復旧するにはどのように設定すればよいでしょうか?

「自動で復帰する」は故障の判断として難しいですが、最初からこうならないように変更できます:古い設定に戻れなければいいです。
そこで対処方法は二つあります:

① 設定変更の際(swupdate によるインストールか persist_file でファイルを変更して動作確認がとれた時)に「abos-ctrl rollback-clone」を実行することで、現在実行中の面とロールバック先の面が同期されます。
(すでに同期されている状態でしたら早いので、毎回起動する時に実行してもいいと考えています)
そうすると、電源の切断でロールバックが発生しても古い設定に戻らず、動作確認をとれていた /var/app/rollback/volumes のデータに戻るだけです。

② 自動ロールバックを防ぎます。
自動ロールバックはu-boot の「upgrade_available」という環境変数が設定されている時にしか発生しませんので、起動して問題なければ「fw_setenv upgrade_available」で変数を削除すると自動ロールバックが発生しなくなります。

実のところ、今まで起動時間の短い Armadillo IoT G4 が Armadillo Base OS の中心になっていたのでそういう「電源の瞬断でロールバックされた」問題はあまりみみにしていなかったが、Armadillo 640 の Armadillo Base OS 版も最近もう少し広くつかわれていて、2週間ほどまでに似たような報告がありましたのでロールバックの仕組みを見直しているところです。
今月末予定のリリースでは、何もしなくても ② に近い形になります:
* アップデートの際に起動できなかった場合は今までどおりにロールバックされます
* 起動ができた場合は自動ロールバックを無効化して、「abos-ctrl rollback」によるロールバックだけを残します
* 「abos-ctrl rollback-clone」を実行した場合は自動ロールバックを残して、今までどおりの実装になります(ただしバージョンが古くない前提:swupdate か persist_file でアップデートを行うと、次の起動で再びロールバックが自動的に次の rollback-clone まで無効になります)

abos-ctrl rollback/rollback-clone 関連でいくつかの変更を行いましたので全く同じ状態になりませんが、自動ロールバックを起動時に無効化するだけでよろしければ以下のコマンドで対応されます。
次のアップデートをインストールする際に reset_bootcount のスクリプトも更新されて、影響は残りません。

[armadillo ~]# sed -i -e 's/fw_setenv bootcount/& \&\& fw_setenv upgrade_available/' /etc/init.d/reset_bootcount
[armadillo ~]# tail -n 3 /etc/init.d/reset_bootcount
        fw_setenv bootcount && fw_setenv upgrade_available
        eend $? "Could not set bootloader env"
}
[armadillo ~]# persist_file -v /etc/init.d/reset_bootcount
'/mnt/etc/init.d/reset_bootcount' -> '/target/etc/init.d/reset_bootcount'

対応が遅くなったことでお手数をおかけして申し訳ございません。

> ・Armadillo-640 Linuxカーネル : v4.14-at65
> ・armadillo-640 Armadillo Base OS : v3.19.1-at.4

こちらは好奇心で聞いてるだけですが、Armadillo Base OS は Linux v4.14 で評価してないので、もし v4.14 で問題があった場合に教えてください(今後の別のスレッドにでも)

よろしくお願いします。

マルティネさん

アドバイスいただいた内容から、特に①で対策しようと思います。
ご教示いただき、ありがとうございます。

今後もArmadillo-640を使用していての不明点等は
フォーラムで問い合わせさせていただきますので、
よろしくお願いします。