tmygt
2024年3月7日 21時45分
SWUpdateを試しているのですが、 Cleanup of old images failed が発生して失敗します。
[ERROR] : SWUPDATE failed [0] ERROR : ---------------------------------------------- [ERROR] : SWUPDATE failed [0] ERROR : /!\ image app in /target/etc/atmark/containers/app.conf not found in image store ! [ERROR] : SWUPDATE failed [0] ERROR : ---------------------------------------------- [ERROR] : SWUPDATE failed [0] ERROR : ---------------------------------------------- [ERROR] : SWUPDATE failed [0] ERROR : /!\ cleanup of old images failed: mismatching configuration/container update? [ERROR] : SWUPDATE failed [0] ERROR : ---------------------------------------------- [ERROR] : SWUPDATE failed [0] ERROR : Command failed: sh $1 /var/tmp/scripts_post.sh [ERROR] : SWUPDATE failed [0] ERROR : Error streaming enc.zst.scripts_post.sh [ERROR] : SWUPDATE failed [1] Image invalid or corrupted. Not installing ... [INFO ] : No SWUPDATE running : Waiting for requests... [ERROR] : SWUPDATE failed [0] ERROR : SWUpdate *failed* !
ログに表示される appというイメージはすでに使っておらずABOSから削除しています。app.confは現在はbaseというイメージを参照しています。
swuファイルにはconfファイルとイメージを含めています。confファイルはbaseイメージを参照していて、baseイメージも含めています。
下記を参考にしているのですが、現状のABOS上のconfファイルおよびSWUに含まれるconfファイルからappへの参照はすでに削除しているにもかかわらず引き続きこのエラーが表示されます。
https://armadillo.atmark-techno.com/faq/swupdate-troubleshooting-abos
おそらくどこかに過去の設定が残っているのだと思うのですが、どこを確認すればよいでしょうか?
コメント
tmygt
太田さん
コメントありがとうございます。
実行しました。(実際のログは開発中のアプリケーション名が入ってしまっているので、適宜置き換えています。)
armadillo:~# abos-ctrl mount-old /usr/sbin/abos-ctrl: line 22: is_mountpointd: not found Mounted /dev/mmcblk2p1 to /target successfully. Unmount it with 'abos-ctrl umount /target' when done armadillo:~# podman --storage-opt additionalimagestore=/target/var/lib/container s/storage_readonly images REPOSITORY TAG IMAGE ID CREATED SIZE R/O localhost/base latest dce15ce28365 17 hours ago 453 MB true <none> <none> c5291f7aeb40 2 weeks ago 453 MB true armadillo:~# cat /target/etc/atmark/containers/ README app.conf alpine.conf.example at-debian-image.conf.example armadillo:~# cat /target/etc/atmark/containers/app.conf # TODO: 本番環境用設定を作成する。 armadillo:~#
/target/etc/atmark/containers/app.conf が原因だと考えています。
この /target/etc/atmark/containers/app.conf ですが、descファイルに記載しているものではあるのですが、swuビルド時に同名の他のdescファイルで上書きしているつもりでした。
device.descとdevice-debug.desc2つのdescを用意しています。device-debug.desc では、デバッグ時に有効としたい設定を入れていて(例えばrootでのSSH有効化)、それぞれのdescで/target/etc/atmark/containers/app.confを追加しています。
下記の様にmkswuを実行することで、device-debug.descで追加したapp.confでdevice.descのapp.confが上書きされる想定でした。
mkswu -o image.swu device.desc device-debug.desc
追加で下記2点を質問させてください。
1. 上記の様なmkswu/descの使い方はできないのでしょうか
2. 空のconfファイル(set_imageを書いていないファイル)では暗黙的にファイル名と同名のコンテナがset_imageされるのでしょうか
よろしくお願いいたします。
at_satoshi.ohta
お世話になっております。
太田です。
回答の順番が逆になってしまいますが、
> 2. 空のconfファイル(set_imageを書いていないファイル)では暗黙的にファイル名と同名のコンテナがset_imageされるのでしょうか
こちらはそのとおりです。app.confに set_image がない場合は app というコンテナイメージを参照しようとします。
> 1. 上記の様なmkswu/descの使い方はできないのでしょうか
可能だと思います。
上記のように2つのdescファイルを使って SWU ファイルを作成すると、ファイルのコピー先が同じ場合、後の方の desc ファイルで上書きされます。
今回の場合は、device-debug.desc の方の app.conf が優先されて上書きされます。
ファイルのコピー先が被らない場合は、それぞれのdescファイルで指定した Armadillo のコピー先に問題なくコピーされるはずです。
前の返信のエラーは device-debug.desc のapp.conf が空であったため、app というコンテナイメージがあるという前提でコンテナを起動しようとしたことから起きたと考えられます。
これは、device-debug.desc のapp.conf に set_image として localhost/base を指定することでエラーを防げると思います。
どうぞよろしくお願いいたします。
tmygt
太田さん
回答ありがとうございます。
> > 2. 空のconfファイル(set_imageを書いていないファイル)では暗黙的にファイル名と同名のコンテナがset_imageされるのでしょうか
> こちらはそのとおりです。app.confに set_image がない場合は app というコンテナイメージを参照しようとします。
わかりました。
> > 1. 上記の様なmkswu/descの使い方はできないのでしょうか
>
> 可能だと思います。
> 上記のように2つのdescファイルを使って SWU ファイルを作成すると、ファイルのコピー先が同じ場合、後の方の desc ファイルで上書きされます。
> 今回の場合は、device-debug.desc の方の app.conf が優先されて上書きされます。
> ファイルのコピー先が被らない場合は、それぞれのdescファイルで指定した Armadillo のコピー先に問題なくコピーされるはずです。
>
> 前の返信のエラーは device-debug.desc のapp.conf が空であったため、app というコンテナイメージがあるという前提でコンテナを起動しようとしたことから起きたと考えられます。
こちらはdescファイルを再度見直したところ、原因がわかりました。device-debug.desc内のswdesc_optionで記述するバージョンを更新し忘れていました。device.confの内容を書き込み後、device-debug.descは更新が無いと判断されデバッグ用のconfファイルがコピーされなかったのだと考えています。
これを踏まえて追加で質問させてください。
1. 1つのdescファイルにDEBUG時のみ有効になるような記述をする方法は無いでしょうか?
2. 複数のdescファイル(コンポーネント)で同じファイルを取り扱う際に気を付けるべきことはありますか? そもそも避けたほうがよいですか?
tmygt
at_satoshi.ohta
太田です。
> 1. 1つのdescファイルにDEBUG時のみ有効になるような記述をする方法は無いでしょうか?
descファイル内にシェルスクリプトを書くことができます。
1つのやり方として、シェル内のある環境変数の値を判断してDEBUG時に有効にする機能を追加するかどうかを決める
という方法が考えられます。
例えばDEBUGという環境変数を使うとすると、device.desc内に下記のようにif文を書けます。
if [ "${DEBUG}" = "true" ]; then DEBUG時に有効にしたい内容 fi
device.descからSWUファイルを作成するときに、ATDE 上で下記のようにmkswuを実行するとDEBUG時のみ有効にする機能を追加した SWU を作成することができます。
DEBUG=true mkswu -o image.swu device.desc
宜しくおねがいします。
tmygt
at_satoshi.ohta
2024年3月8日 11時37分
お世話になっております。
太田です。
このエラーは、confファイルのset_imageに書かれているコンテナイメージがArmadilloに存在しない場合に発生します。
確認のため、swupdateのエラーが発生したArmadillo上でいくつかコマンドを実行して頂けますでしょうか?
はじめに、
を実行してください。swupdateが失敗した面が /target にマウントされます。その後に、
を実行していただくと、swupdateが失敗した面でインストールしたコンテナイメージとconfファイルを確認できます。
その結果を教えていただければ幸いです。
よろしくお願いいたします。