Вопрос или проблема
Я пытаюсь настроить среду ipxe на vmware.
Я хотел бы настроить установку с UEFI.
Я установил ubuntu-server и настроил его как pxe-сервер.
через загрузку ipxe, isc-dhcpd, tftp-hpa и nginx.
Конфигурация dhcp isc-dhcp.conf выглядит следующим образом:
subnet 192.168.101.0 netmask 255.255.255.0 {
range 192.168.101.50 192.168.101.100;
}
# добавьте следующее в /usr/local/etc/dhcpd.conf
option client-arch code 93 = unsigned integer 16;
if exists user-class and option user-class = "iPXE" {
filename "http://192.168.101.10/test.ipxe";
} else {
if exists client-arch {
if option client-arch = 00:00 {
filename "undionly.kpxe";
} elsif option client-arch = 00:07 {
filename "grubx64.efi";
} elsif option client-arch = 00:09 {
filename "grubx64.efi";
}
}
}
и tftp root настроен для обслуживания grubx64.efi.
Когда я загружаю клиент сети, я получаю командную строку grub, где ожидаю получить меню grub и выбрать ОС для загрузки.
( echo $prefix, указывает на папку /EFI/ubuntu, я также пытался настроить grub в этой папке вместе с grub.cfg, то есть в корне папки tftp.
что я упускаю, прошу совета, как только я начну получать меню, я настрою grub.cfg для загрузки ОС.
Это связано с тем, как работает iPXE. Есть несколько способов обойти это. Один из ответов можно увидеть по адресу https://serverfault.com/a/1069487/187998, где iPXE собирается с некоторыми отключёнными/включёнными функциями для того, чтобы grub нашёл своё место в мире.
Другой способ — использовать некоторые хаки через, например, wimboot, чтобы предоставить grub виртуальную файловую систему, из которой grub может загружать свою конфигурацию, см. https://forum.ipxe.org/showthread.php?tid=10739&pid=18277#pid18277
Однако есть один хак, который работает, используя wimboot, Что вы делаете, так это загружаете (imgfetch) все файлы, которые нужно иметь в наличии, Загружаемый файл, который вы хотите загрузить, должен быть назван localy как bootx64.efi, что можно сделать с помощью imgfetch -n bootx64.efi file://grubx64.efi и, наконец, вы переходите к wimboot, и это должно создать виртуальную файловую систему VFAT (которая может быть прочитана grub), а затем загружается bootx64.efi, который является вашим grub.
imgfetch — это то же самое, что и initrd, а -n — сокращённый вариант для –name, который вы можете найти в документации.
Сказав всё это, вам, вероятно, следует выбрать между iPXE и grub и не пытаться использовать оба.
.
Ответ или решение
Настройка загрузки GRUB с меню в среде iPXE может быть сложной задачей, особенно при использовании UEFI и современных виртуальных сред, таких как VMware. Для решения этой задачи важно учитывать множество факторов, включая правильную конфигурацию DHCP, iPXE, TFTP и самих файлов конфигурации GRUB. Давайте подробно разберёмся, как это сделать, и обратим внимание на изначальную проблему отсутствия меню в GRUB.
Теория
Ваша задача заключается в том, чтобы через сеть загрузить образ GRUB и обеспечить интуитивно понятную возможность выбора операционной системы для загрузки. Когда вы загружаете машину через сеть с использованием iPXE и GRUB, важно обеспечить корректную передачу GRUB конфигурации. В случае UEFI, основной вызов заключается в правильной настройке и предоставлении GRUB пути к его конфигурационному файлу grub.cfg
.
Вам необходима следующая последовательность действий:
- Настроить DHCP для взаимодействия с iPXE и GRUB. Это обеспечивает корректную передачу нужных файлов в зависимости от архитектуры клиента.
- Обеспечить правильное размещение файлов GRUB на TFTP-сервере. Файлы должны находиться в корректном каталоге, чтобы они были доступны при вызове.
- Обеспечить, чтобы iPXE корректно передавал управление GRUB. Важно, чтобы был обеспечен плавный переход и правильная цепочка загрузки, поддерживающая необходимую файловую систему.
Пример
Давайте рассмотрим вашу текущую настройку и предложим возможные изменения и улучшения:
-
DHCP и iPXE настройки:
В вашем
isc-dhcp.conf
вы уже выделили диапазон IP-адресов и используете условные конструкции для определения архитектуры клиента. Обратите внимание, что вы задали загрузкуgrubx64.efi
для архитектур00:07
и00:09
, что соответствует UEFI.subnet 192.168.101.0 netmask 255.255.255.0 { range 192.168.101.50 192.168.101.100; } option client-arch code 93 = unsigned integer 16; if exists user-class and option user-class = "iPXE" { filename "http://192.168.101.10/test.ipxe"; } else { if exists client-arch { if option client-arch = 00:00 { filename "undionly.kpxe"; } elsif option client-arch = 00:07 { filename "grubx64.efi"; } elsif option client-arch = 00:09 { filename "grubx64.efi"; } } }
-
Проблема с отсутствием меню:
Ваша проблема заключается в том, что при загрузке вы получаете командную строку GRUB вместо меню. Это может быть следствием отсутствия или некорректного расположения файла
grub.cfg
. Этот файл конфигурации должен быть доступен GRUB при загрузке.Убедитесь, что
grub.cfg
размещён в правильной директории и доступен через TFTP. Это может быть/EFI/ubuntu
или корневая директория TFTP. -
Использование wimboot для виртуальной файловой системы:
Как было предложено в вашем описании, можно использовать
wimboot
для создания виртуальной файловой системы, которая позволит GRUB корректно считывать конфигурацию. Это достигается методом раннего захвата всех необходимых файлов и передаче их вwimboot
.imgfetch -n bootx64.efi file://grubx64.efi chain wimboot
Такой подход может помочь GRUB увидеть все необходимые файлы и правильно загрузить конфигурацию.
-
Дополнительные настройки и тестирование:
Проверьте корректность файлов и их доступность через TFTP. Также удобно провести тестирование последовательности загрузки в более детализированном режиме логирования, чтобы отследить, в какой момент GRUB теряет свои конфигурации.
Применение
Следуя вышеизложенным рекомендациям и примерам, вы сможете оптимизировать процесс загрузки вашего GRUB с меню в среде iPXE и VMware. Это не только обеспечит более гладкую последовательность загрузки, но и значительно упростит последующую конфигурацию и управление загрузочными схемами для конечных пользователей.
Не забывайте регулярно тестировать и проверять новую настройку на разных архитектурах клиента, чтобы убедиться в её универсальности и устойчивости. Это особенно важно в бизнес-средах, где отказоустойчивость и стабильная работа имеют критическое значение.