oruk
2024年12月24日 9時09分
お世話になっております。
baseos-6e-3.19.2-at.5まではswupdateでosのアップデートができていたのですが、baseos-6e-3.20.3以降からswupdateするとエラーが出ます。
swupdate -i baseos-6e-3.20.3-at.7.swu
SWUpdate v2023.12_git20240419-r1
Licensed under GPLv2. See source distribution for detailed copyright notices.
[INFO ] : SWUPDATE running : [main] : Running on iot-a6e Revision at1
[INFO ] : SWUPDATE started : Software Update started !
[WARN ] : SWUPDATE running : [swupdate_create_directory] : Directory /var/tmp/scripts/ cannot be created: File exists
[WARN ] : SWUPDATE running : [swupdate_create_directory] : Directory /var/tmp/datadst/ cannot be created: File exists
[INFO ] : SWUPDATE running : [install_single_image] : Installing pre_script
[INFO ] : SWUPDATE running : [read_lines_notify] : Skipping install of component boot 2020.4-at.24 (has 2020.4-at24)
[INFO ] : SWUPDATE running : [read_lines_notify] : Updating base os: copying swupdate_preserve_files
[INFO ] : SWUPDATE running : [read_lines_notify] : Waiting for btrfs to flush deleted subvolumes
[INFO ] : SWUPDATE running : [install_single_image] : Installing baseos-6e-3.20.3-at.7
[ERROR] : SWUPDATE failed [0] ERROR : archive_write_header(): Can't replace existing directory with non-directory: Directory not empty
[ERROR] : SWUPDATE failed [0] ERROR : copyimage status code is -14
[ERROR] : SWUPDATE failed [0] ERROR : Error streaming baseos-6e-3.20.3-at.7.tar.zst
swupdate_image_write failed: Broken pipe
[ERROR] : SWUPDATE failed [1] Image invalid or corrupted. Not installing ...
よろしくお願いします。
==========
製品型番:
Debian/ABOSバージョン:3.19.2-at.5
カーネルバージョン:5.10.220-1-at
3G/LTE モジュール情報 (Debianのみ):
その他:
==========
コメント
at_dominique.m…
orukさん
お世話になっています、
マルティネです。
山田さんの回答で間違いありませんのでそちらの手順でファイルを判明できましたらそれでいいんですが、
そもそもエラーメッセージにファイル名が表示されてないのは問題なのでまだでしたら添付した swupdate をインストールしてみてください。
# 添付ファイル制限で tar にパッケージを入れましたので、展開してからインストールします。 armadillo:~# tar xf swupdate-2024.05.3_git20241031-r1.apk.tar armadillo:~# apk add ./swupdate-2024.05.3_git20241031-r1.apk (1/1) Upgrading swupdate (2024.05.3_git20241031-r0 -> 2024.05.3_git20241031-r1) Executing busybox-1.36.1-r29.trigger OK: 228 MiB in 196 packages # バージョンを確認します。インストール前は r0 でした。 armadillo:~# swupdate --version SWUpdate v2024.05.3_git20241031-r1 # 確認します。自分の場合は etc/xattr.conf で再現しましたが、お客さんは別のディレクトリが問題になっているはずです。 armadillo:~# swupdate -i ...swu [...] [ERROR] : SWUPDATE failed [0] ERROR : archive_write_header(): Can't replace existing directory with non-directory for './etc/xattr.conf': Directory not empty [...] # そのディレクトリを /etc/swupdate_preserve_files から外します # vi などで削除してから必ず persist_file で保存してください。 armadillo:~# grep xattr.conf /etc/swupdate_preserve_files /etc/xattr.conf armadillo:~# sed -i -e '/xattr.conf/d' /etc/swupdate_preserve_files armadillo:~# grep xattr.conf /etc/swupdate_preserve_files armadillo:~# persist_file /etc/swupdate_preserve_files # もう一度 swupdate でアップデートをインストールすると成功するはずです armadillo:~# swupdate -i ...swu
よろしくお願いします
ファイル | ファイルの説明 |
---|---|
swupdate-2024.05.3_git20241031-r1.apk_.tar |
oruk
at_kojiro.yamada
2024年12月24日 15時17分
ディレクトリをファイル(非ディレクトリ) で上書きすることはできない
というエラーがでています。
ただ、 3.19.2-at.5 と 3.20.3-at.7 の tar.zst の中を見てみましたが、
同じパス/同名のディレクトリ → 同じパス/同名のファイル
となるような変更はありませんでした。
3.19.2-at.5 から 3.20.3-at.7 へのアップデートも試してみましたが、こちらでは問題なくアップデートできました。
persist_file 等で保存したディレクトリ名が、アップデートに含まれるファイル名と偶然同じだった、
のではないかと思います。
3.20.3-at.7 に含まれるファイルのリストを添付しますので、そのリストの1行を for 文で回して実機上を探すのが良さそうです。
もし上記の通りの単純な問題であれば、同名のディレクトリが見つかるはずです。
手順は以下のとおりです。
1. 3.20.3-at.7.filelist.txt を USB メモリを使う等して、Armadilloにコピー
2. Armadillo 上で現在動作しているrootfsのディレクトリのリストを作成
うまくできていれば、以下のような内容(冒頭部分のみ)のテキストファイルが Armadillo上の /root/3.19.2-at.5.dirlist.txt 出力されます。
3. 同名ファイルの検索
以下は、まっさらな 3.19.2-at.5 と 3.20.3-at.7 でやってみた結果です。結果が出るまで 2分程度かかります。
----
ちなみにですが…
以下のようにして find -path で探しても良かったのですが、 10分以上待っても完了しなかったので find の結果を一旦テキストファイルにする手順を選びました。
for f in $(cat 3.20.3-at.7.filelist.txt); do find /live/rootfs -type d -path "/live/rootfs$f" ; done