メモ:dhcp, pxe, initrd

initrdってKernel 2.6から(?)フォーマットが変わったんですね。いつの間に? ext2からcpioになってるよ。でもext2でも受け入れてくれるみたいだ(たぶん)。

pxeブート+nfsrootで上げるときの問題だけど、/をマウントするときにネットワークが有効じゃなきゃいけないから、カーネルが上がったときにDHCPで設定を取ってくることになる。IPAPPENDと書けば、pxeのときにもらったIPアドレスを使って、カーネルのパラメータでIPアドレスその他が渡されるから、改めてDHCPで取ってくる必要は本来はないんだけど。

でもこのカーネルレベルのIP-Configって、NICのドライバをモジュールにしてるとダメなのね。だからカーネルをコンパイルするときに、必要そうなNICのドライバは組み込みにしとかなきゃいけない。モジュール対応パッチというのをMLのアーカイブで見つけたけど、却下されていた。「モジュールが読める環境(initrd内)があるなら、そこでユーザレベルのDHCPクライアント使えばいいじゃん」てなもんだ。そりゃそうだ。

でも普通のmkinitrdではそんなinitrdを作ってくれない。initrd内にdhclientやpumpを入れれば恐らく問題はないと思う。ていうか最小構成はinitrdだけでいい。DHCPでIPアドレスもらってsshd上げときゃそれで済むんならinitrdのみでも問題ない話な気がする。initrdの中にgccとdistccdを押し込めとけば、DHCPとtftpのサーバを立てるだけで、一時的にコンパイルの子機を増やすのも楽になるなぁ。これは20MBもあれば十分かな。20MBあればXも上がる気がする。initrdの限界はramsizeだと思うけど、initrdの容量制限がどのくらいかは気にしとこう。

initのnashのスクリプトの最後のほうでswitchrootとかしないで、sshdとdistccdだけ上げてからコンソール用の/bin/shでも上げとくがいいじゃないかな。

そう、NFSと言えばnfsrootも問題で、nfsroot対応のカーネルにしなきゃいけない。しょうがないので、Fedora Core 3だとkernel-2.6.specをいじってリビルドすることになる。

--- kernel-2.6.spec     2005-04-08 08:20:13.000000000 +0900
+++ kernel-2.6.spec.rootnfs     2005-04-25 18:06:56.000000000 +0900
@@ -641,6 +641,19 @@
 for i in *.config
 do
        mv $i .config
+       cat <<EOF >> .config
+CONFIG_NFS_FS=y
+CONFIG_ROOT_NFS=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+CONFIG_NET_PCI=y
+CONFIG_E100=y
+CONFIG_E100=y
+CONFIG_E1000=y
+CONFIG_TIGON3=y
+EOF
        Arch=`head -1 .config | cut -b 3-`
        make ARCH=$Arch nonint_oldconfig > /dev/null
        echo "# $Arch" > configs/$i

もともとnfsrootのためにカーネルの設定を必要とする理由はよくわからない。initrd内である程度までがんばれば、あとはnfsrootの設定なしでも/にNFSを使えるんじゃないかと思う。それができればカーネルのコンパイルが必要なくなるから、楽なんだけどな。

なんでこんなこと考えてるかっていうと、家でコンパイルに時間がかかるときとかどうにかならないかな、と。余ってるマシンは普段電源を入れてないし、上がるOSも定かじゃなくて、その中でコンパイラが違ったりするとdistccは使えない。コンパイルの親玉(いつも使っているノートPCなんだが)で、子機でブートする環境まで含めて全部コントロールしたい&どうせならできるだけ高速にブートさせたい&できれば無駄なカーネルコンパイルはしたくない、と。

もしかしたら仕事でも使えるかもしれないしね。JavaのVMとマイグレーションを受けつけるサーバを(よく知らないけどRMIのアレとかで?)でも上げとけば、少しは真面目に使えるかもしれない。返す返すもよく知らないけど。

ただ、自宅で余ってる、BIOSの設定項目すら出てこないメーカー製マシンがPXEブートに対応してるかどうかってとこが最大の不明点なわけだが(笑)。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です