WikiMiNET

La documentation technique et administrative

Outils pour utilisateurs

Outils du site


wiki:services:pxe:windows

Windows

Windows c'est pas libre blablabla… oui sauf qu'on a des adhérents pas doués qui ont besoin de réinstaller leurs windows de temps en temps et que faire une clé Windows prend une plombe ! Donc moins vous passerez de temps sur un PC en permanence ou jusqu'à 21h le soir parce que l'adhérent est arrivé à 19h29 complétement desespéré et vous terriblement affamé, mieux vous vous porterez. Et aussi parce qu'on a un windows 2012 R2 caché en salle serveur et qu'il est important d'avoir touché du windows server puisque les entreprises ne sont pas full linux.

Principe

On utilise memdisk pour charger l'iso winpe.iso en RAM, c'est un noyau liux particulier qui va nous permettre d'exécuter les setup.exe du windows que l'on souhaite installer. Tout les fichiers dont windows a besoin pour procéder à l'installation sont stockés sur un partage samba. Un script busybox tout propre permet de sélectionner le windows que vous souhaitez installer, pour celà, un shell busybox est lancé au démarrage. Busybox est un petit exécutable qui contient de nombreuses commandes UNIX basiques.

Windows PE (Windows Preinstallation Environment) est un système d’exploitation Win32 minimal doté de services limités et élaboré à partir du noyau de Windows. Il sert à préparer un ordinateur en vue d’une installation Windows, mais aussi à copier des images de disques depuis un serveur de fichiers du réseau et à lancer l’installation de Windows, il sert plutôt d’environnement de préinstallation autonome et est utilisé comme composant à part entière pour d’autres technologies de récupération et d’installation, telles que le programme d’installation pour Windows, les services de déploiement Windows etc.

Samba est une suite d'outils qui permettent de gérer le protocole SMB (aussi appelé « CIFS ») sous Linux. Ce dernier est employé par Windows pour accéder aux partages réseau et aux imprimantes partagées, Samba sait également jouer le rôle de contrôleur de domaine Windows, en gros, ca fait le café.

memdisk, on en a parlé ici !

Tout a été fait à partir ces supers tuto avec quelques améliorations : http://www.tecmint.com/configure-pxe-server-to-install-windows-on-centos/ https://www.treshaut.net/viewtopic.php?t=42

Configuration

Pour illustrer ce que j'ai dit plus haut à propos du démarrage de winPe avec memdisk :

/srv/tftpf/bios/pxelinux.cfg/default
LABEL winpe_64
  MENU LABEL Windows PE 5 (8.1) 64
  KERNEL http://192.168.150.3/misc/tools/memdisk_kernel/memdisk
  INITRD http://192.168.150.3/win_pe/win_pe_64.iso
  APPEND iso

Samba

Ajout d'un iso windows dans /srv/samba

mkdir /tmp/windows11          #apprenez à compter à Bill Gates si ce n'est pas Windows 11 après 10, il a déjà sauté Windows 9)
mkdir /srv/samba/windows_11_64 si 64 bits, 32 sinon
mount -o loop windows11.iso /tmp/windows 
cp -av /tmp/windows/* /srv/samba/windows_11_64
umount -df /tmp/windows11

Le fichier de conf de samba :

/etc/samba/smb.conf
[global]
workgroup = PXESERVER
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
idmap config * : backend = tdb
cups options = raw
netbios name = pxe
map to guest = bad user
dns proxy = no
public = yes
## For multiple installations the same time - not lock kernel
kernel oplocks = no
nt acl support = no
security = user
guest account = nobody
[windows_install]
comment = Windows Image
path = /srv/samba/
read only = no
browseable = yes
public = yes
printable = no
guest ok = yes
oplocks = no
level2 oplocks = no
locking = no

Une fois le fichier de conf samba modifié, il faut faire lancer la commande suivante pour checker si il y a des erreurs de conf puis restart samba:

testparm

/etc/init.d/samba restart

Créer l'iso winpe.iso

https://www.treshaut.net/viewtopic.php?t=42

Il faut installer un gros logiciels (quelques Go) : Windows Automated Installation Kit https://www.microsoft.com/fr-fr/download/details.aspx?id=39982

Cela va permettre de générer un Live Windows basé sur Windows PE 5, c'est à dire : Windows 8.1

Pour l'installation, n'installez que : - Outils de déploiement - Environnement de préinstallation de Windows (Windows PE)

Une fois l'outil installé, lancez “Environnement de déploiement et d’outils de création d’images” en Administrateur. Attention ce n'est pas un Invite de commandes simple, comme si on ouvrait directement “cmd.exe” : En effet, il y a plusieurs variables d'environnement qui sont activées afin de pouvoir utiliser tous les utilitaires sans préciser le chemin complet. En installant Windows ADK, en fait les images WIM sont déjà prêtes à l'emploi, nous allons simplement les utiliser et les modifier légèrement. Nous allons tout placer dans un dossier, commençons par le Live 8.1 x64 par exemple, sachant qu'avec le x86 c'est pratiquement la même chose

copype amd64 C:\live81x64

Cette commande se termine par un *Success*

Et dans le dossier C:\live81x64 on trouve désormais 3 dossiers : - fwfiles (contient les secteurs de boot pour BIOS et pour UEFI) - media (le Live au complet, prêt à être transformé en image ISO ou à mettre sur clé USB) - mount (dossier vide au départ, peut être utilisé comme point de montage pour l'image WIM du Live Windows, par exemple pour modifier le Live)

Montage de l'image WIM dans le dossier vide :

dism /Mount-Image /ImageFile:C:\live81x64\media\sources\boot.wim /index:1 /MountDir:C:\live81x64\mount

Dans le dossier C:\live81x64\mount on voit les fichiers du Live 8.1, directement accessibles et modifiables.

Les modifications possibles sont libres, tant qu'on ne modifie pas les programmes binaires Microsoft ; le reste pas de problème ;) Cela va par exemple du registre local (ruches dans C:\live81x64\mount\Windows\System32\config ) au script de démarrage “startnet.cmd” se trouvant dans le dossier System32 ou encore le fond d'écran “winpe.jpg”.

On va customiser un peu le script *starnet.cmd* pour ajouter l'execution du script startup.sh au démarrage :

wpeinit
busybox wget http://192.168.150.3/win_pe/startup.sh
busybox sh -c startup.sh

Par défaut, le Live 8.1 n'est qu'en anglais, donc le clavier est QWERTY.

Avec Windows ADK, il y a des packs de fonctionnalités et de langues qu'on peut ajouter, disponibles dans le dossier : *“C:\Program Files (x86)\Windows Kits\8.1\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs”*

Il y a entre autres le support de PowerShell 3, .Net Framework 4, WMI, PPPoE, Stockage étendu, polices d'écriture asiatiques, etc…

Et dans le sous-dossier “fr-fr” il y a le pack de langue “lp.cab” et les packs de langue pour chaque fonctionnalité que l'on souhaite ajouter.

Pour ce tutoriel, je choisis un Live 8.1 basique, donc juste avec le support FR :

dism /Image:C:\live81x64\mount /Add-Package /PackagePath:"C:\Program Files (x86)\Windows Kits\8.1\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\fr-fr\lp.cab"

Et l'activation de cette langue et du clavier FR Azerty :

dism /Image:C:\live81x64\mount /Set-UILang:fr-FR
dism /Image:C:\live81x64\mount /Set-SysLocale:fr-FR
dism /Image:C:\live81x64\mount /Set-UserLocale:fr-FR
dism /Image:C:\live81x64\mount /Set-InputLocale:fr-FR

On peut maintenant démonter l'image et appliquer les changements dans le fichier WIM :

dism /Unmount-Image /MountDir:C:\live81x64\mount /commit

Via l'utilitaire fourni OSCDIMG, on va pouvoir créer une image ISO bootable du Live 8.1, avec support de boot hybride BIOS et UEFI

oscdimg -h -u2 -m -o -l"Live_8_1" -bootdata:2#p0,e,b"C:\live81x64\fwfiles\etfsboot.com"#pEF,e,b"C:\live81x64\fwfiles\efisys.bin" "C:\live81x64\media" "C:\live81x64\Live8_1_bios_efi.iso"

Le script

Ce script est executé au démarrage de winpe. Il lit un fichier de conf : win_pe.conf

cmd /c start cmd #Shell cmd
cmd /c start busybox sh #Shell busybox
net use z: \\\\192.168.150.3\\windows_install && z:/windows_81_64/setup.exe && net use z: /delete #Windows 8.1 64 bits
net use z: \\\\192.168.150.3\\windows_install && z:/windows_10_64/setup.exe && net use z: /delete #Windows 10 64 bits
net use z: \\\\192.168.150.3\\windows_install && z:/windows_2012R2_64/setup.exe && net use z: /delete #Windows 2012R2 64 bits
net use z: \\\\192.168.150.3\\windows_install && z:/windows_81_32/setup.exe && net use z: /delete #Windows 8.1 32 bits
net use z: \\\\192.168.150.3\\windows_install && z:/windows_10_32/setup.exe && net use z: /delete #Windows 10 32 bits

Les commentaires (à droite du #) constitueront le menu proposant différents choix (reboot, shell, install) Les commandes à gauche du # sont les commandes executés une fois le choix exécuté. Les 2 premières lignes permettent d'ouvir u, shell windows ou un shell busybox. Les 3 dernières lignes permettent d'exécuter setup.exe qui lance l'installation windows. Il faut bien 4 \ devant l'adresse 192.168.150.3, ce sript est exécuté par un shell UNIX donc il faut échapper 2 \ pour accèder au dossier samba \\192.168.150.4\windows_install.

*Ce script est dynamique, il suffit d'ajouter une ligne avec la syntaxe ci-dessous pour exécuter la commande que vous voulez, et donc installer une version de windows tout récemment sortie.*

/srv/http/win_pe/startup.sh
#!/bin/busybox sh

wget http://192.168.150.3/win_pe/win_pe.conf

if [ $(uname) = "Windows_NT" ]; then
  null_device=NUL
else
  null_device=/dev/null
fi

#menu=$(grep '#' WinPe.conf | grep -E -v '^//|^$' | sed '1 i exit 1#Quitter')
menu=$(grep '#' win_pe.conf | grep -E -v '^//|^$' | sed '1 i wpeutil shutdown #Shutdown' | sed '1 i wpeutil reboot #Reboot')

while true; do
echo ____________________
count=$(echo "$menu" | wc -l | cut -d' ' -f1)

for i in $(seq $count); do
  echo -n  $(expr $i - 1)') '
  echo "$menu" | head -n $i | tail -n1 | cut -d '#' -f2
done
echo ____________________
let count--
ok=false

while [ $ok = false ];do
  read -p '>' choice
  if ! [ "$choice" -eq "$choice" ] 2> $null_device; then ### Hack pour verifier que $choice soit bien un nombre entier
    ok=false
  elif [ $choice -gt $count ]; then
    ok=false
  elif [ $choice -lt 0 ]; then
    ok=false
  else
    ok=true
  fi
  [ $ok = false ] && echo "Choix incorrect"
done

let choice++

run=$(echo "$menu" | head -n $choice | tail -n 1)
busybox sh -c "$run"

done
wiki/services/pxe/windows.txt · Dernière modification: 2020/06/27 18:16 (modification externe)