Я настраивал 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
Я попытался жестко закодировать некоторые параметры файла pxelinux.0, используя параметры pxelinux из пакета syslinux, и мне не повезло. Я пробовал много версий 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'
Я подошел к концу своей метафорической веревки. Любая помощь приветствуется.
это не правильно
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
В вашем случае клиент UEFI 64, использующий параметр DHCP 93 = 9, получит 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";
}