Грузим ВСЁ по сети в DualBoot. Часть 3: Добавляем поддержку UEFI
В предыдущей части мы закончили на том, что по сети успешно загрузился MemTest86, чем в принципе никого не удивить. Загружается он только в Legacy, а в UEFI выдает ошибку бинарного файла: оно и понятно, они несовместимы. Разберемся более детально в этом моменте.
Часть 1: Теория и анализ предложений
Часть 2: Первые грабли в процессе загрузки MemTest86+
Часть 3: Добавляем поддержку UEFI
Часть 4: Загружаем Strelec WinPE
Часть 5: Загружаем полноценный дистрибутив Linux Ubuntu
Часть 6: Загружаем Windows Installer и ставим ОС
Часть 7: Устанавливаем Windows на iSCSI диск по сети
Часть 8: Жонглируем пунктами iPXE меню
Часть 9: Обслуживание сервера и обновление образов
В чем проблема?
Итак, теперь наш мир поделился на до и после, и с этим нужно что-то делать. Опции DHCP, используемые для сетевой загрузки, здесь те же самые. Используя ту же 67 опцию разработчики будто бы хотели сохранить совместимость с Legacy, но видимо что-то пошло не так и бинарники не грузятся в UEFI, а номер опции решили не менять. Может быть и не хотели сохранять совместимость, тогда еще интереснее, почему нельзя было выделить другую опцию под UEFI загрузку…
Как бы там ни было, перед нами стоят две задачи:
- Обучить DNSMasq, чтобы он раздавал Legacy и UEFI загрузчикам разные имена файлов в опции 67
- Обзавестись вторым комплектом бинарных загрузочных файлов, под UEFI и обеспечить их загрузку согласно типу загрузки
Донастраиваем DNSMasq
В этом деле неплохо помог блог корейца, имя которого я найти не смог. Суть в том, что в DHCP запросе клиент отправляет опцию 93, а именно Client System Architecture, по которой представляется возможность выдать нужные опции в ответ. Скопируем к себе и немного подкорректируем под наши нужны предоставленный им файл конфигурации:
nano /etc/dnsmasq.conf
......
# настройка опций 67 и 66 для сетевой загрузки
# комментируем эту строку
# dhcp-boot=/ipxe/ipxe.legacy,,192.168.9.1
# сравниваем полученную опцию и назначаем категорию
dhcp-match=LegacyBoot, option:client-arch, 0
dhcp-match=UEFIBoot, option:client-arch, 7
# отдаем нужные опции согласно типу загрузки
dhcp-boot=tag:LegacyBoot,/ipxe/ipxe.legacy,,192.168.9.1
dhcp-boot=tag:UEFIBoot,/ipxe/ipxe.efi,,192.168.9.1
......
Перезагружаем dnsmasq, запускаем виртуальную машину Client UEFI и проверяем, что она запрашивает файл ipxe.efi, которого пока у нас нет.
service dnsmasq restart
tail -f /var/log/syslog
...
...
pxesrv dnsmasq-tftp[34052]: file /pxe/ipxe/ipxe.efi not found
DHCP сервер MikroTik не поддерживает такую выдачу опций.
Компилируем UEFI iPXE
Ранее мы компилировали бинарный файл iPXE для платформы Legacy, а для UEFI его необходимо компилировать отдельно, этим и займемся. Загрузочный скрипт подойдет из предыдущей части, его менять не будем. Ну и если вам компилировать не хочется, то бинарный файл лежит здесь.
cd ~/ipxe/src
make -j4 bin-x86_64-efi/ipxe.efi EMBED=starter.script.ipxe
cp bin-x86_64-efi/ipxe.efi /pxe/ipxe/ipxe.efi
Пробуем загрузить виртуальную машину Client UEFI и iPXE успешно стартует и показывает меню, но MemTest86 сломался, хочет подходящий бинарный файл.
Пару слов стоит упомянуть про Secure Boot: он не поддерживается, так как наш бинарный файл не подписан. Поэтому в случае с виртуальной машиной Hyper-V в параметрах нужно будет отключить безопасную загрузку.
А как же MemTest86?
MemTest86+, который “старый” бесплатный не поддерживает загрузку в UEFI, а тот что поддерживает – PassMark MemTest86 в бесплатной и даже в Pro версии не поддерживает PXE Boot. Поддерживает только Site Edition, стоимостью $2500, которой даже вылеченной нигде нет. А memdisk, используемый для загрузки ISO в предыдущей части также не работает под UEFI.
Один комментарий к “Грузим ВСЁ по сети в DualBoot. Часть 3: Добавляем поддержку UEFI”
С dnsmasq можно проще, есть опция pxe-service, там прописывается, какой архитектуре сопоставить какой файл.