Nous souhaitons générer une image Windows 7 32 bits déployable via PXE sur nos clients en utilisant notre serveur Opsi comme serveur de boot.
Pour cela, il faut dans un premier temps générer un environnement de préinstallation autonome WinPE (pseudo système d’exploitation Live) pour une architecture 32 bits.
Dans ce but, nous utiliserons Windows AIK.
- Pour générer une image d’installation automatisée de Windows 7 ou Windows Serveur 2008 R2 : WAIK (Windows Automated Installation Kit)
- Pour générer une image d’installation automatisée de Windows 7 SP1 ou Windows Serveur 2008 R2 SP1 : WAIK (Windows Automated Installation Kit) et son supplément
- Pour générer une image d’installation automatisée de Windows 10 ou Windows 8/8.1 : ADK (Assessment and Deployment Kit)
Monter l’ISO de WAIK, ici KB3AIK_FR.iso, dans un lecteur virtuel (avec Daemon Tools Lite ou MagicISO par exemple) et lancer son installation.

"%ProgramFiles%\Windows AIK\Tools\PETools\copype.cmd" <ARCH> "C:\winpe" "%ProgramFiles%\Windows AIK\Tools\<ARCH>\imagex.exe" /mountrw "C:\winpe\winpe.wim" 1 "C:\winpe\mount" echo C:\opsi\startnet.cmd > "C:\winpe\mount\Windows\System32\startnet.cmd" "%ProgramFiles%\Windows AIK\Tools\<ARCH>\imagex.exe" /commit /unmount "C:\winpe\mount" move "C:\winpe\winpe.wim" "C:\winpe\ISO\sources\boot.wim"
Ci-dessus, <ARCH> représente l’architecture du système d’exploitation qui sera installé par la suite, dans notre cas 32 bits :
- x86 : pour les systèmes 32 bits
- amd64 : pour les systèmes 64 bits
Exemple pour un système 32 bits :
===================================================
Creating Windows PE customization working directory
C:\winpe
===================================================
1 fichier(s) copié(s).
1 fichier(s) copié(s).
C:\Program Files\Windows AIK\Tools\PETools\x86\boot\bcd
C:\Program Files\Windows AIK\Tools\PETools\x86\boot\boot.sdi
C:\Program Files\Windows AIK\Tools\PETools\x86\boot\bootfix.bin
C:\Program Files\Windows AIK\Tools\PETools\x86\boot\etfsboot.com
C:\Program Files\Windows AIK\Tools\PETools\x86\boot\fonts\chs_boot.ttf
C:\Program Files\Windows AIK\Tools\PETools\x86\boot\fonts\cht_boot.ttf
C:\Program Files\Windows AIK\Tools\PETools\x86\boot\fonts\jpn_boot.ttf
C:\Program Files\Windows AIK\Tools\PETools\x86\boot\fonts\kor_boot.ttf
C:\Program Files\Windows AIK\Tools\PETools\x86\boot\fonts\wgl4_boot.ttf
9 fichier(s) copié(s)
C:\Program Files\Windows AIK\Tools\PETools\x86\EFI\microsoft\boot\bcd
C:\Program Files\Windows AIK\Tools\PETools\x86\EFI\microsoft\boot\fonts\chs_boot.ttf
C:\Program Files\Windows AIK\Tools\PETools\x86\EFI\microsoft\boot\fonts\cht_boot.ttf
C:\Program Files\Windows AIK\Tools\PETools\x86\EFI\microsoft\boot\fonts\jpn_boot.ttf
C:\Program Files\Windows AIK\Tools\PETools\x86\EFI\microsoft\boot\fonts\kor_boot.ttf
C:\Program Files\Windows AIK\Tools\PETools\x86\EFI\microsoft\boot\fonts\wgl4_boot.ttf
6 fichier(s) copié(s)
1 fichier(s) copié(s).
Success
Updating path to include peimg, cdimage, imagex
C:\Program Files\Windows AIK\Tools\PETools\
C:\Program Files\Windows AIK\Tools\PETools\..\x86
ImageX Tool for Windows
Copyright (C) Microsoft Corp. All rights reserved.
Version: 6.1.7600.16385
Mounting: [C:\winpe\winpe.wim, 1] -> [C:\winpe\mount]…
[ 100% ] Mounting progressSuccessfully mounted image.
Total elapsed time: 8 sec
ImageX Tool for Windows
Copyright (C) Microsoft Corp. All rights reserved.
Version: 6.1.7600.16385
Committing: [C:\winpe\mount]…
[ 100% ] Committing Image progressSuccessfully committed image.
Unmounting: [C:\winpe\mount]…
[ 100% ] Mount cleanup progressSuccessfully unmounted image.
Total elapsed time: 15 sec
Remarques
Par défaut, le fichier starnet.cmd contient seulement la ligne suivante :
wpeinit
Après modification, il contient la ligne suivante :
C:\opsi\startnet.cmd
Le script startnet.cmd est généré par l’image de boot linux lors de l’appel au script Python /var/lib/opsi/depot/win7/setup.py
Il contient l’exécution du script work.cmd, copiant le fichier /var/lib/opsi/depot/win7/custom/unattend.xml puis appelant wpeinit
Les fichiers setup.py de chaque distribution sont identiques.
De plus, chaque distribution dispose de deux fichiers unattend.xml identiques entre eux (avant modification du custom) :
- /var/lib/opsi/depot/win7/custom/unattend.xml
- /var/lib/opsi/depot/win7/opsi/unattend.xml.template
Contrairement au script setup.py, le fichier unattend.xml est très différent entre les différentes distributions.
Contenu partiel du script /var/lib/opsi/depot/win7/setup.py :
#ligne 93 target = '/mnt/hd' #ligne 785 # Create work.cmd logger.notice("Creating work.cmd") f = open(target + '/opsi/work.cmd', 'w') print >> f, "@echo off\r" print >> f, "copy c:\\opsi\\unattend.xml x:\\unattend.xml >nul\r" print >> f, ":init\r" print >> f, "set mount_try_count=0\r" print >> f, "c:\\opsi\\SetWallpaper.exe c:\\opsi\\opsibg.bmp >nul 2>nul\r" print >> f, "echo Initializing ..... please wait ......\r" print >> f, "wpeinit\r" [...] #ligne 886 # Create startnet.cmd logger.notice(u"Creating startnet.cmd") f = open(target + '/opsi/startnet.cmd', 'w') print >> f, "@echo off\r" print >> f, "copy c:\\opsi\\work.cmd x:\\work.cmd >nul\r" print >> f, "x:\\work.cmd" f.close()
Au final, après cette procédure, le dossier C:\winpe contient l’arborescence de fichiers/dossiers suivante :
winpe/ ├── etfsboot.com ├── ISO/ │ ├── boot/ │ │ ├── bcd │ │ ├── boot.sdi │ │ ├── bootfix.bin │ │ ├── etfsboot.com │ │ └── fonts/ │ │ ├── chs_boot.ttf │ │ ├── cht_boot.ttf │ │ ├── jpn_boot.ttf │ │ ├── kor_boot.ttf │ │ └── wgl4_boot.ttf │ ├── bootmgr │ ├── EFI/ │ │ └── microsoft/ │ │ └── boot/ │ │ ├── bcd │ │ └── fonts/ │ │ ├── chs_boot.ttf │ │ ├── cht_boot.ttf │ │ ├── jpn_boot.ttf │ │ ├── kor_boot.ttf │ │ └── wgl4_boot.ttf │ └── sources/ │ └── boot.wim └── mount/ 9 directories, 18 files
Toutefois, seul le contenu du dossier ISO nous intéresse.
Copier ensuite le contenu de C:\winpe\ISO sur le serveur opsi.opensharing.priv, dans le répertoire /var/lib/opsi/depot/win7/winpe/ :
Définir les droits d’accès sur ce dossier :
# opsi-setup --set-rights /var/lib/opsi/depot/win7/winpe/ [5] [Feb 08 14:34:50] Setting rights on directory u'/var/lib/opsi/depot/win7/winpe' (Rights.py|121) # ls -lA /var/lib/opsi/depot/win7/winpe/ total 388 drwxrwx--- 3 opsiconfd pcpatch 4096 févr. 8 14:33 boot -rwxrwx--- 1 opsiconfd pcpatch 383562 juil. 13 2009 bootmgr drwxrwx--- 3 opsiconfd pcpatch 4096 févr. 8 14:33 EFI drwxrwx--- 2 opsiconfd pcpatch 4096 févr. 8 14:33 sources
Copier le contenu du CD d’installation de Windows 7 dans le répertoire suivant /var/lib/opsi/depot/win7/installfiles/.

Définir les droits d’accès sur ce dossier :
# opsi-setup --set-rights /var/lib/opsi/depot/win7/installfiles/ [5] [Feb 08 14:51:19] Setting rights on directory u'/var/lib/opsi/depot/win7/installfiles' (Rights.py|121) # ls -lA /var/lib/opsi/depot/win7/installfiles/ total 512 -rwxrwx--- 1 opsiconfd pcpatch 43 avril 12 2011 autorun.inf drwxrwx--- 4 opsiconfd pcpatch 4096 févr. 8 14:41 boot -rwxrwx--- 1 opsiconfd pcpatch 383786 avril 12 2011 bootmgr drwxrwx--- 3 opsiconfd pcpatch 4096 févr. 8 14:41 efi -rwxrwx--- 1 opsiconfd pcpatch 112400 avril 12 2011 setup.exe drwxrwx--- 10 opsiconfd pcpatch 4096 févr. 8 14:43 sources drwxrwx--- 5 opsiconfd pcpatch 4096 févr. 8 14:43 support drwxrwx--- 3 opsiconfd pcpatch 4096 févr. 8 14:43 upgrade
Aller plus loin