まぁなんてことはないんですが、CMSパッケージをいくつか試してみようと考えて、VmwareにインストールしたUbuntu 8.04 Server版のイメージを元にCloneを作成しました。
なにげなく起動してパッケージ情報を更新しようと"sudo apt-get update"を実行したところネットワークに接続されていない事でエラーが発生してしまいました。
わりとすぐに以前ALIXで調べた/etc/udev/rules.d以下のファイルを書き換える必要があるんだろうと気がついてよかったですが、ひさしぶりに慣れない事をするとはまりそうになります。
調べ方だけまとめておきます。
ネットワークインタフェースの状態を把握する
linuxではネットワークインタフェースはループバックデバイス"lo"の他に"eth0", "eth1"、...といった"eth"+"数字"で認識されていて、昔は物理的なネットワークカードに対応して0番目から1..nと増えていったものです。最近は後述するようにネットワークカード毎にユニークなMACアドレスを紐づけて、電源を入れる度にランダムにネットワークカードとデバイス名の対応が壊れないように管理されています。一つのインタフェースに複数のIPアドレスを"eth0:0"のような形式で設定する("sudo ifconfig eth0:0 192.168.x.y"等)事もできますが、現在のような形で管理されてしまうとなかなか見る機会も使う機会もなさそうです。
というわけでネットワークに接続できない場合には、まずどんなネットワークデバイスが認識され、有効になっているか確認します。 まずは有効になっているネットワークアドレスを調べます。
$ ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)これで127.0.0.1という必ず設定されている自分自身を表すループバックアドレスだけが認識されている事がわかります。これはお約束で設定されているため、これだけではネットワークに接続する事ができません。
次にネットワークに認識されているデバイスを調べます。
ifconfig -a eth1 Link encap:Ethernet HWaddr 00:0c:29:14:yy:yy BROADCAST MULTICAST MTU:1500 Metric:1 ... lo ...通常は2行目にIPアドレスの指定が入り、"BROADCAST"で始まる行が"UP BROADCAST"と稼働中を表わす"UP"で始まるようになります。
ここで"eth0"ではなく、"eth1"が認識されているものの稼働していない理由を調べます。Ubuntu 8.04では"/etc/network/interfaces"にデバイス毎の設定が入ります。
$ cat /etc/network/interfaces # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet dhcpここで"eth1"に対応する設定が入っていない事でDHCPサーバーからの自動IP設定もIPアドレスの直接指定もできずに"eth1"が認識されたまま起動しないのだとわかります。
ここでの解決策はおそらく次のいずれかになるでしょう。
- /etc/network/interfacesファイルにeth1用の記述を追加する
- eth1をeth0として認識させる
$ sudo find /etc/ -type f -exec grep eth0 {} \; -print ... /etc/network/interfaces ... /etc/dhcp3/dhclient.conf.dpkg-dist ... /etc/udev/rules.d/70-persistent-net.rules ... /etc/initramfs-tools/initramfs.confsudoを使用するのは一般ユーザーでは読めないファイルがあった時のエラーを防ぐためだけで、必要性は高くありません。grepの結果が表示されて、続いてそのファイルが表示されます。この中で2つのファイル、"interfaces"と"initramfs.conf"、はmanで何のファイルか確認する事ができます。"dhclient.conf.dpkg-dist"のファイルの後ろにある".dpkg-dist"はパッケージの更新時に既存のファイルを残す選択をした時に作成されたもので、普通は新しいパッケージについてくる未編集の設定ファイルです。"man dhclient.conf"と".dpkg-dist"を除いた形では説明を読む事ができます。
残った"/etc/udev/rules.d/70-persistent-net.rules"ファイルが問題のファイルで、この中は次のようになっています。
$ cat /etc/udev/rules.d/70-persistent-net.rules # PCI device 0x8086:0x100f (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:14:xx:xx", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # PCI device 0x8086:0x100f (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:14:yy:yy", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"いま認識されているMACアドレスは"00:0c:29:14:yy:yy"なので、これがeth1になっているのは、このファイルの記述通りです。"00:0c:29:14:xx:xx"はVMWareでCloneを作成する元になった方で使用していました。これは今後使われる可能性がないので、おもいきって消してeth1をeth0にしてしまいます。
$ cat /etc/udev/rules.d/70-persistent-net.rules # PCI device 0x8086:0x100f (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:14:yy:yy", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"これで再起動すれば、"eth0"となったデバイスに、/etc/network/interfacesの設定通りdhcpで設定されたIPアドレスが設定されます。
0 件のコメント:
コメントを投稿