Armadilloフォーラム

Raspberry PiからArmadilloへの移行でコンテナに入れない

momosuke

2022年6月27日 16時39分

https://armadillo.atmark-techno.com/migrate-from-rpi-to-armadillo/softw…
上記のガイドに沿ってRaspberry PiからArmadilloへの移行をしています
その際、podman runコマンドで以下のログが出てコンテナに入ることができません

armadillo:~# podman run -it --name=rpi1_container localhost/rpi_image /bin/bash
[  322.146734] IPv6: ADDRCONF(NETDEV_CHANGE): vethe603ddcc: link becomes ready
[  322.153962] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[  322.160620] cni-podman0: port 1(vethe603ddcc) entered blocking state
[  322.167027] cni-podman0: port 1(vethe603ddcc) entered disabled state
[  322.173558] device vethe603ddcc entered promiscuous mode
[  322.178975] cni-podman0: port 1(vethe603ddcc) entered blocking state
[  322.185336] cni-podman0: port 1(vethe603ddcc) entered forwarding state
armadillo:~# [  322.634807] cni-podman0: port 1(vethe603ddcc) entered disabled state
[  322.641884] device vethe603ddcc left promiscuous mode
[  322.646977] cni-podman0: port 1(vethe603ddcc) entered disabled state

どうしたらこのコンテナに入れるかご教授頂きたいです。

コメント

at_dominique.m…

2022年6月27日 17時03分

momosukeさん

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

> その際、podman runコマンドで以下のログが出てコンテナに入ることができません

分かりにくいですが、このログではbashがすぐに停止するように見えます。

コンテナの内容を確認してもらえますか?以下のコマンドの出力をお願いします。

armadillo:~# apk add file
^ file コマンドをメモリ上でインストールします
armadillo:~# podman run -it --replace --name=rpi1_container localhost/rpi_image /bin/bash
armadillo:~# m=$(podman mount rpi1_container); echo $m
^ コンテナのマウントパスを取得します
armadillo:~# file $m/bin/bash
^ bashの存在とarchを確認します。例:
/run/containers/storage_root/overlay/fa1cad7740cefb172f37795bc8fa2d5baafea11a7db5efd4ab48b0d8d4e48cec/merged/bin/bash: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=187a59265dfe6e8319a93bdf9cd64ed9be250aaa, stripped
armadillo:~# $m/lib/ld-linux-aarch64.so.1 --list --library-path $m/lib:$m/lib/aarch64-linux-gnu $m/bin/bash
^ 前のコマンドの"interpreter"が違っていたらそれを使って見てください。その場合に --library-pathの調整も必要かもしれません。
ls などで "$m" の中身と raspberry piの中身が一致していることを確認してください。
armadillo:~# $m/lib/ld-linux-aarch64.so.1 --library-path $m/lib:$m/lib/aarch64-linux-gnu $m/bin/bash -c 'uname'
^ --listができたら、実行してみます。恐らく--listの段階でエラーがでると思いますので、その場合にそのエラーで結構です。

よろしくお願いします。

> コンテナの内容を確認してもらえますか?以下のコマンドの出力をお願いします。

すみません、私が初心者でコメントの意味があまり理解できなかったです
一応コマンドの出力はしました

armadillo:~# podman run -it --replace --name=rpi1_container localhost/rpi_image 
/bin/bash
d75519bd5c29ef64dc8f8cdee6ee80571f44f138fb35897c68d20a711d19996d
[ 3182.035894] IPv6: ADDRCONF(NETDEV_CHANGE): vethafe88d8b: link becomes ready
[ 3182.043036] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 3182.049616] cni-podman0: port 1(vethafe88d8b) entered blocking state
[ 3182.056006] cni-podman0: port 1(vethafe88d8b) entered disabled state
[ 3182.062522] device vethafe88d8b entered promiscuous mode
[ 3182.067916] cni-podman0: port 1(vethafe88d8b) entered blocking state
[ 3182.074274] cni-podman0: port 1(vethafe88d8b) entered forwarding state
armadillo:~# [ 3182.474562] cni-podman0: port 1(vethafe88d8b) entered disabled state
[ 3182.481569] device vethafe88d8b left promiscuous mode
[ 3182.486664] cni-podman0: port 1(vethafe88d8b) entered disabled state
 
armadillo:~# m=$(podman mount rpi1_container); echo $m
/var/lib/containers/storage/overlay/d4ac21d545588a45caa3a3087d40412f43d90b8d8181ca70967c590be534a70e/merged
 
armadillo:~# file $m/bin/bash
/var/lib/containers/storage/overlay/d4ac21d545588a45caa3a3087d40412f43d90b8d8181ca70967c590be534a70e/merged/bin/bash: ELF 32-bit LSB executable, A
RM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=3e5e2847bbc51da2ab313bc53
d4bdcff0faf2462, stripped
 
armadillo:~# $m/lib/ld-linux-aarch64.so.1 --list --library-path $m/lib:$m/lib/aa
rch64-linux-gnu $m/bin/bash
-ash: /var/lib/containers/storage/overlay/d4ac21d545588a45caa3a3087d40412f43d90b8d8181ca70967c590be534a70e/merged/lib/ld-linux-aarch64.so.1: not f
ound
 
armadillo:~# $m/lib/ld-linux-aarch64.so.1 --library-path $m/lib:$m/lib/aarch64-l
inux-gnu $m/bin/bash -c 'uname'
-ash: /var/lib/containers/storage/overlay/d4ac21d545588a45caa3a3087d40412f43d90b8d8181ca70967c590be534a70e/merged/lib/ld-linux-aarch64.so.1: not f
ound

勉強不足ですみません、よろしくお願いします

at_dominique.m…

2022年6月27日 17時48分

> すみません、私が初心者でコメントの意味があまり理解できなかったです

いいえいいえ、私の方こそ説明不足ですみません。

これだけでも確認したかったことを確認できました:fileのコマンドで「ELF 32-bit LSB executable, ARM」がでたことで、石垣さんの質問の答えがでました。

Armadillo G4 は aarch64 という 64bit の CPU を搭載していますので、お客さんの raspberry pi との適合性がないだけです。ガイドでは「 本手順を実行するにはRaspberry Piで64bit OSを使用している必要があります。」として注意を書いていますが、明確に確認させた方がいいかもしれませんね。

raspberry pi のモデルによってその両方の 32bit / 64bit をサポートできる基板もありますが、今回は普通の debian コンテナかアットマークが用意している学習機能のあるコンテナを使った方が確実と思います。
開発ガイドの https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-base-os-dev… にコンテナの使用例がありますが、何か分からなかった聞いてください。

よろしくお願いします。

1から丁寧にありがとうございます。
確認を怠り、お時間搾取してしまい申し訳ございません。
今後も分からないことがあったらここで質問させていただきます。
よろしくお願いします。

at_shiita.ishigaki

2022年6月27日 17時11分

石垣です。

一つ確認なのですが、Raspberry Pi は64bit OS を使用していましたでしょうか?
Armadillo-IoT G4 は arm64 のため Raspberry Pi も arm64 を使用している必要があります。
確認よろしくお願いいたします。