#!/usr/bin/env bash # Vérifie les prérequis locaux avant de lancer le lab. # Fait par AcadéNice - https://acadenice.fr/ set -u ok() { echo "[ OK ] $*"; } ko() { echo "[FAIL] $*"; fail=1; } warn() { echo "[WARN] $*"; } fail=0 OS="$(uname -s)" echo "Vérification des prérequis (OS détecté : $OS)" echo command -v docker >/dev/null 2>&1 \ && ok "docker : $(docker --version 2>/dev/null | awk '{print $3}' | tr -d ',')" \ || ko "docker absent" docker compose version >/dev/null 2>&1 \ && ok "docker compose v2 : $(docker compose version --short 2>/dev/null)" \ || ko "docker compose v2 absent (plugin docker-compose-plugin requis)" docker info >/dev/null 2>&1 \ && ok "daemon docker joignable" \ || ko "daemon docker inaccessible (user dans le groupe docker ?)" case "$OS" in Linux) if [ -e /dev/kvm ] && [ -r /dev/kvm ] && [ -w /dev/kvm ]; then ok "/dev/kvm accessible" elif [ -e /dev/kvm ]; then ko "/dev/kvm existe mais pas lisible (groupe kvm ?)" else ko "/dev/kvm absent (VT-x / AMD-V désactivé dans le BIOS ?)" fi lsmod 2>/dev/null | grep -q "^kvm " && ok "module kvm chargé" || warn "module kvm non chargé" ;; Darwin) if [ "$(uname -m)" = "arm64" ]; then ko "Mac Apple Silicon : dockurr/windows non supporté (voir docs/etudiant/fr/00-prerequis.md)" else warn "Mac Intel : Docker Desktop avec virtualisation imbriquée requis" fi ;; MINGW*|CYGWIN*|MSYS*) warn "Sous Windows, utilisez plutôt check-prereqs.ps1" ;; esac if command -v free >/dev/null 2>&1; then MEM_GB=$(free -g | awk '/^Mem:/ {print $2}') if [ "$MEM_GB" -ge 16 ]; then ok "RAM ${MEM_GB} Go" elif [ "$MEM_GB" -ge 12 ]; then warn "RAM ${MEM_GB} Go (minimum — fermez les autres applis)" else ko "RAM ${MEM_GB} Go insuffisante" fi fi FREE_GB=$(df -BG "$PWD" 2>/dev/null | awk 'NR==2 {gsub("G",""); print $4}') if [ -n "${FREE_GB:-}" ]; then if [ "$FREE_GB" -ge 150 ]; then ok "Disque libre ${FREE_GB} Go" elif [ "$FREE_GB" -ge 80 ]; then warn "Disque libre ${FREE_GB} Go (juste le minimum)" else ko "Disque libre ${FREE_GB} Go insuffisant" fi fi command -v xfreerdp3 >/dev/null 2>&1 || command -v xfreerdp >/dev/null 2>&1 \ && ok "xfreerdp disponible" \ || warn "xfreerdp absent (recommandé pour RDP fluide)" echo if [ $fail -eq 0 ]; then echo "Prérequis critiques : OK." exit 0 fi echo "Prérequis manquants. Voir docs/etudiant/fr/00-prerequis.md" exit 1