UEFIでのPXE Bootは結構敷居が高い
夏が過ぎ 風あざみ、かえるのクーの助手の「井戸中 聖」です。
UEFIでPXE Boot する記事はとっても少ないです。
やってみて感じたのですが、ひとえに、
「UEFIではエラーメッセージがでない、もしくは一瞬で消える」ので、どこが問題なのかを特定するのがとても難しい。
という、点につきます。せめて1秒は表示してほしい。
それに比べ、20年前からあるレガシーBIOS/PXEでのbootは、(エラーメッセージもすぐには消えないので)比較的簡単にBootでき、UEFIでうまくいかなくても「レガシーBIOSモードのBootが問題なく動作するからいいや」となっていると思われます。
がんばりました
自由研究の課題にあげたからには、UEFI モードでのPXE起動もやらないわけにはいきません。手段は目的なのです!
結論をいえば、Boot用のUFIファイルのモードを変更しなければならず、これがわからないために足掛け3日かけました。折れない心と試行錯誤の勝利です。
レガシーBIOSでネットワークBOOT起動できていれば、UEFIでのBOOTはわずかな調整で可能です。
それでは前回のレガシーBIOSでの環境をもとに、それを調整することでUEFIでのネットワークBOOTを実現させましょう。
ほぼ、
の内容なのですが、一部重要な手順が必要です。
以下、環境設定作業手順のトレースです
外部ネットワークに接続できるモード(dhcp+NAT)でpxe_serverを起動します。※定義をcopy & pasteするときは未定義文字の巻き込みに注意ください。
# cd
# mkdir rpm
# dnf -y install --downloadonly --downloaddir=/root/rpm shim grub2-efi-x64
# cd rpm
# rpm2cpio shim-x64-*.rpm | cpio -dimv
# rpm2cpio grub2-efi-x64-*.rpm | cpio -dimv
# cp ./boot/efi/EFI/BOOT/BOOTX64.EFI /var/lib/tftpboot/
# cp ./boot/efi/EFI/centos/grubx64.efi /var/lib/tftpboot/
# cd /var/lib/tftpboot/
# chmod 744 BOOTX64.EFI grubx64.efi ※超重要!!!
# vi /var/lib/tftpboot/grub.cfg
set default 0
set timeout=30
menuentry 'Diskless CentOS 8 Client' {
linuxefi centos8/vmlinuz root=nfs:10.0.0.1:/var/lib/tftpboot/centos8/root rw selinux=0
initrdefi centos8/initrd.img
}
# vi /etc/dhcp/dhcpd.conf ※青色部変更
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
# PXE servers hostname or IP address
next-server 10.0.0.1;if option architecture-type = 00:07 {
filename "BOOTX64.EFI";
} else {
filename "pxelinux.0";
}
}
pxe_serverのアドレスを 10.0.0.1/24 に設定してシャットダウン
pxe_serverの接続をNATからブリッジ(専用接続ポート:インターネット接続なし)に変更
pxe_serverをboot
クライアントの起動モードの設定
クライアントのCSM起動モード(Launch PXE OpROM Policy/Launch Strage OpROM Policy)をUEFI onlyにする
クライアントのPXE起動モードをUEFI:IP4 にする。(一度設定をsaveしないとモード変更できないかも)
Bootします
クライアントをboot
UEFIモード (PXE over IPV4.)表示され、Bootメニューが表示される。(自分で定義したメニューです)
改行でBootする。そのままにしても30secで自動起動する。
Linuxペンギンが出るのがUEFI起動の特徴です。
赤色部分の手順を見出すまでの総当たり戦は、技術より根気!であることを立証しました。この情報はわたくしのネット検索範囲では見いだせなかったので、自由研究の成果です!
次回は、EFI httpブートです。