Discussions sur ce sujet dans le forum 
Windows PE 2.0 (Vista) sur PXE
Windows PE 2.0 ne fonctionne plus sur le même modèle que ces prédécesseurs (WinPE 1.x & Bart PE). Pour changer, les explications grapillées un peu partout sur la toile ne m'ont pas totalement satisfait. Voici donc le minimum requis pour démarrer des images de Windows PE 2.0 au format WIM SANS Windows Deployement Service (WDS).
Cette astuce n'explique pas en détail le fonctionnement de Windows PE, mais une manière rapide de démarrer ses images. Une certaine connaissance des environnements Windows PE est donc recommandée.
Sommaire
- Pré-requis sur le serveur
- Conventions
- Sources de données nécessaires
- Outils optionnels
- Entrée en matière
- 1) Création de l'arborescence nécessaire sur le serveur
- 2) Création d'une image personnalisée
- 3) Configuration du chargeur de démarrage Windows
- 4) Démarrage !
Pré-requis
- Le serveur de boot PXE fonctionnant normalement ! (cf : Mise en place d'un serveur de boot PXE)
Conventions
L'adresse IP du serveur est 192.168.0.1 et a comme nom : srvkiwi.nirvana.com
Les commandes indiquées dans ce tutoriel se tapent sous la console (cmd) et peuvent se trouver sur plusieurs lignes, attention à bien valider la dernière commande en cas de copier-coller !
Nous pouvons accéder au répertoire de base TFTP par le partage
\\srvkiwi.nirvana.com\tftp, si vous opérez en local, il faudra remplacer ce chemin par le vôtre,c:\montftppar exemple.Les images Windows PE au format WIM seront stockées dans :
[racine TFTP]\images\winpe, l'image par défaut se nommera :monimage.wim
Nous travaillerons souvent en mode console, votre raccourci habituel et la commande cmd ne suffiront pas, il faut faire attention à lancer le raccourci "Invite de commande des outils Windows PE", il règle les variables d'environnement afin d'accéder à différents outils.
Sources de données nécessaires :
-
Kit d'installation Windows automatisée (Windows AIK)
http://www.microsoft.com/downloads/details.aspx?displaylang=fr&FamilyID=C7D4BC6D-15F3-4284-9123-679830D629F2 [A tester !] Kit d'installation automatisée (AIK) pour Windows Vista SP1 et Windows Server 2008
http://www.microsoft.com/downloads/details.aspx?displaylang=fr&FamilyID=94bb6e34-d890-4932-81a5-5b50c657de08
Outils optionnels :
-
UltraIso (outils permettant de travailler sur les images de CD/DVD)
http://www.ezbsystems.com/ultraiso/ -
VMware Player (permet d'émuler un boot PXE sur une machine virtuelle)
http://www.vmware.com/download/player/
Entrée en matière :
Contrairement aux idées reçues, pas besoin de travailler sous Windows Vista (ouf), un poste 2003 SP1, 2000 SP4 ou, au pire, XP SP2 suffit largement.
Maintenant que vous avez téléchargé le Kit d'installation Windows automatisée, il faut l'installer, plusieurs choix s'offrent à vous :
Renommer le fichier .img en .iso et le graver avec votre logiciel de gravure favori
Monter l'image .img (ou .iso renommé) avec un logiciel tiers
-
Extraire tous les fichiers avec un logiciel comme UltraIso ou WinRAR
Je vous fais confiance pour cette partie, l'important est d'arriver à lancer le programme d'installation via startcd.exe :
1) Création de l'arborescence nécessaire sur le serveur
Contrairement à mes habitudes, je vais d'abord travailler sur une image avant de mettre en place les fichiers nécessaires au Boot PXE, la raison est simple : ces fichiers sont contenus dans l'image elle-même... Je pourrais faire d'une pierre deux coups en utilisant l'image traitée ici, mais je préfère y revenir par la suite pour des raisons de compréhension, chaque chose en son temps.
L'image suivante ne sert donc seulement qu'à récupérer une fois pour toute des fichiers utiles, elle sera supprimée à la fin.
Démarrons l'invite de commande des outils Windows PE :
A copier-coller ou taper à la console :
set TFTPROOT=\\srvkiwi.nirvana.com\tftp
mkdir %TEMP%\winpe
imagex /apply x86\winpe.wim 1 %TEMP%\winpe
mkdir %TFTPROOT%\boot\fonts
mkdir %TFTPROOT%\images\winpe
copy %TEMP%\winpe\Windows\Boot\PXE\pxeboot.n12 %TFTPROOT%\winpeboot.0
copy %TEMP%\winpe\Windows\Boot\PXE\bootmgr.exe %TFTPROOT%
copy %TEMP%\winpe\Windows\System32\bcdedit.exe .
copy x86\boot\boot.sdi %TFTPROOT%\boot
copy x86\boot\fonts\wgl4_boot.ttf %TFTPROOT%\boot\fonts
rd %TEMP%\winpe /s /q
Nous voyons ici apparaître un fichier : winpeboot.0, c'est lui qui amorcera le gestionnaire de démarrage, il faut donc lui faire une place dans notre fichier de configuration de PxeLinux (pxelinux.cfg/default) avec une entrée de ce type :
label vistape MENU LABEL ^Vista PE KERNEL winpeboot.0
2) Création d'une image personnalisée
Nous allons maintenant créer une image WIM légèrement modifiée (pour l'exemple)
Démarrons l'invite de commande des outils Windows PE :
Extraction de l'image dans un répertoire
mkdir %TEMP%\winpe
imagex /apply x86\winpe.wim 1 %TEMP%\winpe
Personnalisation simple (optionnel)
Il est facile d'intégrer un driver réseau (ou autre) à notre image :
peimg /inf="chemin vers le fichier .inf" %TEMP%\winpe\WindowsExemple avec les drivers réseau VMWare :
peimg /inf="k:\compils_benji\drivers\Cartes réseau\VMWare\vmware-nic.inf" %TEMP%\winpe\WindowsOn peut aussi retrouver les fichiers dans le répertoire temporaire, soit en tapant dans la barre d'adresse :
%TEMP%\winpe
:: Rajoutons ici l'utilitaire BootSect, pratique pour réécrire un secteur d'amorçage...
copy x86\BootSect.exe %TEMP%\winpe\Windows\System32Personnalisation du registre (TRES optionnel)
Il faut pour cela charger les ruches de Vista dans la base courante :
reg load HKLM\WINPE-SOFTWARE %TEMP%\winpe\Windows\System32\config\SOFTWARE
reg load HKLM\WINPE-SYSTEM %TEMP%\winpe\Windows\System32\config\SYSTEM
reg load HKLM\WINPE-COMPONENTS %TEMP%\winpe\Windows\System32\config\COMPONENTS
reg load HKLM\WINPE-SAM %TEMP%\winpe\Windows\System32\config\SAM
reg load HKLM\WINPE-SECURITY %TEMP%\winpe\Windows\System32\config\SECURITY
reg load HKLM\WINPE-UTILISATEUR-DEFAULT %TEMP%\winpe\Windows\System32\config\DEFAULTNous pouvons maintenant utiliser notre éditeur de registre pour modifier n'importe quelle clé !
regedit
Déchargeons maintenant les ruches :
Fermer complètement l'éditeur du registre avant !
reg unload HKLM\WINPE-SOFTWARE
reg unload HKLM\WINPE-SYSTEM
reg unload HKLM\WINPE-COMPONENTS
reg unload HKLM\WINPE-SAM
reg unload HKLM\WINPE-SECURITY
reg unload HKLM\WINPE-UTILISATEUR-DEFAULTFinalisation et écriture de l'image
peimg /prep %TEMP%\winpe\Windows
Microsoft a décrété que nous devrons taper "yes" quand il est dit de taper "oui"...Pour continuer, entrez « oui ». Toute autre entrée quittera le programme. Voulez-vous continuer ? yes [==========================100,0%==========================] PEIMG a terminé l'opération.
:: A modifier avec votre chemin...
set TFTPROOT=\\srvkiwi.nirvana.com\tftp
imagex.exe /capture %TEMP%\winpe %TFTPROOT%\images\winpe\monimage.wim "Windows PE Image" /boot /compress max
rd %TEMP%\winpe /s /q
3) Configuration du chargeur de démarrage Windows
Microsoft n'aime plus les fichiers texte et a voulu améliorer son gestionnaire de démarrage, plus de boot.ini, txtsetup.sif, etc... Nous utilisons maintenant un catalogue (assez complexe) pour démarrer notre image virtuelle.
Soyons clair, nous n'allons pas modifier le catalogue du chargeur de démarrage de l'ordinateur, mais celui destiné au démarrage PXE...
Plus d'informations : http://technet2.microsoft.com/WindowsVista/en/library/85cd5efe-c349-427c-b035-c2719d4af7781033.mspx?mfr=true
Nous avons discrètement récupéré, lors de la Création de l'arborescence nécessaire sur le serveur, l'utilitaire BCDEDIT ainsi placé dans le répertoire courant. Il permet de manipuler ce catalogue et d'y ajouter des entrées.
Démarrons l'invite de commande des outils Windows PE :
Création du catalogue (une fois pour toute)
:: A modifier avec votre chemin...
set TFTPROOT=\\srvkiwi.nirvana.com\tftp
set BCDFILE=%TFTPROOT%\boot\BCD
bcdedit -createstore %BCDFILE%
bcdedit -store %BCDFILE% -create {bootmgr} /d "Windows BootManager"
bcdedit -store %BCDFILE% -set {bootmgr} timeout 30
bcdedit -store %BCDFILE% -create {ramdiskoptions} /d "Ramdisk options"
bcdedit -store %BCDFILE% -set {ramdiskoptions} ramdisksdidevice boot
bcdedit -store %BCDFILE% -set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
bcdedit -store %BCDFILE% /enum ALLCe qui devrait donner :
Windows Boot Manager -------------------- identifier {bootmgr} description Windows BootManager timeout 30 Setup Ramdisk Options --------------------- identifier {ramdiskoptions} description Ramdisk options ramdisksdidevice boot ramdisksdipath \boot\boot.sdiAjout d'une entrée de démarrage
Il faut répéter ces actions pour chaque fichier image, avec une description différente
:: A modifier avec votre chemin...
set TFTPROOT=\\srvkiwi.nirvana.com\tftp
set BCDFILE=%TFTPROOT%\boot\BCD
:: Cette soit disante "boucle" a pour but de vous éviter d'avoir à recopier à chaque fois le GUID généré
:: Modifier la description selon les images créées
for /f "tokens=1-3" %a in ('bcdedit -store %BCDFILE% -create /d "Mon premier Windows PE 2.0" /application osloader') do set GUIDPE=%c
bcdedit -store %BCDFILE% -set %GUIDPE% systemroot \Windows
bcdedit -store %BCDFILE% -set %GUIDPE% detecthal Yes
bcdedit -store %BCDFILE% -set %GUIDPE% winpe Yes
:: Modifier ici monimage.wim selon les images créées
bcdedit -store %BCDFILE% -set %GUIDPE% osdevice ramdisk=[boot]\images\winpe\monimage.wim,{ramdiskoptions}
bcdedit -store %BCDFILE% -set %GUIDPE% device ramdisk=[boot]\images\winpe\monimage.wim,{ramdiskoptions}
:: Cette entrée sera la seule et unique dans le menu (non affiché)
bcdedit -store %BCDFILE% -set {bootmgr} displayorder %GUIDPE%
bcdedit -store %BCDFILE% /enum OSLOADERCe qui devrait donner :
Windows Boot Loader ------------------- identifier {d70fc91e-c160-11db-97cc-8000600fe800} device ramdisk=[boot]\images\winpe\monimage.wim,{ramdiskoptions} description Mon premier Windows PE 2.0 osdevice ramdisk=[boot]\images\winpe\monimage.wim,{ramdiskoptions} systemroot \Windows detecthal Yes winpe YesModification de l'ordre d'affichage du menu (Obligatoire pour plusieurs Windows PE)
Cette opération est assez fastidieuse pour plusieurs images Windows PE mais il faut le faire sinon aucune entrée ne sera lancée.
Demandons la liste des entrées :
bcdedit -store %BCDFILE% /enum OSLOADERNous voyons ici deux entrées :
Windows Boot Loader ------------------- identifier {d70fc91e-c160-11db-97cc-8000600fe800} device ramdisk=[boot]\images\winpe\monimage.wim,{ramdiskoptions} description Mon premier Windows PE 2.0 osdevice ramdisk=[boot]\images\winpe\monimage.wim,{ramdiskoptions} systemroot \Windows detecthal Yes winpe Yes Windows Boot Loader ------------------- identifier {e3c45066-c161-11db-97cc-8000600fe800} device ramdisk=[boot]\images\winpe\monautreimage.wim,{ramdiskoptions} description Mon deuxieme Windows PE 2.0 osdevice ramdisk=[boot]\images\winpe\monautreimage.wim,{ramdiskoptions} systemroot \Windows detecthal Yes winpe Yes{d70fc91e-c160-11db-97cc-8000600fe800}et{e3c45066-c161-11db-97cc-8000600fe800}
Ces numéros peuvent évidemment varier, l'important est de garder la correspondance par la suite.Indiquons la liste des entrées dans un ordre arbitraire (sur une seule et même ligne, séparées par un espace) :
bcdedit -store %BCDFILE% -set {bootmgr} displayorder {d70fc91e-c160-11db-97cc-8000600fe800} {e3c45066-c161-11db-97cc-8000600fe800}
bcdedit -store %BCDFILE% /enum {bootmgr}Ce qui devrait donner :
Windows Boot Manager -------------------- identifier {bootmgr} description Windows BootManager displayorder {d70fc91e-c160-11db-97cc-8000600fe800} {e3c45066-c161-11db-97cc-8000600fe800} timeout 30
4) Démarrage !
Après avoir sélectioné Vista PE, le menu peut apparaître si il y a plusieurs entrées configurées :
Dans tous les cas, le chargement de l'image sélectionnée (ou par défaut) s'effectue
L'adresse IP du serveur est toujours indiquée...
Après un "long" moment passé sur la commande wpeinit.exe, voici notre environnement prêt :
Si vous trouvez que le temps est trop long entre le choix de Vista PE dans le menu de PxeLinux et l'apparition du téléchargement de l'image ou du sous-menu Boot Manager, vous êtes comme moi : impatient.
Le programme BOOTMGR essaye de contacter 8 fois son serveur d'origine, "le Service d'Installation à Distance", et ceci sur le port 4011 explicitement, or le serveur DHCP ne tourne QUE sur le port 67.
Heureusement, BOOTMGR ne s'en offusque pas, et continue dans sa lancée, mais perd un certain temps (ici environ 13 secondes).
J'ai donc créé une petite bidouille (oui c'est le mot juste tellement cela a été développé sans aucun respect des normes et sans grandes vérifications), un petit programme qui, sous la forme de service Windows (pour ne pas troubler les serveurs sans sessions ouvertes), répond rapidement aux requêtes.
Ma petite bidouille :
kiwi_fakebootp.rar
Installation
Décompresser dans
%SystemRoot%\System32sc create fakebootp binPath= "\"%SystemRoot%\System32\fakebootp.exe\"" start= auto DisplayName= "[Kiwi] FakeBootP"Lancement
Par la suite, le lancement est automatique au démarrage de Windows.
sc start fakebootpDésinstallation
sc stop fakebootp sc delete fakebootpSupprimer le programme restant si besoin est
Comme le montre cette capture, avec le service en marche, le gain de temps n'est pas négligeable...



