Для некоторого контекста, я студент-системный администратор, пытаюсь расширить свои знания о сети, поскольку это не моя самая сильная сторона.
В настоящее время экспериментирую с PXE. Несколько дней назад я установил несколько виртуальных машин ESXi, одна из которых является сервером DHCP и TFTP, а две другие - клиентами BIOS и UEFI. Мне удалось загрузить debian через PXE на машинах с BIOS и UEFI.
Я слышал о iPXE и возможностях, которые он предоставляет (например, загрузка по HTTP, iSCSI, ...), и решил попробовать. На данный момент я все еще пытаюсь загрузить свой локальный установщик debian netboot, я подумал, что протестирую удаленные файлы, убедившись, что установка была правильной.
На данный момент вот как выглядит моя конфигурация DHCP (за вычетом всего, что не представляет особого интереса):
option arch code 93 = unsigned integer 16;
class "pxe-clients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
option tftp-server-name "192.168.0.5";
next-server 192.168.0.5;
if option arch = 00:00 {
if exists user-class and option user-class = "iPXE" {
filename = "pxelinux.0";
} else {
filename = "undionly.kpxe";
}
} elsif option arch = 00:02 or option arch = 00:06 or option arch = 00:07 or option arch = 00:08 or option arch = 00:09 {
if exists user-class and option user-class = "iPXE" {
filename = "bootnetx64.efi";
} else {
filename = "ipxe.efi";
}
} else {
filename = "UNKNOWN_VCI";
}
}
192.168.0.5
это LAN IP-адрес сервера DHCP / TFTP.
Что касается корневого каталога моего TFTP-сервера:
root@vmpxe:/srv/tftp# ls -l
total 968
lrwxrwxrwx 1 root root 37 Sep 22 14:01 bootnetx64.efi -> debian-installer/amd64/bootnetx64.efi
drwxrwxr-x 3 root root 4.0K Sep 22 00:21 debian-installer
-rw-r--r-- 1 root root 896K Sep 22 16:00 ipxe.efi
lrwxrwxrwx 1 root root 47 Sep 22 00:21 ldlinux.c32 -> debian-installer/amd64/boot-screens/ldlinux.c32
lrwxrwxrwx 1 root root 33 Sep 22 00:21 pxelinux.0 -> debian-installer/amd64/pxelinux.0
lrwxrwxrwx 1 root root 35 Sep 22 00:21 pxelinux.cfg -> debian-installer/amd64/pxelinux.cfg
-rw-r--r-- 1 root root 64K Sep 22 16:00 undionly.kpxe
-rw-rw-r-- 1 root root 64 Sep 22 00:21 version.info
Опять же, я настаиваю на том, что до iPXE все работало нормально на обеих архитектурах. Единственные изменения, которые я внес, - это загрузка undionly.kpxe
и ipxe.efi
файлы с веб-сайта iPXE, и отредактируйте конфигурацию DHCP, чтобы обернуть настройки имени файла в if exists user-class and option user-class = "iPXE" {...} else {...}
условия.
Теперь машина с BIOS выполняет PXE -> iPXE -> установщик сетевой загрузки Debian. Все нормально работает.
Однако машина UEFI выполняет PXE -> iPXE -> grub shell.
Я попытался выполнить tcpdump процесса, но это ничего не дало: весь трафик выглядит нормальным и ожидаемым. Он не сильно отличается от того, что было у меня до iPXE.
Есть идеи, что здесь может происходить?
РЕДАКТИРОВАТЬ: Дальнейшее тестирование tcpdump показывает, что без iPXE моя машина EFI отправляет RRQ-пакеты для загрузчика и кучу других файлов, на которые, как я полагаю, ссылается сам загрузчик. Однако с iPXE только загрузчик я вижу только загрузчик.
Итак, я думаю, правильный вопрос: что происходит с iPXE, чтобы он не извлекал все те файлы, которые правильно загружены стандартным PXE?
не связано с вашей проблемой, но
для загрузки EFI64
} elsif option arch = 00:02 or option arch = 00:06 or option arch = 00:07 or option arch = 00:08 or option arch = 00:09 {
следует изменить на
} elsif option arch = 00:07 or option arch = 00:09 {
По поводу вашего вопроса, если вы загружаетесь bootnetx64.efi
вот что вы получите; экран Grub.
посмотреть здесь: http://lists.ipxe.org/pipermail/ipxe-devel/2015-De December/004532.html
РЕДАКТИРОВАТЬ: когда вы загружаете pxelinux.0, в зависимости от его версии, он извлекает динамические компоненты плюс определение меню pxelinux.0. когда вы загружаете iPXE, у вас не загружаются эти дополнительные файлы.