Linux
設置 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 設置了正確的設置,但它沒有看到配置文件,因此配置不正確。誰能提供我錯誤配置的想法?我整天都在敲我的頭。
請注意,
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";