Dernières venues de sites connues...
Derniers messages du forum...
xhtml 1.1

DiversAstuces PXEWindows PE 2.0 (Vista) sur PXE

Smiley forum Discussions sur ce sujet dans le forum Smiley 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

Conventions

Attention ! 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.
Invite WAIK

Sources de données nécessaires :

Outils optionnels :

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 :

Je vous fais confiance pour cette partie, l'important est d'arriver à lancer le programme d'installation via startcd.exe :

Installation WAIK

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 :

Invite WAIK

A copier-coller ou taper à la console :

:: A modifier avec votre chemin...
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 :

Invite WAIK
  1. Extraction de l'image dans un répertoire

    mkdir %TEMP%\winpe
    imagex /apply x86\winpe.wim 1 %TEMP%\winpe
  2. 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\Windows

    Exemple avec les drivers réseau VMWare :

    peimg /inf="k:\compils_benji\drivers\Cartes réseau\VMWare\vmware-nic.inf" %TEMP%\winpe\Windows

    On peut aussi retrouver les fichiers dans le répertoire temporaire, soit en tapant dans la barre d'adresse : %TEMP%\winpe

    Image Windows montée
    :: Rajoutons ici l'utilitaire BootSect, pratique pour réécrire un secteur d'amorçage...
    copy x86\BootSect.exe %TEMP%\winpe\Windows\System32
  3. Personnalisation 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\DEFAULT

    Nous pouvons maintenant utiliser notre éditeur de registre pour modifier n'importe quelle clé !

    regedit
    Ruches Windows Vista PE chargées

    Déchargeons maintenant les ruches :

    Attention ! 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-DEFAULT
  4. Finalisation et écriture de l'image

    peimg /prep %TEMP%\winpe\Windows
    Attention ! 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 :

Invite WAIK
  1. 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 ALL

    Ce 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.sdi
  2. Ajout 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 OSLOADER

    Ce 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                   Yes
  3. Modification 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 OSLOADER

    Nous 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 :

Menu BOOT

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...

Chargement WIM

Après un "long" moment passé sur la commande wpeinit.exe, voici notre environnement prêt :

Windows PE

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.

Packets dans le vide

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%\System32

    sc 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 fakebootp
  • Désinstallation

    sc stop fakebootp sc delete fakebootp

    Supprimer 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...

Paquets de réponse

Creative Commons License
Cette création est mise à disposition sous un contrat Creative Commons.

Page générée en 0.006 secondes.