Как стать автором
Обновить

Расширяем функционал WDS: добавление возможности загрузки в UEFI

Время на прочтение5 мин
Количество просмотров22K

Всем привет!


В данной статье, описаны шаги, которые необходимо выполнить для добавления к вашему 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, я так и не нашёл.
Собственно, поэтому я и решил написать эту статью.


Перед тем как начать, я опишу проблему, которая отняла больше всего времени.


При добавлении UEFI к WDS возможна следующая, довольно неочевидная ситуация:

Если вы добавляете загрузочный файл к WDS и при попытке загрузится на устройстве
в UEFI вы видите следующий текст:
The selected boot device failed. Press <Enter> to Continue.
Или Boot Device Not Found
Но загрузка в legacy у вас работает.
Тогда один из возможных вариантов — отсутствие файла wdsmgfw.efi,
по следующему пути: %WDSpath%\Boot\x64\wdsmgfw.efi


Взять его можно тут: C:\Windows\System32\RemInst\boot\x64\wdsmgfw.efi
Либо, если у вас отсутствует по какой-то причине этот файл, я его выложил на google.
За это решение, спасибо ребятам с реддита.


С этой проблемой я убил больше всего времени, т.к. я думал, что проблема где-то в конфигурации WDS или DHCP.


Настраивал политики, путём добавления Vendor Classes(Классы поставщиков) для различных архитектур, и настройкой опций DHCP 060, 066, 067. Инструкция по настройке политик DHCP.


Архитектуры в ASCII для настройки 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%\Boot\x64\%your-boot-folder%\EFI\BOOT\
После переименовываем его в BOOTX64.EFI.
Это не обязательно, так просто удобней.


Потом запускаем cmd от имени администратора, и пишем следующие команды:


wdsutil /set-server /bootprogram:Boot\x64\%your-boot-folder%\EFI\BOOT\BOOTX
64.EFI /architecture:x64uefi
и
wdsutil /set-server /N12bootprogram:Boot\x64\%your-boot-folder%\EFI\BOOT\BOOTX
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:\inetpub\wwwroot


Создаём текстовый файл install.ipxe.


И конфигурируем его в соответствии с документацией и вашими нуждами.
Так же имеется русскоязычное описание команд.
Я пользовался этой инструкцией при конфигурации своего WDS.


Пример конфигурации install.ipxe
#!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.

Теги:
Хабы:
+20
Комментарии11

Публикации

Истории

Работа

Ближайшие события