Rozszerzamy funkcjonalność WDS: dodanie możliwości rozruchu w UEFI

Cześć wszystkim!

W tym artykule opisano kroki, które należy wykonać, aby dodać możliwość uruchamiania w trybie UEFI do swojego WDS.

To znaczy, instrukcja w tym artykule zakłada, że ma Pan/Pani już mniej więcej taką konfigurację:

1. Windows Server 2012R2 (lub nowszy)
2. W pełni skonfigurowany DHCP do pracy z WDS
3. Sam WDS
4. IIS
5. Maszyna wirtualna lub komputer z Ubuntu

Opisałem również działania, które nie przyniosły mi oczekiwanych rezultatów.
Sporządziłem je, aby ułatwić wyszukiwanie i zaoszczędzić Państwa czas.

Wstęp

Stworzyłem kiedyś WDS w pracy z mnóstwem dodatków, ponieważ miałem dosyć ciągłego biegania z wieloma pendrive'ami i ich zapisywania.

Pomogły mi wtedy te artykuły:
Dodajemy uniwersalność WDS
Menu rozruchowe PXE z System Center Configuration Manager


Wygląda to tak

Rozszerzamy funkcjonalność WDS: dodanie możliwości rozruchu w UEFI

I wszystko działało dobrze, nowe obrazy do uruchamiania były dodawane, obraz winPE zyskiwał nowe funkcje i wszystko działało.

Ale nie wszystkie urządzenia wspierają tryb uruchamiania BIOS/Legacy, a jeśli tak, to jego włączenie może być w bardzo nieoczywistym miejscu.

Zresztą instalacja Windows w trybie legacy, kiedy jest możliwość instalacji w UEFI - to nie jest fajne.

Postanowiłem więc dodać możliwość uruchamiania w UEFI i wyruszyłem na Google.

Jednak nie znalazłem zorganizowanych informacji, jak uzyskać działający WDS + UEFI.
Właściwie dlatego postanowiłem napisać ten artykuł.

Zanim zaczniemy, opiszę problem, który zajął najwięcej czasu.

Podczas dodawania UEFI do WDS może wystąpić następująca, dość nieoczywista sytuacja:

Jeśli dodajesz plik uruchamiający do WDS i podczas próby uruchomienia na urządzeniu
w UEFI widzisz następujący tekst:
Urządzenie rozruchowe nie powiodło się. Naciśnij <Enter> aby kontynuować.
Lub Urządzenie rozruchowe nie zostało znalezione
Jednak uruchamianie w trybie legacy działa.
W takim przypadku jednym z możliwych rozwiązań jest brak pliku wdsmgfw.efi,
w następującej ścieżce: %WDSpath%Bootx64wdsmgfw.efi

Można go wziąć stąd: C:WindowsSystem32RemInstbootx64wdsmgfw.efi
Lub, jeśli z jakiegoś powodu brakuje Państwu tego pliku, zamieściłem go na google.
Za to rozwiązanie dziękuję chłopakom z Reddita.

Ten problem zajął mi najwięcej czasu, ponieważ myślałem, że problem leży gdzieś w konfiguracji WDS lub DHCP.

Konfigurowałem polityki, dodając klasy dostawców (Vendor Classes) dla różnych architektur oraz ustawienia opcji DHCP 060, 066, 067. Instrukcja w zakresie konfiguracji polityk DHCP.

Architektury w ASCII do konfiguracji DHCP

PXEClient:Arch:00000 - BIOS/Legacy
PXEClient:Arch:00006 - UEFI x86
PXEClient:Arch:00007 - UEFI x64

Również próbowałem różnych wariantów plików rozruchowych .efi

  • syslinux
  • grub 2

Także próbowałem znaleźć problem w Dzienniku zdarzeń.
win + r -> eventvwr -> Dzienniki aplikacji i usług -> Microsoft -> Windows -> Diagnostyka usług wdrażania

Jednak, jak już wspomniałem, problem znajdował się w pliku wdsmgfw.efi.
Albo sam go przypadkowo usunąłem, albo nie skopiował się podczas instalacji
i konfiguracji WDS.

Cóż, zaczynajmy!

Instrukcja

Etap 1 — Sprawdzenie działania WDS

Weź dowolne urządzenie lub maszynę wirtualną z obsługą rozruchu w trybie UEFI przez sieć i spróbuj się uruchomić.

Powinieneś mieć następujący obraz:

Rozszerzamy funkcjonalność WDS: dodanie możliwości rozruchu w UEFI

Jeśli tak, to świetnie, możesz kontynuować.
Jeśli nie, to zobacz, co napisałem we wstępie.

Etap 2 — Budowa pliku rozruchowego iPXE

Uruchamiamy wcześniej przygotowaną Ubuntu, otwieramy terminal i wklejamy tę linię:

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

Rozszerzamy funkcjonalność WDS: dodanie możliwości rozruchu w UEFI

Tutaj chciałbym zwrócić uwagę, że być może będziesz musiał dodać pakiety potrzebne do kompilacji C i C++ w Ubuntu.
Po prostu u mnie były już zainstalowane.

Pobrało się? — Świetnie!
Teraz trzeba stworzyć plik konfiguracyjny do budowy.
W terminalu wpisz:

cd ipxe/src
gedit chain.ipxe

I wklej w tym pliku poniższy kod, a następnie zapisz:

#!ipxe

dhcp
chain http://%IP-address-your-IIS-server%/install.ipxe

Wracamy znowu do terminala i uruchamiamy kompilację:

make bin-x86_64-efi/ipxe.efi EMBED=chain.ipxe

Rozszerzamy funkcjonalność WDS: dodanie możliwości rozruchu w UEFI

Jeśli wszystko w porządku, powinieneś otrzymać następujący wynik w terminalu:

Rozszerzamy funkcjonalność WDS: dodanie możliwości rozruchu w UEFI

I plik ipxe.efi, w ścieżce: ipxe/src/bin-x86_64-efi/ipxe.efi
Jeśli z jakiegoś powodu nie udało ci się skompilować samodzielnie,
dołączyłem swój pliku.
Został skompilowany do rozruchu z http://192.168.0.100/install.ipxe

Na tym etapie z Ubuntu to wszystko.

Etap 3 — Dodanie ipxe.efi do WDS

Bierzemy plik, który otrzymaliśmy w drugim etapie i kopiujemy go w ścieżkę:
%WDSpath%Bootx64%your-boot-folderIBOOT
Następnie zmieniamy jego nazwę na BOOTX64.EFI.
To nie jest konieczne, po prostu tak jest wygodniej.

Potem uruchamiamy cmd jako administrator i wpisujemy następujące komendy:

wdsutil /set-server /bootprogram:Bootx64%your-boot-folderIBOOTBOOTX
64.EFI /architecture:x64uefi
or
wdsutil /set-server /N12bootprogram:Bootx64%your-boot-folderIBOOTBOOTX
64.EFI /architecture:x64uefi

Dzięki temu ustanowimy otrzymany plik do rozruchu przez WDS.

Sprawdzimy konfigurację:

wdsutil /get-server /Show:Config

Rozszerzamy funkcjonalność WDS: dodanie możliwości rozruchu w UEFI

Również skopiowałem plik ipxe.efi, zmieniłem jego nazwę na BOOTIA32.EFI i skonfigurowałem rozruch dla niego, na wszelki wypadek. architecture:x86uefi
Jednak ogólnie nie ma to większego sensu, ponieważ plik Bootmgfw.efi nie obsługuje x86.

Sprawdzimy, co się udało.
Rozszerzamy funkcjonalność WDS: dodanie możliwości rozruchu w UEFI
Doskonałe, WDS przesyła nasz plik do załadowania i on z kolei szuka konfiguracji w ścieżce: http://192.168.0.100/install.ipxe

Etap 4 — Konfiguracja menu

Przechodzimy do głównego folderu Twojej strony.
Domyślnie jest to: C:inetpubwwwroot

Tworzymy plik tekstowy install.ipxe.

I konfigurujemy go zgodnie z dokumentacją i Twoimi potrzebami.
Dostępne jest również polskojęzyczne opis polecenie.
Korzystałem z tego instrukcji przy konfiguracji mojego WDS.

Przykład konfiguracji 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

O konfiguracji do ładowania winPE można przeczytać tutaj.

Etap 5 — Typy MIME

Po utworzeniu menu i dodaniu wszystkich niezbędnych plików do głównego folderu IIS,
konieczne jest udzielenie do nich dostępu.

Ponieważ nawet jeśli spróbujesz pobrać plik z przeglądarki pod jego adresem, otrzymasz błąd: HTTP 404.3 - Nie znaleziono.
Rozszerzamy funkcjonalność WDS: dodanie możliwości rozruchu w UEFI

W tym celu należy w panelu sterowania IIS dodać typy MIME, zgodnie
z rozszerzeniami plików, które będą ładowane przez http.

Nie szukałem, jaki typ MIME najlepiej pasuje do tych celów, i ustawiłem application/octet-stream, po czym wszystko zadziałało.

Dla plików, które nie mają rozszerzenia, użyj kropki.

Oto jak:

Rozszerzamy funkcjonalność WDS: dodanie możliwości rozruchu w UEFI

Podsumowanie

Ostatecznie mamy możliwość ładowania przez sieć lokalną za pomocą UEFI.

Jeśli wszystko zrobiliśmy poprawnie, powinno wyjść mniej więcej takie menu wyboru ładowania:

Rozszerzamy funkcjonalność WDS: dodanie możliwości rozruchu w UEFI

Jeśli masz przygotowane podstawowe narzędzia i nie będziesz się martwić o konfigurację, realizacja tej możliwości zajmuje około 10-20 minut.
Mi to zajęło 2 dni robocze, ponieważ musiałem dużo googlować.

Powodzenia w realizacji!

Dziękuję za uwagę i ogromne podziękowania dla tych, którzy napisali artykuły, które mi pomogły!
Na Habra to: Ingtar i Deeptown.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster