Armadilloフォーラム

swupdateでネットワーク設定を行う方法について

sx_iino

2023年3月17日 18時00分

お世話になります。
現在Armadillo-IoT A6E(CatM1モデル)で開発を行うため、色々と検証しております。

swupdateについても試しているのですが、ネットワーク設定をインストールする手段に悩んでいます。
nmcliで固定アドレスを振ると、/etc/NetworkManager/system-connectionsに設定ファイル(*.nmconnection)が作成されますが、NetworkManagerはこの中のuuidを用いて紐づけするので、このファイルをそのまま複数台にバラ撒くのは駄目だろうと考えました。

そこで、固定IPを振るために、swdesc_commandでnmcliコマンドを発行してみましたがエラーとなりました。
恐らく裏のイメージ上ではNetworkManagerが稼働していないからだと思っていますがあっていますでしょうか?
そこで、swdesc_command_nochrootを用いて現環境上でコマンド発行するとエラーはなくなりました。
しかし、結果作成された/etc/NetworkManager/system-connections/eth0.nmconnectionをpersist_fileで保存しても、現環境上に保存されるだけでアップデート側には反映されません。

以上から、NetworkManagerを諦めて、/etc/interfacesにeth0の記述しておいてswupdpateで更新する事で上手くいくようになりました。

次に、今度はLTE接続の設定をswupdateで行おうとしています。
nmcliを用いた接続は上手く行ったのですが、この設定もeth0と同じく/etc/NetworkManager/system-connectionsに置かれるもので、上記と同じくそのままコピーでは他の個体では使えないのではないかと考えています。
しかし、この接続(ppp0)を/etc/interfacesにどう記述すれば良いのかが良くわかりません。

色々書いてしまいましたが、swupdateでnmcliコマンドが発行出来て、結果ファイルが保存出来れば全て解決します。
何か良い方法はないでしょうか?

コメント

at_dominique.m…

2023年3月20日 8時43分

sx_iinoさん、

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

順番に答えますので、いくつか不要な情報もありますが、参考にしていただけたらと思います。

> swupdateについても試しているのですが、ネットワーク設定をインストールする手段に悩んでいます。
> nmcliで固定アドレスを振ると、/etc/NetworkManager/system-connectionsに設定ファイル(*.nmconnection)が作成されますが、NetworkManagerはこの中のuuidを用いて紐づけするので、このファイルをそのまま複数台にバラ撒くのは駄目だろうと考えました。

一つの armadillo のなかでは UUID が同一すると不具合になりますが、その UUID は外にでてないので複数の armadillo で同じ UUID を共有しても問題ありません。
どうしても違う UUID を使いたい場合はファイルに placeholder を書いて、sed などで uuidgen の結果を使って編集することも可能です。

> そこで、固定IPを振るために、swdesc_commandでnmcliコマンドを発行してみましたがエラーとなりました。
> 恐らく裏のイメージ上ではNetworkManagerが稼働していないからだと思っていますがあっていますでしょうか?

はい、そうですね。swdesc_command は podman run による chrootに近い環境で実行されて、実行中の NetworkManager に接続できません。
swdesc_command で一度 dbus, NetworkManager を起動させたら nmcli を使えるようになりますが、本当のネットワークを操作できないためエラーする可能性が高く(試してません)、おすすめできません。

> そこで、swdesc_command_nochrootを用いて現環境上でコマンド発行するとエラーはなくなりました。
> しかし、結果作成された/etc/NetworkManager/system-connections/eth0.nmconnectionをpersist_fileで保存しても、現環境上に保存されるだけでアップデート側には反映されません。

それもそうですね。
swdesc_comand/command_nochroot を実行する時は、Armadillo上に現在のシステム(/ の overlay, /live/rootfs のベースのルートファイルシステム)と再起動した後の新しいシステム(/target)がマウントされています。
/live/rootfs と /etc/swupdate_preserve_files に記載されている内容は /target にコピーしてからコマンドが実行されますので、その時点で persist_file を使って /live/rootfs に変更しても反映されません。

強いて言えば、swupdate_preserve_files に POST としてコピーさせるか、手動で swdesc_command_nochroot で /etc/NetworkManager/system-connections を /target/etc/NetworkManager/system-connections にコピーすれば可能ですが、今アップデート中の Armadillo の設定にも影響がありますので、ネットワークを使う場合はアップデートを最後まで実行できない可能性もあります。

> 以上から、NetworkManagerを諦めて、/etc/interfacesにeth0の記述しておいてswupdpateで更新する事で上手くいくようになりました。

NetworkManager の ifupdown plugin で /etc/interfaces も読んでいますので、それはそれで大丈夫だと思いますが、 .nmconnection ファイルの方が細かい設定に向いていますね。

> 次に、今度はLTE接続の設定をswupdateで行おうとしています。
> nmcliを用いた接続は上手く行ったのですが、この設定もeth0と同じく/etc/NetworkManager/system-connectionsに置かれるもので、上記と同じくそのままコピーでは他の個体では使えないのではないかと考えています。
> しかし、この接続(ppp0)を/etc/interfacesにどう記述すれば良いのかが良くわかりません。

そうですね… できないと思います。
ソースコードをみたところ「iface ppp0 inet ppp」のような形であれば ppp として問う力されるはずですが、apn やパスワードの設定はできなさそうです:
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/tree/mai…

元々、複数の armadillo に同じ uuid を使いたくない気持ちですごく頑張っていますが、
想定されている使い方は一機の Armadillo で nmcli コマンドを実行して、作成された .nmconnection ファイルを swdesc_files などで配ることです。
今はちょうど他の設定方法を用意している最中なので、後数ヶ月でもう少し便利な方法ができると思いますが、今のところはそれで試していただけたらと思います。

ゆういつの注意点は、.nmconnection ファイルのモードは 0600 (u=rw,g=,o=) でないと NetworkManager が読んでくれないので、ATDE (か mkswu を実行しているところ)にモードを確認してください。
それさえよければ、問題なく nmconnection ファイルを共有できます。

固定 IP の設定の場合は、いくつかのファイルを用意して swdesc_command で正しいファイルを残すか、sed で頑張るしかないのでまだ不便で申し訳ないですが、nmcli や /etc/network/interfaces でも同じ問題ですのでそこは解決できていると思われます。

まだ不明なところがあれば遠慮なく聞いてください。

よろしくお願いします。

マルティネ様
詳細に解説頂きありがとうございます。
大体は私の想定通りで、あっているようで安心いたしました。
UUIDの件につきましては、手元にA6Eが1台しかないので、同じ設定をコピーして動作するかが検証出来ないのですが、1台のA6Eで作成したnmconnectionを持っていってそのまま動くものなのでしょうか?
動くのであれば、nmconnectionをコピーする方法でも良さそうです。
おっしゃる通り、外に出るUUIDではないので、動くかどうかだけの問題だと認識していますので、動作可能か否かだけお教えいただけますでしょうか?

以上、よろしくお願いいたします。

at_dominique.m…

2023年3月20日 10時42分

sx_iinoさん、

> UUIDの件につきましては、手元にA6Eが1台しかないので、同じ設定をコピーして動作するかが検証出来ないのですが、1台のA6Eで作成したnmconnectionを持っていってそのまま動くものなのでしょうか?
> 動くのであれば、nmconnectionをコピーする方法でも良さそうです。
> おっしゃる通り、外に出るUUIDではないので、動くかどうかだけの問題だと認識していますので、動作可能か否かだけお教えいただけますでしょうか?

問題なく動きます。

前のメッセージに書きましたが、NetworkManager が設定ファイルの mode に厳しいので、手元の armadillo が一台でも試してみてください。
ファイルを一旦 ATDE にコピーしてから A6E 上から消しておいて(初期化か persist_file -d で)、swu でもう一度展開していればちゃんと認識されるはずです。

私もこの方法で初期化の後にいくつかのネットワーク設定を initial_setup.swu に組み込んで必ず行っていますので、少なくても私の手元の数台で同じファイルを使う分に問題なかったです。

よろしくお願いします。

ありがとうございます。
とりあえず、1台のArmadilloではnmconnectionのコピーで起動する事は確認出来ました。
私は、NetworkManagerのデフォルトのコネクション名(Wired connection 1)が好きではないので、IFと同じeth0に変更し、eth0.nmconnectionにしていますが、問題なく動作しました。
どうやって認識しているのかと思いましたが、eth0.nmconnection内のinterface-name=eth0があるので、これで紐づいているのだろうと思います。
gsm-ttyCommModemもnmconnectionコピーで問題なく動作しました。

サポート及びご助言ありがとうございました。