Pxe-Boot

pxelinux.0 不嘗試載入 ldlinux.c32

  • October 26, 2016

我一直在設置 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";
           }

引用自:https://serverfault.com/questions/811480