===== 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é [[:wiki:services:pxe:images | 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