kn_kobayashi
2023年3月2日 18時56分
お世話になっております。
swupdateを使用して、「コンテナだけ再起動」(電源は再起動しない)を実現しようとしております。
色々参考にしながら、下記の様にdescを作成し、mkswuにてswuイメージを作成しました。
--------------------------------------
swdesc_option version=1
swdesc_option POST_ACTION=container
swdesc_embed_container "sample-container.tar" \
--version sample-container 1
swdesc_files --extra-os --dest /etc/atmark/containers "sample-container.conf"
--------------------------------------
作成したswuをいざArmadilloで実行すると、どうしても再起動がかかってしまいます。
一番最後の「swdesc_files --extra-os --dest /etc/atmark/containers "sample-container.conf"」を
削除すると、再起動がかかりません。
ということで、質問なのですが、
「swdesc_option POST_ACTION=container」
こちらの設定は「コンテナだけが更新された場合は再起動しない」という意味であり、
一番最後の「swdesc_files --extra-os --dest /etc/atmark/containers "sample-container.conf"」が
rootfsの変更に引っかかり、コンテナだけの変更とはみなされず再起動がかかっている、
という認識で宜しいでしょうか。
ということはconfファイルを更新する場合は必ず再起動がかかる、ということになりますでしょうか。
またこれは要望になりますが、
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-base-os-dev…
上記のページのどこをよんでも、「--extra-os」の説明がなく、分かりづらかったです。
まったく別の「個人ブログ」で「--extra-os」についての記載を発見しましたが、
上記のページにもご記載いただけないでしょうか。
コメント
kn_kobayashi
大分遅くなりましたが、ご回答ありがとうございました。
追加で質問になります。
①swdesc_option version=XXですが、swupdateを実施するたびに、この数字を上げていかないと、アップデート出来ない仕様でしょうか。
ちょっとだけ修正したい!っていう場合でも、毎回数字が上がっていく為、不便に感じております。
②version=1からやり直したい場合、以下の手順を試してから、swupdate -iを試していますが、
「Waiting for btrfs to flush deleted subvolumes」でフリーズしてしまうことが多々あります。
何か間違っているのでしょうか。
・/etc/sw-version から、該当コンテナのバージョンを消す
・podman rmで、コンテナを削除する
③versionが変わっていなくても強制上書きするモードはないのでしょうか。
「下がっている場合を許可する」はあったと思うのですが、「同じ場合上書き」を許可したいです。
よろしくお願い致します。
at_dominique.m…
kn_kobayashiさん、
マルティネです。
> ①swdesc_option version=XXですが、swupdateを実施するたびに、この数字を上げていかないと、アップデート出来ない仕様でしょうか。
> ちょっとだけ修正したい!っていう場合でも、毎回数字が上がっていく為、不便に感じております。
はい、毎回上げる仕組みです。
面倒のは承知の上で、丁度今月のアップデート(3月28日リリース予定)で mkswu --update-version file.desc
の新しいコマンドを用意しました。
試したい場合は https://github.com/atmark-techno/mkswu/ をクローンして直接に git のディレクトリから ./mkswu で実行できますが、リリースまで手動でバージョンの管理でもいいです。
> ②version=1からやり直したい場合、以下の手順を試してから、swupdate -iを試していますが、
> 「Waiting for btrfs to flush deleted subvolumes」でフリーズしてしまうことが多々あります。
このメッセージは予備の /var/app/volumes やコンテナイメージを消した後に、カーネルが本当に削除されたことを待っています。
scheduling やデータの量によって、十秒か一分もかかる場合はありますが、完全に固まることはないはずです。(一応、30分の制限を設定していますが、30分かかったら何かの問題があります)
フリーズと言うのは、どれぐらいの時間でしょうか?
本当に長い時間であれば少し情報を伺いたいですが、よろしいでしょうか?
> 何か間違っているのでしょうか。
> ・/etc/sw-version から、該当コンテナのバージョンを消す
大量の armadillo の場合におすすめしませんが、手元の armadillo でテストする分には問題ありません。
消されたバージョンの分が再びインストールされます。
> ・podman rmで、コンテナを削除する
これも問題ありませんが、
abos-ctrl podman-storage --disk
の場合ですね?
(読み取り専用の subvolume ではない、の確認です)
> ③versionが変わっていなくても強制上書きするモードはないのでしょうか。
> 「下がっている場合を許可する」はあったと思うのですが、「同じ場合上書き」を許可したいです。
下がった場合は --install-if different
で指定できますね。
同じ場合は swupdate が対応してくれないのでどうしようもないですが、どうしてもインストールしたい場合はバージョンを指定せずに swdesc_option FORCE_VERSION
で強制的にインストールさせます。
(バージョンが指定された場合にあ、FORCE_VERSION と関係なく使われていますので、swdesc_option version の行も消す必要があります)
この場合は/etc/sw-versions に何も記載されてませんし、ネットワークでアップデートする場合に難度もアップデートされてしまいますので開発の時だけに使ってください。
個人的には mkswu --update-version を上手く使っていただけたら、通常に上がる形でいいと思いますが、その対応が遅くなってすみませんでした。
よろしくお願いします。
at_dominique.m…
2023年3月3日 8時50分
kn_kobayashiさん、
> 作成したswuをいざArmadilloで実行すると、どうしても再起動がかかってしまいます。
> 一番最後の「swdesc_files --extra-os --dest /etc/atmark/containers "sample-container.conf"」を
> 削除すると、再起動がかかりません。
はい、os の部分を更新する際に再起動でしか切り替えできませんので、base_os か --extra-os を利用した swu ではどうしても再起動してしまいます。
> ということで、質問なのですが、
> 「swdesc_option POST_ACTION=container」
> こちらの設定は「コンテナだけが更新された場合は再起動しない」という意味であり、
> 一番最後の「swdesc_files --extra-os --dest /etc/atmark/containers "sample-container.conf"」が
> rootfsの変更に引っかかり、コンテナだけの変更とはみなされず再起動がかかっている、
> という認識で宜しいでしょうか。
> ということはconfファイルを更新する場合は必ず再起動がかかる、ということになりますでしょうか。
はい、そのとおりです。 conf ファイルは OS の部分に入っていますので、この場合は「set_image my_container:latest」などで固定しないことをおすすめします。コンテナのバージョンは swu のバージョンで管理していますので、コンフィグファイルと swdesc の二ヶ所で管理しなくてもいいと考えています。
swu の desc ファイルに複数のバージョンを指定できますので、コンフィグを念のため(古いイメージの更新や出荷状態の初期書き込み用)に入れたい場合は別のバージョンを指定することで、コンフィグの更新の場合のみ再起動することになりますが、どうでしょうか?
swdesc_option version はその下にある swdesc_*コマンドに適用されますので、以下の二つのコンフィグのどれかでできると思います。使いやすそうな方を試してみてください。
マニュアルには「 swdesc_option POST_ACTION=container: コンテナのみのアップデート後に再起動を行いません。 コンテナの中身だけをアップデートする場合、Armadillo-IoT ゲートウェイ G4を再起動せずにコンテナだけを再起動させます。 」で説明されていますが、「コンテナの中身だけをアップデートする場合」ではなく「Armadillo Base OS の更新がない場合」にした方がいいかもしれません。
改めて考えて更新したいと思います。
> またこれは要望になりますが、
> 上記のページのどこをよんでも、「--extra-os」の説明がなく、分かりづらかったです。
> まったく別の「個人ブログ」で「--extra-os」についての記載を発見しましたが、
> 上記のページにもご記載いただけないでしょうか。
そうですね、マニュアルの「9.8.5. mkswu の desc ファイル」[1]の最初の方にバージョンの説明をして、「swdesc_* コマンドに --extra-os オプションを追加すると、 component に自動的に extra_os. を足します。」で --extra-os の説明になっているつもりでしたが、流れではかなり分かりにくいですね。
この助言もありがたくいただいて、3月のアップデートで改善したいと思います。
[1] https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
よろしくお願いします。