我正在为我工作的地方制作一个 PXE 服务器的模型。我正在尝试将图像文件和配置文件放在使事情更有条理的地方。即使我dhcpd.conf
指定了告诉 PXELinux 在哪里查找配置文件所需的配置选项,它仍然找不到所述文件。
这是我的 /etc/dhcp/dhcpd.conf 的样子,这就是我想象的问题所在。
option space PXE;
option PXE.mtftp-ip code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;
option arch code 93 = unsigned integer 16;
option space pxelinux;
option pxelinux.magic code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
option pxelinux.reboottime code 211 = unsigned integer 32;
ddns-update-style none;
option domain-name "lab.solignis.com";
option domain-name-servers ns01.lab.solignis.com;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
subnet 192.168.147.0 netmask 255.255.255.0 {
range 192.168.147.100 192.168.147.254;
option subnet-mask 255.255.255.0;
option routers 192.168.147.2;
option broadcast-address 192.168.147.255;
default-lease-time 600;
max-lease-time 7200;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
next-server 192.168.147.10;
if option arch = 00:00 {
option pxelinux.configfile "common.cfg";
option pxelinux.pathprefix "/configs/";
filename "/pxelinux/images/BIOS/pxelinux.0";
} elsif option arch = 00:06 {
#option pathprefix "/configs/";
#option configfile "/EFIx64/default";
filename "/images/EFIx64/syslinux.efi";
} elsif option arch = 00:07 {
#option pathprefix "/configs/";
#option configfile "/EFIx64/default";
filename "/images/EFIx64/syslinux.efi";
} elsif option arch = 00:09 {
#option pathprefix "/configs/";
#option configfile "/EFIx64/default";
filename "/images/EFIia32/syslinux.efi";
}
}
}
配置的一部分是从文档的各个部分编译而来的,被注释掉的部分是我尚未修复但忽略那些的旧部分。现在我只想让标准 BIOS 正常工作(arch = 00:00
)。
这是我的 tftpboot 目录的文件结构。
server01@server01:/var/lib/tftpboot$ tree
.
└── pxelinux
├── configs
│ └── common.cfg
└── images
├── BIOS
│ ├── ldlinux.c32
│ └── pxelinux.0
├── EFIia32
│ └── syslinux.efi
└── EFIx64
└── syslinux.efi
6 directories, 5 files
我很确定我已经为 pxelinux 设置了正确的设置,但它没有看到配置文件,因此配置不正确。谁能提供我错误配置的想法?我整天都在敲我的头。
请注意,
configfile
相对于pathprefix
:这将在 TFTP 服务器上查找名为 /pxelinux/configs/common.cfg 的配置文件。
如果失败,只需获取 Wireshark 流量捕获并查看 TFTP 文件请求以及它们指向的位置。
我今天与之抗争,终于让它发挥作用。关键是PXELINUX wiki中的这个小部分(我在 CentOS 7.8 上有 ISC dhcp-4.2.5-79.el7.centos.x86_64):
在大于 3.0 的 ISC dhcp 版本中,站点本地选项空间从 224 开始,而不是 128(为了符合 RFC 3942),因此您应该将 PXELINUX 选项 208-211 定义为常规 DHCP 选项,而不是站点本地选项。例如:
在您的 PXELINUX 引导组或类中(无论您有与 PXELINUX 相关的选项,例如“文件名”选项),您都可以添加,例如: