PXE boot with vmware

vmwareのゲストOSでPXEブートする必要があったので。

まず、vmwareの仮想LANは、/etc/vmware/vmnetx(xは1とか8とか)にdhcpdというディレクトリがあり、その中に/usr/bin/vmnet-dhcpdの設定ファイル・dhcpd.confがあります。
vmnet-dhcpdはiscのdhcpdですが、ちょっと古いバージョンなのでRHELのdhcpdとは少々設定が異なります。以下では、vmnet1にPXEブートの設定をするものとします。

この古いバージョンではclassというディレクティブを書いてもエラーになってしまうので、以下のような設定にします。

allow unknown-clients;
default-lease-time 1800;                # 30 minutes
max-lease-time 7200;                    # 2 hours

subnet 172.16.224.0 netmask 255.255.255.0 {
    range 172.16.224.128 172.16.224.254;
    option broadcast-address 172.16.224.255;
#    option domain-name-servers 172.16.224.1;
    option domain-name "localdomain";
    filename "linux-install/pxelinux.0";
    next-server 172.16.224.1;
}

#domain-name-serversの設定をコメントアウトしているのは、172.16.224.1にnamedが存在しないからです。こうしないとインストール初期に名前解決が出来ないために時間がかかってしまいます。

これで、vmware上のゲストOSのNICを”Custom: Specific virtual network”の/dev/vmnet1にしてあげることで、dhcpからIPアドレスがアサインされ、next-serverで指定されたtftpサーバ上の/tftpboot/linux-install/pxelinux.0を取得しに行きます。
pxelinux.0はsyslinuxパッケージに含まれる/usr/lib/syslinux/pxelinux.0をコピーしておきます。

次に/tftpboot/linux-install/pxelinux.cfg/defaultというファイルを作り、以下のような内容にしておきます。

default rhel4-u3 ks=http://172.16.224.1/kickstart/ks/label/rhel4-u3

label rhel4-u3
  kernel rhel4-u3/vmlinuz
  append initrd=rhel4-u3/initrd.img console=tty0 ramdisk_size=10000

PXEではIPアドレスから生成されたファイルをまず探しますが、無ければdefaultというファイルを見るようになっています。ファイル名はsyslinuxパッケージに含まれるgethostipコマンドで生成することが可能です。

ブートカーネルと初期RAMディスクは、/tftpboot/linux-install/rhel4-u3/というディレクトリから取得することになるので、RHEL4Update3のインストーラのディスク1のimages/pxeboot/から、vmlinuzとinitrdを当該ディレクトリにコピーしておきます。