Category:
Linux
ということで、普通は Linux がモジュールを読み込む順番(= PCI の順番?)になっていると思われる NIC の名称(eth0, eth1, ...)ですが、たとえばカードを差し替えたりして順番が変わったりすると色々と嫌ですね(デーモンの config で特定のインターフェースのみにバインドするように設定しているケースとか)。自分の場合、オンボードの NIC と PCI バスにある NIC、FireWire の 3 つを利用しているのですが、オンボードの Marvell Yukon のドライバは CentOS の標準ドライバとして入っていないので、カーネルをアップデートすると認識されなくなります(つまり、番号が一つずれてしまう)。
で、これを解決するべく ifrename を使うことに。
ifrename は予め /etc/iftab に書いておいたルールに従って network interface をリネームしてくれる賢いソフトウェアです。
ルールは、こんな感じ。
/etc/iftab
FireWire については MAC アドレスを利用できないので、ドライバによる指定を使いました。これは簡単。
あと、ifrename を起動時に自動実行するべく、起動スクリプトをつらつらと書きます。
ポイントは network(起動プライオリティ 10)の前に(again, 前に!)実行すること。
終了時は何もしませんが、とりあえず network(終了プライオリティ 90)の後にしました。
/etc/init.d/ifrename
最後に、
# chkconfig --add ifrename
とかやると、runlevel 2/3/4/5 で勝手に実行するようになります。めでたしめでたし。
追記
FireWire とか、普通じゃないデバイスを使っていない場合(普通の Ethernet NIC のみで構成している場合)は、ifcfg-ethX に HWADDR を書いたほうが圧倒的に楽です。(コメントを参照)
で、これを解決するべく ifrename を使うことに。
ifrename は予め /etc/iftab に書いておいたルールに従って network interface をリネームしてくれる賢いソフトウェアです。
ルールは、こんな感じ。
/etc/iftab
# eth0 - PCI NIC (r8169)
eth0 mac 00:00:00:ほげほげ
# eth1 - On-board NIC (sk98lin)
eth1 mac 00:00:00:ほげほげ
# eth2 - FireWire (eth1394)
eth2 driver eth1394
FireWire については MAC アドレスを利用できないので、ドライバによる指定を使いました。これは簡単。
あと、ifrename を起動時に自動実行するべく、起動スクリプトをつらつらと書きます。
ポイントは network(起動プライオリティ 10)の前に(again, 前に!)実行すること。
終了時は何もしませんが、とりあえず network(終了プライオリティ 90)の後にしました。
/etc/init.d/ifrename
#! /bin/bash
#
# ifrename Rename network interfaces
#
# chkconfig: 2345 9 91
# description: Renames network interfaces by the rule specified in iftab(5)
#
# Source function library.
. /etc/init.d/functions
IFRENAME=/sbin/ifrename
OPTIONS=-t
RETVAL=0
# See how we were called.
case "$1" in
start)
echo -n $"Renaming Network Interfaces: "
$IFRENAME $OPTIONS && success || failure
RETVAL=$?
echo
;;
stop)
# do nothing
;;
*)
echo $"Usage: $0 {start|stop}"
RETVAL=1
esac
exit $RETVAL
最後に、
# chkconfig --add ifrename
とかやると、runlevel 2/3/4/5 で勝手に実行するようになります。めでたしめでたし。
追記
FireWire とか、普通じゃないデバイスを使っていない場合(普通の Ethernet NIC のみで構成している場合)は、ifcfg-ethX に HWADDR を書いたほうが圧倒的に楽です。(コメントを参照)
Comments
が、今 CentOS 5.2 で試してみたところ、HWADDR の指定で問題なく指定できているようです...
原因は良く分からないのですが、新環境には FireWire のドライバをまだ入れていないので、それが怪しいのかも知れません。
てなわけで、偽装HWADDRを振れば良いかもね。
(試したことないので動くかは知らない。)
insmod eth1394 hwaddr=0x12345678
http://linux.softpedia.com/get/System/Operating-Systems/Kernels/Ether-1394-34556.shtml
# dmesg | tail
...
eth1394: Unknown parameter `hwaddr'
残念ながらエラーでした...
でも偽装 MAC アドレスが振れればブリッジも組めるかもしれませんね。
後日ここらへんを漁ってみたいと思います。
http://news.gmane.org/gmane.linux.kernel.firewire.user