Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

PCMCIA と NIC の認識順序

Vine Linux 3.2 は起動時に、 PCMCIA の有効化よりも先に NIC の始動を行おうとする。そのため、 PCMCIA (CardBus とか)接続の NIC を使っている場合は、起動時 NIC の初期化が失敗する。次のようなメッセージが出る。*1

Bringing up interface eth1:  tulip device does not seem to be present, delaying eth1 initialization.
                                                           [FAILED]

で、この後放っておいても NIC は有効になる。なので、このメッセージは気にしなくてよい。

で、どうしても気になるので、 NIC が有効になるまでのシーケンスを調べてみた。

  1. PCMCIA が有効になる
  2. murasaki が挿さっている NIC を検知
  3. murasaki が /usr/lib/murasaki/net シェルスクリプトを実行
  4. /usr/lib/murasaki/net の中で /etc/sysconfig/network-scripts/ifcfg-eth1 の ONBOOT パラメータを見る
  5. ONBOOT が "no" なら NIC は立ち上がらない
  6. そうでないなら ifup eth1 が実行されて NIC が利用可能になる

さて、ここで問題になるのが /etc/sysconfig/network-scripts/ifcfg-eth1 の ONBOOT パラメータで、

  • "no" にしておくと、起動時のエラーメッセージは出ないが、 NIC を挿抜したときに自動で ifup が実行されないので面倒
  • "no" 以外にしておくと、 NIC を挿抜したときに自動で ifup が実行されるが、起動時にエラーメッセージは出る

というわけで、システム備え付けの設定項目だけで「エラーメッセージも出ず、面倒もない」設定は行えない……はず。

なお、次のような方法でなら解決もできるはずです。

  • /etc/pcmcia/network スクリプトを編集する(case 文の 'stop' の方に書かれているコマンドラインを 'start' の方にコピーしてきて、 'ifdown' のところを 'ifup' に書換えれば OK)
  • /etc/rc.d/rc.[0-6].d/ 以下のファイルの名前を変更して、 pcmcia (default:45) より network (default:10) の方が後に実行されるようにする

*1:このメッセージは、 CardBus な NIC を eth1 としていた場合で、そのドライバは tulip 。手書きだから typo があるかも。