PXE ブートと kickstart ファイルで CentOS 5.1 をインストールする修行、解決編

まる一日以上つぶしたが、ようやく抜けた。整理しておく。

なお、一般的にどうやればいいの? 的な情報は先人達がいい記事を書いているので、それらを見るよろし。

環境

  • インストールの対象マシン : PXE ブート可能なマシン X
  • DHCP & tftp & nfs サーバ : CentOS 5.1 S
    • IP アドレス : 192.168.129.120
    • DHCP : 3.0.5
    • tftp-server : 0.42
    • syslinux : 3.11

BIOS の設定

要は PXE ブートを有効にする、ってことだ。

DHCP サーバの設定

とりあえず、Xと同じブロードキャストセグメント内には、S以外の DHCP サーバがいないほうがいい。今回はSが NIC 2枚だったので、他のマシンとつながっているほう(eth1)は ifdown で落として、もう一方(eth0)は L2SW 越しにXとつないだ。/etc/sysconfig/dhcpd に

DHCPDARGS=eth0

と書いておいたので、たぶん、eth1 を落とす必要はなかったろう。試行錯誤中に成功にたどり着いたので試していない。eth1 を上げた場合は試していない。

詳しくは PXE の規格を読むべきだが、今回、いちばん詰まったところは

  filename "/linux-install/pxelinux.0";
  #option dhcp-class-identifier "PXEClient";
  next-server 192.168.129.120;
  host earth {
    hardware ethernet xx:xx:xx:xx:xx:xx;
    fixed-address     192.168.129.121;
  }

における next-server の欠如。最初の tftp アクセスが DHCP サーバに行ったので、その後の pxelinux の tftp アクセスもそのままアクセスに行くと考えてしまったが、普通に考えて DHCP サーバと tftp サーバが同一である保証はないし、pxelinux がアクセスしに行く tftp サーバの所在は示す必要があろう(ほんとか)。
ここを突破するのにCentOS5をネットワークブートからインストールする(ウノウラボの記事に補足)の記事が参考になった*1。多謝。

ちなみに、↑の設定の dhcp-class-identifier を生かしたら dhcpd のエラーが発生した。

tftp-server の設定

こいつが悪いのかといろいろ調べたが、特に難しい設定はなさそうだ。

pxelinux 用の設定

ネット上には、pxelinux が読み込む設定ファイルのパスを pxelinux.cfg/default にする、と解説している記事が多いが、ここは MAC アドレスか IP アドレスベースの設定ファイルを置いておくのが吉だろう。無駄に待たなくて済むし。
少なくとも今回使用した syslinux 3.11 の pxelinux.0 は MAC アドレスベースの設定ファイル(pxelinux.cfg/01-xx-xx-xx-xx-xx-xx*2)を最初に読みにくるので、それにしておけばいいんじゃないだろうか。

設定ファイルの内容は 検閲Tech: DRACでリモートからCentOS 5.1をAnaconda Kickstartで完全自動PXEインストール・その1 に書かれているものそのまま(http が nfs になっているけど)。

default xento5

label xento5
kernel vmlinuz
append load initrd=initrd.img devfs=nomount ksdevice=eth0 ks=nfs:192.168.129.120:/var/ks/toriniku_ks.cfg

多謝

そんなものかな。

それにしても、PowerEdge の電源ボタンをぽちっとな、と押してあとは自動でインストールが進むのを見るのは心地よい。人が付き添っていなくてもインストールできるところがウリなのに、じっくり見入ってしまった。久々に叫びたくなるほど嬉しくなった、そんな午後。

*1:tftp "client does not accept options" でググってヒットした。

*2:最初は先頭の 01 を忘れてはまった。