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

Всім привіт!

У цій статті описані кроки, які необхідно виконати, для додавання до вашого WDS, можливості завантаження в режимі UEFI.

Тобто. інструкція в цій статті, припускає, що у вас вже є приблизно наступна конфігурація:

1. Windows Server 2012R2 (или новее)
2. Полностью настроенный DHCP для работы с WDS
3. Собственно сам WDS
4. IIS
5. Виртуальная машина или ПК с Ubuntu

Також тут описані дії, які не принесли мені належного результату.
Описав я їх для полегшення пошуку та економії вашого часу.

Передмова

Зробив якось на роботі WDS із безліччю плюшок, т.к. втомився постійно бігати з купою флешок і перезаписувати їх.

Допомогли мені до речі тоді ці статті:
Додаємо WDS універсальності
Завантажувальне меню PXE із System Center Configuration Manager


Виглядає це так

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

І все було добре, додавали нові образи для завантаження, образ 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%Bootx64wdsmgfw.efi

Взяти його можна тут: C:WindowsSystem32RemInstbootx64wdsmgfw.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 через мережу і спробуйте завантажитися.

У вас має бути наступна картина:

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

Якщо так, то добре, можна продовжувати.
Якщо ж ні, то дивіться, що я написав у передмові.

Етап 2 — Складання завантажувального файлу iPXE

Запускаємо заздалегідь підготовлену Ubuntu, відкриваємо термінал і вставляємо цей рядок:

git clone https://git.ipxe.org/ipxe.git ipxe

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

Тут хотілося б зробити невелике зауваження про те, що можливо вам до 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

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

Якщо все гаразд, то ви повинні отримати наступний висновок у терміналі:

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

І файл 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

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

Я також скопіював файл ipxe.efi, перейменував його в BOOTIA32.EFI і налаштував завантаження для нього, про всяк випадок. architecture:x86uefi
Але за великим рахунком, у цьому немає сенсу, т.к. файл Bootmgfw.efi не підтримує x86

Перевіримо, що вийшло.
Розширюємо функціонал WDS: додавання можливості завантаження до UEFI
Відмінно, WDS передає для завантаження наш файл і він у свою чергу шукає конфігурацію на шляху: http://192.168.0.100/install.ipxe

Етап 4 - Конфігурація меню

Ідемо до кореневої папки вашого сайту.
За замовчуванням це: C:inetpubwwwroot

Створюємо текстовий файл 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.
Розширюємо функціонал WDS: додавання можливості завантаження до UEFI

Для цього необхідно в панелі керування IIS додати типи MIME, відповідно
з розширеннями файлів, які у вас будуть завантажуватися через http.

Я не шукав який тип MIME підходить для цих цілей краще, і поставив application/octet-stream, Після чого все запрацювало.

Для файлів, які не мають розширення, використовуйте точку.

Ось так:

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

Висновок

Зрештою, у нас виходить можливість завантаження по локальній мережі через UEFI.

Якщо ми все зробили правильно, буде приблизно таке меню вибору завантаження:

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

Якщо у вас підготовлені основні інструменти і ви не морочитиметеся з конфігурацією, то на реалізацію цієї можливості йде приблизно 10-20 хвилин.
У мене пішло 2 робочих дні, т.к. довелося багато гуглити.

Вдалої реалізації!

Дякуємо за увагу та велике спасибі тим людям чиї статті мені допомогли!
На Хабре це: Ingtar и Deeptown.

Джерело: habr.com

Додати коментар або відгук