Files
edubox/agent/installer/setup-wizard/install-wsl2.ps1
EduBox Dev fc61404271 feat: installation offline complete, HTTPS registry, 8Go WSL, v0.3.18
- Wizard: installation 100% offline (WSL bundle, Podman MSI, machine image, docker-compose)
- Wizard: suppression de wsl --install --no-distribution
- Wizard: .wslconfig avec 8Go RAM / 4 CPU
- Wizard: operations asynchrones pour eviter le freeze UI
- Wizard: detection automatique de podman.exe
- Wizard: version 0.1.1
- Agent: passage en v0.3.18
- Serveur: registry PrestaShop en HTTPS via gitea.alfrednobel.edudeploy.com
- Caddy: config gitea.alfrednobel.edudeploy.com
- Docs: mise a jour SUIVI_INSTALLER.md, README.md, seed.ts
2026-07-02 22:52:28 +00:00

121 lines
4.6 KiB
PowerShell
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Installe ou répare WSL2 de manière fiable.
.DESCRIPTION
Ce script :
1. Vérifie si WSL2 est déjà prêt.
2. Active les fonctionnalités Windows nécessaires.
3. Définit WSL2 comme version par défaut.
4. Met à jour le noyau WSL2.
5. Installe WSL sans distribution si possible.
Un redémarrage peut être nécessaire après lactivation des fonctionnalités.
#>
$ErrorActionPreference = "Stop"
function Test-Wsl2Ready {
try {
$output = & wsl.exe --status 2>&1
$exitCode = $LASTEXITCODE
Write-Host "[Test] wsl --status exit code: $exitCode" -ForegroundColor Cyan
if ($output) {
Write-Host "[Test] wsl --status output:" -ForegroundColor Cyan
$output | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
}
if ($exitCode -eq 0 -or ($output -match "Version par défaut\s*:\s*2") -or ($output -match "Default Version\s*:\s*2")) {
return $true
}
}
catch {
Write-Host "[Test] wsl --status a échoué : $_" -ForegroundColor Yellow
}
return $false
}
function Enable-WindowsFeatureIfNeeded {
param([string]$FeatureName)
Write-Host "[Feature] Activation de $FeatureName..." -ForegroundColor Cyan
$result = & dism.exe /online /enable-feature /featurename:$FeatureName /all /norestart 2>&1
$exitCode = $LASTEXITCODE
$result | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
if ($exitCode -eq 0) {
Write-Host "[Feature] $FeatureName activé (pas de redémarrage nécessaire)." -ForegroundColor Green
return $false
}
elseif ($exitCode -eq 3010) {
Write-Host "[Feature] $FeatureName activé, mais un redémarrage est nécessaire (code 3010)." -ForegroundColor Yellow
return $true
}
else {
throw "Échec de l'activation de $FeatureName (code $exitCode)."
}
}
function Install-Wsl2 {
Write-Host "[WSL] Tentative d'installation sans distribution..." -ForegroundColor Cyan
try {
& wsl.exe --install --no-distribution 2>&1 | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
if ($LASTEXITCODE -ne 0) { throw "wsl --install --no-distribution a retourné le code $LASTEXITCODE" }
Write-Host "[WSL] Installation sans distribution réussie." -ForegroundColor Green
return
}
catch {
Write-Host "[WSL] Option --no-distribution non supportée ou échec : $_" -ForegroundColor Yellow
}
Write-Host "[WSL] Fallback : installation classique de WSL..." -ForegroundColor Cyan
& wsl.exe --install 2>&1 | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
if ($LASTEXITCODE -ne 0) { throw "wsl --install a retourné le code $LASTEXITCODE" }
Write-Host "[WSL] Installation classique réussie." -ForegroundColor Green
}
# === Début du script ===
Write-Host "=== Installation / réparation WSL2 ===" -ForegroundColor Green
if (Test-Wsl2Ready) {
Write-Host "WSL2 est déjà prêt. Rien à faire." -ForegroundColor Green
exit 0
}
Write-Host "WSL2 n'est pas détecté. Lancement de l'installation..." -ForegroundColor Yellow
$rebootNeeded = $false
$rebootNeeded = (Enable-WindowsFeatureIfNeeded -FeatureName "Microsoft-Windows-Subsystem-Linux") -or $rebootNeeded
$rebootNeeded = (Enable-WindowsFeatureIfNeeded -FeatureName "VirtualMachinePlatform") -or $rebootNeeded
if ($rebootNeeded) {
Write-Host "`nUn redémarrage est nécessaire pour activer les fonctionnalités Windows." -ForegroundColor Yellow
Write-Host "Après le redémarrage, relance ce script pour terminer l'installation de WSL2." -ForegroundColor Yellow
$response = Read-Host "Redémarrer maintenant ? (O/N)"
if ($response -eq "O" -or $response -eq "o") {
Restart-Computer -Force
}
exit 3010
}
Write-Host "[WSL] Définition de WSL2 comme version par défaut..." -ForegroundColor Cyan
& wsl.exe --set-default-version 2 2>&1 | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
if ($LASTEXITCODE -ne 0) { throw "wsl --set-default-version 2 a échoué (code $LASTEXITCODE)." }
Write-Host "[WSL] Mise à jour du noyau WSL2..." -ForegroundColor Cyan
& wsl.exe --update 2>&1 | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
# 3010 = succès mais redémarrage possible
if ($LASTEXITCODE -ne 0 -and $LASTEXITCODE -ne 3010) { throw "wsl --update a échoué (code $LASTEXITCODE)." }
Install-Wsl2
if (Test-Wsl2Ready) {
Write-Host "`nWSL2 est maintenant prêt." -ForegroundColor Green
exit 0
}
else {
Write-Host "`nWSL2 ne semble toujours pas prêt. Essayez de redémarrer et de relancer le script." -ForegroundColor Red
exit 1
}