pxelinux.0 不会尝试加载 ldlinux.c32

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'

我已经走投无路了。任何帮助我都会感激不尽。

答案1

这是不正确的

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";
            }

相关内容