印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux PCMCIA 起動スクリプトの不具合

ThinkPad 600 で動いている VineLinux は、起動直後はネットワークが動作してくれない。コンソールから ifup してやれば動作するようになる。これは PCMCIA カードの認識がネットワークの起動より後になっていることが原因。起動直後に named が反応しないのもこれが原因だと思われる。

■ ■ ■

起動する順番は、例えばランレベル3の /etc/rc3.d/ ディレクトリを見ると、S10network, S45pcmcia というシンボリックリンクがあるので分かる。pcmcia は 45 番で、network の 10 番より後になっている。修正としては、pcmcia の起動順を早くするか、network を遅くするかのどちらかになる。network の起動を遅くすると、他に問題が発生する可能性があるので、ここでは pcmcia の起動を早めることにする。この他、ThinkPad の場合は特に、Vine Linux 2.6 Tips にあるように、/etc/lilo.conf に append="acpi=off" オプションを付け加える必要がある (nlog(n): kernel 2.4.22-0vl2.11)。

/etc/rc.d/init.d/pcmcia を開くとヘッダ部分は次のようになっている。「#」で始まる行はコメントである。第1行だけはシェルに対して特別な意味を持つが、他の行はコメントとして扱われる。しかし、そのコメントも他のコマンドに対しては意味のある部分もある。

#!/bin/bash

# rc.pcmcia 1.45 2002/08/08 06:43:43 (David Hinds)
#
# This is designed to work in BSD as well as SysV init setups. See
# the HOWTO for customization instructions.

# Tags for Red Hat init configuration tools
#
# chkconfig: 2345 45 96
...

「chkconfig:」の行は chkconfig コマンドに対して意味がある。続く数字は、「ランレベル 2, 3, 4, 5 のときに有効で、起動順は 45、終了順は 96 とする」と読むことができる。

ここで指定されている起動順が問題。これをネットワークの「10」よりも小さくすればよいので、「09」に変更する。数字は2桁でなければならない。

#!/bin/bash

# rc.pcmcia 1.45 2002/08/08 06:43:43 (David Hinds)
#
# This is designed to work in BSD as well as SysV init setups. See
# the HOWTO for customization instructions.

# Tags for Red Hat init configuration tools
#
# chkconfig: 2345 09 96
...

修正が終わったら、シンボリックリンクに反映する。次のコマンドにより、各ランレベルにおける起動順をすべて変更することができる。下の「#」は root のコマンドプロンプトである。

# chkconfig pcmcia reset

PCMCIA 認識の不具合については、Linux 書斎派Vine2.6rc3の不具合 でも指摘されている。2004年2月1日付の Vine Linux errata [initscripts のバグフィックス] ではまだ修正されていない。

カードの抜き差しをしないので気がつかなかったが、ホットプラグに関する不具合もあるという。Vine2.6rc3の不具合 では、これを /etc/sysconfig/nwtwork-scripts/network-functions の不具合として、その修正方法もあわせて載せてくれている。ありがたいことである。

     83 is_available ()
     84 {
     85     LC_ALL= LANG= ip -o link | grep "$1" > /dev/null && return 0
     86     alias=$(modprobe -c | awk -v i="$1" '$1=="alias"&&$2==i{print $3}')
     87     if [ -z "$alias" -o "$alias" = "off" ]; then
     88         # ADHOC fix: try 6 times to detect some slow hotplug network device.
     89         local _count=""
     90         until [ "$_count" = "......" ]; do
     91             sleep 1
     92             LC_ALL= LANG= ip -o link | grep "$1" > /dev/null && return 0
     93             _count=$_count"."
     94         done
     95         return 2
     96     fi
     97     modprobe $alias >/dev/null 2>&1|| {
     98       return 1
     99     }
    100 }

赤色部分のように修正すればいいらしい。

Posted by n at 2004-05-25 23:13 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?