Linux

設置 PXELinux 時為 syslinux 配置文件定義新位置

  • June 16, 2020

我正在為我工作的地方製作一個 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

           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 文件請求以及它們指向的位置。

我今天與之抗爭,終於讓它發揮作用。關鍵是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 選項,而不是站點本地選項。例如:

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

在 PXELINUX 引導組或類中(無論您有與 PXELINUX 相關的選項,例如“文件名”選項),您都可以添加,例如:

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

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