Armadilloフォーラム

学習ファイル更新後podman commit を実行し作成したコンテナの起動に失敗する件につきまして

yuki.shigefuji

2023年5月9日 13時48分

お世話になっております。

podmanコンテナ内でtflite形式の推論モデルを使用してカメラとyolov5を用いた物体検出機能を使っており、学習モデルの更新を行いコンテナをcommitしそのモデルを動作させようとした時以下のエラーによりコンテナの起動に失敗してしまう状態となってしまいました。

以下発生しているエラー

armadillo:/home/atmark# podman_start tsys
Starting 'tsys'
Error: readlink /var/app/volumes/sd/overlay: invalid argument
error: Could not start 'tsys'

今まで同様の方法で問題なく動作していたため原因の特定が難しい状態になっております。
同様のケースや対処法をご存じであればお教えいただきたく存じます。よろしくお願いします。

コメント

at_dominique.m…

2023年5月10日 9時22分

yuki.shigefuji さん

お世話になっています、
アットマークテクノのマルティネです。

> armadillo:/home/atmark# podman_start tsys
> Starting 'tsys'
> Error: readlink /var/app/volumes/sd/overlay: invalid argument
> error: Could not start 'tsys'

なんでしょうね。
「Starting 'tsys'」の後のメッセージなので、podman_start内の処理に問題なくて、podman 自体を起動した時にエラーが発生しています。

コンフィグファイルの内容によりますが、/var/app/volumes/sd/overlay を add_volumes などで使っていることに間違いないですね?
その「overlay」に問題があるかもしれませんので、システムの情報をもう少し伺ってよろしいでしょうか。

以下のコマンドの出力が気になります:

armadillo:~# findmnt | grep volumes/sd
armadillo:~# namei -l /var/app/volumes/sd/overlay

また、/etc/atmark/containers/tsys.conf に「add_args --log-level=debug」を追加していただいて、「podman_start -v tsys」の出力を提供していただけたら何かが分かるかもしれません。

よろしくお願いします。

お世話になっております。
頂いたコマンドの出力は以下になります。

/home/atmark # findmnt | grep volumes/sd
│ └─/var/app/volumes/sd                 /dev/mmcblk1p1                              ext4       rw,relatime
/home/atmark # namei -l /var/app/volumes/sd/overlay
f: /var/app/volumes/sd/overlay
drwxr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root app
drwxr-xr-x root root volumes
drwxr-xr-x root root sd
drwx------ root root overlay

こちらはadd_args --log-level=debugで出力されたログになります。

/home/atmark # podman_start taksys
Starting 'taksys'
INFO[0000] podman filtering at log level debug
DEBU[0000] Called run.PersistentPreRunE(podman run -d --name taksys --replace --log-opt max-size=1mb --restart=on-failure --pull=never --volume=/var/app/volumes/sd:/dev/sd --publish=1883:1883/tcp -ti --privileged --env=VIV_VX_ENABLE_CACHE_GRAPH_BINARY=1 --env=VIV_VX__CACHE_BINARY_GRAPH_DIR=/val/cache/armadillo-demo-experience --log-level=debug --volume=/sys:/sys --volume=/dev:/dev --volume=/run/udev:/run/udev --volume=/opt/firmware:/opt/firmware --volume=/var/app/rollback/volumes/cache:/var/cache/armadillo-demo-experience --init localhost/taksys_011:latest sh -c cron & exec weston --tty 7)
DEBU[0000] Merged system config "/usr/share/containers/containers.conf"
DEBU[0000] Merged system config "/etc/containers/containers.conf"
DEBU[0000] Using conmon: "/usr/bin/conmon"
DEBU[0000] Initializing boltdb state at /var/app/volumes/sd/storage/libpod/bolt_state.db
DEBU[0000] Overriding graph root "/var/app/volumes/sd/storage" with "/var/lib/containers/storage" from database
DEBU[0000] Overriding static dir "/var/app/volumes/sd/storage/libpod" with "/var/lib/containers/storage/libpod" from database
DEBU[0000] Overriding volume path "/var/app/volumes/sd/storage/volumes" with "/var/lib/containers/storage/volumes" from database
DEBU[0000] Using graph driver overlay
DEBU[0000] Using graph root /var/lib/containers/storage
DEBU[0000] Using run root /run/containers/storage
DEBU[0000] Using static dir /var/lib/containers/storage/libpod
DEBU[0000] Using tmp dir /run/libpod
DEBU[0000] Using volume path /var/lib/containers/storage/volumes
DEBU[0000] Set libpod namespace to ""
DEBU[0000] [graphdriver] trying provided driver "overlay"
DEBU[0000] Cached value indicated that overlay is supported
DEBU[0000] Cached value indicated that overlay is supported
DEBU[0000] Cached value indicated that metacopy is not being used
DEBU[0000] Cached value indicated that native-diff is usable
DEBU[0000] backingFs=btrfs, projectQuotaSupported=false, useNativeDiff=true, usingMetacopy=false
DEBU[0000] Initializing event backend file
DEBU[0000] Configured OCI runtime krun initialization failed: no valid executable found for OCI runtime krun: invalid argument
DEBU[0000] Configured OCI runtime runc initialization failed: no valid executable found for OCI runtime runc: invalid argument
DEBU[0000] Configured OCI runtime runj initialization failed: no valid executable found for OCI runtime runj: invalid argument
DEBU[0000] Configured OCI runtime kata initialization failed: no valid executable found for OCI runtime kata: invalid argument
DEBU[0000] Configured OCI runtime runsc initialization failed: no valid executable found for OCI runtime runsc: invalid argument
DEBU[0000] Using OCI runtime "/usr/bin/crun"
INFO[0000] Setting parallel job count to 13
DEBU[0000] Adding port mapping from 1883 to 1883 length 1 protocol "tcp"
DEBU[0000] Pulling image localhost/taksys_011:latest (policy: never)
DEBU[0000] Looking up image "localhost/taksys_011:latest" in local containers storage
DEBU[0000] Normalized platform linux/arm64 to {arm64 linux  [] }
DEBU[0000] Trying "localhost/taksys_011:latest" ...
DEBU[0000] parsed reference into "[overlay@/var/lib/containers/storage+/run/containers/storage:overlay.mountopt=nodev]@9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18"
DEBU[0000] Found image "localhost/taksys_011:latest" as "localhost/taksys_011:latest" in local containers storage
DEBU[0000] Found image "localhost/taksys_011:latest" as "localhost/taksys_011:latest" in local containers storage ([overlay@/var/lib/containers/storage+/run/containers/storage:overlay.mountopt=nodev]@9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18)
DEBU[0000] exporting opaque data as blob "sha256:9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18"
DEBU[0000] Pull policy "never" and localhost/taksys_011:latest resolved to local image localhost/taksys_011:latest
DEBU[0000] Looking up image "localhost/taksys_011:latest" in local containers storage
DEBU[0000] Normalized platform linux/arm64 to {arm64 linux  [] }
DEBU[0000] Trying "localhost/taksys_011:latest" ...
DEBU[0000] parsed reference into "[overlay@/var/lib/containers/storage+/run/containers/storage:overlay.mountopt=nodev]@9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18"
DEBU[0000] Found image "localhost/taksys_011:latest" as "localhost/taksys_011:latest" in local containers storage
DEBU[0000] Found image "localhost/taksys_011:latest" as "localhost/taksys_011:latest" in local containers storage ([overlay@/var/lib/containers/storage+/run/containers/storage:overlay.mountopt=nodev]@9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18)
DEBU[0000] exporting opaque data as blob "sha256:9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18"
DEBU[0000] Starting parallel job on container 5c2f0ff54cb7f14cdd029e403ce79577b413c5363c84385d5f84e48efca8c966
DEBU[0000] Removing container 5c2f0ff54cb7f14cdd029e403ce79577b413c5363c84385d5f84e48efca8c966
DEBU[0000] Cleaning up container 5c2f0ff54cb7f14cdd029e403ce79577b413c5363c84385d5f84e48efca8c966
DEBU[0000] Network is already cleaned up, skipping...
DEBU[0000] Container 5c2f0ff54cb7f14cdd029e403ce79577b413c5363c84385d5f84e48efca8c966 storage is already unmounted, skipping...
DEBU[0000] Removing all exec sessions for container 5c2f0ff54cb7f14cdd029e403ce79577b413c5363c84385d5f84e48efca8c966
DEBU[0000] Container 5c2f0ff54cb7f14cdd029e403ce79577b413c5363c84385d5f84e48efca8c966 storage is already unmounted, skipping...
taksys
DEBU[0000] User mount /var/app/volumes/sd:/dev/sd options []
DEBU[0000] User mount /sys:/sys options []
DEBU[0000] User mount /dev:/dev options []
DEBU[0000] User mount /run/udev:/run/udev options []
DEBU[0000] User mount /opt/firmware:/opt/firmware options []
DEBU[0000] User mount /var/app/rollback/volumes/cache:/var/cache/armadillo-demo-experience options []
DEBU[0000] Looking up image "localhost/taksys_011:latest" in local containers storage
DEBU[0000] Normalized platform linux/arm64 to {arm64 linux  [] }
DEBU[0000] Trying "localhost/taksys_011:latest" ...
DEBU[0000] parsed reference into "[overlay@/var/lib/containers/storage+/run/containers/storage:overlay.mountopt=nodev]@9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18"
DEBU[0000] Found image "localhost/taksys_011:latest" as "localhost/taksys_011:latest" in local containers storage
DEBU[0000] Found image "localhost/taksys_011:latest" as "localhost/taksys_011:latest" in local containers storage ([overlay@/var/lib/containers/storage+/run/containers/storage:overlay.mountopt=nodev]@9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18)
DEBU[0000] exporting opaque data as blob "sha256:9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18"
DEBU[0000] Inspecting image 9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18
DEBU[0000] exporting opaque data as blob "sha256:9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18"
DEBU[0000] Inspecting image 9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18
DEBU[0000] Inspecting image 9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18
DEBU[0000] Inspecting image 9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18
DEBU[0000] using systemd mode: false
DEBU[0000] setting container name taksys
DEBU[0000] No hostname set; container's hostname will default to runtime default
DEBU[0000] Loading seccomp profile from "/etc/containers/seccomp.json"
DEBU[0000] Adding mount /proc
DEBU[0000] Adding mount /sys/fs/cgroup
DEBU[0000] Successfully loaded network my_network: &{my_network 094df08cb423e952c157e0e0bc1197838774fafea406926095b417659b7cc94c bridge podman1 1970-01-01 09:00:05.1981795 +0900 JST [{{{192.168.100.0 ffffff00}} 192.168.100.1 <nil>}] false false true map[] map[] map[driver:host-local]}
DEBU[0000] Successfully loaded network podman: &{podman 10277ec044e8e078f0d6e16650ca4cd139347bd0f17e96a20191f18f69d868e7 bridge podman0 1970-01-01 09:00:04.427936 +0900 JST [{{{10.88.0.0 ffff0000}} 10.88.0.1 <nil>}] false false true map[] map[] map[driver:host-local]}
DEBU[0000] Successfully loaded 2 networks
DEBU[0000] Allocated lock 0 for container 2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556
DEBU[0000] parsed reference into "[overlay@/var/lib/containers/storage+/run/containers/storage:overlay.mountopt=nodev]@9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18"
DEBU[0000] exporting opaque data as blob "sha256:9de9f8b9e12c211ccd150811357fe3a890ee8c191285140890fd916b3efb5d18"
DEBU[0000] Cached value indicated that idmapped mounts for overlay are not supported
DEBU[0000] Check for idmapped mounts support
DEBU[0000] Created container "2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556"
DEBU[0000] Container "2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556" has work directory "/var/lib/containers/storage/overlay-containers/2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556/userdata"
DEBU[0000] Container "2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556" has run directory "/run/containers/storage/overlay-containers/2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556/userdata"
DEBU[0000] Made network namespace at /run/netns/netns-0a874194-7079-99c8-321d-f83605ba82a3 for container 2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556
[DEBUG netavark::network::validation] "Validating network namespace..."
[DEBUG netavark::commands::setup] "Setting up..."
[INFO  netavark::firewall] Using iptables firewall driver
DEBU[0000] [graphdriver] trying provided driver "overlay"
DEBU[0000] Cached value indicated that overlay is supported
DEBU[0000] Cached value indicated that overlay is supported
DEBU[0000] Cached value indicated that metacopy is not being used
DEBU[0000] backingFs=btrfs, projectQuotaSupported=false, useNativeDiff=true, usingMetacopy=false
DEBU[0000] Failed to mount container "2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556": max depth exceeded
[DEBUG netavark::network::bridge] Setup network podman
[DEBUG netavark::network::bridge] Container interface name: eth0 with IP addresses [10.88.0.5/16]
[DEBUG netavark::network::bridge] Bridge name: podman0 with IP addresses [10.88.0.1/16]
[DEBUG netavark::network::core_utils] Setting sysctl value for net.ipv4.ip_forward to 1
[DEBUG netavark::network::core_utils] Setting sysctl value for /proc/sys/net/ipv6/conf/eth0/autoconf to 0
[INFO  netavark::network::netlink] Adding route (dest: 0.0.0.0/0 ,gw: 10.88.0.1, metric 100)
[DEBUG netavark::firewall::varktables::helpers] chain NETAVARK-1D8721804F16F created on table nat
[DEBUG netavark::firewall::varktables::helpers] chain NETAVARK_FORWARD exists on table filter
[DEBUG netavark::firewall::varktables::helpers] chain NETAVARK_FORWARD exists on table filter
[DEBUG netavark::firewall::varktables::helpers] rule -d 10.88.0.0/16 -j ACCEPT exists on table nat and chain NETAVARK-1D8721804F16F
[DEBUG netavark::firewall::varktables::helpers] rule -d 10.88.0.0/16 -j ACCEPT created on table nat and chain NETAVARK-1D8721804F16F
[DEBUG netavark::firewall::varktables::helpers] rule ! -d 224.0.0.0/4 -j MASQUERADE exists on table nat and chain NETAVARK-1D8721804F16F
[DEBUG netavark::firewall::varktables::helpers] rule ! -d 224.0.0.0/4 -j MASQUERADE created on table nat and chain NETAVARK-1D8721804F16F
[DEBUG netavark::firewall::varktables::helpers] rule -s 10.88.0.0/16 -j NETAVARK-1D8721804F16F exists on table nat and chain POSTROUTING
[DEBUG netavark::firewall::varktables::helpers] rule -s 10.88.0.0/16 -j NETAVARK-1D8721804F16F created on table nat and chain POSTROUTING
[DEBUG netavark::firewall::varktables::helpers] rule -d 10.88.0.0/16 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT exists on table filter and chain NETAVARK_FORWARD
[DEBUG netavark::firewall::varktables::helpers] rule -d 10.88.0.0/16 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT created on table filter and chain NETAVARK_FORWARD
[DEBUG netavark::firewall::varktables::helpers] rule -s 10.88.0.0/16 -j ACCEPT exists on table filter and chain NETAVARK_FORWARD
[DEBUG netavark::firewall::varktables::helpers] rule -s 10.88.0.0/16 -j ACCEPT created on table filter and chain NETAVARK_FORWARD
[DEBUG netavark::network::core_utils] Setting sysctl value for net.ipv4.conf.podman0.route_localnet to 1
[DEBUG netavark::firewall::varktables::helpers] chain NETAVARK-HOSTPORT-SETMARK exists on table nat
[DEBUG netavark::firewall::varktables::helpers] chain NETAVARK-HOSTPORT-SETMARK exists on table nat
[DEBUG netavark::firewall::varktables::helpers] chain NETAVARK-HOSTPORT-MASQ exists on table nat
[DEBUG netavark::firewall::varktables::helpers] chain NETAVARK-HOSTPORT-MASQ exists on table nat
[DEBUG netavark::firewall::varktables::helpers] chain NETAVARK-DN-1D8721804F16F created on table nat
[DEBUG netavark::firewall::varktables::helpers] chain NETAVARK-HOSTPORT-DNAT exists on table nat
[DEBUG netavark::firewall::varktables::helpers] chain NETAVARK-HOSTPORT-DNAT exists on table nat
[DEBUG netavark::firewall::varktables::helpers] rule -j NETAVARK-HOSTPORT-SETMARK -s 10.88.0.0/16 -p tcp --dport 1883 exists on table nat and chain NETAVARK-DN-1D8721804F16F
[DEBUG netavark::firewall::varktables::helpers] rule -j NETAVARK-HOSTPORT-SETMARK -s 10.88.0.0/16 -p tcp --dport 1883 created on table nat and chain NETAVARK-DN-1D8721804F16F
[DEBUG netavark::firewall::varktables::helpers] rule -j NETAVARK-HOSTPORT-SETMARK -s 127.0.0.1 -p tcp --dport 1883 exists on table nat and chain NETAVARK-DN-1D8721804F16F
[DEBUG netavark::firewall::varktables::helpers] rule -j NETAVARK-HOSTPORT-SETMARK -s 127.0.0.1 -p tcp --dport 1883 created on table nat and chain NETAVARK-DN-1D8721804F16F
[DEBUG netavark::firewall::varktables::helpers] rule -j DNAT -p tcp --to-destination 10.88.0.5:1883 --destination-port 1883 exists on table nat and chain NETAVARK-DN-1D8721804F16F
[DEBUG netavark::firewall::varktables::helpers] rule -j DNAT -p tcp --to-destination 10.88.0.5:1883 --destination-port 1883 created on table nat and chain NETAVARK-DN-1D8721804F16F
[DEBUG netavark::firewall::varktables::helpers] rule -j DNAT -d 10.88.0.1 -p udp --dport 53 --to-destination 10.88.0.1:153 exists on table nat and chain NETAVARK-HOSTPORT-DNAT
[DEBUG netavark::firewall::varktables::helpers] rule -j DNAT -d 10.88.0.1 -p udp --dport 53 --to-destination 10.88.0.1:153 created on table nat and chain NETAVARK-HOSTPORT-DNAT
[DEBUG netavark::firewall::varktables::helpers] rule -j NETAVARK-DN-1D8721804F16F -p tcp --dport 1883 -m comment --comment 'dnat name: podman id: 2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556' exists on table nat and chain NETAVARK-HOSTPORT-DNAT
[DEBUG netavark::firewall::varktables::helpers] rule -j NETAVARK-DN-1D8721804F16F -p tcp --dport 1883 -m comment --comment 'dnat name: podman id: 2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556' created on table nat and chain NETAVARK-HOSTPORT-DNAT
[DEBUG netavark::dns::aardvark] Spawning aardvark server
[DEBUG netavark::dns::aardvark] start aardvark-dns: ["/usr/libexec/podman/aardvark-dns", "--config", "/run/containers/networks/aardvark-dns", "-p", "153", "run"]
[DEBUG netavark::commands::setup] {
        "podman": StatusBlock {
            dns_search_domains: Some(
                [
                    "dns.podman",
                ],
            ),
            dns_server_ips: Some(
                [
                    10.88.0.1,
                ],
            ),
            interfaces: Some(
                {
                    "eth0": NetInterface {
                        mac_address: "06:6f:4f:d9:51:8a",
                        subnets: Some(
                            [
                                NetAddress {
                                    gateway: Some(
                                        10.88.0.1,
                                    ),
                                    ipnet: 10.88.0.5/16,
                                },
                            ],
                        ),
                    },
                },
            ),
        },
    }
[DEBUG netavark::commands::setup] "Setup complete"
DEBU[0000] Tearing down network namespace at /run/netns/netns-0a874194-7079-99c8-321d-f83605ba82a3 for container 2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556
[DEBUG netavark::commands::teardown] "Tearing down.."
[INFO  netavark::firewall] Using iptables firewall driver
[INFO  netavark::network::bridge] removing bridge podman0
[DEBUG netavark::commands::teardown] "Teardown complete"
DEBU[0000] Cleaning up container 2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556
DEBU[0000] Network is already cleaned up, skipping...
DEBU[0000] Container 2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556 storage is already unmounted, skipping...
DEBU[0000] ExitCode msg: "mounting storage for container 2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556: max depth exceeded"
Error: mounting storage for container 2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556: max depth exceeded
error: Could not start 'taksys'

> yuki.shigefuji さん
>
> お世話になっています、
> アットマークテクノのマルティネです。
>
>

> > armadillo:/home/atmark# podman_start tsys
> > Starting 'tsys'
> > Error: readlink /var/app/volumes/sd/overlay: invalid argument
> > error: Could not start 'tsys'
> 

>
> なんでしょうね。
> 「Starting 'tsys'」の後のメッセージなので、podman_start内の処理に問題なくて、podman 自体を起動した時にエラーが発生しています。
>
> コンフィグファイルの内容によりますが、/var/app/volumes/sd/overlay を add_volumes などで使っていることに間違いないですね?
> その「overlay」に問題があるかもしれませんので、システムの情報をもう少し伺ってよろしいでしょうか。
>
> 以下のコマンドの出力が気になります:
>

> armadillo:~# findmnt | grep volumes/sd
> armadillo:~# namei -l /var/app/volumes/sd/overlay
> 

>
> また、/etc/atmark/containers/tsys.conf に「add_args --log-level=debug」を追加していただいて、「podman_start -v tsys」の出力を提供していただけたら何かが分かるかもしれません。
>
> よろしくお願いします。

at_dominique.m…

2023年5月10日 14時37分

yuki.shigefujiさん

出力ありがとうございます。
podman のログにいくつか気になったところがありますので、お手数ですが追加の質問です。

DEBU[0000] Initializing boltdb state at
/var/app/volumes/sd/storage/libpod/bolt_state.db
DEBU[0000] Overriding graph root "/var/app/volumes/sd/storage" with
"/var/lib/containers/storage" from database

この行では /etc/containers/storage.conf の graphroot が変更されて /var/lib/containers/storage を sd にコピーされたように見えますが、あっていますか?
eMMC の容量が小さくてコンテナイメージを sd カードに保存したい気持ちが分かりますが、運用で podman の storage を tmpfs にすることをオススメする理由もあります: 電源を落とさなくても podman のストレージディレクトリを壊す場合がいくつかありますので、こういうふうにコンテナが起動できなくなります。

イメージの扱いが少しやりにくくなりますが、イメージ本体を sd カードに保存したい場合はを additionalimagestores として使った方が安全かと思います。
オススメとしては、イメージサイズを抑えて大きいデーターをボリュームで保存することです。ボリュームでも開発終了後に :roで指定して読み取り専用にできますし、開発中はコンテナイメージより更新しやすいと思います。

この注意を一旦おいて、それでも動くはずですのでもう少しみてみます。

DEBU[0000] Failed to mount container "2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556": max depth exceeded
...
Error: mounting storage for container 2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556: max depth exceeded

前回と少し違うエラーですね。
mounting storage というのはボリュームのマウントではなく、イメージ自体が故障されている可能性が高いと思います。
考えれるのは二つです:
* 上記の「Overriding graph root」メッセージで podman が混乱していて、違う場所でイメージを探している可能性が高いです。
storage.conf に graphroot を本当に上書きした場合は、コンテナが残ってないこと(例えばpodman rm -aがエラーしない)を確認した後に /var/app/volumes/sd/storage/libpod/bolt_state.db ファイルを消しておけば sd の方を探すようになります。(コンテナがちゃんと削除された場合に不要なファイルです)
* 本当に故障していた場合の説明は少し難しくて… 「podman image inspect localhost/taksys_011:latest」で以下の様な出力があるはずで:

          "RootFS": {
               "Type": "layers",
               "Layers": [
                    "sha256:3804935bde6232033371fe05e57419a2708f4d771ed7ce3bf83f2821db9ecbd0",
                    "sha256:1e7c7b17253a217d650e25431b10010105cd4cfa381768655172389106523b79"
               ]
          },

[storage]/overlay にハッシュと同じ名前のディレクトリがあるはずですし、overlay/l にそのハッシュへの symlink もあるはずですが、そういうところで齟齬が出た場合に何個かのコマンドを使えなくなったり、修正が時間かかりますのでコンテナを作り直した方が早いかもしれません…

とりあえず graph root の件であっていましたらそちらから試してください。

よろしくお願いします。

お世話になっております。

結果としては問題は解消しましたが要因と対策が分からない状況になってしまったので共有致します。

/var/app/volumes/sd/storage/libpod/bolt_state.db を用いてpodman imagesを用いたところ
sdの方にはコンテナは無い状態でした。

しかしコンテナイメージ全てを削除し環境の再構築を行ったところイメージのcommit、作成したイメージを用いての起動が再度できるようになりました。

ですが既存のコンテナイメージ全てを削除してしまった事もあって原因の特定がさらに難解になってしまい再現性も無い状況のため同じ状況がまたいつ起きるかわからない状態となってしまいました。

出来れば原因の特定、今後の対処まで考えたいですが出来ることがありましたら教えていただけると幸いです。

> yuki.shigefujiさん
>
> 出力ありがとうございます。
> podman のログにいくつか気になったところがありますので、お手数ですが追加の質問です。
>
>

> DEBU[0000] Initializing boltdb state at
> /var/app/volumes/sd/storage/libpod/bolt_state.db
> DEBU[0000] Overriding graph root "/var/app/volumes/sd/storage" with
> "/var/lib/containers/storage" from database
> 

>
> この行では /etc/containers/storage.conf の graphroot が変更されて /var/lib/containers/storage を sd にコピーされたように見えますが、あっていますか?
> eMMC の容量が小さくてコンテナイメージを sd カードに保存したい気持ちが分かりますが、運用で podman の storage を tmpfs にすることをオススメする理由もあります: 電源を落とさなくても podman のストレージディレクトリを壊す場合がいくつかありますので、こういうふうにコンテナが起動できなくなります。
>
> イメージの扱いが少しやりにくくなりますが、イメージ本体を sd カードに保存したい場合はを additionalimagestores として使った方が安全かと思います。
> オススメとしては、イメージサイズを抑えて大きいデーターをボリュームで保存することです。ボリュームでも開発終了後に :roで指定して読み取り専用にできますし、開発中はコンテナイメージより更新しやすいと思います。
>
> この注意を一旦おいて、それでも動くはずですのでもう少しみてみます。
>
>

> DEBU[0000] Failed to mount container "2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556": max depth exceeded
> ...
> Error: mounting storage for container 2aabe0d8de41716c1fd0d0588022d3e3ce20f00a8d54533a4faae295865d8556: max depth exceeded
> 

>
> 前回と少し違うエラーですね。
> mounting storage というのはボリュームのマウントではなく、イメージ自体が故障されている可能性が高いと思います。
> 考えれるのは二つです:
> * 上記の「Overriding graph root」メッセージで podman が混乱していて、違う場所でイメージを探している可能性が高いです。
> storage.conf に graphroot を本当に上書きした場合は、コンテナが残ってないこと(例えばpodman rm -aがエラーしない)を確認した後に /var/app/volumes/sd/storage/libpod/bolt_state.db ファイルを消しておけば sd の方を探すようになります。(コンテナがちゃんと削除された場合に不要なファイルです)
> * 本当に故障していた場合の説明は少し難しくて… 「podman image inspect localhost/taksys_011:latest」で以下の様な出力があるはずで:
>

>           "RootFS": {
>                "Type": "layers",
>                "Layers": [
>                     "sha256:3804935bde6232033371fe05e57419a2708f4d771ed7ce3bf83f2821db9ecbd0",
>                     "sha256:1e7c7b17253a217d650e25431b10010105cd4cfa381768655172389106523b79"
>                ]
>           },
> 

> [storage]/overlay にハッシュと同じ名前のディレクトリがあるはずですし、overlay/l にそのハッシュへの symlink もあるはずですが、そういうところで齟齬が出た場合に何個かのコマンドを使えなくなったり、修正が時間かかりますのでコンテナを作り直した方が早いかもしれません…
>
> とりあえず graph root の件であっていましたらそちらから試してください。
>
> よろしくお願いします。

追記となりますが修復前の状況は以下になります。

/etc/atmark/containers/*.conf 内の set_image に
今回のエラー発生前に作成したコンテナイメージをあてがった時は問題なく起動

エラー確認後作成したコンテナはファイルの入れ替え、設定の変更を一切行わずコンテナをcommitしても発生
使用していないコンテナイメージを全て削除しても起こることから本体容量との関連性は薄いと感じた
コンテナイメージの削除が必要であったかは不明だが1からビルドしなおした結果復旧したためイメージの問題か

現在確認できることは以上となります。

at_dominique.m…

2023年5月11日 10時40分

yuki.shigefujiさん

マルティネです。

> /var/app/volumes/sd/storage/libpod/bolt_state.db を用いてpodman imagesを用いたところ
> sdの方にはコンテナは無い状態でした。

コンテナイメージは bolt_state に記載されてませんので、おそらく podman run のデバグメッセージと同じく、ずっとsd ではなく /var/lib/containers/storage を使っていたと思います。
(参考までに、storage/overlay-images/images.json に設定されてます)

コンテナストレージのツリーを最初にそちらからコピーしたのは間違いないですね?
bolt_state.db を作り直してから /var/lib/containers/storage が使われてないと思いますので、もしかしたら不具合毎に残っていませんか?

> ですが既存のコンテナイメージ全てを削除してしまった事もあって原因の特定がさらに難解になってしまい再現性も無い状況のため同じ状況がまたいつ起きるかわからない状態となってしまいました。

そうですね、今になっては再現しない限りに確認が難しいですね…

昨日書いた様に、学習モデルやアプリケーションをボリュームに保存した方がデバグしやすいですし、リスクも低くなりますので、今から変更できればその方向に変更することをオススメします。
解析のヒントにならなくて申し訳ございませんが、ABOS の開発を始めたころに podman のストレージの不具合が多くて、いくつかを アップストリームに報告して修正しました( https://github.com/containers/podman/issues?q=is%3Aissue+author%3Amarti… ) が、直せない物もあったためメインのストレージを /run にしました。

イメージ全体をどうしても sd に保存したい場合は、storage.conf の変更ではなくコンテナのコンフィグファイルに additionalimagestore を設定してください:

add_args --storage-opt additionalimagestore=/var/app/volumes/sd

そうすると、/var/app/volumes/sd に不要な書き込みはまず起こらないので、ある程度安全になります。
…が、安全になった分はただの「podman commit」で使えなくなりますので、少し手間が増えます。
変更したい時だけは上記の add_args を --root=/var/app/volumes/sd に変更して、podman --root /var/app/volumes/sd [ps|commit|image rm等]で使えます。
swupdate の更新もできない形ですのでいいとまではいえませんが、今のやり方に近いのですぐに対応できると思います。

よろしくお願いします。

お世話になっております。

sdカードの利用用途なのですが元々すべての機能を保存する意図はなく、コンテナ内で起動している検知PGで取得した映像.mp4とサムネイル用の.jpgファイルのみ
sdカードに保存される機構としております。

故にsdカードはPGやコンテナイメージ等のような動作に重要な機能は一切搭載せず画像、動画のストレージとしてのみ機能させております。

/var/lib/containers/storageは触っていないため残っていると思われますがコンテナ機能に慣れていないこともあって少し確認しただけでは解決の糸口を確保するには至りませんでした。

現在同機は弊社に4台あり、うち1台が今回の状態にいきなりなってしまった状況であるため、今後同じような状況が納品後に現地で起こるのかどうかを恐れている状態です。
それ故原因を特定し自然と起こりえる事態なのか、人為的なミスで起こった物なのかを特定する必要があると感じています。

これらを踏まえて原因の特定は可能でしょうか。またできれば状況再現が実現すれば対策が大きく進むと感じますが如何でしょうか

> yuki.shigefujiさん
>
> マルティネです。
>
> > /var/app/volumes/sd/storage/libpod/bolt_state.db を用いてpodman imagesを用いたところ
> > sdの方にはコンテナは無い状態でした。
>
> コンテナイメージは bolt_state に記載されてませんので、おそらく podman run のデバグメッセージと同じく、ずっとsd ではなく /var/lib/containers/storage を使っていたと思います。
> (参考までに、storage/overlay-images/images.json に設定されてます)
>
> コンテナストレージのツリーを最初にそちらからコピーしたのは間違いないですね?
> bolt_state.db を作り直してから /var/lib/containers/storage が使われてないと思いますので、もしかしたら不具合毎に残っていませんか?
>
> > ですが既存のコンテナイメージ全てを削除してしまった事もあって原因の特定がさらに難解になってしまい再現性も無い状況のため同じ状況がまたいつ起きるかわからない状態となってしまいました。
>
> そうですね、今になっては再現しない限りに確認が難しいですね…
>
> 昨日書いた様に、学習モデルやアプリケーションをボリュームに保存した方がデバグしやすいですし、リスクも低くなりますので、今から変更できればその方向に変更することをオススメします。
> 解析のヒントにならなくて申し訳ございませんが、ABOS の開発を始めたころに podman のストレージの不具合が多くて、いくつかを アップストリームに報告して修正しました( https://github.com/containers/podman/issues?q=is%3Aissue+author%3Amarti… ) が、直せない物もあったためメインのストレージを /run にしました。
>
> イメージ全体をどうしても sd に保存したい場合は、storage.conf の変更ではなくコンテナのコンフィグファイルに additionalimagestore を設定してください:
>

> add_args --storage-opt additionalimagestore=/var/app/volumes/sd
> 

> そうすると、/var/app/volumes/sd に不要な書き込みはまず起こらないので、ある程度安全になります。
> …が、安全になった分はただの「podman commit」で使えなくなりますので、少し手間が増えます。
> 変更したい時だけは上記の add_args を --root=/var/app/volumes/sd に変更して、podman --root /var/app/volumes/sd [ps|commit|image rm等]で使えます。
> swupdate の更新もできない形ですのでいいとまではいえませんが、今のやり方に近いのですぐに対応できると思います。
>
> よろしくお願いします。

at_dominique.m…

2023年5月11日 11時58分

マルティネです。

> sdカードの利用用途なのですが元々すべての機能を保存する意図はなく、コンテナ内で起動している検知PGで取得した映像.mp4とサムネイル用の.jpgファイルのみ
> sdカードに保存される機構としております。
>
> 故にsdカードはPGやコンテナイメージ等のような動作に重要な機能は一切搭載せず画像、動画のストレージとしてのみ機能させております。

なるほど、それでしたら心配は不要だと思います。
運用設定の「abos-ctrl podman-storage --tmpfs」状態※でしたら、podman の graphroot が /run になるため再起動の度にリセットされますし、イメージ自体は readonly になっていますので故障はまずないと思います(ハードウェアかファイルシステムの不具合以外ですが、そういう問題は今のところ聞いてません)
前の返事にも話しましたが、podman のストレージに信用はまったく入れてませんので、ABOS のデフォルト設定ではできるだけ頼らないようにしています。swupdate による更新にも充分気を付けてますし、まだ心配でしたら更新後のチェックを入れてコンテナが起動できなかった場合に rollback することで更新前の状態に戻ることもできます。

※ /etc/containers/storage.conf が編集される想定はしてなかったので、編集してしまったら無事に戻らない可能性もあります…できれば一台を初期化して初期状態の /etc/containers/storage.conf をコピーしてください。お手数をおかけしてすみません。

> /var/lib/containers/storageは触っていないため残っていると思われますがコンテナ機能に慣れていないこともあって少し確認しただけでは解決の糸口を確保するには至りませんでした。

そうですね、とりあえず「podman --root /var/lib/containers/storage run --rm localhost/taksys_011:latest echo ok」が成功したら解析にはもう使えなさそうですね。

> 現在同機は弊社に4台あり、うち1台が今回の状態にいきなりなってしまった状況であるため、今後同じような状況が納品後に現地で起こるのかどうかを恐れている状態です。
> それ故原因を特定し自然と起こりえる事態なのか、人為的なミスで起こった物なのかを特定する必要があると感じています。
>
> これらを踏まえて原因の特定は可能でしょうか。またできれば状況再現が実現すれば対策が大きく進むと感じますが如何でしょうか

そうですね、再び再現して、storage の find -ls の出力と json ファイルの内容を確認できればエラーの原因が分かると思いますが、なんでこうなってしまうのは reproducer が必要かもしれません。
いずれにしても、コンテナイメージの保存方法が変える場合はそのエラーを再現できなくなりますので、そこまでしなくてもいいかと考えています。
情報共有の面では興味がありますので、それでも再現できましたらみてみますが、podman-storage --tmpfs 以外の場合の podman の問題は完全に回避できないと思っています。その点をマニュアルなどにもう少し強く書いた方がいいかもしれません。

よろしくお願いします。