DHCP, WDS, WinPE, TFTP, MSI, WiX

Jó régen nem írtam blogot. Talán tudok a jövőben egy kicsit sűrűbben írni, talán nem (én reménykedem).
Az elmúlt néhány hónapban a címben megjelölt technológiákkal foglalkoztam. Remélhetőleg ennek a munkának hamarosan lesz publikálható eredménye is. Most leírom, hogy az elmúlt néhány napban hogyan sikerült tökéletesen hülyét csinálnom magamból.
Az alap feladat Windows XP TELEPÍTÉSE WDS-ből. A WDS ezt a dolgot csak legacy módban támogatja, amit viszont én nem szerettem volna használni. Az image alapú telepítés meg nem igazán járható út egy szedett-vedett géppark esetén. Azt vettem a fejembe, hogy elkövetek egy olyan testreszabott Windows PE-t ami képes egy hálózati share-ről XP-t telepíteni úgy, hogy közben képes a RIS funkcionalitásának általam használt és kedvelt részét szimulálni.
Nagyjából a következő metódust szeretném megvalósítani (megjegyzem, hogy e bejegyzés elkövetésének időpillanatában a dolognak kb. 80-90%-a már kész van).
– Windows PE bootol a szerverről.
– TFTP-vel lehúz egy konfigurációs fájlt (milyen OS-t, milyen szerverről és shareről kell felrakni, stb.)
– Kideríti a gép saját UUID-ját
– Lekérdezi a UUID-hoz tartozó prestaged gép nevét az AD-ból.
– Legenerálja egy template alapján az Unattended.txt fájlt.
– Megformázza a merevlemezt.
– Elindítja a Win32.exe-t mint telepítőt.
Mindehhez persze kapcsolódik még egy GUI felület, amin ki lehet választani az operációs rendszert, valamint meg lehet adni gépnevet (ha nem volt prestaged), felhasználót, jelszót (kell az AD lekérdezéshez és a domain-be léptetéshez). Az egész HTA-ban és JScriptben készül.
Ennyit elöljáróban. Akkor most lássuk, hol csináltam magamból hülyét.
Azt vettem a fejembe, hogy az elkészült Windows PE image-nek teljesen általánosnak kell lennie, tehát nem tartalmazhat semmilyen információt az adott rendszerkörnyezetről, tehát pl. nem lehet belevasalva a TFTP szerver neve, ahonnan a konfiguráció érkezni fog. Arra gondoltam, hogy a TFTP szerver nevét megadom a Windows PE-nek a  DHCP szerveren keresztül. Amúgy is rendelkezik egy 66-os opcióval, ami a Boot Server neve. Ez jó lesz nekem.
Elkezdtem nyomozni, hogy vajon hogyan tudnám ezt az opciót lekérdezni. Ráakadtam erre a KB cikkre:
Amit átfutva arra jutottam, hogy csak bele kell heggesztenem a WinPE registry-jébe néhány bejegyzést, és ha ezt megtettem, akkor a DHCP kliens az engem érdeklő információt elhelyezni az általam megadott helyre a registry-be, ahonnan én ki tudom olvasni.
Jó néhány napon keresztül kísérleteztem a beállításokkal, de sajnos semmi sem akart megjelenni az általam megadott helyen a registry-ben. Ekkor újra, tüzetesebben átolvastam a fenti cikket és rájöttem, hogy ez a registry-s lehetőség utoljára a Windows NT 4.0-ban létezett (fogalmam sincs, hogy minek kellett megszüntetni) és a Windows 2000-től felfelé már egy DhcpRequestParams nevű API hívással lehet a hozzáadott opciókhoz hozzájutni. Ez természetesen egy natív unamanaged API, amit scriptből nem tudok meghívni, az általam használt .NET-es C# pedig nem opció mert a WinPE-ben nincs .NET Framework. Hurrá! Mérges
Nem maradt más hátra, minthogy C++-ban kéne a dolgot elkövetni. Én viszont még mindig rendszergazda vagyok így a C++ nincs semmi közöm. Ez persze nem az első eset, hogy belefutottam a tudásom eme hiányosságába, de eddig mindig kikerültem valahogy. Úgy döntöttem, hogy most végre elkezdek némi alapszintű C++-t tanulni. Neki is álltam megírni a kódot, majd végiggondolva a dolog időigényességét félreraktam azzal, hogy majd megírom, ha kész leszek a történet többi részével.
Tettem még néhány kísérletet, hogy találjak a neten egy olyan utility-t ami tudja ezt a DHCP opció dolgot de nem jártam sikerrel. Természetesen ezzel a C++-os kitérővel is napjaim mentek el.
Eltelt néhány nap ami alatt leginkább a HTA-mat írtam, ma reggel eszembe jutott, hogy a WinPE csak tudja magáról, hogy honnan bootolt. Ha ezt sikerülne kideríteni, akkor az egész fenti bohóckodásra nincs szükség, sőt a DHCP-be sem kell plusz opciót felvenni. Azt kiderítettem, hogy a WDS c:\RemoteInstall könyvtára (vagy ki hova teszi ezt) tftp rootként viselkedik, tehát a konfig fájlt majd ide kell letennem.
Újabb hosszas keresgélés után a WinPE dokumentációjából (ami persze mindvégig itt volt a gépemen) kiderült, hogy van egy
Wpeutil UpdateBootInfo
parancs ami a
HKLM\SYSTEM\CurrentControlSet\PEBootServerName
registry bejegyzésbe leteszi a boot szerver nevét.
Gratulálok magamnak. Legalább egy hetem ment el a semmivel! Mérges
 
Kategória: Computers and Internet | Közvetlen link a könyvjelzőhöz.

6 hozzászólás a(z) DHCP, WDS, WinPE, TFTP, MSI, WiX bejegyzéshez

  1. István szerint:

    Szia!
     
    Érdekelne, hogy Image alapú (.wim) XP telepítéssel kapscolatban van-e valami tapasztalatod?
     
    Üdv,
    István

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s