设置 PXELinux 时为 syslinux 配置文件定义新位置

设置 PXELinux 时为 syslinux 配置文件定义新位置

我正在为我工​​作的地方制作一个 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 设置了正确的设置,但它看不到配置文件,所以有些配置不正确。有人能告诉我我配置错误的地方吗?我整天都在为此绞尽脑汁。

答案1

请注意 是configfile相对于 的pathprefix

            if option arch = 00:00 {
                    option pxelinux.configfile "common.cfg";
                    option pxelinux.pathprefix "/pxelinux/configs/";
                    filename "/pxelinux/images/BIOS/pxelinux.0";

这将在 TFTP 服务器上查找名为 /pxelinux/configs/common.cfg 的配置文件。

如果失败,只需获取 Wireshark 流量捕获并查看 TFTP 文件请求及其指向的位置。

答案2

我今天努力了,终于成功了。关键是PXELINUX 维基(我在 CentOS 7.8 上有 ISC dhcp-4.2.5-79.el7.centos.x86_64):

在 ISC dhcp 版本高于 3.0 时,站点本地选项空间从 224 开始,而不是 128(以符合 RFC 3942),因此您应将 PXELINUX 选项 208-211 定义为常规 DHCP 选项,而不是站点本地选项。例如:

 option magic      code 208 = string;
 option configfile code 209 = text;
 option pathprefix code 210 = text;
 option reboottime code 211 = unsigned integer 32;

在您的 PXELINUX 引导组或类中(无论您在哪里有与 PXELINUX 相关的选项,例如“filename”选项),您可以添加,例如:

 # Always include the following lines for all PXELINUX clients
 option magic f1:00:74:7e;
 if exists dhcp-parameter-request-list {
  # Always send the PXELINUX options (specified in hexadecimal, ie: 208 = 0xd0, 209 = 0xd1, etc.)
  option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,d0,d1,d2,d3);
 }
 # These lines should be customized to your setup
 option configfile "configs/common";
 option pathprefix "/tftpboot/pxelinux/files/";
 option reboottime 30;
 filename "/tftpboot/pxelinux/pxelinux.bin";

相关内容