[ubuntu-jp:2867] Re: Ubuntu Server 10.04 の起動順
Mitsuru Ogino
ogino @ verama.net
2010年 8月 3日 (火) 16:45:40 BST
荻野です。帰宅したので記憶で書いています。
Fumihito YOSHIDA said the following on 10/08/03 21:52:
> ちょっと現象を見切れていないので(時間が取れてないともいう。
> ごめんなさい)、すでに試された内容になってしまうかもしれませんが、
すみません、誤解を招く表現でした。
まず IPv6 全部ではなく、以下に書いた固定 IPv6 アドレスが問題のようで、
メッセージ的には ::1 への bind は成功していたと思います。Unbound の v6
設定を無くすと問題も消えたので、紛らわしい書き方をしてしまいました。
>> /etc/network/interfaces に、
>>
>> iface eth0 inet6 static
>> address 2001:xx:xx:200::18
>
> これは、この前に auto eth0 と IPv4 な固定アドレスは書いてあると
> 思ってよいでしょうか。
はい、その通りです。
> assign に失敗した旨のメッセージには v6 アドレスが含まれていて、
> 確実に v6 アドレスの bind にだけコケている(逆にいうと、「起動失敗」
> 状態ではv4アドレスに bind されていることが lsof -i などで見える?)
> ことが確定しているでしょうか?
> # v4もv6も賦活されてない、という話だとちょっとわかり易くなります。
メッセージからはそう見えましたが、unbound は失敗した後終了してしまうので
lsof で確認することはできません。
> で、/etc/rc*.d/以下にあるスクリプトのキックは /etc/init/rc.conf が
> 実行しているのですが、こいつは runlevel イベント(rc-sysinit)でキック
> されるので、起動条件は
> 「emits filesystem(=mountall) + net-device-up IFACE=lo」
> です。ループバックしかあげないjobは見当たらないので、これは実質
> networking の後になると思います。
>
> で、一方で/etc/init/networking は
> 「emits local-filesystems(=mountall) + stopped udevtrigger」
> が起動トリガになっているので、ほぼ起動直後、デバイス認識が終わった
> 時点で走るので、ちょっと先走りというのは見た目なさそうな気がします。
> ということで、実は lo だけ上がった状態で起動している説というのを
> ちょっと気にしています。
なるほど。lo だけ上がった状態で並行してスタートを切っているとすると符合
するように思います。止められるかどうか確認して、unbound の設定で ::1 だ
けのときと、::1 とグローバル IPv6 の両方にしてテストして、::1 だけのとき
なら OK なら、IPv6 全部ではないという一歩切り分けができるように思います。
思いつきですが、ひょっとして固定の IPv6 アドレスでも Duplicate Address
Detection の 1秒は保留されるとか、なにか時間がかかる要素があるのかもしれ
ません。
しかし、たとえば DHCP 管理で MAC アドレスに対して固定的割り当て、とか IP
アドレス確定までちょっと時間がかかるようなものに対して、アプリ側がそのア
ドレスを指定して bind しようとするケースでは、同じような現象が起きている
のでしょうか。
> 思い切り無理やり修正するのであれば、以下のような作戦になると思います。
> a) /etc/init/rc-sysinit.conf の「start on filesystem and net-device-up IFACE=lo」を
> 「start on filesystem and net-device-up IFACE=!lo」にする
> # ただし、/etc/rc*.d/ にある全てのスクリプトが eth0 などに依存するようになる。
> b) /etc/rc*.d/ に /etc/init.d/networking を含める
> c) sleep10 作戦のまま
b というのは /etc/rc*.d/ 以下へのシンボリックリンクを作るのだと思うので
すが /etc/init/networking の方はなにか処置をするのでしょうか。
c' としては ifconfig や ip addr show などの結果をみてアドレスが付いたの
を確認するまで短い sleep を繰り返す、とかが考えられます。
/etc/network/interfaces を切り分けようかと思いましたが man をみると
mapping などというものがあって、固定 IP アドレスを特定するのは汎用的には
無理そうですね。
> 根本解決するには、もう少し現象を追い込んで、「本当にv6だけLISTENできて
> いないのか、そうだとしたら犯人は何か」を確定しないと厳しそうです。
> 仮説と憶測としては、
> A) ifup -a が v6 だけ bind してくれない何かがある
> B) 実は lo だけが上がっていると、 v6 が上がっていない場合とそっくりな挙動になる
> C) /etc/hosts に v4 な hostname / FQDN だけが書いてあるせいで binding が変。
> init まわりはあまり関係ない。起動後だと resolver が機能するので上手くいく。
> あたりが考えられます。
A) sleep 10 作戦が成功したことをかんがえると無理があるような。
B) IPv6 でも lo は OK のようなので、私の書き方が悪かったせいです。実際に
lo は上がっており ::1 への bind は問題ない気がする(要試験)、eth0 の
IPv6 アドレスの割り当て?確定?に手間取っている可能性が高い。
C) 設定はすべて IP address をそのまま書いているのでちょっとなさそう。
大変参考になりました。なにかテストができれば試してみます。DNS なのでそう
は止められないのが難点ですが…
--
荻野 充 (おぎの みつる) ... 「萩(はぎ)」にあらず
Key fingerprint = 7F26 5414 1805 F31B 1617 10B7 C117 07AE 1691 9BD1
ubuntu-jp メーリングリストの案内