Armadilloフォーラム

container_clear.swuインストールによるコンテナクリア後の開発版SWUイメージインストールについて

takeshita_kyouhei

2025年3月7日 11時01分

Armadillo-IoT G4で不要になったコンテナの削除を「container_clear」のインストールで実施しました
(プロジェクト名が変更となったため、コンテナ名も変更となり古いコンテナは削除したかった)

その後、既存の開発版SWUイメージの再インストールを行ったのですがエラーが発生してインストールできませんでした

development.swu をインストールします。

SWU アップロード中に接続が切断されました。
SWUpdate v2024.05.2_git20240718-r0
Licensed under GPLv2. See source distribution for detailed copyright notices.
[INFO ] : SWUPDATE running : [print_registered_handlers] : no handler registered.
[INFO ] : SWUPDATE running : [main] : Running on AGX4500 Revision at1
[INFO ] : SWUPDATE started : Software Update started !
[INFO ] : SWUPDATE running : [install_single_image] : Installing pre_script
[INFO ] : SWUPDATE running : [read_lines_notify] : Skipping install of component extra_os.uploader 2 (has 2)
[INFO ] : SWUPDATE running : [read_lines_notify] : Skipping install of component uploader 2 (has 2)
[ERROR] : SWUPDATE failed [0] ERROR : ----------------------------------------------
[ERROR] : SWUPDATE failed [0] ERROR : /!\ Nothing to do -- failing on purpose to save bandwidth
[ERROR] : SWUPDATE failed [0] ERROR : ----------------------------------------------
[ERROR] : SWUPDATE failed [0] ERROR : Command failed: sh $1 /var/tmp/swupdate-abosweb-upload.GNjIpN/scripts_pre.sh
[ERROR] : SWUPDATE failed [0] ERROR : Error streaming zst.scripts_pre.sh
[ERROR] : SWUPDATE failed [1] Image invalid or corrupted. Not installing ...
swupdate_image_write failed: Broken pipe
[ERROR] : SWUPDATE failed [0] ERROR : SWUpdate *failed* !
swupdate exited

上記のようなエラーが出ているのですが原因は何なのでしょうか?
 通信断が発生している?

コメント

at_satoshi.ohta

2025年3月7日 11時06分

太田です。

[INFO ] : SWUPDATE running : [read_lines_notify] : Skipping install of component extra_os.uploader 2 (has 2)
[INFO ] : SWUPDATE running : [read_lines_notify] : Skipping install of component uploader 2 (has 2)

既に Armadillo にインストールされているバージョンの SWU イメージをインストールしているからだと思われます。
ABOSDE でもう一度 [Generate development swu]を実行して作成し直した development.swu をインストールしてみるとどうなりますでしょうか?

よろしくお願いいたします。

takeshita_kyouhei

2025年3月7日 15時12分

>

> [INFO ] : SWUPDATE running : [read_lines_notify] : Skipping install of component extra_os.uploader 2 (has 2)
> [INFO ] : SWUPDATE running : [read_lines_notify] : Skipping install of component uploader 2 (has 2)
> 

> 既に Armadillo にインストールされているバージョンの SWU イメージをインストールしているからだと思われます。
> ABOSDE でもう一度 [Generate development swu]を実行して作成し直した development.swu をインストールしてみるとどうなりますでしょうか?
返信有り難うございます

再度、開発版SWUを作成することでインストールできました

ちなみに、container_clearでコンテナを削除した場合でも、バージョン番号はArmadillo内に残るのでしょうか?

また、以下のようなエラーが発生してABOSDEで「アプリをArmadilloを実行」が失敗します
これは、コンテナが起動してソフトが実行されているという認識でいいのでしょうか?
 なにかの設定が入っていて自動実行されている?

uploader.conf                                                                                                                                     100% 1116   325.5KB/s   00:00    
Starting 'uploader'
time="2025-03-07T15:06:39+09:00" level=warning msg="The input device is not a TTY. The --tty and --interactive flags might not work properly"
a1c1e596445ab0d81dbf9b92775274f068403a453dcdc15286c5041cd84d1b60
Error: you can only attach to running containers

at_satoshi.ohta

2025年3月7日 16時41分

太田です。

> ちなみに、container_clearでコンテナを削除した場合でも、バージョン番号はArmadillo内に残るのでしょうか?

はい。versionが残った状態でコンテナのみを削除するので、必要であれば、Armadillo 上で

armadillo:~# vi /etc/sw-versions 

を実行して、対応する SWU イメージのコンポーネントとバージョンの行を消していただければと思います。

> また、以下のようなエラーが発生してABOSDEで「アプリをArmadilloを実行」が失敗します
> これは、コンテナが起動してソフトが実行されているという認識でいいのでしょうか?

[アプリを Armadillo で実行]を押すと、最終的には Armadillo 上で
podman_start を実行して、コンテナを起動したあと、podman attach を実行してコンテナに接続します。
podman_start で実行したが、コンテナの起動に失敗したため、存在しないコンテナに対して podman attach を実行したので「Error: you can only attach to running containers」のエラー文が実行されている可能性があります。
Armadillo 上のターミナルに入り、

armadillo:~# podman_start <コンテナ名> && podman attach <コンテナ名>

で同じエラー文が出力されると思います。

armadillo:~# podman ps

を実行して何もなければコンテナが起動できていません。

armadillo:~# podman ps -a

を実行すると失敗したコンテナも表示されるはずですが、どのような出力になっていますでしょうか?

どうぞよろしくお願いいたします。

takeshita_kyouhei

2025年3月7日 23時07分

> > ちなみに、container_clearでコンテナを削除した場合でも、バージョン番号はArmadillo内に残るのでしょうか?
>
> はい。versionが残った状態でコンテナのみを削除するので、必要であれば、Armadillo 上で
>

> armadillo:~# vi /etc/sw-versions 
> 

> を実行して、対応する SWU イメージのコンポーネントとバージョンの行を消していただければと思います。
情報ありがとうございます
不要なバージョン情報を削除することができました

> Armadillo 上のターミナルに入り、
>

> armadillo:~# podman_start <コンテナ名> && podman attach <コンテナ名>
> 

> で同じエラー文が出力されると思います。
>

> armadillo:~# podman ps
> 

> を実行して何もなければコンテナが起動できていません。
>

> armadillo:~# podman ps -a
> 

> を実行すると失敗したコンテナも表示されるはずですが、どのような出力になっていますでしょうか?
上記コマンドを実行したところ、以下のような結果となりました

armadillo:~# podman_start uploader && podman attach uploader
Starting 'uploader'
692b0b574cfbd243151df7c76a4003402340772dd5b934f34d06a4579e8d32b8
Error: you can only attach to running containers
armadillo:~# podman ps
CONTAINER ID  IMAGE                      COMMAND        CREATED         STATUS                 PORTS       NAMES
692b0b574cfb  localhost/uploader:latest  python_launch  12 seconds ago  Up Less than a second              uploader
armadillo:~# podman ps -a
CONTAINER ID  IMAGE                              COMMAND               CREATED         STATUS                       PORTS                   NAMES
1349934bf2df  localhost/modbus_collector:latest  /vol_app/src/laun...  14 minutes ago  Exited (143) 14 minutes ago  0.0.0.0:8086->8086/tcp  modbus_collector
0707b16e62ea  localhost/modbus_writer:latest     /vol_app/src/laun...  14 minutes ago  Exited (143) 14 minutes ago                          modbus_writer
0f218f281e8e  localhost/subscriber:latest        python_launch         11 minutes ago  Exited (137) 8 minutes ago                           subscriber
692b0b574cfb  localhost/uploader:latest          python_launch         35 seconds ago  Up Less than a second                                uploader

takeshita_kyouhei

2025年3月10日 15時48分

報告した内容以外で必要な・収集、確認すべき項目がありましたら連絡ください

at_dominique.m…

2025年3月10日 16時07分

takeshita_kyouheiさん

太田さんが本日不在のため代わりに回答させていただきます
マルティネです

> また、以下のようなエラーが発生してABOSDEで「アプリをArmadilloを実行」が失敗します
> これは、コンテナが起動してソフトが実行されているという認識でいいのでしょうか?
> なにかの設定が入っていて自動実行されている?

コンテナを実行してすぐに失敗した場合に attach できない可能性はあります。
また、Armadillo で実行されているコンテナは失敗の場合に自動リスタートされますので、podman ps で実行されているように見えますが「Up Less than a second」ということは確かにコンテナ再起動されたことになります。

こちらの attach できない問題は今月のアップデートで対応させていただきます(detach run + attach ではなく最初から attached 状態で実行してログをこぼさないようになります)
お手数ですがそれまでは「podman logs [container]」でリスタートされた後でもログを確認できますので、停止される問題をログで修正してみてください

よろしくお願いします

takeshita_kyouhei

2025年3月11日 13時30分

> お手数ですがそれまでは「podman logs [container]」でリスタートされた後でもログを確認できますので、停止される問題をログで修正してみてください
>
> よろしくお願いします
返信いただきありがとうございます

ログを確認しましたが、あまり有益な情報を得ることができていません

armadillo:~# podman logs uploader
exec failed: No such file or directory
exec failed: No such file or directory
exec failed: No such file or directory
exec failed: No such file or directory
exec failed: No such file or directory
exec failed: No such file or directory
exec failed: No such file or directory
exec failed: No such file or directory
exec failed: No such file or directory
exec failed: No such file or directory
exec failed: No such file or directory
exec failed: No such file or directory
exec failed: No such file or directory
exec failed: No such file or directory

上記のように「exec failed: No such file or directory」というログが延々と出力されており、「なんのファイルorディレクトリが見つからないのか?」が
判別できない状況になっています

ソースコード(Python)内にログを出力するように実装を行ってみますが、ログも上記のような状態なので分別がついていません
 起動時に残すStarting...というログもない?

takeshita_kyouhei

2025年3月11日 14時04分

起動時に読み込むファイルとしては「Uploader_setting.json」というファイルを読み込んでいます

読み込み処理
 
# 設定ファイルの読み込み
print("Reading configuration file")
with open('/vol_app/src/Uploader_setting.json', 'r') as f:
    config = json.load(f)
 
print("Configuration file loaded")

vol_appの定義は以下のようにapp.confで定義しています

#add_volumes /var/app/rollback/volumes/{{PROJECT}}:/vol_app ←当初の設定
add_volumes /var/app/rollback/volumes/uploader:/vol_app ←エラーが発生していたため一時的に変更した設定(こちらでもエラーは発生)
add_volumes /var/app/volumes/modbus_collector:/vol_data

ファイルが配置されていないのかと思いましたが、以下のようにArmadillo上からはファイルの存在を確認できました

armadillo:~# ls /var/app/rollback/volumes/uploader/src/
Uploader_setting.json  main.py                requirements.txt

そのため、別の何らかのファイルが見つかっていないのではないかと考えているのですが、他に考えられること・調査すべき点はありますでしょうか?

at_satoshi.ohta

2025年3月11日 14時30分

太田です。

python プロジェクトのデフォルトでは config/app.conf の内容ではコンテナ起動時に python_launch が起動するようになっています。
config/app.conf の内容:

# launch app
# /vol_app/src/main.py is launched
# see container/resources_python/bin/python_launch
set_command python_launch

ATDE 上の container/resources_python/bin/python_launch の内容はどのようになっていますでしょうか?

ご確認よろしくお願いいたします。

takeshita_kyouhei

2025年3月11日 14時52分

返信いただきありがとうございます

> python プロジェクトのデフォルトでは config/app.conf の内容ではコンテナ起動時に python_launch が起動するようになっています。
> config/app.conf の内容:
>

> # launch app
> # /vol_app/src/main.py is launched
> # see container/resources_python/bin/python_launch
> set_command python_launch
> 

> ATDE 上の container/resources_python/bin/python_launch の内容はどのようになっていますでしょうか?

以下が、python_launchのファイル内容になります

#!/bin/sh
 
# == DO NOT EDIT ==
# Required to use bluetooth
#bluetooth dbus-daemon --system
#bluetooth bluetoothd &
#bluetooth sleep 2
#bluetooth bt-agent --daemon
# ==================
 
exec python3 /vol_app/src/main.py

at_satoshi.ohta

2025年3月11日 15時15分

太田です。

挙動としてはデフォルトと同様に、set_command で python_launch を実行、その後 /vol_app/src/main.py を起動するはずということですね。
以下の手順で、Armadillo のコンテナの中で python_launch を実行するとどのようなログが出力されますでしょうか?

1. ATDE 上のプロジェクトの config/app.conf の set_command を以下のように書き換えます。

# set_command c_launch
set_command sleep infinity

2. [App run on Armadillo] を実行します。(app.confの内容がArmadillo にコピーされて、コンテナを起動します。)

3. Armadillo のターミナルに入ります。

4. コンテナが起動していることを確認します。

armadillo:~# podman ps

5. コンテナの中に入って python_launch を実行します。

armadillo:~# podman exec -it <プロジェクト名> /bin/bash
root@1a3e5338394a:/# python_launch

また、もしコンテナの中に入って python_launch を実行してもうまく行かない場合は、/vol_app/src/main.py を直接実行してみたり、main.py に print を追加して([App run on Armadillo]を実行するとArmadillo にコピーされます)、同様にコンテナの中に入って python_launch または/vol_app/src/main.py を直接実行してデバッグしてみるとどこまで成功しているか確認できると思います。

どうぞよろしくお願いいたします。

takeshita_kyouhei

2025年3月11日 15時49分

返信いただきありがとうございます
提示された手順について実施してみます

別途、過去に開発していたプログラムで使用していた手法を試してみたところうまく行きましたことは報告します
実施したこと
1.app.confの設定を変更
以下のように変更

# launch app
#set_command python_launch
set_command /vol_app/src/launch.sh

2.プロジェクト内のapp/srcフォルダ内にlaunch.shを配置
内容は以下の通り

#!/bin/sh
#influxd run &
#sleep 10 &&
#telegraf &
#sleep 30 &&
python3 /vol_app/src/main.py

3.この状態で開発版SWUをビルドして実行