Всем привет!
В данной статье, описаны шаги которые необходимо выполнить, для добавления к вашему WDS, возможности загрузки в режиме UEFI.
Т.е. инструкция в данной статье, предполагает, что у вас уже имеется, примерно следующая конфигурация:
1. Windows Server 2012R2 (или новее)
2. Полностью настроенный DHCP для работы с WDS
3. Собственно сам WDS
4. IIS
5. Виртуальная машина или ПК с Ubuntu
Так же, здесь описаны действия, которые не принесли мне должного результата.
Описал я их, для облегчения поиска и экономии вашего времени.
Предисловие
Сделал как-то на работе WDS с множеством плюшек, т.к. устал постоянно бегать с кучей флешек и перезаписывать их.
Помогли мне кстати тогда вот эти статьи:
Добавляем WDS универсальности
Загрузочное меню PXE с System Center Configuration Manager
И всё было хорошо, добавлялись новые образы для загрузки, образ winPE обрастал новыми фичами и всё работало.
Но, уже далеко не все устройства поддерживают режим загрузки BIOS/Legacy, либо если поддерживают, то его включение может находится в очень неочевидном месте.
Да и установка windows в legacy режиме, когда есть возможность установки в UEFI — не круто.
В итоге решил добавить возможность загрузки в UEFI, и отправился в гугл.
Но структурированной информации, как получить рабочий WDS + UEFI, я так и не нашёл.
Собственно, поэтому я и решил написать эту статью.
Перед тем как начать, я опишу проблему, которая отняла больше всего времени.
Если вы добавляете загрузочный файл к WDS и при попытке загрузится на устройстве
в UEFI вы видите следующий текст:
The selected boot device failed. Press <Enter> to Continue.
Или Boot Device Not Found
Но загрузка в legacy у вас работает.
Тогда один из возможных вариантов — отсутствие файла wdsmgfw.efi,
по следующему пути: %WDSpath%Bootx64wdsmgfw.efi
Взять его можно тут: C:WindowsSystem32RemInstbootx64wdsmgfw.efi
Либо, если у вас отсутствует по какой-то причине этот файл, я его выложил на google.
За это решение, спасибо ребятам с реддита.
С этой проблемой я убил больше всего времени, т.к. я думал, что проблема где-то в конфигурации WDS или DHCP.
Настраивал политики, путём добавления Vendor Classes(Классы поставщиков) для различных архитектур, и настройкой опций DHCP 060, 066, 067. Инструкция по настройке политик DHCP.
PXEClient:Arch:00000 — BIOS/Legacy
PXEClient:Arch:00006 — UEFI x86
PXEClient:Arch:00007 — UEFI x64
Так же, пробовал различные варианты загрузочных файлов .efi
- syslinux
- grub 2
Так же пытался найти проблему в Журнале событий.
win + r -> eventvwr -> Журналы приложений и служб -> Microsoft -> Windows -> Deployment-Services-Diagnostics
Но, как я уже говорил выше, проблема крылась в файле wdsmgfw.efi.
Либо я его сам случайно удалил, либо он не скопировался при установке
и настройке WDS.
Ну, приступим!
Инструкция
Этап 1 — Проверка работоспособности WDS
Возьмите любое устройство или виртуальную машину с поддержкой загрузки в режиме UEFI по сети и попробуйте загрузится.
У вас должна быть следующая картина:
Если так, то отлично, можно продолжать.
Если же нет, то смотрите, что я написал в предисловии.
Этап 2 — Сборка загрузочного файла iPXE
Запускаем заранее подготовленную Ubuntu, открываем терминал и вставляем эту строку:
git clone https://git.ipxe.org/ipxe.git ipxe
Тут хотелось бы сделать небольшое замечание, о том, что возможно вам в Ubuntu придётся добавить пакеты, необходимые для компиляции C и C++.
Просто у меня они уже были установлены.
Скачалось? — Отлично!
Теперь нужно сделать конфигурационный файл для сборки.
В терминале, пишем:
cd ipxe/src
gedit chain.ipxe
И вставляем в этот файл, следующий код, после чего сохраняем:
#!ipxe
dhcp
chain http://%IP-address-your-IIS-server%/install.ipxe
Идём опять в терминал и запускаем компиляцию:
make bin-x86_64-efi/ipxe.efi EMBED=chain.ipxe
Если всё в порядке, то вы должны получить следующий вывод в терминале:
И файл ipxe.efi, по пути: ipxe/src/bin-x86_64-efi/ipxe.efi
Если у вас по какой-то причине не получилось скомпилировать самостоятельно,
я приложил свой файл.
Он скомпилирован для загрузки с http://192.168.0.100/install.ipxe
На этом с Ubuntu всё.
Этап 3 — Добавление ipxe.efi к WDS
Берём файл, который мы получили во втором этапе и копируем по пути:
%WDSpath%Bootx64%your-boot-folder%EFIBOOT
После переименовываем его в BOOTX64.EFI.
Это не обязательно, так просто удобней.
Потом запускаем cmd от имени администратора, и пишем следующие команды:
wdsutil /set-server /bootprogram:Bootx64%your-boot-folder%EFIBOOTBOOTX
64.EFI /architecture:x64uefi
и
wdsutil /set-server /N12bootprogram:Bootx64%your-boot-folder%EFIBOOTBOOTX
64.EFI /architecture:x64uefi
Этим мы установим полученный файл для загрузки через WDS.
Проверим конфигурацию:
wdsutil /get-server /Show:Config
Я так же скопировал файл ipxe.efi, переименовал его в BOOTIA32.EFI и сконфигурировал загрузку для него, на всякий случай. architecture:x86uefi
Но по большому счёту в этом нет смысла, т.к. файл Bootmgfw.efi не поддерживает x86
Проверим, что получилось.
Отлично, WDS передаёт для загрузки наш файл и он в свою очередь ищет конфигурацию по пути: http://192.168.0.100/install.ipxe
Этап 4 — Конфигурация меню
Идём в корневую папку вашего сайта.
По умолчанию это: C:inetpubwwwroot
Создаём текстовый файл install.ipxe.
И конфигурируем его в соответствии с документацией и вашими нуждами.
Так же имеется русскоязычное описание команд.
Я пользовался этой инструкцией при конфигурации своего WDS.
#!ipxe
:start
menu Please choose an operating system to start/install
item --gap Start Win PE
item WinPE-x64 WinPE x64
item --gap ipxe shell
item shell Drop to iPXE shell
choose target && goto ${target}
:failed
echo Booting failed, dropping to shell
goto shell
:shell
echo Type 'exit' to get the back to the menu
shell
set menu-timeout 0
set submenu-timeout 0
goto start
:WinPE-x64
kernel http://192.168.0.100/wimboot
initrd http://192.168.0.100/peSE/Boot/bcd
initrd http://192.168.0.100/peSE/Boot/boot.sdi
initrd http://192.168.0.100/peSE/Boot/peSE64.wim
boot || goto failed
Про конфигурацию для загрузки winPE можно прочитать здесь.
Этап 5 — MIME types
После создания меню и добавления всех необходимых файлов в корневую папку IIS,
необходимо дать к ним доступ.
Т.к. даже если вы попробуете из браузера скачать файл, по его адресу то получите ошибку: HTTP 404.3 - Not Found
.
Для этого необходимо в панели управления IIS добавить типы MIME, в соответствии
с расширениями файлов которые у вас будут загружаться через http.
Я не искал какой тип MIME подходит для этих целей лучше, и задал application/octet-stream
, после чего всё заработало.
Для файлов у которых нет расширения, используйте точку.
Вот так:
Заключение
В конечном итоге, у нас получается возможность загрузки по локальной сети через UEFI.
Если мы всё сделали правильно, то будет примерно такое меню выбора загрузки:
Если у вас подготовлены основные инструменты и вы не будете заморачиваться с конфигурацией, то на реализацию данной возможности уходит примерно 10-20 минут.
У меня же ушло 2 рабочих дня, т.к. пришлось много гуглить.
Удачной реализации!
Спасибо за внимание и огромное спасибо тем людям чьи статьи мне помогли!
На Хабре это: Ingtar и Deeptown.
Автор: BlackFIlms