Armadilloフォーラム

G4でのoverlayfsの無効化方法について

h.ohtsubo

2022年7月29日 8時53分

お世話になります。

こちら、
https://armadillo.atmark-techno.com/blog/1913/2501
で、無効化方法を紹介していただいているのですがG4では様子が違うようです。
G4でのやり方をご教授いただきたく。

コメント

at_dominique.m…

2022年7月29日 9時21分

h.ohtsuboさん、

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

> こちら、
> https://armadillo.atmark-techno.com/blog/1913/2501
> で、無効化方法を紹介していただいているのですがG4では様子が違うようです。

そうですね、こちらは Armadillo G3/G3L または X1 世代の OS のやりかたでして、 Armadillo Base OS に切り替えてから通用しなくなりました。

> G4でのやり方をご教授いただきたく。

一応 overlayfs のサービスを無効化していただければ無効化になりますが、overlayの無効化はサポートしていません。
理由はいくつかあります:
* A/B アップデートを安全できるためにも overlay を前提として実装していますので、無効化されたら swupdate (OTAまたは USBメモリによるアップデート)が動かなくなる可能性もあります。
* rootfs の容量が小さく、read-write にしたところですぐにエラーになってしまいます。 appfs ( /var/app/volumes と /var/app/rollback/volumes) を使ってください。そのディレクトリについては製品マニュアルをご参照ぐださい: https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
* そもそも Armadillo Base OS はあくまでもコンテナを動かすための仕組みで、大きいな変更をおすすめしません。アットマークテクノは Armadillo Base OS を毎月アップデートして、セキュリティの面でも安心にアップデートできる面でも安全な環境を作るために最低限の変更で開発していただきたいと思っています。コンテナで自由になんでもできますので、コンテナで実装してみましょう。

最終的になにをやろうとしているのかを教えていただければ助言できると思いますので、お手数ですがそこから説明していただければ幸いです。

よろしくお願いします

h.ohtsubo

2022年7月29日 10時28分

マルティネ様
ご回答ありがとうございます。

コンテナに不慣れなため、直で動くようにする手順を確立してからそれをコンテナ化しようと考えています。
オンボードのeMMCで作業するのはよろしくないのでSDで立ち上げて作業しています。
SDなら容量も十分ですし、壊れてもあまり問題ないですから。

at_dominique.m…

2022年7月29日 11時55分

h.ohtsuboさん、

順番を変えて返事します。

> オンボードのeMMCで作業するのはよろしくないのでSDで立ち上げて作業しています。
> SDなら容量も十分ですし、壊れてもあまり問題ないですから。

Armadillo Base OS を SDカードで使用の場合も、「rootfs」の部分のサイズは同じです(300MB弱)、appfs だけ大きくなります。

テストでは故障の心配がないのも分かりますが、それでも /var/app/volumes のディレクトリを使えた方が最終的にコンテナと近い形になりますのでこれでいかがでしょうか。
そのディレクトリであれば overlay がありませんので、コンテナではなくても普通に使っていたでいただけます。
/etc だけに気をつけて persist_file で保存させる必要がありますが、コンフィグファイルの編集や更新の時だけになりますので何とか使えるかと思います。

> コンテナに不慣れなため、直で動くようにする手順を確立してからそれをコンテナ化しようと考えています。

そうですね、コンテナを変更しても保存されないことに慣れるまで少し時間がかかります。
その手間を後にする気持ちも分かりますが、それではいくつか制限があります。例えば、学習能力のアプリケーションであれば NXP が提供してくれたドライバを使えません。

コンテナ好きな人がいたら悲鳴を上げるところですが、podman --rootfs で使っていただけたらどうでしょうか?
そうすればコンテナを直接に変更できます。

最初の設定にステップが少し多いですが、よろしければ以下のように使ってみてください。
コンテナの自動起動ファイルに5月のリリースに追加されたオプションを使ってますので、出荷時の base OS のままであればまずはアップデートしてください。 https://armadillo.atmark-techno.com/forum/armadillo/12331#comment-11374 に説明があります。

armadillo:~# cd /var/tmp
armadillo:/var/tmp# curl -O https://download.atmark-techno.com/armadillo-iot-g4/container/at-debian-image-v1.0.5.tar
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  222M  100  222M    0     0  35.7M      0  0:00:06  0:00:06 --:--:-- 22.2M
armadillo:/var/tmp# podman load -i at-debian-image-v1.0.5.tar 
Getting image source signatures
Copying blob 3b4fb74f35a9 done  
Copying blob f26bcbec21c2 done  
Copying blob a5ea7078621c done  
Copying config dfeac2423c done  
Writing manifest to image destination
Storing signatures
Getting image source signatures
Copying blob a5ea7078621c skipped: already exists  
Copying blob f26bcbec21c2 skipped: already exists  
Copying blob 3b4fb74f35a9 skipped: already exists  
Copying config dfeac2423c done  
Writing manifest to image destination
Storing signatures
Loaded image: localhost/at-debian-image:latest
Loaded image: localhost/at-debian-image:v1.0.5
# 展開するには実行する必要があります
armadillo:/var/tmp# podman run -d --name debian localhost/at-debian-image:latest true
aaa4a9a21eef49217a40726b7f346e53503256502a8ecaf0180c651492843790
armadillo:/var/tmp# cd /var/app/volumes/
armadillo:/var/app/volumes# mkdir debian
armadillo:/var/app/volumes# cd debian/
# 展開にちょっと時間かかります
armadillo:/var/app/volumes/debian# podman export debian | tar x
armadillo:/var/app/volumes/debian# cd /etc/atmark/containers/
# 自動するコンテナのコンフィグです
armadillo:/etc/atmark/containers# vi debian.conf 
# 最初に権限を気にせずに上げます
add_args -it --privileged
# ネットワークもbaseos と共有します。
# サーバー等を設置する場合には最終的に add_ports で使ってください。
set_network host
# ファムウェアには学習能力のドライバがあります
add_volumes /opt/firmware
# USBメモリなどの hotplug を対応してないので、
# マウントして後で接続されたデバイスを見えるようにします
add_volumes /dev
set_command bash
set_image --rootfs /var/app/volumes/debian
# ここまで。escape, :wq でファイルを保存して動作確認します:
armadillo:/etc/atmark/containers# podman_start debian
Starting 'debian'
283ad962d40b1476dff0825988b48c910b3d95e64b6518f8d90cc3554fcbb84a
armadillo:/etc/atmark/containers# podman exec -ti debian bash
root@b3dae2f93d9a:/# exit
# コンフィグだけを保存する必要があります
armadillo:/etc/atmark/containers# persist_file -v debian.conf 
'/etc/atmark/containers/debian.conf' -> '/mnt/etc/atmark/containers/debian.conf'

これで先の「podman exec -ti debian bash」でシェルをコンテナ内で実行できて、コンテナの変更も普通に行えて、起動時に自動的に起動します。
コンテナの実行コマンドを bash から他のコマンドに変更すればスクリプトか何かで必要なプログラムも実行できます。

これでどうでしょうか?

よろしくお願いします。

h.ohtsubo

2022年7月29日 12時55分

マルティネ様

丁寧なご説明ありがとうございます。

直接ホストOSの元で作業するのではなく、
コンテナの中に入って作業するようにすれば
overlayfsを気にしなくて済む。
と理解しました。
やってみます。
ありがとうございました。

at_dominique.m…

2022年8月1日 10時40分

h.ohtsuboさん、

返事が遅くなりました。

> 直接ホストOSの元で作業するのではなく、
> コンテナの中に入って作業するようにすれば
> overlayfsを気にしなくて済む。

はい、そうです。
普通のコンテナとして作業すればまたコンテナ自体の overlay もありますが、--rootfsオプションで使えば普通の debian として接触できます(必要な場合に systemd でも動きます)

頑張ればホストOSで overlayfs を無効にできると思いますが、今後のアップデートの適合性を考えたら最初からできるだけのことをコンテナで実行した方がスムースに進むと思います。

> と理解しました。
> やってみます。

何か不具合か分からないところあったらまたご連絡ください。

よろしくお願いします。