Aller au contenu principal

Déployer un poste Windows (FOG)

Les postes du club sont installés à partir d'une image Windows 11 stockée dans FOG. Le poste démarre sur le réseau (PXE), FOG copie l'image sur son disque, puis Windows se renomme, rejoint le domaine FormuleSAE.local et l'agent WAPT installe les logiciels.

ÉlémentValeur
Serveur FOGVM 104, 10.194.24.20, interface web http://10.194.24.20/fog
Image en serviceWin11-Pro-FSAE-v2 (la Win11-Pro-FSAE d'origine est gardée en secours)
Machine de référenceVM 9000 REF-Win11 sur formule-pve-02, avec ses snapshots

Ce que contient l'image​

L'image est volontairement légère : Windows 11 Pro à jour, l'agent WAPT et le client FOG. Les gros logiciels (Office, CAO, Adobe…) ne sont pas dans l'image : WAPT les installe après le premier démarrage. On n'a donc pas à refaire l'image à chaque nouvelle version d'un logiciel.

Les snapshots de la VM 9000 décrivent les étapes :

SnapshotÉtat
Base-AuditWindows 11 Pro installé, mode Audit, vierge
Audit-RDPAdmin actif, RDP, réglages de base
WAPTMises à jour Windows et agent WAPT
FOGClient FOG ajouté : point de départ pour refaire l'image
SysprepGénéralisée, prête à capturer (image d'origine)
Ne supprime pas les snapshots de la VM 9000

Ils permettent de repartir d'un état propre. Pour travailler à partir d'un snapshot sans toucher à la chaîne, copie le disque dans une nouvelle VM (voir plus bas).

Refaire l'image​

  1. Copie la VM de référence depuis le snapshot FOG. Proxmox refuse de cloner un snapshot qui a un disque EFI : on copie seulement le disque système, avec un clone ZFS temporaire.
    # VM vide, même matériel que la 9000 (disque SATA 80 Go, carte e1000e, UEFI, TPM)
    qm create <ID> --name ref-win11-vX --ostype win11 --machine pc-q35-11.0 --bios ovmf \
    --cpu host --cores 4 --memory 8192 --balloon 0 \
    --efidisk0 local-zfs:1,efitype=4m,pre-enrolled-keys=0 --tpmstate0 local-zfs:1,version=v2.0 \
    --sata0 local-zfs:80,discard=on,ssd=1 --net0 e1000e,bridge=vmbr0,firewall=0
    zfs clone rpool/data/vm-9000-disk-1@FOG rpool/data/tmp-fog-copy
    dd if=/dev/zvol/rpool/data/tmp-fog-copy of=/dev/zvol/rpool/data/vm-<ID>-disk-1 bs=4M status=progress
    zfs destroy rpool/data/tmp-fog-copy
  2. Démarre la copie. Elle s'ouvre en mode Audit, avec la fenêtre Outil de préparation système : clique sur Annuler.
  3. Fais tes modifications (mises à jour, réglages), sans redémarrer une fois l'étape suivante faite.
  4. Supprime l'identité WAPT, dans un PowerShell administrateur. Sans ça, tous les postes déployés partagent le même UUID dans WAPT et s'écrasent les uns les autres :
    Stop-Service waptservice -Force
    Remove-Item -Force "C:\Program Files (x86)\wapt\private\db\waptdb.sqlite"
    Remove-Item -Force "C:\Program Files (x86)\wapt\db\waptpublicdb.sqlite"
    Remove-Item -Force "C:\Program Files (x86)\wapt\private\*.crt","C:\Program Files (x86)\wapt\private\*.pem" -ErrorAction SilentlyContinue
    Remove-Item -Force "C:\Program Files (x86)\wapt\log\*.log" -ErrorAction SilentlyContinue
    # Vérification : ne doit rien afficher
    Get-ChildItem -Recurse -File "C:\Program Files (x86)\wapt" | Select-String -Pattern "<ancien UUID>" -List
  5. Prends un snapshot de la copie, puis lance sysprep avec le fichier de réponses du club :
    & "C:\Windows\System32\Sysprep\sysprep.exe" /generalize /oobe /shutdown /unattend:<chemin du unattend.xml>
    La VM s'éteint toute seule. Ne la rallume pas : Windows lancerait sa configuration initiale.
À compléter

Le chemin du fichier unattend.xml du club. Sans lui, chaque poste déployé passe par l'assistant de configuration Windows (région, compte…).

Capturer l'image dans FOG​

  1. Dans FOG, Image Management → Create New Image (ou réutilise une image existante pour l'écraser). Type Single Disk - Resizable, partition Everything.
  2. Dans Host Management, crée un hôte avec la MAC de la VM et associe-le à cette image.
  3. Sur l'hôte, Basic Tasks → Capture, avec Shutdown when complete coché. Vérifie dans Tasks → Active Tasks qu'il n'y a qu'une seule tâche.
  4. Démarre la VM en PXE (voir l'encadré ci-dessous). La capture prend environ 5 minutes.
Capture : la VM doit être sur vmbr0

FOG est sur le réseau de l'école (vmbr0). Une capture lancée depuis vmbr1 (derrière OPNsense) se bloque : le NFS ne passe pas la traduction d'adresses. Capture et déploie sur vmbr0.

PXE en UEFI, en attendant le VLAN

Le DHCP de l'école ne donne pas de fichier de démarrage UEFI. En attendant le DHCP d'OPNsense, on démarre les VMs sur un petit disque iPXE : /var/lib/vz/images/100/fog-efi.img sur formule-pve-02. Il contient ipxe.efi et un autoexec.ipxe qui fait dhcp puis chain tftp://10.194.24.20/default.ipxe.

qm importdisk <ID> /var/lib/vz/images/100/fog-efi.img local-zfs # donne vm-<ID>-disk-N
qm set <ID> --sata1 local-zfs:vm-<ID>-disk-N
qm set <ID> --boot 'order=sata1;sata0'

Après la tâche FOG, remets --boot order=sata0 et --delete sata1, sinon la VM reboucle sur iPXE.

Déployer sur un poste​

  1. Crée l'hôte dans FOG (nom, MAC, image). Pour joindre le domaine automatiquement, remplis la partie Active Directory : domaine FormuleSAE.local, compte svc-join.
  2. Basic Tasks → Deploy, avec Shutdown when complete.
  3. Démarre le poste en PXE. Le déploiement prend environ 5 minutes.
  4. Au premier démarrage, ne coupe rien : Windows finit sa configuration, le client FOG renomme le poste et le joint au domaine, avec plusieurs redémarrages.
  5. Dans Active Directory, déplace le poste dans l'OU Postes-Club pour qu'il reçoive les GPO.
À compléter

L'emplacement du mot de passe de svc-join dans Vaultwarden.

Problèmes connus​

SymptômeCauseSolution
« Host is NOT registered » au démarrage PXEiPXE n'envoie pas la MAC à FOG (vieux autoexec.ipxe qui appelle boot.php directement)Utilise le disque fog-efi.img à jour, qui passe par default.ipxe
« Booting from SAN device » puis écran noirAucune tâche FOG en file pour ce posteCrée la tâche avant de démarrer le poste
La capture reste figée après la partition EFILe poste est sur vmbr1 (derrière OPNsense)Passe-le sur vmbr0
« L'ordinateur a redémarré de manière inattendue » au premier démarrageImage refaite à partir d'un Windows déjà déployé puis regénéraliséRepars toujours du snapshot FOG de la VM 9000
Deux postes apparaissent sous le même UUID dans WAPTIdentité WAPT restée dans l'imageRefais l'étape 4 de Refaire l'image
qm start répond timeout waiting on systemdUn processus swtpm (TPM virtuel) est resté après l'arrêt de la VMps aux | grep swtpm, vérifie qu'il cite le disque de cette VM, puis kill <PID>