クーの自由研究

マスターのかえるのクーは、弟子達の召喚術により新たな依り代を得てⅡ世として復活しました。

PXEでディスクレスLinux (CentOS)クライアントをBootする(UEFI編)

UEFIでのPXE Bootは結構敷居が高い

夏が過ぎ 風あざみ、かえるのクーの助手の「井戸中 聖」です。

f:id:AssistantOfKoo:20200816091458p:plain

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しないとモード変更できないかも)

f:id:AssistantOfKoo:20200816103321p:plain f:id:AssistantOfKoo:20200816103340p:plain

Bootします

クライアントをboot
UEFIモード (PXE over IPV4.)表示され、Bootメニューが表示される。(自分で定義したメニューです)

f:id:AssistantOfKoo:20200816103425p:plain f:id:AssistantOfKoo:20200816103436p:plain

f:id:AssistantOfKoo:20200816103455p:plain

改行でBootする。そのままにしても30secで自動起動する。
Linuxペンギンが出るのがUEFI起動の特徴です。

f:id:AssistantOfKoo:20200816103715p:plain f:id:AssistantOfKoo:20200816103740p:plain

赤色部分の手順を見出すまでの総当たり戦は、技術より根気!であることを立証しました。この情報はわたくしのネット検索範囲では見いだせなかったので、自由研究の成果です!

f:id:AssistantOfKoo:20200816040457p:plain

 次回は、EFI httpブートです。