This service is available only in Japanese-language.

ifconfigの重複インストールについて

以下のページのBSPを使用し、開発を進めています。
https://github.com/TechNexion/tn-imx-yocto-manifest/tree/mickledore_6.1....

bitbake imx-image-core は完了しており、評価基板上で動作確認を行ったところ、
ifconfig が2種類入っていることがわかりました。

1つは net-tools パッケージによるもので、
他方は BusyBox によるものです。

BusyBox の ifconfig を使えるようにするには、どのように編集すればよいでしょうか。

※ 弊社の開発の都合上、mii-tool が必要であるため、net-tools パッケージの削除はできない状態です。

※上記コメントに対する補足です。

$ which ifconfig
/bin/ifconfig

ではなく、

$ which ifconfig
/bin/busybox ipconfig (イメージです。)

のような挙動は実現できそうか、という内容です。

本件回答します。

実機がないためビルドPC上でimx-image-coreを作成し、${IMAGE_ROOTFS}のディレクトリを調査した結果となります。

ルートディレクトリでifconfigというファイルを検索しました。

---
$ find -name ifconfig
./usr/lib/opkg/alternatives/ifconfig
./bin/ifconfig
---

alternativesが設定されている事がわかります。その設定内容を確認するとnet-tools側のifconfigのほうが優先度が高いことがわかります。

---
$ cat ./usr/lib/opkg/alternatives/ifconfig
/bin/ifconfig
/bin/busybox.nosuid 50
/bin/ifconfig.net-tools 100
---

ifconfigの実体を確認します。

---
ls -l ./bin | grep ifconfig
lrwxrwxrwx 1 user user 23 3月 9 2018 ifconfig -> /bin/ifconfig.net-tools
-rwxr-xr-x 1 user user 68K 3月 9 2018 ifconfig.net-tools
---

このことから、net-tools側のifconfigが使用されていることがわかります。

alternativeの仕組みを使用して、使用するifconfigをbusyboxのものにする場合、

「update-alternatives --config ifconfig」を実行し、表示された一覧の中からbusyboxの番号を選択します。
詳しい使用方法は下記がわかりやすいかと思います。

https://qiita.com/kuwa_tw/items/cfba33d0678b621808a8

手動でシンボリックリンクを貼り直すことでも対応可能です。その場合下記を実行します。

---
$ ln -sf /bin/busybox.nosuid /bin/ifconfig
---

alternativesの機能が働いているためbusyboxとnet-toolsが同時に存在することで競合などは発生しないと考えます。
また、機能的にもnet-toolsのifconfigを使用することで問題が発生するとは考えづらいですが、
あえてbusyboxのバージョンを使用したい理由などはあるのでしょうか?
もし無いようでしたら現在の状態でも問題は無いと考えます。

上記の内容について、弊社の開発環境内のbitbake結果や、実機で確認してみます。

***************
> また、機能的にもnet-toolsのifconfigを使用することで問題が発生するとは考えづらいですが、
> あえてbusyboxのバージョンを使用したい理由などはあるのでしょうか?

現在、ある組込み機器更新の業務を進めています。
更新対象の組込み機器では、IPアドレス設定の際、ifup/ifdownによる処理を行っています。

net-tools パッケージによるものは「netplan」を採用しており、
BusyBox によるものは、「ifup/ifdown」を採用しています。
ですので、なるべく更新前と同じ処理にしたいため、
IP設定関連のコマンドはBusyBoxを選択したいと考えています。

※ifconfig以外にも、パッケージ・BusyBoxと重複するコマンドがあれば、
ご連絡いただければ幸いです。
***************

すみませんが、追加で質問させてください。
> alternativeの仕組みを使用して、使用するifconfigをbusyboxのものにする場合、
>
> 「update-alternatives --config ifconfig」を実行し、表示された一覧の中からbusyboxの番号を選択します。
> 詳しい使用方法は下記がわかりやすいかと思います。
>
> https://qiita.com/kuwa_tw/items/cfba33d0678b621808a8
>
> 手動でシンボリックリンクを貼り直すことでも対応可能です。その場合下記を実行します。
>
> ---
> $ ln -sf /bin/busybox.nosuid /bin/ifconfig
> ---

上記について、適切なbbappendレシピ内で、
自動でbusyboxのifconfigを使用するように設定するには、
どのように対応すればよろしいでしょうか?

回答します。

まず最初に、bitbakeした時点でbusyboxのifconfigが有効になる方法です。

任意のレイヤに「recipes-core/busybox/busybox_%.bbappend」を下記の内容で作成します。

---
ALTERNATIVE_PRIORITY[ifconfig] = "150"
---

これにより、ROOTFS_POSTPROCESS_COMMANDのタイミングで実行されるalternativeの処理で、busyboxのifconfigが採用されるようになります。

以下は参考情報となります。

■ net-tools版ifconfigとnetplanについて

> net-tools パッケージによるものは「netplan」を採用しており、

これは基本的には正しくなく、netplanが使用されることとnet-toolsのifconfigが使用されることは直接関係ありません。
netplanを使用したくない場合はnetplanパッケージを除外するのが本来の選択肢かと存じます。

■ imx-yocto-bspのデフォルトのネットワーク設定について

特にカスタマイズを行っていないimx-yocto-bspの環境ではinitプログラムにsystemdが採用されるようになっており、ネットワーク設定処理は、netplanではなく「systemd-networkd」が使用されるようになっています。

kawabata0820様の環境でどのようなカスタマイズを行っているか情報が無いため実際にはどのようになっているかはわかりかねますが、本来、ifup/ifdownによるネットワーク設定を採用するためにはinitプログラムをsysvinitに変更するなどカスタマイズが必要となります。

また、ifup/ifdownを使用することとifconfigがbusybox/net-toolsのどちらかであることは直接関係ありません。

■ busyboxについて

busyboxは古くからある組み込み環境においてストレージ容量を節約するために、1つのバイナリで複数のlinuxコマンドを提供するためのものとなります。
1つのバイナリ(busybox.nosuid)に対し、コマンド名でシンボリックリンクを作成することで、複数のコマンドの機能を提供するためのものとなっています。そのため、busyboxで提供されるコマンドは、本来のコマンドと比較して対応するオプションが少ないなど制限がある場合が多く、
ストレージ容量に余裕がある場合は、busyboxじゃない本来のコマンドを使用するほうが推奨されます。

ですので、今回のようにbusyboxを優先させたいケースは稀で、設計的に問題がある可能性を疑うほうが良いことが多いです。

また、Yocto Projectの環境ではAlternativesの機能を採用しているため、busyboxと本来のコマンドを提供するパッケージが競合しても、動作に問題が無いようになっているため、基本的に重複を気にする必要はありません。

> ※ifconfig以外にも、パッケージ・BusyBoxと重複するコマンドがあれば、
> ご連絡いただければ幸いです。

こちらについては、下記の理由で実施が難しいと判断します。

1. 機械的に調査する方法が無い
2. kawabata0820様の環境の詳細がわからない

以上となります。

> 任意のレイヤに「recipes-core/busybox/busybox_%.bbappend」を下記の内容で作成します。
> ---
> ALTERNATIVE_PRIORITY[ifconfig] = "150"
> ---
> これにより、ROOTFS_POSTPROCESS_COMMANDのタイミングで実行されるalternativeの処理で、busyboxのifconfigが採用されるようになります。

上記について、設定し試行してみます。

> ■ net-tools版ifconfigとnetplanについて

本項目について、ifconfigとifup/ifdownとで混同していたようですみません。
netplanパッケージの除外で進めます。

> ■ imx-yocto-bspのデフォルトのネットワーク設定について

本件について、
bitbake -e でBSPの設定を見てみたところ、以下の設定となっていました。
*****
DISTRO_FEATURES="(省略) systemd (省略) sysvinit (省略)"
INIT_MANAGER="sysvinit"
POKY_INIT_MANAGER="sysvinit"
VIRTUAL-RUNTIME_init_manager="systemd"
VIRTUAL-RUNTIME_initscripts="initscripts"
*****

https://yoctobbq.lineo.co.jp/?q=node/130
を拝見しましたが、
上記5変数をsysvinitに統一することで、
initプログラムをsysvinitに変わる認識で正しいでしょうか?

> ■ busyboxについて

busyboxの存在意義(ストレージ容量を節約するために、1つのバイナリで複数のlinuxコマンドを提供しているが、制限がある)については、承知しています。
ですが、弊社社員が以下のように気になっているため、質問しました次第です。
*****
・起動時に ifup というのを用いて初期化しようとしている。
・コードをみたところ /etc/network/interfeces を読んでる様子。
・/etc/netplan はあるが、Network.Manager は動いていない。
IP の設定だけの為に、新規追加などは、できれば入れたくない。
実際 Network.Manager なるサービスがデフォルトで動いてないし、
動いてないならわざわざ動かすのは避けたい。
・初期化シーケンスでは、ifup -a がコールされるが、
これがうまく動作していないように思われる。
ifup は busybox の機能にリンクしてたのでコードを見たところ、
/etc/network/interfeces を読む様に見受けられた。
でも読まれないのは、何か2重に初期化している??
・ifup eth0 とすると /etc/network/interfeces のものが反映されてた。
ただ、非 busybox の ifconfig (※net-tools パッケージ由来) でdownした後、
busybox の ifup をすると、初期化済という反応をするため、
相性が合っていない感じがする。
※ ifdown eth0 とした後 ifup eth0 とすると動作する。
・この辺から起動時等に別ツールでのサービス等が影響競合して
設定がうまくいっていないということはないでしょうか?
・また、ifconfig (※net-tools パッケージ由来) を別にインストールしているようですが、
busyboxに含まれており、そちらの方が馴染みのある感じの表示です。
busyboxにあるのになぜ?
*****

Alternatives機能によって、busyboxと本来のコマンドを提供するパッケージが競合しても、問題は無いことで承知しました。

ifconfig以外の重複コマンドについては、
INHERIT="buildhistory"
によって生成される「files-in-image.txt」で確認してみます。