タイトルで言いたいことは言い終わった。
いきさつ
諸事情から40台のコンピュータにUbuntuインストールすることになり、手動でやるのは死ねるのでPXE boot + Preseedで自動インストールしようと思い、手元にあった環境でテストしてた。諸事情によりネットワークブート用のサーバとして使えたのはCentOS6の入ったコンピュータであった(悲劇の始まり)
UEFI/PXE-netboot-install – Ubuntu Wikiを見ながらネットワークブートの環境を作っていた。Ubuntu Wikiではdnsmasqを使っていたが、以前使ったことがあって設定もある程度調べていたdhcpdを使うことにした。同じように設定すればいいだろうと思って。あとDNSに関すること全くさせないのにdnsmasq使うのが何となく嫌だった。
で、いざやってみるとtftp経由でgrubイメージ読むところまではうまくいっているが、その後grub.cfgを読みに来ない。GRUBのシェルになる。dnsmasqを使ってやるとちゃんとgrub.cfgを読みに来てブートメニューが表示される。
なんでじゃーと思い、方々を調べながら試行錯誤を繰り返していたところ、dhcpd.confにnext-serverの設定を追加したら期待通りの動作をするようになった。
Man page of dhcpd.confから
next-server 文は初期ブートファイル (filename 文で指定したもの) をロードするサーバのホストアドレスを指定するために使います。 server-name は数値の IP アドレスかドメイン名です。 接続してきたクライアントに対して与えるべき next-server パラメータがなければ、DHCP サーバの IP アドレスが用いられます。
next-serverの項目書いてなければDHCPサーバのIPアドレスになるとあり、実際grubイメージは同じIPで動いているTFTPサーバに読みに来てるのに、その先にはnext-serverの項目がないと進まないってわけがわからないよ。
追記
> Mon, 12 Sep 2005
> Rectify manpage on new next-server default.https://t.co/fzjbpPJkZo— pinterior (@pin_ptr) April 17, 2018
manpageからnext-serverが存在しないときの部分が削られてた。手元でman dhcpd.confしたら新しいのがちゃんと出てきた。13年以上前の情報が平然と上位に出てくるインターネットこわい。
オチ
不可解な点はあっても問題は解決したのでよしよし、同じことで困ってる人もいるだろうから帰ってブログエントリ書くか、と思ってUbuntu 16.04でやってみたらnext-serverなくてもしっかり動いて悲しみにくれる。
結論
CentOS6とかいう旧時代の遺物は破却しましょう。する。