初めて投稿します.Vine Linux 2.6 をノートパソコンにインストール しましたが,Cardbusネットワークカード(FNW-3603-TX)をHotPlugできず, 原因を調べた結果,以下のことがわかりました.ネット上で検索しました が同じ記事が見つからなかったので,まだ知られていない可能性もあると 考えて報告することにしました. 『現象の説明』 FNW-3603-TX には RealTek RTL-8139 が使われています.Vine Linux 2.6 では,このチップ用のドライバー 8139too.c のコード中に FNW-3603-TX も登録されているので,カードを差し込むと,最初から認識されます. ところが,/etc/sysconfig などに,必要なファイルが揃っていても, ネットワークインタフェースは構成されません.しかも,カードの挿入後 に改めて ifup eth0 などと入力すると,ネットワークインタフェースが 正しく構成されます. 『解決法』 この問題は,/etc/sysconfig/network-scripts/network-functions の 関数 is_available () の中の LC_ALL= LANG= ip -o link | grep -q $1 を LC_ALL= LANG= ip -o link | grep $1 >/dev/null 2>&1 に修正することで解決できることがわかりました. 『原因』 この現象の起きる理由を詳しく調べました. Vine Linux 2.6 では,cardbusのネットワークカードを差し込むと HotPlug機能により /sbin/murasaki.pci が必要なドライバーモジュール (FNW-3603-TXの場合は 8139too.o)をロードし,次に /sbin/murasaki.net により ifup eth0 (インタフェースが1つの場合)が実行されてインタフェース が構成されるようになっています.このことは,/var/log/messages への 出力と Vine Linux 2.6 のソースコードに含まれている murasaki-0.5.4-1vl4.src.rpm の内容などからわかります.この ifup eth0 が異常終了するため,インタフェースが構成されません. /sbin/ifup eth0 が実行されると ifup (スクリプトファイル) の中の is_available ${REALDEVICE} || { if [ "$?" = "1" ] ; then echo $"$alias device does not seem to be present, delaying ${DEVICE} initialization." exit 1 else exit 0 fi } のところで /etc/sysconfig/network-scripts/network-functions の関数 is_available () { LC_ALL= LANG= ip -o link | grep -q $1 if [ "$?" = "1" ]; then alias=`modprobe -c | awk "/^alias $1 / { print \\$3 }"` if [ -z "$alias" -o "$alias" = "off" ]; then return 2 fi modprobe $alias >/dev/null 2>&1|| { return 1 } else return 0 fi } が呼ばれますが,grep -q $1 ($1 は eth0 です) の終了コードが1になり (0になるはずが後述の理由で1になってしまいます),その後の return 2 または return 1 が実行されてしまいます.(私の環境では $alias に off が代入されるので return 2 が実行されます.$alias が実在する モジュールを表していれば,return 文は実行されずに関数を抜けます) その結果 is_available ${REALDEVICE} が偽になり || 以下が実行され return 2 のときは $? = 2 なので,無言のまま exit 0 で終了します. 問題なのは grep -q $1 の終了コードが1になることですが,kernel から実行されるために,ifup の実行中に標準出力がないことが原因に なっているように思います.このことは,この部分を grep -q $1 >/tmp/dummy などにすると ifup が異常終了しなくなることからも想像できます. コマンドラインから実行したときには,標準出力があるので異常終了 しないのでしょう. 私はこれまで Red Hat Linux 7.2 を使っていましたが,同じようなことは, そこでも起きていたようです.ただ,RHL7.2 では,grep -q $1 の終了 コードが2だったため, return 0 が実行され,問題が現れなかったようです. 2が返されることは grep -q $1 の直後に echo $? >/tmp/result を挿入 した結果,わかりました.異常な動作を説明したので,わかり難かった かもしれませんが,やっとカードを使えるようになったので,私にとって は価値のある修正でした.