Armadilloフォーラム

コンテナからのRest API経由のユーザーデータの一括削除について

takamura.eiji

2025年7月31日 10時00分

==========
製品型番:AG9130-C03D0
Debian/ABOSバージョン:v3.21.3-at.14
==========

マニュアル「6.12.6.16. Rest API : ユーザー設定とユーザーデータの管理」に従い、Rest APIからユーザーデータ一括削除を試してみたところ、
ホスト OS 上で実行するとマニュアル例のように実行されて再起動されますが、コンテナ上で実行すると以下のようになります。

■コンテナOS上で実行した場合
armadillo:/# AUTH="Authorization: Bearer xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
armadillo:/# alias curl_rest='curl -k -H "$AUTH" -w "\nhttp code: %{http_code}\n" '
armadillo:/# curl_rest -X POST "https://127.0.0.1:58080/api/reset_default"
ssse-flw: EmbSe_Init(): Entry
App :INFO :Using PortName='/dev/i2c-6:0x48' (ENV: EX_SSS_BOOT_SSS_PORT=/dev/i2c-6:0x48)
sss :INFO :atr (Len=35)
00 A0 00 00 03 96 04 03 E8 00 FE 02 0B 03 E8 08
01 00 00 00 00 64 00 00 0A 4A 43 4F 50 34 20 41
54 50 4F
sss :WARN :Communication channel is Plain.
sss :WARN :!!!Not recommended for production use.!!!
ssse-flw: Version: 1.0.5
ssse-flw: EmbSe_Init(): Exit
ssse-flw: Control Command EMBSE_LOG_LEVEL; requested log level = 4
{"stdout":"rm -f /etc/NetworkManager/system-connections/*\n"}
{"stdout":"persist_file -r /etc/NetworkManager/system-connections\n"}
{"stdout":"persist_file -r /etc/dnsmasq.d\n"}
{"stdout":"rc-service dnsmasq restart\n"}
{"stdout":"/etc/init.d/iptables save\n"}
{"stdout":"sed -i -e '/NETAVARK/d' /etc/iptables/rules-save\n"}
{"stdout":"persist_file /etc/iptables/rules-save\n"}
{"stdout":"podman stop -a\n"}
{"stdout":"reformatting /var/log\n"}
{"stdout":"deleting /var/app/volumes/*\n"}
armadillo:~#

/var/app/volumes の削除の段階?でコンテナ OS が終了したようでホスト OS に戻されます。
コンテナ OS では中途半端?に終わっているのか再起動もされません。
下記について、ご見解をお願いいたします。

・手順は正しいでしょうか?
・本動作は想定通りの動作でしょうか?
・内部的には abos-ctrl reset-default -f が実行されている認識でよろしいでしょうか?
・自動的に再起動までされるようにするにはどうすればいいのでしょうか?

コメント

at_dominique.m…

2025年7月31日 11時42分

takamura.eijiさん

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

> /var/app/volumes の削除の段階?でコンテナ OS が終了したようでホスト OS に戻されます。
> コンテナ OS では中途半端?に終わっているのか再起動もされません。

申し訳ございせん、abos-web 側の実装の問題です。

おっしゃる通りに、reset-default コマンドで /var/app/volumes のデータを削除する前にコンテナを停止していますが、
abos-web で http client が切断した際にコマンドを停止させるか、コマンドを実行しさせるかのオプションがあって、
reset-default で最後まで実行させるようにしてませんでした。

修正はもうできてませうので、8月末のアップデートで正常に動作するようになります。

参考までに以下のパッチです

diff --git a/src/settings/restapi_reset_default.rs b/src/settings/restapi_reset_default.rs
index aa1b553a2f08..afe361c57589 100644
--- a/src/settings/restapi_reset_default.rs
+++ b/src/settings/restapi_reset_default.rs
@@ -20,7 +20,11 @@ async fn restapi_reset_default(
 ) -> impl IntoResponse {
     json_stream_command(
         vec!["reset_default.sh".to_string()],
-        &CommandOpts::default(),
+        &CommandOpts {
+            // This should not stop halfway
+            stream_ignore_output_errors: true,
+            ..Default::default()
+        },
         None,
     )
 }

他のコマンドでコンテナがいきなりなくなる問題はない(かすでに対応している)と思いますが、
ついでに一回り確認します。報告ありがとうございました。

大変お手数ですが、試したい場合の abos-web のビルド手順は用意してませんので、もし急ぎじゃなければ来月のアップデートを待っていただければ幸いです。
その前に試したい場合はテスト用の apk を準備しますので言ってください。

よろしくお願いします

ご回答ありがとうございました。

> その前に試したい場合はテスト用の apk を準備しますので言ってください。

是非試したいので、apkをご用意頂けないでしょうか?

at_dominique.m…

2025年8月1日 14時16分

takamura.eijiさん

> 是非試したいので、apkをご用意頂けないでしょうか?

お待たせしました。
添付した tar アーカイブに動作確認用の apk でご確認ください。

armadillo:~# tar xvf abos-web.tar 
abos-web/
abos-web/abos-web-1.10.0-r5.apk
abos-web/abos-web-openrc-1.10.0-r5.apk
armadillo:~# persist_file -a add ./abos-web/abos-web-*apk
(1/2) Upgrading abos-web (1.9.0-r0 -> 1.10.0-r5)
(2/2) Upgrading abos-web-openrc (1.9.0-r0 -> 1.10.0-r5)
Executing busybox-1.37.0-r12.trigger
OK: 214 MiB in 197 packages
Install succeeded, but might not work in the running system
Please reboot if installed program does not work
armadillo:~# reboot
 
 
/ # curl $AUTH -X POST https://host.containers.internal:58080/api/reset_default
{"stdout":"rm -f /etc/NetworkManager/system-connections/*\n"}
[...]
{"stdout":"deleting /var/app/volumes/*\n"}
armadillo:~#

/var/app/volumes 削除でコンテナが今まで通り停止されますが、コマンドが最後まで実行されて再起動します。

また、ABOS 3.21.3-at.14 にある reset-default コマンドは何らかのエラーの場合に途中で失敗して再起動しない可能性はありますが、
ABOS 3.22.1-at.1 に更新していただければコンテナ起動後のエラー処理を改善して、
コンテナが停止した後に再起動せずに自ら止まる事がなくなったはずですので、更新も推奨します。
(abos-ctrl update コマンド等で)

よろしくお願いします。

ファイル ファイルの説明
abos-web.tar A9E用のaarch64パッケージです。

> takamura.eijiさん
>
> > 是非試したいので、apkをご用意頂けないでしょうか?
>
> お待たせしました。
> 添付した tar アーカイブに動作確認用の apk でご確認ください。

添付の apk で ABOSWEB を更新した後に一括削除API(/api/reset_default)を再度試しました。
一括削除後に再起動されることを確認しました。

ただ他の API で問題を見つけましたので、ご指摘させて頂きます。
マニュアル「6.12.6.5. Rest API : SWU」の "SWU をファイルアップロードでインストール" が正しく動作していません。
以下コンテナ上より REST API で試したコンソールログになります。

armadillo:/vol_app/build# curl_rest -F swu=@"/vol_app/build/release.swu" https://127.0.0.1:58080/api/swu/install/upload
ssse-flw: EmbSe_Init(): Entry
App :INFO :Using PortName='/dev/i2c-6:0x48' (ENV: EX_SSS_BOOT_SSS_PORT=/dev/i2c-6:0x48)
sss :INFO :atr (Len=35)
00 A0 00 00 03 96 04 03 E8 00 FE 02 0B 03 E8 08
01 00 00 00 00 64 00 00 0A 4A 43 4F 50 34 20 41
54 50 4F
sss :WARN :Communication channel is Plain.
sss :WARN :!!!Not recommended for production use.!!!
ssse-flw: Version: 1.0.5
ssse-flw: EmbSe_Init(): Exit
ssse-flw: Control Command EMBSE_LOG_LEVEL; requested log level = 4
{"stdout":"SWUpdate v2024.12.0-git20250421-r0\n"}
{"stdout":"\n"}
{"stdout":"Licensed under GPLv2. See source distribution for detailed copyright notices.\n"}
{"stdout":"\n"}
{"stdout":"[INFO ] : SWUPDATE running : [print_registered_handlers] : \tno handler registered.\n"}
{"stdout":"[INFO ] : SWUPDATE running : [main] : Running on iot-a9e Revision at1\n"}
{"stdout":"[INFO ] : SWUPDATE started : Software Update started !\n"}
{"stdout":"[INFO ] : SWUPDATE running : [install_single_image] : Installing pre_script\n"}
{"stdout":"[INFO ] : SWUPDATE running : [read_lines_notify] : No base os update: copying current os over\n"}
{"stdout":"[WARN ] : SWUPDATE running : [read_lines_notify] : ----------------------------------------------\n"}
{"stdout":"[WARN ] : SWUPDATE running : [read_lines_notify] : WARNING: Persistent storage is used for podman, stopping all containers before updating\n"}
{"stdout":"[WARN ] : SWUPDATE running : [read_lines_notify] : ----------------------------------------------\n"}
armadillo:~#

処理中の段階?でコンテナ OS が終了したようでホスト OS に戻されます。
app.desc で swdesc_option POST_ACTION=reboot を指定しているにも関わらず、再起動されません。
システムを手動で再起動して確認してもコンテナの更新はされていませんでした。
なおホスト OS 側で実施したら正しく動作しました。
本 API も修正頂きたいです。

at_dominique.m…

2025年8月4日 10時30分

マルティネです。

> 添付の apk で ABOSWEB を更新した後に一括削除API(/api/reset_default)を再度試しました。
> 一括削除後に再起動されることを確認しました。

ご確認ありがとうございます。

> ただ他の API で問題を見つけましたので、ご指摘させて頂きます。
> マニュアル「6.12.6.5. Rest API : SWU」の "SWU をファイルアップロードでインストール" が正しく動作していません。
> 以下コンテナ上より REST API で試したコンソールログになります。

こちらはまた別の問題で、仕様通りの動きです。

reset-default と違っては http クライエントが停止されても最後まで実行するように設定されていますが、SWU ファイルを一時保存してインストールしているのではなくストリーミングの形でインストールしていますので、SWU ファイルの転送が完了されてない状態にコンテナを途中で停止してインストールが失敗します( ABOS 側の /var/log/messages の swupdate ログを確認していただければ納得できると思います。また、reset-default と違って「綺麗」に失敗しますので、コンテナが再起動されてるはずです)

コンテナを停止しているのは、「WARNING: Persistent storage is used for podman, stopping all containers before updating」の警告に書いてますが、推奨の abos-ctrl podman-storage --tmpfs モードに戻っていただければコンテナを停止しませんので、最後までインストールできるようになるはずです。

また、今回のように SWU イメージファイルをファイルとして保存していると、ABOS 側からもアクセスできますので、その場合は file:// の url でもインストールできます:
curl_rest -d url="file:///var/app/volumes/mycontainer/build/release.swu https://127.0.0.1:58080/api/swu/install/url

こちらでしたらコンテナを停止しても最後までインストールされますので、使いやすいと思います。

(storage=disk に他の問題がありますので、url の方法でインストールを行ってもストレージを直すように推奨しています)

よろしくお願いします。

回答ありがとうございました。
ご教示頂いた方法にて動作しました。ありがとうございました。

ABOSを7月末リリースの「ABOS 3.22.1-at.1 」へ更新して検証したところ、本フォーラムで相談しておりました
一括削除API(/api/reset_default)で旧来の動作をしていました。
こちらの正式な適用は8月末のリリースでしょうか?

またご相談ですが、本フォーラムで提供して頂いた「abos-web.tar」(1.10.0-r5)は適用するとエラーになるのですが、
「ABOS 3.22.1-at.1 」用にご用意頂くことは可能でしょうか?

at_dominique.m…

2025年8月18日 14時57分

マルティネです。

> ABOSを7月末リリースの「ABOS 3.22.1-at.1 」へ更新して検証したところ、本フォーラムで相談しておりました
> 一括削除API(/api/reset_default)で旧来の動作をしていました。
> こちらの正式な適用は8月末のリリースでしょうか?

はい、来週の予定です。

> またご相談ですが、本フォーラムで提供して頂いた「abos-web.tar」(1.10.0-r5)は適用するとエラーになるのですが、
> 「ABOS 3.22.1-at.1 」用にご用意頂くことは可能でしょうか?

手元では ABOS 3.22.1-at.1 でも問題なくインストールできています。
実行したコマンドとエラーの内容をこちらにコピーしていただけますか?

よろしくお願いします

> > ABOSを7月末リリースの「ABOS 3.22.1-at.1 」へ更新して検証したところ、本フォーラムで相談しておりました
> > 一括削除API(/api/reset_default)で旧来の動作をしていました。
> > こちらの正式な適用は8月末のリリースでしょうか?
>
> はい、来週の予定です。

ありがとうございます。承知致しました。

> > またご相談ですが、本フォーラムで提供して頂いた「abos-web.tar」(1.10.0-r5)は適用するとエラーになるのですが、
> > 「ABOS 3.22.1-at.1 」用にご用意頂くことは可能でしょうか?
>
> 手元では ABOS 3.22.1-at.1 でも問題なくインストールできています。
> 実行したコマンドとエラーの内容をこちらにコピーしていただけますか?

3.22.1-at.1 にて実行しました。

# ls -l
total 1892
-rw-r--r-- 1 root root 1935360 Aug 18 16:23 abos-web.tar
armadillo:/vol_app/build/tmp_files# tar xvf abos-web.tar
 
# persist_file -a add ./abos-web/abos-web-*apk
fetch https://download.atmark-techno.com/alpine/v3.22/atmark/aarch64/APKINDEX.tar.gz
WARNING: updating and opening https://download.atmark-techno.com/alpine/v3.22/atmark: temporary error (try again later)
fetch https://dl-cdn.alpinelinux.org/alpine/v3.22/main/aarch64/APKINDEX.tar.gz
WARNING: updating and opening https://dl-cdn.alpinelinux.org/alpine/v3.22/main: temporary error (try again later)
fetch https://dl-cdn.alpinelinux.org/alpine/v3.22/community/aarch64/APKINDEX.tar.gz
WARNING: updating https://dl-cdn.alpinelinux.org/alpine/v3.22/community: temporary error (try again later)
WARNING: The repository tag for world dependency 'abos-base@atmark' does not exist
WARNING: The repository tag for world dependency 'abos-base-catatonit@atmark' does not exist
WARNING: The repository tag for world dependency 'armadillo-twin-agent@atmark' does not exist
WARNING: The repository tag for world dependency 'atmark-power-utils@atmark' does not exist
WARNING: The repository tag for world dependency 'atmark-wwan-utils@atmark' does not exist
WARNING: The repository tag for world dependency 'buttond@atmark' does not exist
WARNING: The repository tag for world dependency 'emmc-sref@atmark' does not exist
WARNING: The repository tag for world dependency 'libubootenv@atmark' does not exist
WARNING: The repository tag for world dependency 'linux-at-x2@atmark' does not exist
WARNING: The repository tag for world dependency 'modemmanager@atmark' does not exist
WARNING: The repository tag for world dependency 'podman-at@atmark' does not exist
WARNING: The repository tag for world dependency 'power-alertd@atmark' does not exist
WARNING: The repository tag for world dependency 'se05x-tools@atmark' does not exist
WARNING: The repository tag for world dependency 'swupdate@atmark' does not exist
ERROR: Not committing changes due to missing repository tags. Use --force-broken-world to override.
Install succeeded, but might not work in the running system
Please reboot if installed program does not work

再起動してもバージョンが変わらないです。

# apk info abos-web
WARNING: opening from cache https://download.atmark-techno.com/alpine/v3.22/atmark: No such file or directory
WARNING: opening from cache https://dl-cdn.alpinelinux.org/alpine/v3.22/main: No such file or directory
abos-web-1.10.0-r0 description:
ABOS web interface
 
abos-web-1.10.0-r0 webpage:
https://armadillo.atmark-techno.com/
 
abos-web-1.10.0-r0 installed size:
3828 KiB

前回と違い abos-ctrl podman-storage --disk 環境ではありませんが、何か関係ありますでしょうか?

at_dominique.m…

2025年8月18日 18時49分

マルティネです

> # persist_file -a add ./abos-web/abos-web-*apk
> fetch https://download.atmark-techno.com/alpine/v3.22/atmark/aarch64/APKINDEX.tar.gz
> WARNING: updating and opening https://download.atmark-techno.com/alpine/v3.22/atmark: temporary error (try again later)

こちらのエラーで依存を解決できず、インストールを拒否しますね。
ネットワークに接続すれば解決されますが、
今回は依存が変わってないので、エラーメッセージの通りに --force-broken-world を使っても問題ありません。
(以下のコマンドで --no-network で接続しても再現できるようにしましたが、そちらはあってもなくても同じです)

# persist_file -a add --no-network --force-broken-world ./abos-web/abos-web-*
WARNING: opening from cache https://download.atmark-techno.com/alpine/v3.22/atmark: No such file or directory
WARNING: opening from cache https://dl-cdn.alpinelinux.org/alpine/v3.22/main: No such file or directory
WARNING: opening from cache https://dl-cdn.alpinelinux.org/alpine/v3.22/community: No such file or directory
(1/2) Upgrading abos-web (1.10.0-r0 -> 1.10.0-r5)
(2/2) Upgrading abos-web-openrc (1.10.0-r0 -> 1.10.0-r5)
Executing busybox-1.37.0-r18.trigger
OK: 218 MiB in 197 packages
Install succeeded, but might not work in the running system
Please reboot if installed program does not work

> 前回と違い abos-ctrl podman-storage --disk 環境ではありませんが、何か関係ありますでしょうか?

関係ありません。

よろしくお願いします

回答頂き、ありがとうございました。

abos-web のバージョンアップができました。
どうやらネットワークにつながっていない状態でやったのが問題あったようです。