Pxe-Boot
pxelinux.0 不嘗試載入 ldlinux.c32
我一直在設置 PXE 伺服器來自動化 Linux 部署。一切都很有趣,直到某些東西神奇地破裂(即我一定改變了一些東西,但我一生都無法弄清楚它是什麼)。
dhcpd.conf 的片段(出於隱私考慮,刪除了一些資訊)
subnet 10.0.65.0 netmask 255.255.255.0 { option routers ///; option broadcast-address ///; option subnet-mask 255.255.255.0; range ///; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 10.160.65.5; if option architecture-type = 00:07 { filename "pxe/shim.efi"; } else { filename "pxe/pxelinux.0"; } } }
pxe 伺服器(與 DHCP 伺服器不同的伺服器)正在執行 RedHat 7。我為 xinetd tftp 守護程序打開了詳細日誌記錄。顯示客戶端請求pxelinux.0(然後客戶端顯示PXELINUX版本資訊),但沒有顯示客戶端請求ldlinux.c32,最終客戶端超時。
Oct 26 13:49:47 tinkerbell in.tftpd[599]: tftp: client does not accept options Oct 26 13:49:47 tinkerbell in.tftpd[600]: RRQ from 141.212.104.234 filename pxe/pxelinux.0
我嘗試使用 syslinux 包中的 pxelinux-options 對 pxelinux.0 文件的某些選項進行硬編碼,但沒有運氣。我嘗試了許多版本的 pxelinux.0(目前使用 6.03,從 RedHat 7 機器上的原始碼編譯)。
目前的硬編碼選項:
utils/pxelinux-options --list /y/pxe/pxelinux.0 -b domain-name 'foo.bar' -b domain-name-servers 10.0.65.4 -a next-server 10.0.65.5 -a path-prefix '/pxe/' -a config-file 'pxelinux.cfg/default'
我已經走到了隱喻的盡頭。任何幫助表示讚賞。
這是不正確的
if option architecture-type = 00:07 { filename "pxe/shim.efi"; } else { filename "pxe/pxelinux.0";
請考慮
DHCP Option 93 Client's pre-OS runtime 0 BIOS 6 EFI32 7 EFI64 9 EFI64
在您的情況下,使用 DHCP 選項 93 = 9 的 UEFI 64 客戶端會將 pxelinux.0 作為 NBP,這將永遠無法正常工作。
這將是一個更好的方法
if option arch = 00:00 { filename "/pxe/pxelinux.0"; } elsif option arch = 00:06 { filename "pxe/shim32.efi"; } elsif option arch = 00:07 { filename "pxe/shim64.efi"; } elsif option arch = 00:09 { filename "pxe/shim64.efi"; }