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