# ═══════════════════════════════════════════════════════════════════
# VMWARE ULTRA-DÉTAILLÉ POUR GRANDS DÉBUTANTS
# Guide Complet avec Méthodologie POURQUOI / QUAND / COMMENT
# Pour Étudiants et Administrateurs Linux/Réseaux (Ubuntu)
# ═══════════════════════════════════════════════════════════════════

# Ce guide explore TOUTES les fonctionnalités de VMware de manière exhaustive
# Chaque concept est expliqué avec:
# - POURQUOI: La raison d'être de cette fonctionnalité
# - QUAND: Les cas d'usage appropriés
# - COMMENT: L'implémentation pratique avec exemples
# - Analogies pour faciliter la compréhension
# - Erreurs courantes et comment les éviter


# ═══════════════════════════════════════════════════════════════════
# PARTIE 1: INTRODUCTION À LA VIRTUALISATION
# ═══════════════════════════════════════════════════════════════════


# ═══ 1.1 QU'EST-CE QUE LA VIRTUALISATION? ═══

# POURQUOI la virtualisation existe-t-elle?
# ═════════════════════════════════════════

# PROBLÈME AVANT VIRTUALISATION:
# ──────────────────────────────

# Scénario typique d'un centre de données des années 1990-2000:

# Serveur physique 1 -> Windows Server 2003 (Application A)
# • CPU: 10% utilisé
# • RAM: 2GB/16GB utilisé
# • Stockage: 50GB/500GB utilisé
# -> 90% des ressources GASPILLÉES!

# Serveur physique 2 -> Red Hat Linux (Application B)
# • CPU: 15% utilisé
# • RAM: 3GB/16GB utilisé
# -> 85% des ressources GASPILLÉES!

# Serveur physique 3 -> Ubuntu (Base de données)
# • CPU: 20% utilisé
# -> 80% gaspillé!

# PROBLÈMES:
# [X] Coût ÉNORME (10 serveurs = 10 machines physiques à 3000€ chacune = 30,000€)
# [X] Espace datacenter (10 racks, climatisation pour 10 machines)
# [X] Électricité (10 machines × 500W = 5000W = facture énorme)
# [X] Maintenance (10 pannes potentielles, 10 fois plus de travail)
# [X] Ressources gaspillées (90% CPU/RAM inutilisés)
# [X] Temps déploiement (1 nouvelle appli = acheter machine = semaines)


# SOLUTION: VIRTUALISATION
# ═════════════════════════

# 1 SEUL serveur physique puissant:
# CPU: 32 cores, RAM: 128GB, Stockage: 2TB

# Sur cette machine, on installe un HYPERVISEUR (VMware ESXi, Hyper-V, KVM, virtualbox...)
# 
# Hyperviseur
# ├── VM1: Windows Server 2019 (4 cores, 8GB RAM) -> Application A
# ├── VM2: Ubuntu 22.04 (2 cores, 4GB RAM) -> Application B
# ├── VM3: CentOS 8 (4 cores, 16GB RAM) -> Base de données
# ├── VM4: Debian 11 (2 cores, 4GB RAM) -> Web server
# ├── VM5: Ubuntu 20.04 (2 cores, 4GB RAM) -> Mail server
# └── ... jusqu'à 10-20 VMs!

# AVANTAGES:
# [OK] Coût réduit (1 serveur au lieu de 10 = économie 25,000€)
# [OK] Espace (1 rack au lieu de 10)
# [OK] Électricité (1 machine = 600W au lieu de 5000W = économie énorme)
# [OK] Utilisation optimale (90% des ressources utilisées au lieu de 10%)
# [OK] Déploiement rapide (nouvelle VM en 5 minutes au lieu de semaines)
# [OK] Snapshots (photo de l'état -> rollback en cas d'erreur)
# [OK] Migration facile (déplacer VM d'un serveur à un autre sans downtime)
# [OK] Isolation (si VM1 plante, VM2-5 continuent de fonctionner)


# ANALOGIE: Immeuble vs Maisons individuelles
# ════════════════════════════════════════════

# SANS virtualisation (Maisons individuelles):
# ─────────────────────────────────────────────
# Vous avez 10 applications -> Achetez 10 terrains -> Construisez 10 maisons
# • Terrain 1: Maison pour Application A (90% espace vide)
# • Terrain 2: Maison pour Application B (90% espace vide)
# • Terrain 3: Maison pour Application C (90% espace vide)
# -> COÛT ÉNORME (10 terrains × 50,000€ = 500,000€)
# -> GASPILLAGE (chaque maison utilise 1 pièce sur 10)

# AVEC virtualisation (Immeuble):
# ───────────────────────────────
# 1 SEUL grand terrain -> 1 SEUL immeuble -> 10 appartements
# • Appartement 1: Application A (taille adaptée)
# • Appartement 2: Application B (taille adaptée)
# • Appartement 3: Application C (taille adaptée)
# -> ÉCONOMIE (1 terrain = 100,000€ au lieu de 500,000€)
# -> EFFICACE (chaque appartement dimensionné exactement selon besoins)
# -> FLEXIBLE (ajouter appartement = ajouter étage, pas acheter terrain)

# L'immeuble = Serveur physique
# Les appartements = Machines virtuelles (VMs)
# Le syndic = Hyperviseur (gère ressources entre appartements)


# QU'EST-CE qu'une Machine Virtuelle (VM)?
# ═════════════════════════════════════════

# Machine Virtuelle = Ordinateur LOGICIEL fonctionnant dans un ordinateur MATÉRIEL

# Ordinateur physique (Hôte):
# ┌──────────────────────────────────────────────────────┐
# │ Hardware physique:                                   │
# │ • CPU: Intel Core i7 (8 cores)                      │
# │ • RAM: 32GB                                         │
# │ • SSD: 512GB                                        │
# │ • Carte réseau: Ethernet                            │
# │                                                      │
# │ Système d'exploitation hôte: Ubuntu 22.04           │
# │                                                      │
# │ VMware Workstation (Hyperviseur)                    │
# │ ┌────────────────────────────────────────────────┐ │
# │ │ VM 1: Windows 11                               │ │
# │ │ • vCPU: 2 cores (virtuels)                     │ │
# │ │ • vRAM: 4GB                                    │ │
# │ │ • vDisk: 60GB (fichier .vmdk)                  │ │
# │ │ • vNIC: Carte réseau virtuelle                 │ │
# │ │                                                 │ │
# │ │ Applications: Office, Chrome, etc.             │ │
# │ └────────────────────────────────────────────────┘ │
# │                                                      │
# │ ┌────────────────────────────────────────────────┐ │
# │ │ VM 2: Ubuntu Server 20.04                      │ │
# │ │ • vCPU: 2 cores                                │ │
# │ │ • vRAM: 4GB                                    │ │
# │ │ • vDisk: 40GB                                  │ │
# │ │                                                 │ │
# │ │ Applications: Apache, MySQL, PHP               │ │
# │ └────────────────────────────────────────────────┘ │
# └──────────────────────────────────────────────────────┘

# Chaque VM pense qu'elle est un ordinateur RÉEL avec son propre:
# • Processeur (vCPU = CPU virtuel)
# • Mémoire vive (vRAM)
# • Disque dur (fichier .vmdk sur disque de l'hôte)
# • Carte réseau (vNIC virtuelle)
# • BIOS/UEFI virtuel


# ═══ 1.2 TYPES DE VIRTUALISATION ═══

# 1. VIRTUALISATION COMPLÈTE (Full Virtualization)
# ═════════════════════════════════════════════════

# L'hyperviseur émule TOUT le hardware
# VM n'a AUCUNE IDÉE qu'elle est virtuelle
# 
# Exemples:
# • VMware Workstation/ESXi
# • VirtualBox
# • Hyper-V
# 
# Avantages:
# [OK] VM pense être sur hardware réel
# [OK] N'importe quel OS sans modification
# [OK] Isolation complète
# 
# Inconvénients:
# [X] Overhead (traduction instructions)
# [X] Légèrement moins performant


# 2. PARAVIRTUALISATION
# ═════════════════════

# VM SAIT qu'elle est virtuelle
# OS modifié pour communiquer directement avec hyperviseur
# 
# Exemples:
# • Xen
# • VMware avec VMware Tools (hybride)
# 
# Avantages:
# [OK] Plus performant (pas de traduction)
# [OK] Moins d'overhead
# 
# Inconvénients:
# [X] OS doit être modifié
# [X] Pas de Windows (fermé)


# 3. VIRTUALISATION CONTENEURS
# ════════════════════════════

# Pas de VM complète, juste isolation processus
# Partagent noyau de l'OS hôte
# 
# Exemples:
# • Docker
# • LXC/LXD
# • Kubernetes (orchestration)
# 
# Avantages:
# [OK] Très léger (Mo vs GB)
# [OK] Démarrage instantané (secondes vs minutes)
# [OK] Densité élevée (100s conteneurs sur 1 machine)
# 
# Inconvénients:
# [X] Même OS que l'hôte (Linux conteneurs = Linux hôte)
# [X] Isolation moins forte


# COMPARAISON:
# ═══════════

# ┌──────────────────────────────────────────────────────────────┐
# │ Critère              │ VMs         │ Conteneurs              │
# ├──────────────────────┼─────────────┼─────────────────────────┤
# │ Taille               │ GB (1-20GB) │ MB (10-500MB)           │
# │ Démarrage            │ Minutes     │ Secondes                │
# │ Isolation            │ Forte       │ Moyenne                 │
# │ OS différents        │ Oui         │ Non (même noyau)        │
# │ Performance          │ 95-98%      │ 99-100% (quasi natif)   │
# │ Gestion mémoire      │ Fixe        │ Dynamique               │
# │ Use case             │ Serveurs    │ Microservices, Dev      │
# └──────────────────────────────────────────────────────────────┘


# ═══ 1.3 HYPERVISEURS: TYPE 1 vs TYPE 2 ═══

# HYPERVISEUR TYPE 1 (Bare-Metal)
# ════════════════════════════════

# Installé DIRECTEMENT sur le hardware
# Pas d'OS hôte intermédiaire

# Architecture:
# ┌─────────────────────────────────────┐
# │ VM1  │ VM2  │ VM3  │ VM4  │ VM5    │ <- Machines virtuelles
# ├─────────────────────────────────────┤
# │ HYPERVISEUR (ESXi, Hyper-V, Xen)   │ <- Hyperviseur = OS minimal
# ├─────────────────────────────────────┤
# │ HARDWARE PHYSIQUE (CPU, RAM, SSD)  │ <- Serveur bare-metal
# └─────────────────────────────────────┘

# Exemples:
# • VMware ESXi (vSphere)
# • Microsoft Hyper-V Server
# • Citrix XenServer
# • KVM (avec kernel Linux minimal)
# • Proxmox VE

# Avantages:
# [OK] Performance maximale (accès direct hardware)
# [OK] Stabilité (pas d'OS hôte à crasher)
# [OK] Sécurité renforcée
# [OK] Gestion centralisée
# 
# Inconvénients:
# [X] Machine dédiée (pas d'autre utilisation)
# [X] Plus complexe à installer
# [X] Souvent payant (ESXi gratuit mais limité)

# QUAND utiliser Type 1?
# • Environnement de production
# • Datacenters
# • Cloud providers (AWS, Azure, GCP utilisent Type 1)
# • Haute disponibilité requise


# HYPERVISEUR TYPE 2 (Hosted)
# ════════════════════════════

# Installé DANS un OS hôte existant
# Comme une application normale

# Architecture:
# ┌──────────────────────────────────────────┐
# │ VM1: Ubuntu │ VM2: Windows │ VM3: CentOS │ <- Machines virtuelles
# ├──────────────────────────────────────────┤
# │ VMware Workstation / VirtualBox         │ <- Application hyperviseur
# ├──────────────────────────────────────────┤
# │ OS HÔTE: Windows 11 / Ubuntu / macOS    │ <- Système d'exploitation
# ├──────────────────────────────────────────┤
# │ HARDWARE PHYSIQUE (Laptop, Desktop)     │ <- Ordinateur personnel
# └──────────────────────────────────────────┘

# Exemples:
# • VMware Workstation Pro/Player
# • Oracle VirtualBox
# • Parallels Desktop (macOS)
# • QEMU

# Avantages:
# [OK] Facile à installer (comme n'importe quelle appli)
# [OK] Utiliser PC normalement + VMs
# [OK] Interface graphique conviviale
# [OK] Parfait pour dev/test/formation
# 
# Inconvénients:
# [X] Performance réduite (overhead OS hôte)
# [X] Si OS hôte crash -> toutes VMs crashent
# [X] Moins adapté production

# QUAND utiliser Type 2?
# • Développement logiciel
# • Tests
# • Formation/Apprentissage
# • Labs personnels
# • Desktop virtualization


# ANALOGIE: Restaurant
# ═══════════════════

# HYPERVISEUR TYPE 1 (Bare-Metal) = Restaurant dédié:
# ────────────────────────────────────────────────────
# • Bâtiment entier = restaurant uniquement
# • Efficace: Cuisine optimisée pour service
# • Performance max: Tout dédié à servir clients
# • Professionnel: Équipe dédiée
# -> Datacenter, production

# HYPERVISEUR TYPE 2 (Hosted) = Food truck:
# ──────────────────────────────────────────
# • Véhicule multifonction: Transport + cuisine
# • Flexible: Déplace facilement
# • Moins efficace: Espace limité
# • Casual: Une personne gère tout
# -> Desktop, développement, tests


# ═══ 1.4 VMWARE: PRODUITS ET VERSIONS ═══

# FAMILLE VMWARE COMPLÈTE:
# ═══════════════════════

# 1. VMware Workstation Pro (Type 2)
# ──────────────────────────────────
# • Pour: Windows, Linux desktop
# • Prix: ~300€ (licence perpétuelle)
# • Usage: Dev, test, formation
# • Features: Toutes (snapshots, clones, réseau avancé)

# 2. VMware Workstation Player (Type 2)
# ─────────────────────────────────────
# • Pour: Windows, Linux desktop
# • Prix: GRATUIT (usage personnel)
# • Usage: Utilisation basique
# • Limitations: Pas de snapshots multiples, pas de clones liés

# 3. VMware Fusion (Type 2)
# ─────────────────────────
# • Pour: macOS uniquement
# • Prix: ~100€
# • Usage: Virtualiser Windows/Linux sur Mac
# • Équivalent: Workstation pour Mac

# 4. VMware ESXi (Type 1)
# ──────────────────────
# • Pour: Serveurs bare-metal
# • Prix: Gratuit (version limitée) ou licence payante
# • Usage: Production, datacenters
# • Features: HA, vMotion, DRS (versions payantes)

# 5. VMware vSphere (Suite)
# ─────────────────────────
# • ESXi + vCenter Server (gestion centralisée)
# • Prix: Très cher (milliers €)
# • Usage: Entreprises, clouds privés
# • Features: Clustering, live migration, load balancing

# 6. VMware Horizon (VDI)
# ──────────────────────
# • Virtual Desktop Infrastructure
# • Usage: Bureaux virtuels (VDI)
# • Exemple: 1000 employés, 1000 desktops virtuels centralisés


# QUELLE VERSION CHOISIR?
# ═══════════════════════

# [OK] VMware Workstation Player (GRATUIT):
# • Étudiant apprenant virtualisation
# • Usage personnel
# • Tester Linux sans dual-boot
# • Labs simples

# [OK] VMware Workstation Pro:
# • Développeur professionnel
# • Administrateur système
# • Besoin snapshots avancés
# • Tests complexes (multiple VMs réseau)

# [OK] VMware ESXi:
# • Lab serveur à la maison (homelab)
# • Environnement production
# • Apprendre administration Type 1

# [OK] VirtualBox (Alternative gratuite):
# • Open source
# • Même usage que Workstation Player
# • Cross-platform (Windows, Linux, Mac, Solaris)


# DIFFÉRENCES WORKSTATION PRO vs PLAYER:
# ══════════════════════════════════════

# ┌──────────────────────────────────────────────────────────┐
# │ Feature                    │ Player │ Pro               │
# ├────────────────────────────┼────────┼───────────────────┤
# │ Créer VMs                  │ [OK]      │ [OK]                 │
# │ Lancer VMs                 │ [OK]      │ [OK]                 │
# │ Snapshots simples          │ [OK]      │ [OK]                 │
# │ Snapshots multiples        │ [X]      │ [OK] (arbre)         │
# │ Clones liés                │ [X]      │ [OK] (économie disk) │
# │ Clones complets            │ [X]      │ [OK]                 │
# │ Réseau avancé              │ Basique│ [OK] (tous modes)    │
# │ Multiple VMs simultanées   │ [OK]      │ [OK]                 │
# │ Partage dossiers           │ [OK]      │ [OK]                 │
# │ USB 3.0                    │ [X]      │ [OK]                 │
# │ Encryption VM              │ [X]      │ [OK]                 │
# │ Remote connections (vSphere)│ [X]     │ [OK]                 │
# │ Support commercial         │ [X]      │ [OK]                 │
# │ Prix                       │ GRATUIT│ ~300€             │
# └──────────────────────────────────────────────────────────┘

# RECOMMANDATION POUR CE GUIDE:
# • Workstation Player (gratuit) = Parfait pour apprendre
# • Si besoin snapshots avancés -> Passer à Pro
# • VirtualBox = Alternative gratuite équivalente


# ═══════════════════════════════════════════════════════════════════
# PARTIE 2: INSTALLATION DE VMWARE WORKSTATION
# ═══════════════════════════════════════════════════════════════════


# ═══ 2.1 PRÉREQUIS SYSTÈME ═══

# CONFIGURATION MINIMALE:
# ══════════════════════

# CPU:
# • 64-bit x86 Intel/AMD
# • Support virtualisation (Intel VT-x / AMD-V)
#   -> OBLIGATOIRE et doit être ACTIVÉ dans BIOS/UEFI
# 
# RAM:
# • Minimum: 4GB (mais insuffisant!)
# • Recommandé: 8GB (confortable pour 1-2 VMs)
# • Idéal: 16GB+ (plusieurs VMs simultanées)
# 
# Calcul RAM:
# OS hôte (Ubuntu): 2GB
# VM 1 (Windows 11): 4GB
# VM 2 (Ubuntu Server): 2GB
# -> Total: 8GB minimum
# 
# Stockage:
# • Minimum: 50GB libre
# • Recommandé: 100GB+
# • Idéal: SSD (performance 5-10x meilleure que HDD)
# 
# Calcul Stockage:
# VMware Workstation: 500MB
# VM 1 (Windows 11): 40-60GB
# VM 2 (Ubuntu Desktop): 20-25GB
# VM 3 (Ubuntu Server): 10-15GB
# Snapshots: 10-30GB
# -> 100GB minimum


# CONFIGURATION RECOMMANDÉE POUR ÉTUDIANT:
# ════════════════════════════════════════

# CPU: Intel Core i5/i7 ou AMD Ryzen 5/7 (4 cores+)
# RAM: 16GB
# Stockage: 256GB SSD
# 
# Permet:
# • 2-3 VMs simultanées confortablement
# • Snapshots multiples
# • Performance fluide


# CONFIGURATION IDÉALE POUR ADMIN:
# ════════════════════════════════

# CPU: Intel Core i7/i9 ou AMD Ryzen 7/9 (8 cores+)
# RAM: 32GB+
# Stockage: 512GB+ NVMe SSD
# 
# Permet:
# • 5-10 VMs simultanées
# • Labs réseau complexes
# • Environnements clustering


# VÉRIFIER SUPPORT VIRTUALISATION:
# ════════════════════════════════

# Sur Linux (Ubuntu):
# ───────────────────

# Méthode 1: Via /proc/cpuinfo
grep -E 'vmx|svm' /proc/cpuinfo

# Si output:
# flags : ... vmx ... (Intel VT-x)
# flags : ... svm ... (AMD-V)
# -> Virtualisation supportée!
# 
# Si pas d'output:
# -> CPU ne supporte PAS virtualisation (rare sur CPU récents)
# -> OU désactivée dans BIOS (plus probable)

# Méthode 2: Via cpu-checker
sudo apt install cpu-checker
kvm-ok

# Output espéré:
# INFO: /dev/kvm exists
# KVM acceleration can be used
# -> Virtualisation activée et fonctionnelle!

# Si erreur:
# INFO: Your CPU does not support KVM extensions
# -> Activer dans BIOS


# ACTIVER VIRTUALISATION DANS BIOS/UEFI:
# ══════════════════════════════════════

# COMMENT accéder BIOS/UEFI:
# ──────────────────────────

# Au démarrage PC, appuyer sur:
# • Dell: F2 ou F12
# • HP: F10 ou Esc
# • Lenovo: F1 ou F2
# • Asus: F2 ou Del
# • MSI: Del
# • Général: Del, F2, F10, F12, Esc

# Dans BIOS/UEFI:
# ──────────────

# Intel (VT-x):
# 1. Aller dans: Advanced -> CPU Configuration
# 2. Chercher: Intel Virtualization Technology (VT-x)
# 3. Activer: Enabled
# 4. Sauvegarder: F10 -> Yes

# AMD (AMD-V / SVM):
# 1. Aller dans: Advanced -> CPU Configuration
# 2. Chercher: SVM Mode ou AMD-V
# 3. Activer: Enabled
# 4. Sauvegarder: F10 -> Yes

# IMPORTANT:
# • Secure Boot peut causer problèmes -> Désactiver si erreurs
# • Hyper-V (Windows) conflit avec VMware -> Désactiver si Windows


# ═══ 2.2 TÉLÉCHARGER VMWARE WORKSTATION ═══

# WORKSTATION PLAYER (GRATUIT):
# ═════════════════════════════

# Site officiel:
# https://www.vmware.com/products/workstation-player.html

# Versions disponibles:
# • Windows: VMware-player-17.x.x-xxxxxx.exe
# • Linux: VMware-Player-17.x.x-xxxxxx.x86_64.bundle

# Numéro version actuelle (décembre 2024): 17.5.x

# Note: VMware Workstation 17 Player est maintenant GRATUIT
# pour usage personnel ET commercial depuis Broadcom acquisition


# WORKSTATION PRO (PAYANT):
# ═════════════════════════

# Site: https://www.vmware.com/products/workstation-pro.html

# Prix: ~300€ licence perpétuelle
# Ou essai gratuit 30 jours


# ALTERNATIVE: VirtualBox (GRATUIT & OPEN SOURCE):
# ════════════════════════════════════════════════

# Site: https://www.virtualbox.org/

# Avantages:
# [OK] 100% gratuit
# [OK] Open source
# [OK] Même features principales que VMware Player
# [OK] Extension Pack gratuit
# 
# Inconvénients:
# [X] Légèrement moins performant
# [X] Support 3D moins bon


# ═══ 2.3 INSTALLATION SUR UBUNTU ═══

# MÉTHODE 1: Installation VMware Workstation Player
# ═════════════════════════════════════════════════

# Étape 1: Télécharger le fichier .bundle
# ────────────────────────────────────────

cd ~/Downloads
# Télécharger depuis site VMware
# Fichier: VMware-Player-17.5.x-xxxxxx.x86_64.bundle


# Étape 2: Rendre exécutable
# ──────────────────────────

chmod +x VMware-Player-17.5.x-xxxxxx.x86_64.bundle


# Étape 3: Installer les dépendances
# ───────────────────────────────────

sudo apt update
sudo apt install build-essential linux-headers-$(uname -r)

# Explication:
# • build-essential: Compilateurs (gcc, make) pour modules kernel
# • linux-headers: Headers kernel pour compiler modules VMware


# Étape 4: Lancer l'installeur
# ─────────────────────────────

sudo ./VMware-Player-17.5.x-xxxxxx.x86_64.bundle

# GUI s'ouvre:
# 1. "Welcome to VMware Workstation Player" -> Next
# 2. Accept EULA -> Next
# 3. Installation path: /usr/lib/vmware (laisser défaut) -> Next
# 4. "Help improve VMware" -> Décocher si vie privée -> Next
# 5. "Shortcuts" -> Cocher (optionnel) -> Next
# 6. Install -> Attendez (2-5 minutes)
# 7. Finish


# Étape 5: Compiler les modules kernel
# ─────────────────────────────────────

# Au premier lancement:
vmware-player

# Si demande de compiler modules:
# -> "Install" automatiquement

# Ou manuellement:
sudo vmware-modconfig --console --install-all

# Modules compilés:
# • vmmon: VMware Monitor (hyperviseur)
# • vmnet: VMware Network (cartes réseau virtuelles)


# ERREURS COURANTES ET SOLUTIONS:
# ═══════════════════════════════

# ERREUR 1: "Kernel headers not found"
# ────────────────────────────────────

# Cause: Headers kernel manquants
# Solution:
sudo apt install linux-headers-$(uname -r)


# ERREUR 2: "Unable to install all modules"
# ─────────────────────────────────────────

# Cause: Secure Boot activé
# Solution: Désactiver Secure Boot dans BIOS
# Ou signer modules (complexe):
# https://kb.vmware.com/s/article/2146460


# ERREUR 3: "vmmon/vmnet failed to load"
# ──────────────────────────────────────

# Vérifier modules chargés:
lsmod | grep vm

# Si vide, charger manuellement:
sudo modprobe vmmon
sudo modprobe vmnet

# Si erreur "Operation not permitted":
# -> Secure Boot problème -> Désactiver


# ERREUR 4: Conflict avec KVM
# ───────────────────────────

# VMware et KVM peuvent conflictuer
# Décharger modules KVM si problème:
sudo modprobe -r kvm_intel  # Ou kvm_amd
sudo modprobe -r kvm


# MÉTHODE 2: Installation VirtualBox (Alternative)
# ════════════════════════════════════════════════

# Plus simple sur Ubuntu:

# Méthode A: Via APT (Ubuntu repos)
sudo apt update
sudo apt install virtualbox virtualbox-ext-pack

# Méthode B: Via site officiel (dernière version)
# 1. Ajouter repo VirtualBox
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
echo "deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list

# 2. Installer
sudo apt update
sudo apt install virtualbox-7.0

# 3. Extension Pack (USB 3.0, RDP, etc.)
# Télécharger depuis:
# https://www.virtualbox.org/wiki/Downloads
# VBoxGuestAdditions_7.0.x.iso

# Installer:
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-7.0.x.vbox-extpack


# ═══ 2.4 VÉRIFIER INSTALLATION ═══

# LANCER VMware Player:
# ════════════════════

# Depuis menu applications:
# -> Chercher "VMware Workstation Player"

# Ou depuis terminal:
vmplayer
# Ou:
vmware-player


# PREMIÈRE FENÊTRE:
# ════════════════

# "Welcome to VMware Workstation 17 Player"
# 
# Licence:
# • Use for free for non-commercial use
# • Enter license key (si Pro)
# 
# -> Cliquer "Continue" (usage gratuit)


# VÉRIFIER VERSION:
# ════════════════

vmware-player --version
# Output: VMware Player 17.5.0 build-22583795


# VÉRIFIER MODULES KERNEL:
# ════════════════════════

lsmod | grep vm

# Output attendu:
# vmmon                 135168  0
# vmnet                  49152  13
# 
# Si présents -> Installation OK!


# INTERFACE VMWARE PLAYER:
# ═══════════════════════

# Au lancement, fenêtre principale:
# 
# ┌─────────────────────────────────────────────────┐
# │ VMware Workstation 17 Player                    │
# ├─────────────────────────────────────────────────┤
# │ Home                                            │
# │                                                  │
# │ [Create a New Virtual Machine]                  │
# │ [Open a Virtual Machine]                        │
# │                                                  │
# │ Recent Virtual Machines:                        │
# │ (vide au début)                                 │
# │                                                  │
# │ Help                                            │
# └─────────────────────────────────────────────────┘


# ═══════════════════════════════════════════════════════════════════
# PARTIE 3: CRÉER PREMIÈRE MACHINE VIRTUELLE
# ═══════════════════════════════════════════════════════════════════


# ═══ 3.1 PRÉPARER L'ISO ═══

# QU'EST-CE qu'un fichier ISO?
# ════════════════════════════

# ISO = Image disque (copie exacte d'un CD/DVD)
# 
# ANALOGIE: Photo d'un livre
# ─────────────────────────
# • Livre physique = CD/DVD installation
# • Photo du livre = Fichier ISO
# • Vous pouvez imprimer photo -> Recréer livre
# • VM "lit" ISO comme si c'était CD physique dans lecteur

# ISO contient:
# • Fichiers installation OS
# • Bootloader (démarrage)
# • Tout le nécessaire pour installer

# Format: fichier .iso (ex: ubuntu-22.04.3-desktop-amd64.iso)


# OÙ TÉLÉCHARGER ISOs?
# ═══════════════════

# LINUX (Tous gratuits):
# ─────────────────────

# Ubuntu Desktop:
# https://ubuntu.com/download/desktop
# • ubuntu-22.04.3-desktop-amd64.iso (3.6GB)
# • LTS (Long Term Support) = Support 5 ans
# • Recommandé: Version LTS pour stabilité

# Ubuntu Server:
# https://ubuntu.com/download/server
# • ubuntu-22.04.3-live-server-amd64.iso (2GB)
# • Pas d'interface graphique (CLI uniquement)
# • Parfait pour serveurs

# Debian:
# https://www.debian.org/distrib/
# • debian-12.x.x-amd64-netinst.iso (400MB)

# CentOS Stream:
# https://www.centos.org/download/
# • CentOS-Stream-9-latest-x86_64-dvd1.iso (9GB)

# Fedora:
# https://getfedora.org/
# • Fedora-Workstation-Live-x86_64-39.iso (2GB)

# Kali Linux (Sécurité/Pentesting):
# https://www.kali.org/get-kali/
# • kali-linux-2024.x-installer-amd64.iso (3.5GB)


# WINDOWS (Payant mais trial possible):
# ─────────────────────────────────────

# Windows 11:
# https://www.microsoft.com/software-download/windows11
# • Télécharger ISO (6GB)
# • Trial 90 jours sans clé (features limitées après)

# Windows 10:
# https://www.microsoft.com/software-download/windows10
# • windows-10-xxx.iso (5GB)


# TÉLÉCHARGER UBUNTU 22.04 (EXEMPLE):
# ═══════════════════════════════════

# Méthode 1: Navigateur
# ─────────────────────
# 1. Aller sur: https://ubuntu.com/download/desktop
# 2. Cliquer "Download Ubuntu 22.04.3 LTS"
# 3. Attendre téléchargement (3.6GB)
# 4. ISO dans: ~/Downloads/ubuntu-22.04.3-desktop-amd64.iso

# Méthode 2: wget (Terminal)
# ──────────────────────────
cd ~/Downloads
wget https://releases.ubuntu.com/22.04/ubuntu-22.04.3-desktop-amd64.iso

# Barre progression:
# ubuntu-22.04.3-desktop-amd64.iso  45%[======>    ]  1.6G  5.2MB/s  eta 6m 23s


# VÉRIFIER INTÉGRITÉ ISO (Recommandé):
# ════════════════════════════════════

# Pourquoi?
# • ISO corrompu pendant téléchargement -> Installation échouera
# • Sécurité: Vérifier que c'est l'ISO officiel (pas modifié)

# Télécharger checksum SHA256:
wget https://releases.ubuntu.com/22.04/SHA256SUMS

# Vérifier:
sha256sum -c SHA256SUMS 2>&1 | grep ubuntu-22.04.3-desktop-amd64.iso

# Output:
# ubuntu-22.04.3-desktop-amd64.iso: OK
# -> ISO OK!

# Si "FAILED":
# -> Re-télécharger ISO


# ORGANISER VOS ISOs:
# ══════════════════

# Créer dossier dédié:
mkdir -p ~/VMware/ISOs
mv ~/Downloads/*.iso ~/VMware/ISOs/

# Structure propre:
~/VMware/
├── ISOs/
│   ├── ubuntu-22.04.3-desktop-amd64.iso
│   ├── ubuntu-22.04.3-server-amd64.iso
│   ├── debian-12.x.x-amd64-netinst.iso
│   └── windows-11.iso
└── VMs/  (créé automatiquement par VMware)


# ═══ 3.2 ASSISTANT CRÉATION VM ═══

# CRÉER VM UBUNTU DESKTOP:
# ═══════════════════════

# Étape 1: Lancer assistant
# ─────────────────────────

# Dans VMware Player:
# -> Cliquer "Create a New Virtual Machine"

# Ou raccourci:
# Ctrl+N


# Étape 2: Installer Operating System
# ───────────────────────────────────

# 3 options présentées:
# 
# [WHITE_CIRCLE] Installer disc:
#   -> Si vous avez CD/DVD physique (rare aujourd'hui)
# 
# ⦿ Installer disc image file (iso):
#   -> CHOISIR CETTE OPTION
#   -> Browse -> Sélectionner ubuntu-22.04.3-desktop-amd64.iso
# 
# [WHITE_CIRCLE] I will install the operating system later
#   -> Créer VM vide (installer manuellement après)

# -> Next

# VMware détecte automatiquement:
# "Ubuntu 64-bit detected"


# Étape 3: Easy Install Information
# ─────────────────────────────────

# VMware propose "Easy Install" (installation automatisée)
# 
# Full name: Jean Dupont
# Username: jean
# Password: ******** (minimum 8 caractères)
# Confirm: ********
# 
# [ATTENTION] NOTEZ LE PASSWORD! Vous en aurez besoin pour login

# -> Next


# Étape 4: Name the Virtual Machine
# ─────────────────────────────────

# Virtual machine name: Ubuntu 22.04 Desktop
# (Choisir nom descriptif)

# Location: /home/user/vmware/Ubuntu 22.04 Desktop
# (Dossier où seront stockés fichiers VM)
# 
# [OK] BON: /home/user/VMware/VMs/Ubuntu-Desktop
# [X] MAUVAIS: /home/user/Documents/VM1 (désorganisé)

# -> Next


# Étape 5: Specify Disk Capacity
# ──────────────────────────────

# Maximum disk size (GB): 40.0
# (Ubuntu recommande 25GB minimum, 40GB confortable)
# 
# IMPORTANT: Disk Type
# ⦿ Store virtual disk as a single file
#   -> 1 fichier .vmdk de 40GB
#   -> Plus simple à gérer
#   -> Légèrement plus rapide
# 
# [WHITE_CIRCLE] Split virtual disk into multiple files
#   -> Plusieurs fichiers 2GB
#   -> Utile si filesystem limite taille fichiers (FAT32 = 4GB max)
#   -> Pour disques externes

# RECOMMANDATION: Single file (sauf contrainte système)

# -> Next


# Étape 6: Ready to Create Virtual Machine
# ────────────────────────────────────────

# Récapitulatif:
# ┌───────────────────────────────────────────────┐
# │ Name: Ubuntu 22.04 Desktop                    │
# │ Location: /home/user/vmware/...               │
# │ Version: Ubuntu 64-bit                        │
# │ Operating System: Linux                       │
# │ Hard Disk: 40 GB                              │
# │ Memory: 4 GB (peut varier selon RAM totale)   │
# │ Network Adapter: NAT                          │
# │ Other devices: ...                            │
# └───────────────────────────────────────────────┘

# [ATTENTION] AVANT de cliquer Finish:
# -> Cliquer "Customize Hardware" pour ajuster ressources!


# ═══ 3.3 PERSONNALISER HARDWARE VM ═══

# FENÊTRE "Hardware" s'ouvre:
# ═══════════════════════════

# ┌────────────────────────────────────────────┐
# │ Hardware         │ Settings                │
# ├──────────────────┼─────────────────────────┤
# │ Memory           │ [████░░░░] 4096 MB      │
# │ Processors       │ 2 processor cores       │
# │ Hard Disk (SCSI) │ 40 GB                   │
# │ CD/DVD (SATA)    │ Use ISO image           │
# │ Network Adapter  │ NAT                     │
# │ USB Controller   │ Present                 │
# │ Sound Card       │ Auto detect             │
# │ Display          │ Auto detect             │
# └────────────────────────────────────────────┘


# MEMORY (RAM):
# ════════════

# Par défaut: 4GB (4096 MB)
# 
# RÈGLES D'ALLOCATION:
# ───────────────────

# Calcul sécurisé:
# RAM VM = (RAM totale - 2GB pour OS hôte) / Nombre de VMs

# Exemples:
# • PC 8GB RAM:
#   - OS hôte: 2GB
#   - 1 VM: 4-6GB
#   - 2 VMs: 3GB chacune
# 
# • PC 16GB RAM:
#   - OS hôte: 2-4GB
#   - 1 VM: 8-12GB
#   - 2 VMs: 6GB chacune
#   - 3 VMs: 4GB chacune

# RAM SELON OS INVITÉ:
# ───────────────────

# Ubuntu Desktop: 4GB (minimum 2GB)
# Windows 11: 8GB (minimum 4GB)
# Ubuntu Server: 2GB (minimum 512MB)
# Windows Server: 4-8GB
# Kali Linux: 4GB (minimum 2GB)

# [ATTENTION] NE PAS ALLOUER TOUTE LA RAM!
# Si PC a 8GB -> Allouer 6GB à VM:
# -> OS hôte swap sur disque -> TRÈS LENT
# -> Système instable

# ZONE VERTE/ROUGE dans slider:
# • Vert: Allocation sûre
# • Rouge: Dangereux (trop)


# PROCESSORS (CPU):
# ════════════════

# Par défaut: 2 cores

# Number of processors: 1
# Number of cores per processor: 2
# -> Total: 2 vCPU

# Ou:
# Number of processors: 2
# Number of cores per processor: 1
# -> Total: 2 vCPU aussi

# RECOMMANDATION:
# Garder "Number of processors: 1"
# Changer "Number of cores per processor"

# RÈGLES:
# ──────

# CPU physique 4 cores:
# • 1 VM: 2 cores (50%)
# • 2 VMs: 2 cores chacune (overcommit OK)
# 
# CPU physique 8 cores:
# • 1 VM: 4 cores
# • 2 VMs: 3-4 cores chacune

# ALLOCATION SELON OS:
# ───────────────────

# Ubuntu Desktop: 2 cores
# Windows 11: 2-4 cores
# Ubuntu Server: 1-2 cores
# Compilation Linux: 4+ cores

# [ATTENTION] Ne pas allouer TOUS les cores:
# CPU 4 cores -> Allouer 4 à VM:
# -> OS hôte figé!


# HARD DISK:
# ═════════

# Voir disque existant: 40GB

# Options (clic droit):
# • Expand: Agrandir disque (ex: 40GB -> 60GB)
# • Compact: Réduire fichier .vmdk (libérer espace)
# • Defragment: Optimiser (rarement nécessaire SSD)

# Ajouter disque supplémentaire:
# -> Add -> Hard Disk
# Utile pour:
# • Séparer données/OS
# • Tester RAID
# • Partitionnement avancé


# CD/DVD (SATA):
# ═════════════

# Use ISO image file:
# /home/user/VMware/ISOs/ubuntu-22.04.3-desktop-amd64.iso

# [x] Connect at power on
# -> ISO "inséré" au démarrage (comme CD dans lecteur)

# Après installation Ubuntu:
# -> Décocher "Connect at power on" (plus besoin ISO)


# NETWORK ADAPTER:
# ═══════════════

# 3 modes principaux:
# ⦿ NAT (Network Address Translation) [DÉFAUT]
# [WHITE_CIRCLE] Bridged
# [WHITE_CIRCLE] Host-only

# NAT (Défaut):
# ────────────
# • VM derrière routeur virtuel
# • Accès Internet via hôte
# • VM invisible depuis réseau externe
# • IP privée (ex: 192.168.253.128)
# 
# ANALOGIE: Téléphone 4G avec partage connexion
# • Laptop = VM
# • Téléphone = Hôte
# • Laptop a Internet via téléphone (NAT)
# • Laptop invisible depuis Internet

Très bien, on va **simplifier au maximum**, phrase par phrase, **sans ambiguïté** [OK_HAND_SIGN]

---

## [MOBILE] ANALOGIE NAT — Téléphone 4G (version très claire)

### [OBJECTIF] Situation réelle

Tu as :

* [MOBILE] **Un téléphone** avec Internet 4G
* [CODE] **Un laptop** connecté au téléphone en partage de connexion
---
### [SYNC] Correspondance exacte
```
• Téléphone = HÔTE
• Laptop = MACHINE VIRTUELLE (VM)
• Partage de connexion = NAT
• Internet = Réseau externe
```
---
### [MONDE] Comment Internet fonctionne
```
1⃣ Le laptop demande Internet
2⃣ Le téléphone envoie la demande à Internet
3⃣ Internet répond AU téléphone
4⃣ Le téléphone transmet la réponse au laptop
```
-> **Internet ne voit QUE le téléphone**, jamais le laptop.
---
### [GHOST] Pourquoi le laptop est invisible ?
```
• Le laptop n’a pas d’IP publique
• Il utilise l’IP du téléphone
• Internet ne sait pas qu’il existe
```
[IMPORTANT] Exactement comme une VM en **NAT** :
* La VM a une **IP privée**
* L’hôte fait le relais
* L’extérieur ne peut pas contacter la VM directement
---
### [LOGIQUE] Phrase clé à retenir
> **NAT = la VM sort sur Internet,
> mais Internet ne peut pas entrer dans la VM.**
---
### [MODULE] Résumé ultra-simple
```
NAT = "Je peux sortir, mais on ne peut pas entrer chez moi"
```
# 
# QUAND utiliser NAT:
# [OK] Usage général (90% des cas)
# [OK] Besoin Internet dans VM
# [OK] Pas besoin accès externe

# Bridged:
# ───────
# • VM directement sur réseau physique
# • Comme PC séparé
# • IP de votre routeur (ex: 192.168.1.105)
# • Visible depuis réseau
# 
ANALOGIE : PC branché directement au Wi-Fi de la maison 
• VM = Un nouveau PC 
• Routeur Wi-Fi = Réseau domestique 
• VM reçoit sa propre IP du routeur 
• Tous les appareils peuvent voir la VM

Parfait, on va rendre cette analogie **encore plus simple et sans ambiguïté**, étape par étape [OK_HAND_SIGN]

---

## [RESEAU] ANALOGIE BRIDGED — PC sur le Wi-Fi de la maison (très clair)
### [OBJECTIF] Situation réelle
Chez toi, tu as :
* [RESEAU] **Un routeur Wi-Fi (box Internet)**
* [MOBILE][CODE] Plusieurs appareils connectés (téléphones, PC…)
---
### [SYNC] Correspondance exacte
```
• Routeur Wi-Fi = RÉSEAU PHYSIQUE (maison / école / entreprise)
• VM = NOUVEAU PC
• Carte réseau VM = Carte Wi-Fi du PC
```
-> La VM est vue **comme une vraie machine**.
---
### [MONDE] Comment la VM se connecte
```
1⃣ La VM se connecte au routeur Wi-Fi
2⃣ Le routeur lui attribue une IP
   ex: 192.168.1.105
3⃣ La VM apparaît dans la liste des appareils
```
-> Exactement comme si tu avais **ajouté un nouveau PC à la maison**.
---
### [EYES] Pourquoi tout le monde voit la VM ?
```
• La VM est sur le même réseau que les autres
• Elle a sa propre IP
• Elle n’est pas cachée derrière l’hôte
```
[IMPORTANT] Contrairement à NAT, **l’hôte ne joue aucun rôle de relais**.
---
### [LOGIQUE] Phrase clé à retenir
> **Bridged = la VM est un PC réel sur le réseau.**
---
### [MODULE] Résumé en une ligne
```
Bridged = VM connectée directement au routeur
```
---
### [ATTENTION] Point important à savoir
```
• Pare-feu actif recommandé
• VM exposée comme un vrai PC
```
#
# QUAND utiliser Bridged:
# [OK] VM doit être accessible depuis réseau
# [OK] Serveur web local
# [OK] Tests réseau réalistes

# Host-only:
# ─────────
# • VM isolée avec hôte seulement
# • Pas d'Internet
# • Communication hôte <-> VM uniquement
# 
# ANALOGIE: Câble Ethernet (Carte réseau) direct PC <-> PC
# • VirtualBox / VMware crée :
#  -> une CARTE RÉSEAU VIRTUELLE sur l’hôte
#  -> une CARTE RÉSEAU VIRTUELLE dans la VM
# • Ces deux cartes sont reliées par un réseau logiciel
# • Aucun câble réel n’est utilisé
# • Cette carte est partagée entre :
#  -> l’hôte
#  -> la VM
#• Le lien est direct (pas de routeur, pas d’Internet) 
# Autrement dit
# • VM = PC 2
# • Hôte = PC 1
# • Câble Ethernet direct entre les deux
# • Aucun accès Internet
# • Personne d’autre ne voit ce réseau

Parfait [BIEN]
On va rendre cette analogie **très concrète**, **sans termes flous**, étape par étape.

---
## [PLUGIN] ANALOGIE HOST-ONLY — PC <-> PC (explication ultra claire)

### [OBJECTIF] Situation réelle
Tu as **deux PC sur une table** :
* [CODE] **PC 1**
* [CODE] **PC 2**
Tu les relies **directement** avec **un câble Ethernet**
-> **sans box, sans routeur, sans Wi-Fi**
---
### [SYNC] Correspondance exacte
```
• PC 1 = HÔTE
• PC 2 = MACHINE VIRTUELLE (VM)
• Carte réseau + câble = Carte réseau virtuelle Host-only
• Réseau privé = Host-only network
```
---
### [SYNC] Comment la communication fonctionne
```
1⃣ PC 1 envoie un message
2⃣ Le message passe dans le câble
3⃣ PC 2 reçoit le message
```
-> **Personne d’autre n’est impliqué**
---
### [MONDE] Pourquoi il n’y a PAS Internet ?
```
• Aucun routeur
• Aucune passerelle
• Aucune sortie vers Internet
```
[IMPORTANT] Le câble **relie uniquement les deux PC**, rien de plus.
---
### [GHOST] Pourquoi personne d’autre ne voit ce réseau ?
```
• Le câble ne va nulle part ailleurs
• Aucun appareil externe n’y est connecté
• Le réseau est fermé et privé
```
-> Exactement comme **Host-only** :
* La VM parle **uniquement à l’hôte**
* Le reste du réseau **n’existe pas** pour elle
---
### [LOGIQUE] Phrase clé à retenir
> **Host-only = je parle seulement avec mon hôte, et personne d’autre.**
---
### [MODULE] Résumé en une ligne
```
Host-only = câble Ethernet privé entre la VM et l’hôte
```
# 
# QUAND utiliser Host-only:
# [OK] Tests isolés (sécurité)
# [OK] Pas besoin Internet
# [OK] Lab privé

# RECOMMANDATION: Laisser NAT pour l'instant


# USB CONTROLLER:
# ══════════════

# USB compatibility:
# ⦿ USB 2.0
# [WHITE_CIRCLE] USB 3.1 (Player: pas disponible, Pro: oui)

# [x] Share Bluetooth devices with virtual machine
# -> Passer Bluetooth hôte vers VM

# [x] Show all USB input devices
# -> Clavier/souris USB disponibles dans VM


# SOUND CARD:
# ══════════

# [x] Auto detect
# -> Son fonctionne automatiquement
# 
# Décocher si:
# • VM serveur (pas besoin son)
# • Économiser ressources


# DISPLAY:
# ═══════

# Settings:
# [x] Accelerate 3D graphics
# -> Active accélération 3D (OpenGL, DirectX)
# -> Nécessaire pour: Jeux, CAO, interfaces modernes
# 
# Graphics memory: 2 GB
# -> RAM vidéo virtuelle

# Décocher 3D si:
# • VM serveur CLI uniquement
# • Problèmes graphiques


# Cliquer "Close" après ajustements


# ═══ 3.4 LANCER VM ET INSTALLER UBUNTU ═══

# DÉMARRER LA VM:
# ══════════════

# Dans VMware:
# -> Sélectionner "Ubuntu 22.04 Desktop"
# -> Cliquer "Play virtual machine"
# -> Ou: Ctrl+B

# Nouvelle fenêtre s'ouvre: Console VM


# BOOT DEPUIS ISO:
# ═══════════════

# VM démarre comme PC physique:
# 
# 1. BIOS virtuel flash rapidement
# 2. Boot depuis CD/DVD (ISO)
# 3. GRUB Bootloader Ubuntu apparaît:
# 
#    ┌───────────────────────────────────────┐
#    │ GNU GRUB version 2.06                 │
#    │                                       │
#    │ *Try or Install Ubuntu                │
#    │  Ubuntu (safe graphics)               │
#    │  OEM install (for manufacturers)      │
#    │  Boot from next volume                │
#    │  UEFI Firmware Settings               │
#    └───────────────────────────────────────┘
# 
# -> "Try or Install Ubuntu" sélectionné par défaut
# -> Appuyez Entrée (ou attend 30s auto)


# INSTALLATION UBUNTU:
# ═══════════════════

# Étape 1: Langue
# ──────────────

# Fenêtre: "Welcome"
# • Sélectionner langue: English (ou Français)
# -> Continue


# Étape 2: Keyboard layout
# ────────────────────────

# • Layout: French (ou English US)
# • Variant: French
# -> Test zone: Tapez caractères pour vérifier
# -> Continue


# Étape 3: Updates and other software
# ───────────────────────────────────

# What apps would you like to install?
# ⦿ Normal installation (recommandé)
#   -> Navigateur, LibreOffice, utilitaires, jeux
# [WHITE_CIRCLE] Minimal installation
#   -> Navigateur et utilitaires basiques seulement

# Other options:
# [x] Download updates while installing Ubuntu
#   -> Gain de temps (installer déjà à jour)
# 
# [x] Install third-party software
#   -> Codecs (MP3, H.264), drivers WiFi propriétaires
#   -> RECOMMANDÉ cocher

# -> Continue


# Étape 4: Installation type
# ──────────────────────────

# How do you want to install Ubuntu?
# ⦿ Erase disk and install Ubuntu (RECOMMANDÉ pour VM)
#   -> Utilise tout le disque virtuel (40GB)
#   -> Partitionnement automatique
# 
# [WHITE_CIRCLE] Manual partitioning (avancé)
#   -> Créer partitions custom (/boot, /, /home, swap)

# [ATTENTION] "Erase disk" = Disque VIRTUEL seulement!
# -> Pas de risque pour disque hôte

# Advanced features: (optionnel)
# [WHITE_CIRCLE] LVM (Logical Volume Manager)
# [WHITE_CIRCLE] LVM + encryption
# -> Ignorer pour l'instant

# -> Install Now

# Popup "Write changes to disk?":
# -> Continue


# Étape 5: Where are you?
# ──────────────────────

# Timezone:
# • Carte monde -> Cliquer sur pays
# • Ou rechercher: "Paris", "New York", "Tokyo"
# 
# -> Continue


# Étape 6: Who are you?
# ────────────────────

# Your name: Jean Dupont
# Your computer's name: ubuntu-vm (nom hostname)
# Pick a username: jean
# Choose a password: ******** (8+ caractères)
# Confirm your password: ********

# Login automatically: [WHITE_CIRCLE]
# Require my password to log in: ⦿ (RECOMMANDÉ)

# -> Continue


# INSTALLATION EN COURS:
# ═════════════════════

# Barre progression + slides Ubuntu:
# • Installing system
# • Copying files
# • Installing GRUB
# • Configuring system
# 
# Durée: 5-15 minutes (selon rapidité disque)


# INSTALLATION TERMINÉE:
# ═════════════════════

# "Installation Complete"
# You need to restart the computer
# -> Restart Now

# VM redémarre


# APRÈS REDÉMARRAGE:
# ═════════════════

# Message:
# "Please remove the installation medium, then press ENTER"

# VMware éjecte ISO automatiquement (dans la plupart des cas)
# -> Appuyez Entrée

# Si VM re-boot sur ISO:
# -> Player -> Removable Devices -> CD/DVD -> Disconnect
# -> Ctrl+Alt+R (reboot VM)


# PREMIER LOGIN:
# ═════════════

# Écran login Ubuntu:
# • Cliquer sur username "jean"
# • Entrer password
# -> Log in

# FÉLICITATIONS! Ubuntu installé dans VM!


# ═══ 3.5 CONFIGURATION POST-INSTALLATION ═══

# ONLINE ACCOUNTS (Optionnel):
# ════════════════════════════

# Skip ou configurer Google/Microsoft accounts
# -> Skip


# LIVEPATCH (Optionnel):
# ═════════════════════

# Canonical Livepatch: Updates sans redémarrage
# -> Skip (pas critique pour VM de test)


# HELP IMPROVE UBUNTU:
# ═══════════════════

# Send system info to Canonical?
# -> No (vie privée) ou Yes
# -> Next


# READY TO GO:
# ═══════════

# -> Done


# BUREAU UBUNTU:
# ═════════════

# Vous êtes sur le desktop Ubuntu!
# 
# ┌─────────────────────────────────────────────────┐
# │ Activities    mer. 15 jan.    System   User [BLACK_DOWN-POINTING_TRIANGLE]  │ <- Top bar
# ├─────────────────────────────────────────────────┤
# │                                                  │
# │                                                  │
# │          [Icône Installer]                      │
# │                                                  │
# │          [Icône Firefox]                        │
# │                                                  │
# │          [Icône Files]                          │
# │                                                  │
# │          [Icône Terminal]                       │
# │                                                  │
# └─────────────────────────────────────────────────┘


# MISES À JOUR INITIALES:
# ══════════════════════

# Popup "Software Updater":
# "Updated software is available"
# -> Install Now

# Ou manuellement:
# Applications -> Software Updater

# Terminal:
sudo apt update
sudo apt upgrade -y

# Durée: 5-10 minutes première fois
# Redémarrer après: sudo reboot


# ═══════════════════════════════════════════════════════════════════
# PARTIE 4: VMWARE TOOLS - INTÉGRATION HÔTE/INVITÉ
# ═══════════════════════════════════════════════════════════════════


# ═══ 4.1 QU'EST-CE QUE VMWARE TOOLS? ═══

# POURQUOI VMware Tools?
# ═════════════════════

# PROBLÈME SANS VMware Tools:
# ───────────────────────────

# Après installation Ubuntu, vous remarquez:
# 
# [X] Résolution écran fixe 800x600 ou 1024x768
#   -> Ne s'adapte pas à taille fenêtre VM
#   -> Pas plein écran correct
# 
# [X] Souris "capturée" dans VM
#   -> Cliquer dans VM -> Souris bloquée dedans
#   -> Sortir: Ctrl+Alt (Windows) ou Ctrl+Cmd (Mac)
#   -> Clic gauche/droite ne fonctionne pas bien
# 
# [X] Copier-coller entre hôte <-> VM impossible
#   -> Copier texte sur hôte -> Coller dans VM: [X] Ne marche pas
# 
# [X] Glisser-déposer fichiers impossible
#   -> Drag file depuis hôte vers VM: [X] Ne marche pas
# 
# [X] Dossiers partagés indisponibles
#   -> Accéder à dossier hôte depuis VM: [X] Impossible
# 
# [X] Performance graphique médiocre
#   -> Lent, saccadé
# 
# [X] Time synchronization désynchronisée
#   -> Heure VM différente de hôte

# -> Utilisation VM frustrante!


# SOLUTION: VMware Tools
# ═════════════════════

# Suite de drivers et utilitaires:

# 1. VMXNET3 (Network driver optimisé)
#    -> 10x plus rapide que driver générique
# 
# 2. VMSVGA (Graphics driver)
#    -> Accélération 3D
#    -> Résolution dynamique (suit taille fenêtre)
# 
# 3. VMHGFS (Host-Guest File System)
#    -> Shared folders hôte <-> VM
# 
# 4. VMware Mouse Driver
#    -> Souris fluide
#    -> Sortie automatique fenêtre VM
# 
# 5. Copy-Paste & Drag-Drop
#    -> Clipboard partagé
#    -> DnD fichiers
# 
# 6. Time Synchronization
#    -> Horloge VM sync avec hôte

# ANALOGIE: Pilotes imprimante
# ───────────────────────────
# Sans drivers: Imprimante détectée mais ne marche pas bien
# Avec drivers: Toutes features (couleur, recto-verso, etc.)
# 
# VM sans Tools: Fonctionne mais basique
# VM avec Tools: Intégration parfaite


# ═══ 4.2 INSTALLER VMWARE TOOLS SUR UBUNTU ═══

# MÉTHODE 1: open-vm-tools (RECOMMANDÉ pour Linux)
# ════════════════════════════════════════════════

# Ubuntu moderne utilise open-vm-tools
# (Version open source de VMware Tools)

# VÉRIFIER SI DÉJÀ INSTALLÉ:
# ──────────────────────────

dpkg -l | grep open-vm-tools

# Si output:
# ii  open-vm-tools  ...
# ii  open-vm-tools-desktop  ...
# -> Déjà installés!

# Si vide:
# -> Pas installés, installer


# INSTALLER open-vm-tools:
# ────────────────────────

sudo apt update
sudo apt install open-vm-tools open-vm-tools-desktop -y

# Packages:
# • open-vm-tools: Core drivers
# • open-vm-tools-desktop: Features GUI (drag-drop, copy-paste)

# Durée: 1-2 minutes

# REDÉMARRER VM:
sudo reboot


# VÉRIFIER INSTALLATION:
# ─────────────────────

# Après reboot:

# 1. Test résolution dynamique:
#    -> Redimensionner fenêtre VM
#    -> Résolution Ubuntu suit automatiquement!

# 2. Test souris:
#    -> Cliquer dans VM
#    -> Sortir souris sans Ctrl+Alt
#    -> Fluide!

# 3. Test copy-paste:
#    -> Copier texte sur hôte (Ctrl+C)
#    -> Coller dans VM (Ctrl+V)
#    -> Fonctionne!

# 4. Vérifier service:
systemctl status vmtoolsd

# Output:
# [BLACK_CIRCLE] vmtoolsd.service - Service for virtual machines hosted on VMware
#    Active: active (running)
# 
# -> Service actif!


# MÉTHODE 2: VMware Tools officiel (LEGACY)
# ═════════════════════════════════════════

# [ATTENTION] Méthode ancienne, open-vm-tools préférée

# Dans VMware Player:
# Player -> Manage -> Install VMware Tools

# Message dans VM:
# "VMware Tools installation CD mounted"

# Desktop Ubuntu:
# Icône CD "VMware Tools" apparaît

# Ouvrir:
# Files -> CD "VMware Tools"
# -> Fichier: VMwareTools-x.x.x-xxxx.tar.gz

# Extraire et installer:
cd /tmp
tar -xzf /media/$USER/VMware\ Tools/VMwareTools-*.tar.gz
cd vmware-tools-distrib
sudo ./vmware-install.pl

# Suivre wizard (accepter défauts):
# -> Appuyez Entrée à chaque question

# Durée: 2-5 minutes

# Redémarrer:
sudo reboot


# MÉTHODE 3: Installation automatique
# ═══════════════════════════════════

# Dans certains cas, VMware détecte Ubuntu et propose:
# "Easy Install detected, VMware Tools will install automatically"
# -> Rien à faire!


# FEATURES APRÈS INSTALLATION:
# ════════════════════════════

# 1. RÉSOLUTION AUTO-AJUSTABLE:
# ─────────────────────────────

# Redimensionner fenêtre VM:
# • Agrandir -> Résolution augmente
# • Réduire -> Résolution diminue
# • Plein écran (Ctrl+Alt+Enter) -> Résolution max

# Ou forcer résolution:
xrandr --output Virtual-1 --mode 1920x1080


# 2. COPY-PASTE:
# ─────────────

# Hôte -> VM:
# • Hôte: Sélectionner texte, Ctrl+C
# • VM: Ctrl+V
# -> Texte collé!

# VM -> Hôte:
# • VM: Sélectionner texte, Ctrl+C
# • Hôte: Ctrl+V
# -> Fonctionne!

# [ATTENTION] Si ne marche pas:
# VM -> Player -> Manage -> Virtual Machine Settings
# -> Options -> Guest Isolation
# [x] Enable copy and paste


# 3. DRAG & DROP FILES:
# ────────────────────

# Hôte -> VM:
# • Sélectionner fichier sur hôte
# • Glisser dans fenêtre VM
# • Déposer sur Desktop VM
# -> Fichier copié!

# VM -> Hôte:
# • Inverse fonctionne aussi

# [ATTENTION] Si ne marche pas:
# -> Options -> Guest Isolation
# [x] Enable drag and drop


# 4. TIME SYNCHRONIZATION:
# ───────────────────────

# Horloge VM synchronisée avec hôte automatiquement

# Vérifier:
timedatectl

# Output:
# System clock synchronized: yes
# NTP service: active

# Forcer sync:
sudo vmware-toolbox-cmd timesync enable


# 5. SHARED FOLDERS (voir section 5):
# ───────────────────────────────────

# Accéder à dossiers hôte depuis VM
# -> Voir PARTIE 5


# DÉSINSTALLER open-vm-tools:
# ═══════════════════════════

# Si problèmes (rare):
sudo apt remove open-vm-tools open-vm-tools-desktop
sudo apt autoremove


# ═══ 4.3 VMWARE TOOLS POUR WINDOWS ═══

# INSTALLER VMWARE TOOLS SUR WINDOWS VM:
# ══════════════════════════════════════

# Dans VMware Player:
# VM -> Install VMware Tools

# Windows VM:
# Explorateur -> Ce PC
# -> Lecteur CD: "VMware Tools" (D:)

# Double-cliquer:
# -> setup64.exe (Windows 64-bit)

# Wizard installation:
# 1. Welcome -> Next
# 2. Setup Type:
#    ⦿ Typical (recommandé)
#    -> Next
# 3. Ready to install -> Install
# 4. Installation... (2-3 minutes)
# 5. Finish

# Redémarrer Windows:
# -> Restart Now

# Après reboot:
# -> Résolution auto-ajustable
# -> Copy-paste fonctionne
# -> Drag-drop fonctionne


# VÉRIFIER VMWARE TOOLS WINDOWS:
# ══════════════════════════════

# Icône VMware Tools dans system tray:
# -> Barre tâches (en bas droite)
# -> Icône VM VMware

# Ouvrir configuration:
# -> Double-clic icône VMware Tools
# -> Ou: C:\Program Files\VMware\VMware Tools\vmtoolsd.exe

# Fenêtre "VMware Tools Properties":
# • Options: Time sync, Scripts, Devices
# • Devices: Shared folders, Clipboard
# • About: Version


# ═══════════════════════════════════════════════════════════════════
# PARTIE 5: DOSSIERS PARTAGÉS (SHARED FOLDERS)
# ═══════════════════════════════════════════════════════════════════


# ═══ 5.1 CONCEPT SHARED FOLDERS ═══

# POURQUOI les dossiers partagés?
# ═══════════════════════════════

# PROBLÈME: Transférer fichiers entre hôte <-> VM
# ─────────────────────────────────────────────

# Méthodes traditionnelles:
# 
# 1. Drag & Drop:
#    [OK] Pratique pour petits fichiers
#    [X] Copie fichier (duplique)
#    [X] Lent pour gros fichiers
#    [X] Consomme espace disque VM
# 
# 2. Réseau (SSH, FTP, Samba):
#    [OK] Fonctionne
#    [X] Configuration réseau nécessaire
#    [X] Complexe pour débutants
# 
# 3. ISO:
#    [OK] Pour installer logiciels
#    [X] Pas pour données variables

# SOLUTION: Shared Folders
# ────────────────────────

# = Dossier hôte MONTÉ dans VM comme dossier local
# 
# Hôte:          VM:
# /home/user/    ->  /mnt/hgfs/Shared/
# Shared/            (même contenu!)
# 
# Avantages:
# [OK] Accès direct (pas de copie)
# [OK] Modifications temps réel (éditer fichier hôte = visible dans VM)
# [OK] Pas de duplication (économie espace)
# [OK] Facile à configurer

# ANALOGIE: Porte dans mur
# ────────────────────────
# Sans shared folder: 2 chambres séparées
# • Passer objet = transporter (drag-drop)
# 
# Avec shared folder: Porte connecte 2 chambres
# • Passer objet = poser près porte (accessible des 2 côtés)


# ═══ 5.2 CONFIGURER SHARED FOLDER ═══

# PRÉREQUIS:
# ─────────

# • VMware Tools installé (voir PARTIE 4)
# • VM éteinte (pour configuration initiale)


# ÉTAPE 1: Créer dossier sur hôte
# ───────────────────────────────

# Sur Ubuntu hôte:
mkdir -p ~/VMware/Shared

# Mettre fichiers de test:
echo "Fichier test depuis hôte" > ~/VMware/Shared/test-hote.txt


# ÉTAPE 2: Configurer dans VMware
# ───────────────────────────────

# VM éteinte (powered off):
# -> VM -> Settings (Ctrl+D)

# Fenêtre Settings:
# -> Tab "Options"

# Dans liste gauche:
# -> Shared Folders

# Panel droite:
# Folder sharing:
# ⦿ Always enabled (recommandé)
# [WHITE_CIRCLE] Enabled until next power off
# [WHITE_CIRCLE] Disabled

# -> Choisir "Always enabled"


# ÉTAPE 3: Ajouter dossier partagé
# ────────────────────────────────

# Bouton "Add..." -> Wizard

# Page 1: Shared Folder Wizard
# -> Next

# Page 2: Host Path
# Host path: /home/user/VMware/Shared
# (Ou Browse pour naviguer)
# -> Next

# Page 3: Name
# Name: Shared (nom visible dans VM)
# (Choisir nom court sans espaces)
# -> Next

# Page 4: Attributes
# [x] Enable this share
# [x] Read-only (décocher si écriture nécessaire)
# -> Finish

# Dossier ajouté dans liste!

# -> OK (fermer Settings)


# ÉTAPE 4: Démarrer VM
# ────────────────────

# -> Play virtual machine


# ═══ 5.3 ACCÉDER SHARED FOLDER DANS VM ═══

# SUR UBUNTU VM:
# ═════════════

# MÉTHODE 1: Via /mnt/hgfs/
# ─────────────────────────

# Dossiers partagés montés dans:
# /mnt/hgfs/

# Lister:
ls /mnt/hgfs/

# Output:
# Shared/

# Accéder:
cd /mnt/hgfs/Shared
ls -la

# Output:
# test-hote.txt

# Lire fichier:
cat test-hote.txt
# Output: "Fichier test depuis hôte"

# Créer fichier depuis VM:
echo "Fichier depuis VM" > /mnt/hgfs/Shared/test-vm.txt

# -> Vérifier sur hôte:
# ~/VMware/Shared/test-vm.txt existe!


# MÉTHODE 2: Lien symbolique (pratique)
# ─────────────────────────────────────

# Créer lien dans home:
ln -s /mnt/hgfs/Shared ~/Shared

# Maintenant accès rapide:
cd ~/Shared
# Au lieu de: cd /mnt/hgfs/Shared


# MÉTHODE 3: Bookmark dans Files
# ──────────────────────────────

# Files (explorateur) -> Other Locations
# -> Computer -> mnt -> hgfs -> Shared

# Clic droit sur "Shared":
# -> Add to Bookmarks

# Maintenant: Sidebar "Shared" pour accès rapide!


# PROBLÈME: /mnt/hgfs/ vide?
# ══════════════════════════

# Si ls /mnt/hgfs/ ne montre rien:

# Solution 1: Monter manuellement
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid=1000

# Explication:
# • vmhgfs-fuse: Commande mount VMware
# • .host:/: Tous les shares
# • /mnt/hgfs: Point de montage
# • allow_other: Accès pour tous users
# • uid=1000: Ownership pour user principal

# Vérifier:
ls /mnt/hgfs/
# -> Shared/ apparaît!


# Solution 2: Mount automatique au boot
# ─────────────────────────────────────

# Ajouter à /etc/fstab:
sudo nano /etc/fstab

# Ajouter ligne:
.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,defaults 0 0

# Sauvegarder: Ctrl+O, Entrée, Ctrl+X

# Tester mount:
sudo mount -a

# Reboot pour vérifier permanence:
sudo reboot

# Après reboot:
ls /mnt/hgfs/
# -> Shared/ présent automatiquement!


# SUR WINDOWS VM:
# ═════════════

# Windows monte shared folders comme lecteurs réseau:

# Explorateur de fichiers:
# -> Ce PC
# -> Lecteurs réseau:
#    Z:\ (Shared) ou
#    \\vmware-host\Shared\

# Accès direct:
# Z:\test-hote.txt


# PERMISSIONS:
# ═══════════

# READ-ONLY:
# ─────────

# Si "Read-only" coché dans configuration:
# • VM peut LIRE fichiers
# • VM ne peut PAS écrire/modifier/supprimer

# Test:
echo "test" > /mnt/hgfs/Shared/nouveau.txt
# Erreur: Permission denied

# Usage: Partager données hôte vers VM en lecture seule


# READ-WRITE:
# ──────────

# Si "Read-only" DÉcoché:
# • VM peut lire ET écrire
# • Modifications visibles immédiatement sur hôte

# Test:
echo "test" > /mnt/hgfs/Shared/nouveau.txt
# -> Succès!

# Vérifier hôte:
cat ~/VMware/Shared/nouveau.txt
# Output: test


# ═══ 5.4 CASES D'USAGE SHARED FOLDERS ═══

# 1. DÉVELOPPEMENT:
# ════════════════

# Éditer code sur hôte (VS Code, etc.)
# Exécuter dans VM (compiler, tester)

# Hôte:
# ~/VMware/Shared/projet/
#   ├── src/
#   │   └── main.c
#   └── Makefile

# VM:
cd /mnt/hgfs/Shared/projet
make
./program
# -> Compilation dans VM, édition sur hôte!


# 2. TRANSFERT FICHIERS:
# ═════════════════════

# Télécharger ISO sur hôte
# Installer depuis VM

# Hôte télécharge:
~/VMware/Shared/ISOs/debian.iso

# VM accède:
sudo mount /mnt/hgfs/Shared/ISOs/debian.iso /mnt/cdrom


# 3. BACKUPS:
# ══════════

# Sauvegarder données VM sur hôte

# VM:
tar -czf /mnt/hgfs/Shared/backup-$(date +%Y%m%d).tar.gz /home/user/important

# Backup sur hôte:
~/VMware/Shared/backup-20250115.tar.gz


# 4. LOGS CENTRALISÉS:
# ═══════════════════

# Application VM écrit logs dans shared folder
# Analyser logs depuis hôte

# VM:
./app > /mnt/hgfs/Shared/logs/app.log 2>&1

# Hôte:
tail -f ~/VMware/Shared/logs/app.log
# -> Voir logs temps réel!


# 5. CONFIGURATION PARTAGÉE:
# ═════════════════════════

# Config files communs entre hôte/VM

# Hôte:
~/VMware/Shared/configs/
  └── app.conf

# VM:
ln -s /mnt/hgfs/Shared/configs/app.conf ~/.config/app.conf
# -> Même config dans VM et hôte!


# ═══ 5.5 PERFORMANCE SHARED FOLDERS ═══

# VITESSE:
# ═══════

# Shared folders PLUS LENT que:
# • Disque VM local (factor 2-5x plus lent)
# • Réseau Samba (parfois)

# Raison: Overhead HGFS protocol

# RECOMMANDATIONS:
# ───────────────

# [OK] BON pour:
# • Petits fichiers
# • Accès occasionnel
# • Dev/test (édition code)

# [X] ÉVITER pour:
# • Grosses bases de données
# • Compilation intensive
# • Applications I/O intensives

# ALTERNATIVE:
# Si performance critique:
# -> Copier fichiers dans VM (drag-drop)
# -> Travailler en local VM
# -> Re-copier sur hôte après


# DÉSACTIVER SHARED FOLDER:
# ═════════════════════════

# VM -> Settings -> Options -> Shared Folders
# -> Sélectionner share -> Remove
# -> OK


# ═══════════════════════════════════════════════════════════════════
# PARTIE 6: RÉSEAU VMWARE - MODES ET CONFIGURATION
# ═══════════════════════════════════════════════════════════════════


# ═══ 6.1 CONCEPTS RÉSEAU VIRTUALISATION ═══

# POURQUOI comprendre le réseau VM?
# ═════════════════════════════════

# Réseau VM = Fondamental pour:
# • Accès Internet depuis VM
# • Communication entre VMs
# • Accéder VM depuis hôte/réseau
# • Labs réseaux (routage, firewall, serveurs)

# COMPOSANTS RÉSEAU VM:
# ════════════════════

# 1. Carte réseau virtuelle (vNIC)
#    -> Émulée par VMware (Intel E1000, VMXNET3)
#    -> VM voit comme carte réseau physique
# 
# 2. Switch virtuel (vSwitch)
#    -> Connecte VMs entre elles
#    -> Comme switch physique mais logiciel
# 
# 3. DHCP virtuel
#    -> Attribue IPs aux VMs
#    -> Propre à chaque réseau virtuel
# 
# 4. NAT virtuel
#    -> Partage connexion hôte
#    -> Traduit IPs privées VM vers IP hôte


# ═══ 6.2 MODES RÉSEAU VMWARE ═══

# VMware Workstation propose 3 modes principaux:
# 1. NAT (Network Address Translation)
# 2. Bridged (Pont)
# 3. Host-only (Hôte uniquement)

# Plus modes avancés:
# 4. Custom (vSwitch custom)
# 5. LAN Segment (réseau privé VMs)


# MODE 1: NAT (DÉFAUT)
# ════════════════════

# SCHÉMA:
# ───────

# Internet
#    ^v
# [Routeur Physique] 192.168.1.1
#    ^v
# [PC Hôte] 192.168.1.100
#    ^v
# [NAT VMware] (vmnet8) 192.168.253.1
#    ^v^v^v
# [VM1] 192.168.253.128
# [VM2] 192.168.253.129
# [VM3] 192.168.253.130

# CARACTÉRISTIQUES:
# ────────────────

# IP VM: Réseau privé VMware (192.168.253.0/24 par défaut)
# Gateway: NAT VMware (192.168.253.2)
# DHCP: Oui (192.168.253.254)
# DNS: Propagé depuis hôte

# VM -> Internet: [OK] Oui (via NAT)
# VM -> Hôte: [OK] Oui
# VM -> Autres VMs NAT: [OK] Oui
# Hôte -> VM: [OK] Oui (port forwarding)
# Réseau externe -> VM: [X] Non (invisible)

# ANALOGIE: Partage connexion smartphone
# ──────────────────────────────────────
# • Smartphone (hôte) a 4G
# • Laptop (VM) connecté en WiFi hotspot
# • Laptop a Internet VIA smartphone (NAT)
# • Laptop invisible depuis Internet (derrière NAT)
# • Laptop peut ping smartphone

# QUAND utiliser NAT:
# ──────────────────
# [OK] Usage général (90% cas)
# [OK] VM besoin Internet seulement
# [OK] Pas besoin accès depuis réseau externe
# [OK] Isolation/sécurité (VM invisible)
# [OK] Réseau hôte change (WiFi café, 4G, etc.)

# Configuration dans VM:
# ─────────────────────
# VM -> Settings -> Network Adapter
# Network connection:
# ⦿ NAT: Used to share the host's IP address


# VÉRIFIER DANS VM UBUNTU NAT:
# ────────────────────────────

# IP address:
ip addr show

# Output:
# ens33: <BROADCAST,MULTICAST,UP,LOWER_UP>
#     inet 192.168.253.128/24 brd 192.168.253.255 scope global dynamic
#     -> IP privée VMware

# Route:
ip route

# Output:
# default via 192.168.253.2 dev ens33
# 192.168.253.0/24 dev ens33 proto kernel scope link src 192.168.253.128
# -> Gateway = NAT VMware

# DNS:
cat /etc/resolv.conf

# Output:
# nameserver 192.168.253.2
# -> DNS via NAT

# Test Internet:
ping -c 3 google.com

# Output:
# 64 bytes from ... time=15 ms
# -> Internet fonctionne!


# MODE 2: BRIDGED (PONT)
# ══════════════════════

# SCHÉMA:
# ───────

# Internet
#    ^v
# [Routeur Physique] 192.168.1.1 (DHCP)
#    ^v^v^v^v
# [PC Hôte] 192.168.1.100
# [VM1] 192.168.1.105
# [VM2] 192.168.1.106
# [Autres PCs] 192.168.1.x

# CARACTÉRISTIQUES:
# ────────────────

# IP VM: Réseau physique (192.168.1.x même que hôte)
# Gateway: Routeur physique (192.168.1.1)
# DHCP: Routeur physique
# DNS: Routeur physique

# VM -> Internet: [OK] Oui (direct)
# VM -> Hôte: [OK] Oui
# VM -> Autres VMs Bridge: [OK] Oui
# Hôte -> VM: [OK] Oui
# Réseau externe -> VM: [OK] Oui (comme PC physique)

# ANALOGIE: Ordinateur séparé
# ───────────────────────────
# VM = PC physique distinct sur même réseau
# • Visible par tous
# • IP du routeur
# • Accessible depuis n'importe où sur réseau

# QUAND utiliser Bridged:
# ──────────────────────
# [OK] VM doit être serveur accessible (web, SSH, etc.)
# [OK] Tests réseau réalistes
# [OK] VM comme PC physique du réseau
# [OK] Communication directe avec autres machines physiques
# [OK] PXE boot, DHCP server tests

# Configuration:
# ─────────────
# VM -> Settings -> Network Adapter
# Network connection:
# ⦿ Bridged: Connected directly to the physical network
# Bridged to: Auto / Specific adapter (eth0, wlan0)


# VÉRIFIER DANS VM UBUNTU BRIDGED:
# ────────────────────────────────

ip addr show

# Output:
# ens33: inet 192.168.1.105/24
# -> IP du réseau physique!

ip route

# Output:
# default via 192.168.1.1 dev ens33
# -> Gateway = routeur physique

# Test communication hôte:
ping 192.168.1.100  # IP hôte
# -> Fonctionne!

# Depuis hôte, ping VM:
ping 192.168.1.105
# -> Fonctionne!

# Depuis autre PC réseau:
ping 192.168.1.105
# -> Fonctionne! VM visible!


# MODE 3: HOST-ONLY
# ═════════════════

# SCHÉMA:
# ───────

# Internet
#    ^v
# [PC Hôte] 192.168.1.100
#    ^v (vmnet1) 192.168.58.1
#    ^v^v^v
# [VM1] 192.168.58.128
# [VM2] 192.168.58.129
# [VM3] 192.168.58.130
# 
# ISOLÉ D'INTERNET!

# CARACTÉRISTIQUES:
# ────────────────

# IP VM: Réseau privé VMware (192.168.58.0/24)
# Gateway: Aucun (ou vmnet1 192.168.58.1)
# DHCP: Oui (192.168.58.254)
# DNS: Peut être configuré

# VM -> Internet: [X] Non (isolé!)
# VM -> Hôte: [OK] Oui
# VM -> Autres VMs Host-only: [OK] Oui
# Hôte -> VM: [OK] Oui
# Réseau externe -> VM: [X] Non

# ANALOGIE: Réseau privé maison
# ─────────────────────────────
# • Maison isolée sans Internet
# • Devices communiquent entre eux
# • Pas de contact avec extérieur

# QUAND utiliser Host-only:
# ────────────────────────
# [OK] Tests isolés (malware, exploits)
# [OK] Lab sécurisé (pas de fuite réseau)
# [OK] Dev sans Internet
# [OK] Tests réseau interne uniquement
# [OK] Clustering local

# Configuration:
# ─────────────
# VM -> Settings -> Network Adapter
# Network connection:
# ⦿ Host-only: A private network shared with the host


# VÉRIFIER DANS VM UBUNTU HOST-ONLY:
# ──────────────────────────────────

ip addr show

# Output:
# ens33: inet 192.168.58.128/24
# -> IP réseau host-only

ip route

# Output:
# 192.168.58.0/24 dev ens33 proto kernel scope link
# -> Pas de default route (pas Internet!)

# Test Internet:
ping -c 3 google.com

# Output:
# ping: google.com: Name or service not known
# -> Pas d'accès Internet (normal!)

# Test hôte:
ping 192.168.58.1  # vmnet1 hôte
# -> Fonctionne!

# Test autres VMs host-only:
ping 192.168.58.129  # VM2
# -> Fonctionne si VM2 existe!


# TABLEAU COMPARATIF:
# ══════════════════

# ┌──────────────────────────────────────────────────────────────────┐
# │ Feature              │ NAT    │ Bridged │ Host-only             │
# ├──────────────────────┼────────┼─────────┼───────────────────────┤
# │ VM -> Internet        │ [OK]      │ [OK]       │ [X]                     │
# │ VM -> Hôte            │ [OK]      │ [OK]       │ [OK]                     │
# │ Hôte -> VM            │ [OK]*     │ [OK]       │ [OK]                     │
# │ Réseau -> VM          │ [X]      │ [OK]       │ [X]                     │
# │ VM <-> VM même mode    │ [OK]      │ [OK]       │ [OK]                     │
# │ IP VM                │ Privée │ Publique│ Privée                │
# │ DHCP VMware          │ [OK]      │ [X]       │ [OK]                     │
# │ Isolation            │ Forte  │ Aucune  │ Totale (pas Internet) │
# │ Mobilité hôte        │ [OK][OK][OK]    │ [OK]       │ [OK][OK][OK]                   │
# │ Use case principal   │ Général│ Serveur │ Lab isolé             │
# └──────────────────────────────────────────────────────────────────┘

# * Hôte -> VM en NAT: Possible avec port forwarding (voir section 6.4)


# CHOISIR MODE RÉSEAU:
# ═══════════════════

# Workflow décision:
# 
# VM besoin Internet?
# ├─ Non -> Host-only
# └─ Oui
#    └─ VM doit être accessible depuis réseau externe?
#       ├─ Oui -> Bridged
#       └─ Non -> NAT (défaut, recommandé)


# ═══ 6.3 CONFIGURATION RÉSEAU DÉTAILLÉE ═══

# CHANGER MODE RÉSEAU:
# ═══════════════════

# Méthode 1: VM éteinte
# ────────────────────

# VM -> Settings -> Hardware -> Network Adapter
# -> Choisir mode:
#    ⦿ NAT
#    ⦿ Bridged
#    ⦿ Host-only
# -> OK

# Démarrer VM


# Méthode 2: VM en cours (hot-swap)
# ─────────────────────────────────

# VM running -> VM -> Settings -> Network Adapter
# -> Changer mode
# -> OK

# Dans VM Ubuntu:
sudo systemctl restart NetworkManager
# Ou:
sudo dhclient -r  # Release IP
sudo dhclient     # Request nouvelle IP


# AJOUTER CARTE RÉSEAU (Multi-homing):
# ════════════════════════════════════

# VM peut avoir PLUSIEURS cartes réseau!
# Ex: NAT (Internet) + Host-only (Lab)

# VM éteinte:
# -> Settings -> Add -> Network Adapter -> Finish

# Configurer:
# Network Adapter 1: NAT
# Network Adapter 2: Host-only

# Démarrer VM

# Vérifier dans Ubuntu:
ip link show

# Output:
# ens33: <UP> (NAT)
# ens34: <UP> (Host-only)

# Configurer ens34:
sudo dhclient ens34

# Vérifier IPs:
ip addr show

# ens33: 192.168.253.128 (NAT)
# ens34: 192.168.58.128 (Host-only)

# Maintenant:
# • Internet via ens33 (NAT)
# • Lab réseau via ens34 (Host-only)


# USE CASE MULTI-NIC:
# ──────────────────

# Serveur web VM:
# • NIC1 (Bridged): Accessible depuis réseau (port 80)
# • NIC2 (Host-only): Admin/SSH depuis hôte uniquement (port 22)
# -> Sécurité: Web public, admin privé


# VIRTUAL NETWORK EDITOR:
# ══════════════════════

# Outil pour configurer réseaux virtuels VMware

# Ouvrir:
# Edit -> Virtual Network Editor
# Ou terminal:
sudo vmware-netcfg

# Fenêtre affiche:
# ┌─────────────────────────────────────────────────┐
# │ Name      │ Type       │ External │ DHCP       │
# ├───────────┼────────────┼──────────┼────────────┤
# │ VMnet0    │ Bridged    │ Auto     │ ─          │
# │ VMnet1    │ Host-only  │ ─        │ [OK]          │
# │ VMnet8    │ NAT        │ ─        │ [OK]          │
# └─────────────────────────────────────────────────┘


# VMNET8 (NAT) - Configuration:
# ─────────────────────────────

# Sélectionner VMnet8 -> NAT Settings

# Gateway: 192.168.253.2
# Subnet: 192.168.253.0
# Subnet mask: 255.255.255.0

# DHCP Settings:
# Range: 192.168.253.128 - 192.168.253.254

# Modifier subnet NAT:
# -> Change Settings (admin)
# -> Subnet IP: 192.168.100.0
# -> OK

# VMs NAT auront IPs: 192.168.100.x maintenant


# VMNET1 (Host-only) - Configuration:
# ───────────────────────────────────

# Sélectionner VMnet1

# Subnet: 192.168.58.0
# Subnet mask: 255.255.255.0

# DHCP Settings:
# [x] Use local DHCP service
# Range: 192.168.58.128 - 192.168.58.254

# Host adapter vmnet1:
# IP: 192.168.58.1


# CRÉER RÉSEAU CUSTOM:
# ═══════════════════

# Virtual Network Editor -> Add Network

# Nouveau: VMnet2

# Configurer:
# Type: Host-only
# Subnet: 10.0.0.0
# Mask: 255.255.255.0

# DHCP: Enabled
# Range: 10.0.0.100 - 10.0.0.200

# -> Apply

# Maintenant dans VM Settings:
# Network Adapter -> Custom: VMnet2
# -> VMs sur réseau 10.0.0.0/24


# ═══ 6.4 PORT FORWARDING (NAT) ═══

# POURQUOI Port Forwarding?
# ═════════════════════════

# PROBLÈME NAT:
# ────────────

# VM en NAT:
# • A Internet [OK]
# • Inaccessible depuis réseau externe [X]
# 
# Scénario: VM serveur web (port 80)
# Hôte: 192.168.1.100
# VM NAT: 192.168.253.128
# 
# Depuis autre PC réseau (192.168.1.50):
# curl http://192.168.253.128:80
# -> [X] Timeout (VM NAT invisible!)

# SOLUTION: Port Forwarding
# ─────────────────────────

# Rediriger port hôte -> VM
# 
# Config:
# Hôte port 8080 -> VM 192.168.253.128 port 80
# 
# Maintenant:
# curl http://192.168.1.100:8080
# -> [OK] Redirigé vers VM:80!


# CONFIGURER PORT FORWARDING:
# ═══════════════════════════

# Méthode 1: Virtual Network Editor
# ─────────────────────────────────

# Edit -> Virtual Network Editor
# -> VMnet8 (NAT) -> NAT Settings -> Port Forwarding

# Add:
# Host port: 8080
# Type: TCP
# Virtual machine IP: 192.168.253.128
# Virtual machine port: 80
# Description: Web server

# -> OK -> Apply

# Test:
# Autre PC: curl http://192.168.1.100:8080
# -> Accède à web server VM!


# Méthode 2: iptables (Linux hôte)
# ────────────────────────────────

# Règle iptables pour forwarding:
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.253.128:80
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

# Permanent (Ubuntu):
sudo apt install iptables-persistent
sudo netfilter-persistent save


# EXEMPLES PORT FORWARDING:
# ═════════════════════════

# SSH:
# ───
# Hôte:2222 -> VM:22
# ssh user@localhost -p 2222
# -> Connecte à SSH VM!

# MySQL:
# ─────
# Hôte:3306 -> VM:3306
# mysql -h localhost -P 3306
# -> Accède BDD VM!

# Multiple forwards:
# ─────────────────
# Hôte:8080 -> VM1:80 (Web)
# Hôte:8081 -> VM2:80 (Web)
# Hôte:2222 -> VM1:22 (SSH)
# Hôte:2223 -> VM2:22 (SSH)


# ═══ 6.5 CONFIGURATION IP STATIQUE ═══

# POURQUOI IP statique?
# ════════════════════

# Par défaut: DHCP -> IP change au reboot
# • VM redémarre -> IP différente
# • Port forwarding casse (IP changée)
# • Services réseau perturbés

# IP statique: Toujours même IP
# • Prévisible
# • Configuration stable


# CONFIGURER IP STATIQUE UBUNTU VM:
# ═════════════════════════════════

# Méthode 1: Netplan (Ubuntu 18.04+)
# ──────────────────────────────────

# Fichier config:
sudo nano /etc/netplan/01-netcfg.yaml

# Contenu (exemple NAT):
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: no
      addresses:
        - 192.168.253.150/24
      gateway4: 192.168.253.2
      nameservers:
        addresses:
          - 192.168.253.2
          - 8.8.8.8

# Explication:
# • ens33: Interface (vérifier avec 'ip link')
# • dhcp4: no -> Pas DHCP, statique
# • addresses: IP fixe /24 = masque 255.255.255.0
# • gateway4: Passerelle (NAT VMware = .2)
# • nameservers: DNS

# Appliquer:
sudo netplan apply

# Vérifier:
ip addr show ens33
# inet 192.168.253.150/24 -> Fixe!


# Exemple Bridged:
# ───────────────

network:
  version: 2
  ethernets:
    ens33:
      dhcp4: no
      addresses:
        - 192.168.1.150/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 192.168.1.1
          - 8.8.8.8

# IP: 192.168.1.150 (réseau physique)
# Gateway: 192.168.1.1 (routeur physique)


# Méthode 2: NetworkManager (GUI)
# ───────────────────────────────

# Settings -> Network
# -> Wired (ens33) -> Gear icon [CONFIG]

# IPv4:
# Method: Manual
# 
# Address: 192.168.253.150
# Netmask: 255.255.255.0
# Gateway: 192.168.253.2
# 
# DNS: 192.168.253.2, 8.8.8.8
# 
# -> Apply

# Désactiver/Réactiver interface:
# Toggle switch OFF puis ON


# VÉRIFIER CONFIGURATION:
# ══════════════════════

# IP:
ip addr show ens33
# inet 192.168.253.150/24

# Route:
ip route
# default via 192.168.253.2 dev ens33

# DNS:
cat /etc/resolv.conf
# nameserver 192.168.253.2
# nameserver 8.8.8.8

# Test connectivité:
ping -c 3 192.168.253.2  # Gateway
ping -c 3 google.com     # Internet + DNS


# ═══ 6.6 DÉPANNAGE RÉSEAU ═══

# PROBLÈME: Pas d'Internet dans VM
# ════════════════════════════════

# Checklist:
# ─────────

# 1. Mode réseau correct?
# VM Settings -> NAT ou Bridged (pas Host-only!)

# 2. Carte réseau connectée?
# VM Settings -> Network Adapter
# [x] Connected
# [x] Connect at power on

# 3. VMware services actifs (Linux hôte)?
sudo systemctl status vmware-networking

# Si stopped:
sudo systemctl start vmware-networking
sudo systemctl enable vmware-networking

# 4. IP attribuée?
ip addr show ens33

# Si pas d'IP:
sudo dhclient ens33

# 5. Route par défaut?
ip route | grep default

# Si absente:
sudo ip route add default via 192.168.253.2

# 6. DNS configuré?
cat /etc/resolv.conf

# Si vide:
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

# 7. Test ping gateway:
ping -c 3 192.168.253.2

# 8. Test ping externe:
ping -c 3 8.8.8.8  # Google DNS

# 9. Test DNS:
nslookup google.com

# 10. Firewall VM bloque?
sudo ufw status

# Si actif et bloque:
sudo ufw disable  # Temporaire pour test


# PROBLÈME: Hôte ne ping pas VM
# ═════════════════════════════

# Mode NAT:
# ────────

# Normal en NAT basique
# Solution: Port forwarding (voir 6.4)

# Ou activer ping:
# Virtual Network Editor -> VMnet8 -> NAT Settings
# -> Allow active FTP


# Mode Bridged:
# ────────────

# 1. Vérifier IP VM:
ip addr show

# 2. Ping depuis hôte:
ping 192.168.1.105  # IP VM

# Si timeout:
# • Firewall VM bloque ICMP
sudo ufw allow from 192.168.1.0/24

# • Routeur WiFi isolation (AP isolation)
#   Désactiver dans routeur


# Mode Host-only:
# ──────────────

# 1. IP VM sur bon réseau?
ip addr show
# inet 192.168.58.x  (vmnet1)

# 2. IP hôte vmnet1?
ip addr show vmnet1  # Linux hôte
# inet 192.168.58.1

# 3. Ping:
ping 192.168.58.1  # Depuis VM vers hôte
ping 192.168.58.128  # Depuis hôte vers VM


# PROBLÈME: VMs ne se ping pas
# ════════════════════════════

# 1. Même mode réseau?
# VM1: NAT, VM2: NAT -> [OK] OK
# VM1: NAT, VM2: Bridged -> [X] Pas même réseau!

# 2. Firewall bloque?
# Dans VM:
sudo ufw allow from 192.168.253.0/24

# 3. IP correctes?
# VM1: 192.168.253.128
# VM2: 192.168.253.129
# -> Même subnet -> OK


# RÉINITIALISER RÉSEAU VM:
# ════════════════════════

# 1. Supprimer config Netplan:
sudo rm /etc/netplan/*.yaml

# 2. Recréer défaut:
sudo nano /etc/netplan/01-netcfg.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: true

# 3. Appliquer:
sudo netplan apply

# 4. Redémarrer networking:
sudo systemctl restart systemd-networkd


# OUTILS DIAGNOSTIC:
# ═════════════════

# ip: Infos IP/routes
ip addr show
ip route show
ip link show

# ping: Test connectivité
ping 192.168.253.2
ping 8.8.8.8
ping google.com

# traceroute: Tracer route
sudo apt install traceroute
traceroute google.com

# nslookup/dig: Test DNS
nslookup google.com
dig google.com

# netstat: Ports ouverts
sudo netstat -tuln

# ss: Sockets (moderne)
ss -tuln

# tcpdump: Capture paquets
sudo tcpdump -i ens33
sudo tcpdump -i ens33 icmp

# wireshark: Analyse réseau (GUI)
sudo apt install wireshark
sudo wireshark


# ═══════════════════════════════════════════════════════════════════
# PARTIE 7: SNAPSHOTS ET CLONES
# ═══════════════════════════════════════════════════════════════════


# ═══ 7.1 SNAPSHOTS: SAUVEGARDES INSTANTANÉES ═══

# POURQUOI les snapshots?
# ═══════════════════════

# PROBLÈME SANS SNAPSHOTS:
# ────────────────────────

# Scénario: Tester logiciel dans VM
# 
# 1. VM Ubuntu propre et fonctionnelle
# 2. Installer logiciel test (ex: package suspect)
# 3. Logiciel casse système:
#    • Kernel panic au boot
#    • Interface graphique ne démarre plus
#    • Fichiers système corrompus
# 
# Options:
# [X] Réinstaller Ubuntu from scratch (1 heure)
# [X] Tenter réparation (complexe, incertain)
# [X] Restaurer backup complet (si existe, long)

# AVEC SNAPSHOTS:
# ──────────────

# 1. VM Ubuntu propre
# 2. * SNAPSHOT "Clean Ubuntu" * (5 secondes)
# 3. Installer logiciel test
# 4. Système casse
# 5. * RESTORE snapshot * (10 secondes)
# -> VM revient état propre!

# ANALOGIE: Point de sauvegarde jeu vidéo
# ───────────────────────────────────────
# • Jeu vidéo: Sauvegarder avant boss difficile
# • Mourir -> Reload save point
# • Recommencer avec état exact d'avant
# 
# Snapshot = Save point VM


# QU'EST-CE qu'un snapshot?
# ═════════════════════════

# Snapshot = Photo état VM à instant T

# Contient:
# • État disque (fichiers)
# • État mémoire (RAM)
# • État devices (CPU, réseau)
# • Configuration VM

# Fichiers créés:
# • .vmdk delta (différences disque)
# • .vmsn (état snapshot)
# • .vmem (RAM si snapshot mémoire)

# Taille:
# • Snapshot initial: ~100MB
# • Grandit avec modifications

# [ATTENTION] SNAPSHOTS ≠ BACKUPS COMPLETS
# • Dépendent de VM originale
# • Si disque VM corrompu -> Snapshots perdus!
# • Backup externe recommandé pour production


# ═══ 7.2 CRÉER SNAPSHOT ═══

# CRÉER SNAPSHOT (VM ARRÊTÉE):
# ════════════════════════════

# VM powered off:
# VM -> Snapshot -> Take Snapshot

# Fenêtre "Take Snapshot":
# Name: Clean Ubuntu Install
# Description: Ubuntu 22.04 après install fraîche, avant packages
# 
# [ ] Snapshot the virtual machine's memory
# (Décoché car VM éteinte)
# 
# -> Take Snapshot

# Durée: 5-10 secondes

# Snapshot créé!


# CRÉER SNAPSHOT (VM EN COURS):
# ═════════════════════════════

# VM running:
# VM -> Snapshot -> Take Snapshot

# Fenêtre:
# Name: Before software install
# Description: Avant installation PostgreSQL
# 
# [x] Snapshot the virtual machine's memory
# (Coché recommandé si VM running)
# 
# -> Take Snapshot

# Durée: 10-30 secondes (sauve RAM)

# [ATTENTION] VM freeze quelques secondes pendant snapshot


# SNAPSHOT MÉMOIRE vs PAS MÉMOIRE:
# ════════════════════════════════

# AVEC mémoire (VM running):
# [OK] Restore état EXACT (applications ouvertes, cache)
# [OK] VM redémarre instantanément
# [X] Fichier snapshot plus gros (+RAM size)
# [X] Prise snapshot plus lente

# SANS mémoire:
# [OK] Snapshot plus petit
# [OK] Prise snapshot rapide
# [X] Restore = reboot VM (pas état exact)
# [X] Applications fermées

# RECOMMANDATION:
# • VM arrêtée: Pas besoin mémoire
# • VM running + tests: Avec mémoire
# • Snapshots fréquents: Sans mémoire (économie espace)


# NOMENCLATURE SNAPSHOTS:
# ══════════════════════

# Noms descriptifs:
# [OK] "Clean Ubuntu 22.04 install"
# [OK] "Before Apache install"
# [OK] "Working state 2025-01-15"
# [OK] "Pre-upgrade kernel"

# [X] "Snapshot1", "test", "aaa"


# ═══ 7.3 GÉRER SNAPSHOTS ═══

# SNAPSHOT MANAGER:
# ════════════════

# VM -> Snapshot -> Snapshot Manager

# Interface:
# ┌────────────────────────────────────────────┐
# │ Snapshot Manager                           │
# ├────────────────────────────────────────────┤
# │ You Are Here                               │
# │   v                                        │
# │ ├─ Clean Ubuntu (15/01/2025 10:30)        │
# │ │   v                                      │
# │ │  ├─ Before Apache (15/01/2025 14:00)    │
# │ │  │   v                                   │
# │ │  │  └─ Working config (15/01/2025 16:20)│ <- Current
# │                                            │
# │ [Go To]  [Take]  [Delete]  [Close]        │
# └────────────────────────────────────────────┘

# Arbre snapshots:
# • Racine: État original VM
# • Branches: Snapshots successifs
# • "You Are Here": État actuel


# RESTORE SNAPSHOT (GO TO):
# ════════════════════════

# Snapshot Manager:
# -> Sélectionner snapshot "Before Apache"
# -> Go To

# Popup confirmation:
# "Are you sure you want to go to snapshot 'Before Apache'?"
# [ ] Take a snapshot of the current state first
# (Cocher si garder état actuel avant restore)
# 
# -> Yes

# VM restore snapshot:
# • Powered off automatiquement
# • Disque revient état snapshot
# • Redémarrer VM -> État restauré!

# Durée: 10-30 secondes


# DELETE SNAPSHOT:
# ═══════════════

# Snapshot Manager:
# -> Sélectionner snapshot
# -> Delete

# Confirmation:
# "Delete snapshot 'Before Apache'?"
# -> Yes

# Durée: Quelques secondes à minutes
# (Consolide changements dans disque parent)

# [ATTENTION] DELETE SNAPSHOT ≠ RESTORE!
# Delete = Supprimer point de restauration
# Go To = Restaurer à ce point


# DELETE ALL SNAPSHOTS:
# ════════════════════

# VM -> Snapshot -> Delete All Snapshots

# Confirmation:
# "This will permanently delete all snapshots
#  and consolidate all disks."
# -> Yes

# Durée: Plusieurs minutes
# (Merge tous deltas dans disque base)

# Use case:
# • Libérer espace disque
# • VM production (snapshots plus nécessaires)
# • Avant clonage


# ═══ 7.4 ARBRE SNAPSHOTS (BRANCHING) ═══

# SNAPSHOTS LINÉAIRES:
# ═══════════════════

# Cas simple:
# S0 (Clean) -> S1 (Apache) -> S2 (MySQL) -> Current

# Restore S1 puis nouveau snapshot:
# S0 -> S1 -> S3 (nouveau)
#       v
#       S2 (branche ancienne)


# ARBRE COMPLET:
# ═════════════

# Exemple complexe:
# 
#              ┌─ S3: MySQL Server
#              │
# S0: Clean ─ S1: LAMP Stack ─ S2: WordPress
#              │
#              └─ S4: Node.js ─ S5: React App

# Permet:
# • Tester plusieurs configs
# • Branches parallèles
# • Retour n'importe quelle branche


# NAVIGUER ARBRE:
# ══════════════

# Snapshot Manager affiche arbre visuel
# • Cliquer snapshot -> Go To
# • Créer nouvelle branche: Go To + Take Snapshot


# ═══ 7.5 SNAPSHOTS LIMITES ET BEST PRACTICES ═══

# LIMITES:
# ═══════

# 1. Espace disque:
# • Chaque snapshot = delta (changements)
# • Multiple snapshots = accumulation
# • 5-10 snapshots = possible doublement taille VM

# Exemple:
# VM base: 40GB
# + 5 snapshots actifs: +20GB
# = 60GB total

# 2. Performance:
# • Trop de snapshots (>32) = VM ralentie
# • I/O disque traverse chaîne deltas
# • Recommandation: Max 3-5 snapshots actifs

# 3. Durée consolidation:
# • Supprimer snapshot = merge deltas
# • Peut prendre 10-30 minutes pour gros snapshots

# 4. Pas de backup:
# • Snapshots dépendent disque base
# • Corruption disque = perte snapshots
# • Backups externes nécessaires


# BEST PRACTICES:
# ══════════════

# [OK] FAIRE:

# 1. Snapshot avant changements risqués:
#    • Installation logiciel
#    • Mise à jour système
#    • Modifications config critiques
#    • Tests destructifs

# 2. Noms descriptifs + descriptions:
Name: "Pre-kernel-upgrade"
Description: "Ubuntu 5.15.0-91 stable avant upgrade vers 5.19"

# 3. Nettoyer régulièrement:
#    • Garder 3-5 snapshots max
#    • Supprimer anciens après validation

# 4. Pas de snapshots long terme:
#    • Créer clone pour archivage
#    • Snapshots = court terme

# 5. Vérifier espace disque:
df -h
# Avant prendre snapshot


# [X] NE PAS FAIRE:

# 1. Trop de snapshots (>10):
#    -> Performance dégradée

# 2. Garder snapshots mois/années:
#    -> Utiliser clones

# 3. Snapshot comme backup unique:
#    -> Backup externe nécessaire

# 4. Modifier snapshot .vmdk manuellement:
#    -> Corruption garantie

# 5. Snapshot VMs production critiques:
#    -> Utiliser snapshots vSphere (Type 1)


# WORKFLOWS RECOMMANDÉS:
# ═════════════════════

# WORKFLOW DÉVELOPPEMENT:
# ──────────────────────

# 1. État stable -> Snapshot "Base"
# 2. Développer feature
# 3. Test OK -> Supprimer snapshot
# 4. Test KO -> Restore snapshot
# 5. Nouveau cycle


# WORKFLOW FORMATION:
# ──────────────────

# 1. Clean Ubuntu -> Snapshot "TP1 Start"
# 2. Faire TP1
# 3. TP2 Start -> Snapshot "TP2 Start"
# 4. Erreur -> Restore TP
# 5. Répéter


# WORKFLOW PENTEST:
# ────────────────

# 1. Kali Linux clean -> Snapshot "Clean Kali"
# 2. Installer outils
# 3. Snapshot "Tools installed"
# 4. Tests -> Système instable
# 5. Restore "Tools installed"
# 6. Nouvelle approche


# ═══ 7.6 CLONES: DUPLIQUER VM ═══

# POURQUOI CLONER?
# ═══════════════

# CLONE vs SNAPSHOT:
# ─────────────────

# Snapshot:
# • Point restauration
# • Dépend VM originale
# • Léger (deltas)
# • Temporaire

# Clone:
# • VM INDÉPENDANTE complète
# • Peut vivre seule
# • Taille complète
# • Permanent

# ANALOGIE:
# ────────
# Snapshot = Ctrl+Z (undo)
# Clone = Ctrl+C, Ctrl+V (copie complète)


# TYPES DE CLONES:
# ═══════════════

# 1. CLONE COMPLET (Full Clone):
# ──────────────────────────────

# Copie 100% indépendante
# • Tous fichiers dupliqués
# • Taille: Identique à original (40GB -> 40GB)
# • Indépendance totale (supprimer original = OK)
# • Peut déplacer sur autre machine

# Use case:
# • Distribuer VM
# • Backup complet
# • VM production depuis template
# • Archive long terme


# 2. CLONE LIÉ (Linked Clone):
# ────────────────────────────

# [ATTENTION] VMware Workstation PLAYER ne supporte PAS!
# (Seulement Workstation PRO)

# Partage disque avec VM originale
# • Stocke seulement différences
# • Taille initiale: ~100MB
# • Dépend VM parent (parent supprimé = clone cassé)

# Use case:
# • Labs multiples (5 VMs identiques)
# • Économie espace disque
# • Tests parallèles


# ═══ 7.7 CRÉER CLONE COMPLET ═══

# PRÉREQUIS:
# ─────────

# • VM source éteinte (recommandé)
# • Espace disque suffisant (taille VM × 2)


# PROCÉDURE:
# ─────────

# 1. Powered off VM source:
# VM -> Power -> Shut Down Guest


# 2. Lancer wizard clone:
# VM -> Manage -> Clone

# Ou:
# Clic droit VM -> Manage -> Clone


# 3. Clone Virtual Machine Wizard:
# ────────────────────────────────

# Page 1: Clone Source
# ⦿ The current state in the virtual machine
# [WHITE_CIRCLE] An existing snapshot (si snapshots existent)
# 
# -> Next


# Page 2: Clone Type
# ⦿ Create a full clone
# [WHITE_CIRCLE] Create a linked clone (si Pro)
# 
# -> Next


# Page 3: Name and Location
# Name: Ubuntu 22.04 - Clone 1
# Location: /home/user/VMware/VMs/Ubuntu-Clone-1
# 
# -> Finish


# 4. Clonage en cours:
# ═══════════════════

# Barre progression:
# "Cloning virtual machine..."
# 
# Durée: 5-15 minutes
# (Dépend taille VM et vitesse disque)


# 5. Clone terminé:
# ════════════════

# Message: "Clone created successfully"
# -> Close

# Library VMware:
# • Ubuntu 22.04 (original)
# • Ubuntu 22.04 - Clone 1 (nouveau)

# Taille disque:
# Original: 40GB
# Clone: 40GB
# Total: 80GB


# DÉMARRER CLONE:
# ══════════════

# Sélectionner "Ubuntu 22.04 - Clone 1"
# -> Play virtual machine

# [ATTENTION] Message peut apparaître:
# "This virtual machine might have been moved or copied.
#  Did you move or copy it?"
# 
# [WHITE_CIRCLE] I moved it (garde même MAC address)
# ⦿ I copied it (génère nouveau MAC address)
# 
# -> OK (choisir "I copied it")

# POURQUOI CHOISIR "I copied it"?
# ─────────────────────────────

# "I moved it":
# • Garde MAC address original
# • Réseau: 2 VMs même MAC = CONFLIT!
# • N'utiliser que si vraiment déplacé (pas cloné)

# "I copied it":
# • Génère nouveau MAC
# • Réseau: Pas de conflit
# • [OK] TOUJOURS choisir pour clones!


# PERSONNALISER CLONE:
# ═══════════════════

# Après boot clone, modifier:

# 1. Hostname:
sudo hostnamectl set-hostname ubuntu-clone-1

# 2. /etc/hosts:
sudo nano /etc/hosts
# 127.0.1.1  ubuntu-clone-1  # Changer

# 3. Machine ID (optionnel):
sudo rm /etc/machine-id
sudo systemd-machine-id-setup

# 4. SSH keys (si SSH server):
sudo rm /etc/ssh/ssh_host_*
sudo ssh-keygen -A

# 5. IP statique (si configurée):
# Changer dans /etc/netplan/*.yaml


# ═══ 7.8 CLONER DEPUIS LIGNE DE COMMANDE ═══

# VMWARE-VDISKMANAGER:
# ═══════════════════

# Outil CLI pour manipuler disques virtuels

# Cloner disque .vmdk:
vmware-vdiskmanager -r source.vmdk -t 0 destination.vmdk

# Options -t (type):
# 0: Growable (défaut, taille dynamique)
# 1: Preallocated (taille fixe)
# 2: Split into 2GB files
# 3: Preallocated split

# Exemple:
cd ~/vmware/Ubuntu-22.04
vmware-vdiskmanager -r "Ubuntu 22.04.vmdk" -t 0 "../Ubuntu-Clone/Ubuntu-Clone.vmdk"

# Créer VM manuelle avec disque cloné:
# VMware -> File -> New Virtual Machine
# -> I will install OS later
# -> Use an existing virtual disk
# -> Browse: Ubuntu-Clone.vmdk


# ═══ 7.9 TEMPLATES ET DÉPLOIEMENT MASSE ═══

# CONCEPT TEMPLATE:
# ════════════════

# Template = VM "modèle" pour clonage répété

# Workflow:
# 1. Créer VM parfaite (OS + logiciels + config)
# 2. Sysprep / Généraliser
# 3. Snapshot "Template"
# 4. Cloner 10x -> 10 VMs identiques
# 5. Personnaliser chaque clone (hostname, IP)


# CRÉER TEMPLATE UBUNTU:
# ═════════════════════

# 1. Installer Ubuntu minimal
# 2. Mettre à jour:
sudo apt update && sudo apt upgrade -y

# 3. Installer logiciels communs:
sudo apt install -y vim git curl wget htop net-tools

# 4. Configurer sécurité:
sudo apt install -y ufw
sudo ufw enable

# 5. Nettoyer:
sudo apt autoremove -y
sudo apt clean

# 6. Supprimer historiques:
cat /dev/null > ~/.bash_history
history -c

# 7. Supprimer logs:
sudo rm -rf /var/log/*.log
sudo rm -rf /tmp/*

# 8. Supprimer SSH keys:
sudo rm /etc/ssh/ssh_host_*

# 9. Nettoyer réseau:
sudo rm /etc/netplan/*.yaml
# Créer config DHCP basique

# 10. Arrêter:
sudo poweroff


# UTILISER TEMPLATE:
# ═════════════════

# 1. Clone Template -> VM1, VM2, VM3...
# 2. Boot each VM
# 3. Personnaliser:
#    • Hostname
#    • IP (si statique)
#    • SSH keys (régénérés auto si supprimés)


# DÉPLOIEMENT MASSE (Script):
# ═══════════════════════════

#!/bin/bash
# deploy-vms.sh

TEMPLATE="Ubuntu-Template"
BASE_PATH="/home/user/vmware"
COUNT=5

for i in $(seq 1 $COUNT); do
  VM_NAME="Ubuntu-Node-$i"
  VM_PATH="$BASE_PATH/$VM_NAME"
  
  echo "Cloning $VM_NAME..."
  vmware-vdiskmanager -r "$BASE_PATH/$TEMPLATE/$TEMPLATE.vmdk" -t 0 "$VM_PATH/$VM_NAME.vmdk"
  
  # Copier VMX
  cp "$BASE_PATH/$TEMPLATE/$TEMPLATE.vmx" "$VM_PATH/$VM_NAME.vmx"
  
  # Modifier VMX (nom, fichiers)
  sed -i "s/$TEMPLATE/$VM_NAME/g" "$VM_PATH/$VM_NAME.vmx"
  
  echo "$VM_NAME created!"
done

# Utiliser:
chmod +x deploy-vms.sh
./deploy-vms.sh

# Résultat: 5 VMs clonées!


# ═══════════════════════════════════════════════════════════════════
# PARTIE 8: GESTION AVANCÉE VMs
# ═══════════════════════════════════════════════════════════════════


# ═══ 8.1 FICHIERS VM VMWARE ═══

# STRUCTURE DOSSIER VM:
# ════════════════════

# ~/vmware/Ubuntu-22.04/
# ├── Ubuntu 22.04.vmx                 # Config VM (fichier principal)
# ├── Ubuntu 22.04.vmxf                # Metadatas supplémentaires
# ├── Ubuntu 22.04.vmdk                # Descripteur disque
# ├── Ubuntu 22.04-flat.vmdk           # Données disque (gros fichier)
# ├── Ubuntu 22.04.nvram               # BIOS/UEFI settings
# ├── Ubuntu 22.04.vmsd                # Snapshots metadata
# ├── Ubuntu 22.04-Snapshot1.vmsn      # Snapshot 1 metadata
# ├── Ubuntu 22.04-Snapshot1.vmem      # Snapshot 1 mémoire
# ├── Ubuntu 22.04-000001.vmdk         # Snapshot 1 delta disk
# ├── Ubuntu 22.04-000001-delta.vmdk   # Snapshot 1 données
# └── vmware.log                       # Logs VM

# FICHIERS DÉTAILLÉS:
# ══════════════════

# .vmx (Configuration VM):
# ───────────────────────
# Fichier texte contenant toute config:
# • Ressources (RAM, CPU)
# • Devices (réseau, USB, son)
# • Disques attachés
# • Options (snapshot, power)

cat Ubuntu\ 22.04.vmx

# Extrait:
# .encoding = "UTF-8"
# config.version = "8"
# virtualHW.version = "19"
# memsize = "4096"
# numvcpus = "2"
# scsi0:0.fileName = "Ubuntu 22.04.vmdk"
# ethernet0.networkName = "NAT"

# Éditable manuellement (VM éteinte):
nano Ubuntu\ 22.04.vmx


# .vmdk (Disque virtuel):
# ──────────────────────

# 2 fichiers par disque:

# 1. Descripteur (.vmdk): Petit fichier texte
cat Ubuntu\ 22.04.vmdk

# version=1
# CID=12345678
# parentCID=ffffffff
# createType="monolithicFlat"
# RW 83886080 FLAT "Ubuntu 22.04-flat.vmdk" 0

# 2. Données (-flat.vmdk): Gros fichier binaire
ls -lh Ubuntu\ 22.04-flat.vmdk
# -rw------- 1 user user 40G Ubuntu 22.04-flat.vmdk

# Types de disques:
# • monolithicFlat: 1 fichier, taille fixe (recommandé performance)
# • growable: 1 fichier, taille dynamique (économie espace)
# • split: Multiple fichiers 2GB (FAT32 compatible)


# .nvram (BIOS/UEFI):
# ──────────────────

# Contient paramètres firmware:
# • Boot order
# • BIOS settings
# • UEFI variables

# Fichier binaire, ne pas éditer


# .vmsd (Snapshots):
# ─────────────────

# Liste snapshots et relations
cat Ubuntu\ 22.04.vmsd

# snapshot.numSnapshots = "2"
# snapshot0.uid = "..."
# snapshot0.filename = "Ubuntu 22.04-Snapshot1.vmsn"
# snapshot0.displayName = "Clean Install"


# .vmsn (Snapshot metadata):
# ─────────────────────────

# État snapshot:
# • Configuration devices
# • Disques
# • Timestamps

# Binaire


# .vmem (Snapshot mémoire):
# ────────────────────────

# Dump RAM si snapshot avec mémoire
# Taille = RAM VM


# ═══ 8.2 MODIFIER CONFIGURATION VM ═══

# AJOUTER DISQUE DUR:
# ══════════════════

# VM éteinte -> Settings -> Add -> Hard Disk -> Next

# Disk Type:
# ⦿ SCSI (recommandé)
# [WHITE_CIRCLE] SATA
# [WHITE_CIRCLE] NVMe (pour VMs récentes)
# -> Next

# Select a Disk:
# ⦿ Create a new virtual disk
# -> Next

# Capacity: 20 GB
# ⦿ Store virtual disk as a single file
# -> Next

# Filename: Ubuntu 22.04_1.vmdk
# -> Finish

# Nouveau disque ajouté!


# PARTITIONNER NOUVEAU DISQUE (VM):
# ═════════════════════════════════

# Boot VM

# Lister disques:
lsblk

# Output:
# sda    40G  (disque principal)
# └─sda1 40G  /
# sdb    20G  (nouveau disque, vide!)

# Créer partition:
sudo fdisk /dev/sdb

# Commandes fdisk:
# n      (nouvelle partition)
# p      (partition primaire)
# 1      (numéro partition)
# Enter  (premier secteur, défaut)
# Enter  (dernier secteur, défaut = tout l'espace)
# w      (write, sauvegarder)

# Formater partition:
sudo mkfs.ext4 /dev/sdb1

# Créer point de montage:
sudo mkdir /data

# Monter:
sudo mount /dev/sdb1 /data

# Vérifier:
df -h | grep sdb1
# /dev/sdb1  20G  /data

# Auto-mount au boot:
echo "/dev/sdb1 /data ext4 defaults 0 2" | sudo tee -a /etc/fstab


# CHANGER RAM/CPU (VM éteinte):
# ═════════════════════════════

# VM -> Settings

# Memory:
# Slider: 4GB -> 8GB

# Processors:
# Cores: 2 -> 4

# -> OK

# Redémarrer VM -> Nouvelles ressources!


# HOT-ADD CPU/RAM (VM running):
# ═════════════════════════════

# [ATTENTION] Workstation PRO seulement (pas Player!)

# Activer dans .vmx:
# VM éteinte, éditer:
echo 'mem.hotadd = "TRUE"' >> Ubuntu\ 22.04.vmx
echo 'vcpu.hotadd = "TRUE"' >> Ubuntu\ 22.04.vmx

# Démarrer VM

# Modifier Settings (VM running):
# Memory: 4GB -> 6GB
# -> OK

# Dans VM, nouvelle RAM visible:
free -h
# Mem: 6.0Gi


# CHANGER CD/DVD ISO:
# ══════════════════

# VM running:
# Player -> Removable Devices -> CD/DVD (SATA)
# -> Settings

# Use ISO image file:
# Browse: /path/to/debian.iso

# [x] Connected
# -> OK

# VM voit nouveau CD:
ls /dev/cdrom
mount /dev/cdrom /mnt


# USB DEVICES:
# ═══════════

# Connecter USB hôte à VM:

# Player -> Removable Devices -> USB Devices
# -> [Device Name] -> Connect

# Exemple: Clé USB
# -> Kingston USB 3.0 -> Connect

# Dans VM:
lsblk
# sdc    8G   (clé USB!)

# Monter:
sudo mount /dev/sdc1 /mnt/usb


# ═══ 8.3 EXPORTER / IMPORTER VM ═══

# EXPORTER VM (OVF/OVA):
# ═════════════════════

# OVF/OVA = Formats standards virtualisation
# • OVF: Open Virtualization Format (multiple fichiers)
# • OVA: OVF Archive (1 fichier .ova)

# Compatible:
# • VMware (Workstation, ESXi, vSphere)
# • VirtualBox
# • Hyper-V (avec conversion)
# • Cloud (AWS, Azure avec tools)


# PROCÉDURE EXPORT:
# ────────────────

# VM éteinte:
# File -> Export to OVF

# Source VM: Ubuntu 22.04
# -> Next

# Name: Ubuntu-22.04-export
# 
# Format:
# ⦿ OVA (single file, recommended)
# [WHITE_CIRCLE] OVF (multiple files)
# 
# Directory: /home/user/VMware/Exports/
# 
# -> Export

# Durée: 5-15 minutes

# Fichier créé:
# Ubuntu-22.04-export.ova (size ~8-12GB)


# IMPORTER VM (OVF/OVA):
# ═════════════════════

# File -> Open -> Browse: Ubuntu-22.04-export.ova

# Import Virtual Machine:
# Name: Ubuntu-22.04-imported
# Storage path: /home/user/vmware/
# 
# -> Import

# Durée: 5-10 minutes

# VM importée et prête!


# TRANSFÉRER VM VERS AUTRE MACHINE:
# ═════════════════════════════════

# Méthode 1: Export OVA
# ────────────────────
# 1. Export OVA
# 2. Copier .ova sur USB/réseau
# 3. Importer sur autre machine

# Méthode 2: Copier dossier VM
# ───────────────────────────
# Copier tout le dossier VM:
cp -r ~/vmware/Ubuntu-22.04 /media/usb/

# Sur autre machine:
# File -> Open -> Browse: Ubuntu 22.04.vmx


# ═══ 8.4 CONVERSION VM ═══

# VMWARE -> VIRTUALBOX:
# ═══════════════════

# 1. Export VMware en OVA
# 2. VirtualBox: File -> Import Appliance
# 3. Select: Ubuntu-22.04.ova
# 4. Importer


# VIRTUALBOX -> VMWARE:
# ═══════════════════

# 1. VirtualBox: File -> Export Appliance
# 2. Format: OVF 2.0
# 3. VMware: File -> Open -> .ova


# VMWARE PLAYER -> ESXi:
# ════════════════════

# 1. Export OVA depuis Player
# 2. ESXi web client:
#    -> Create/Register VM
#    -> Deploy from OVF/OVA
#    -> Upload .ova
# 3. Configure settings
# 4. Finish


# ═══ 8.5 OPTIMISATION PERFORMANCE ═══

# THIN vs THICK PROVISIONING:
# ═══════════════════════════

# Thin (Growable):
# • Taille dynamique
# • Grandit selon usage
# • VM 40GB -> Fichier 10GB (si utilisé 10GB)
# • [OK] Économie espace
# • [X] Légèrement plus lent
# • [X] Peut manquer espace hôte

# Thick (Preallocated):
# • Taille fixe
# • VM 40GB -> Fichier 40GB (toujours)
# • [OK] Performance maximale
# • [X] Espace réservé


# CONVERTIR THIN <-> THICK:
# ══════════════════════

# Thin -> Thick:
vmware-vdiskmanager -r source.vmdk -t 1 destination-thick.vmdk

# Thick -> Thin:
vmware-vdiskmanager -r source.vmdk -t 0 destination-thin.vmdk


# COMPACTER DISQUE (Thin):
# ═══════════════════════

# VM éteinte:
# VM -> Settings -> Hard Disk -> Compact

# Ou CLI:
vmware-vdiskmanager -k Ubuntu\ 22.04.vmdk

# Libère espace non utilisé


# DÉFRAGMENTER DISQUE:
# ═══════════════════

vmware-vdiskmanager -d Ubuntu\ 22.04.vmdk


# ALLOUER PLUS DE RAM HÔTE:
# ════════════════════════

# Linux hôte:
# Augmenter RAM allouée hyperviseur

sudo nano /etc/vmware/config

# Ajouter:
# prefvmx.minVmMemPct = "50"
# prefvmx.useRecommendedLockedMemSize = "TRUE"


# ACTIVER NESTED VIRTUALIZATION:
# ══════════════════════════════

# Pour VM dans VM (rare)

# VM éteinte, éditer .vmx:
echo 'vhv.enable = "TRUE"' >> Ubuntu\ 22.04.vmx

# CPU hôte:
# Intel: VMX activé
# AMD: SVM activé

# VM peut maintenant lancer VMs!


# PARAVIRTUALIZATION (VMXNET3):
# ═════════════════════════════

# Driver réseau optimisé

# VM éteinte -> Settings -> Network Adapter
# Adapter Type:
# ⦿ VMXNET3 (recommandé si VMware Tools installé)
# [WHITE_CIRCLE] E1000E (compatibilité)


# ═══ 8.6 SÉCURITÉ VM ═══

# ENCRYPTION VM:
# ═════════════

# [ATTENTION] Workstation PRO seulement!

# VM éteinte:
# VM -> Manage -> Encrypt

# Wizard:
# Password: ********
# Hint: (optionnel)
# -> Encrypt

# Fichiers VM chiffrés!
# Démarrer VM = demande password


# RESTRICTION FEATURES:
# ════════════════════

# Désactiver copy-paste:
# VM -> Settings -> Options -> Guest Isolation
# [ ] Enable copy and paste

# Désactiver drag-drop:
# [ ] Enable drag and drop

# Désactiver shared folders:
# [ ] Enable shared folders


# ISOLATION RÉSEAU:
# ════════════════

# VM suspecte -> Host-only (pas Internet)


# READONLY DISKS:
# ══════════════

# Disque partagé lecture seule

# .vmx:
scsi0:1.fileName = "shared-data.vmdk"
scsi0:1.mode = "persistent"
scsi0:1.readonly = "TRUE"


# ═══ 8.7 MONITORING ET LOGS ═══

# SURVEILLER RESSOURCES VM:
# ════════════════════════

# Dans VMware:
# VM tab (bas) -> Monitor
# • CPU usage
# • Memory usage
# • Disk I/O
# • Network I/O


# LOGS VM:
# ═══════

# vmware.log dans dossier VM:
tail -f ~/vmware/Ubuntu-22.04/vmware.log

# Logs système VM:
# Dans VM Ubuntu:
journalctl -xe
dmesg
/var/log/syslog


# ═══ 8.8 COMMANDES VMRUN (CLI) ═══

# VMRUN: Contrôler VMs depuis terminal
# ════════════════════════════════════

# Lister VMs running:
vmrun list

# Output:
# Total running VMs: 2
# /home/user/vmware/Ubuntu-22.04/Ubuntu 22.04.vmx
# /home/user/vmware/Debian-11/Debian 11.vmx


# Démarrer VM:
vmrun start "/home/user/vmware/Ubuntu-22.04/Ubuntu 22.04.vmx" nogui

# Options:
# gui: Afficher interface
# nogui: Background (headless)


# Arrêter VM:
vmrun stop "/home/user/vmware/Ubuntu-22.04/Ubuntu 22.04.vmx" soft

# Options:
# soft: Shutdown propre (ACPI)
# hard: Power off brutal


# Suspendre:
vmrun suspend "/path/to/vm.vmx"

# Reprendre:
vmrun unpause "/path/to/vm.vmx"


# Reset VM:
vmrun reset "/path/to/vm.vmx" soft


# Snapshot:
vmrun snapshot "/path/to/vm.vmx" "SnapshotName"

# Delete snapshot:
vmrun deleteSnapshot "/path/to/vm.vmx" "SnapshotName"

# Restore snapshot:
vmrun revertToSnapshot "/path/to/vm.vmx" "SnapshotName"


# Exécuter commande dans VM:
vmrun -gu user -gp password runProgramInGuest "/path/to/vm.vmx" /bin/ls /home/user

# Options:
# -gu: Guest user
# -gp: Guest password


# Copier fichier hôte -> VM:
vmrun -gu user -gp password copyFileFromHostToGuest "/path/to/vm.vmx" /path/on/host /path/in/vm

# Copier fichier VM -> hôte:
vmrun -gu user -gp password copyFileFromGuestToHost "/path/to/vm.vmx" /path/in/vm /path/on/host


# IP address VM:
vmrun getGuestIPAddress "/path/to/vm.vmx"


# Script automatisation:
#!/bin/bash
# start-lab.sh

VM1="/home/user/vmware/Ubuntu-Server/Ubuntu-Server.vmx"
VM2="/home/user/vmware/Ubuntu-Client/Ubuntu-Client.vmx"

echo "Démarrage lab..."
vmrun start "$VM1" nogui
vmrun start "$VM2" nogui

sleep 30

echo "VMs démarrées!"
vmrun list


# ═══════════════════════════════════════════════════════════════════
# PARTIE 9: LABS ET SCÉNARIOS PRATIQUES
# ═══════════════════════════════════════════════════════════════════


# ═══ 9.1 LAB 1: SERVEUR WEB APACHE ═══

# OBJECTIF:
# ════════

# Déployer serveur web accessible depuis hôte


# CONFIGURATION:
# ═════════════

# VM: Ubuntu Server 22.04
# RAM: 2GB
# CPU: 2 cores
# Réseau: NAT
# Disque: 20GB


# PROCÉDURE:
# ═════════

# 1. Créer VM Ubuntu Server
# (Voir PARTIE 3)


# 2. Installer Apache:
sudo apt update
sudo apt install -y apache2

# Vérifier:
sudo systemctl status apache2
# Active: active (running)


# 3. Configurer firewall:
sudo ufw allow 'Apache'
sudo ufw enable


# 4. Créer page test:
echo "<h1>Serveur Web VMware!</h1>" | sudo tee /var/www/html/index.html


# 5. Trouver IP VM:
ip addr show ens33 | grep inet
# inet 192.168.253.128/24


# 6. Tester depuis VM:
curl http://localhost
# <h1>Serveur Web VMware!</h1>


# 7. Configuration port forwarding:
# (Si NAT et accès depuis hôte)

# Virtual Network Editor -> VMnet8 -> NAT Settings
# Port Forwarding -> Add:
# Host port: 8080
# VM IP: 192.168.253.128
# VM port: 80


# 8. Tester depuis hôte:
# Navigateur hôte: http://localhost:8080
# -> Affiche "Serveur Web VMware!"


# VARIANTE BRIDGED:
# ════════════════

# Si VM en mode Bridged (IP: 192.168.1.105):
# Navigateur hôte: http://192.168.1.105
# -> Accès direct!


# ═══ 9.2 LAB 2: CLUSTER 3 NODES ═══

# OBJECTIF:
# ════════

# 3 VMs Ubuntu communiquant entre elles


# ARCHITECTURE:
# ════════════

# Node1: 192.168.58.10 (Master)
# Node2: 192.168.58.11 (Worker)
# Node3: 192.168.58.12 (Worker)
# 
# Réseau: Host-only (vmnet1)


# ÉTAPE 1: Créer Template
# ═══════════════════════

# 1. Créer VM "Ubuntu-Template"
# 2. Installer Ubuntu Server minimal
# 3. Installer outils:
sudo apt install -y curl wget vim net-tools

# 4. Arrêter:
sudo poweroff


# ÉTAPE 2: Cloner 3 fois
# ══════════════════════

# Clone 1: Ubuntu-Node1
# Clone 2: Ubuntu-Node2
# Clone 3: Ubuntu-Node3


# ÉTAPE 3: Configurer réseau
# ══════════════════════════

# Toutes VMs: Network Adapter -> Host-only


# ÉTAPE 4: Configurer IPs statiques
# ═════════════════════════════════

# Node1:
sudo nano /etc/netplan/01-netcfg.yaml

network:
  version: 2
  ethernets:
    ens33:
      addresses:
        - 192.168.58.10/24

sudo netplan apply


# Node2:
# IP: 192.168.58.11/24

# Node3:
# IP: 192.168.58.12/24


# ÉTAPE 5: Configurer hostnames
# ═════════════════════════════

# Node1:
sudo hostnamectl set-hostname node1
sudo nano /etc/hosts
# Ajouter:
192.168.58.10 node1
192.168.58.11 node2
192.168.58.12 node3

# Répéter Node2, Node3


# ÉTAPE 6: Tester connectivité
# ════════════════════════════

# Depuis Node1:
ping -c 3 node2
ping -c 3 node3
# -> Succès!

# SSH entre nodes:
ssh user@node2
# -> Fonctionne!


# USE CASE: Docker Swarm
# ═════════════════════

# Node1 (Manager):
docker swarm init --advertise-addr 192.168.58.10

# Join command output -> Copier

# Node2, Node3 (Workers):
docker swarm join --token SWMTKN-... 192.168.58.10:2377

# Vérifier cluster:
# Node1:
docker node ls
# ID     HOSTNAME   STATUS   AVAILABILITY
# *abc   node1      Ready    Active
# def    node2      Ready    Active
# ghi    node3      Ready    Active


# ═══ 9.3 LAB 3: LAB SÉCURITÉ KALI LINUX ═══

# OBJECTIF:
# ════════

# VM Kali (attaquant) + VM Ubuntu (cible)
# Réseau isolé (Host-only)


# ARCHITECTURE:
# ════════════

# Kali Linux: 192.168.58.100
# Ubuntu Target: 192.168.58.101
# Réseau: Host-only (isolé Internet)


# PROCÉDURE:
# ═════════

# 1. Télécharger Kali:
# https://www.kali.org/get-kali/
# kali-linux-2024.x-vmware-amd64.7z

# Extraire:
7z x kali

# 2. Importer dans VMware:
# File -> Open -> kali-linux-2024.x-vmware-amd64.vmx

# 3. Configurer Kali:
# Settings -> Network Adapter -> Host-only
# Settings -> Memory -> 4GB (minimum)
# Settings -> Processors -> 2 cores

# 4. Démarrer Kali:
# Login: kali
# Password: kali


# 5. Configurer IP Kali:
sudo nano /etc/network/interfaces

# Ajouter:
auto eth0
iface eth0 inet static
    address 192.168.58.100
    netmask 255.255.255.0

# Redémarrer réseau:
sudo systemctl restart networking

# Vérifier:
ip addr show eth0
# inet 192.168.58.100/24


# 6. Créer VM Ubuntu Target:
# Ubuntu Server 22.04
# IP: 192.168.58.101
# Network: Host-only

# Installer services vulnérables (pour TESTS UNIQUEMENT!):
sudo apt install -y vsftpd ssh apache2


# 7. Tests depuis Kali:

# Ping:
ping -c 3 192.168.58.101
# -> Succès!

# Scan ports (Nmap):
nmap -sV 192.168.58.101

# Output:
# PORT    STATE SERVICE VERSION
# 21/tcp  open  ftp     vsftpd 3.0.5
# 22/tcp  open  ssh     OpenSSH 8.9
# 80/tcp  open  http    Apache httpd 2.4.52

# Scan vulnérabilités:
nmap --script vuln 192.168.58.101


# 8. Wireshark capture:

# Sur Kali:
sudo wireshark

# Sélectionner eth0
# Start capture

# Générer trafic depuis Ubuntu:
curl http://192.168.58.100

# Analyser paquets dans Wireshark


# [ATTENTION] AVERTISSEMENT ÉTHIQUE:
# ═════════════════════════

# Ces outils sont UNIQUEMENT pour:
# [OK] Lab personnel isolé
# [OK] Formation sécurité
# [OK] Tests avec permission explicite
# 
# [X] JAMAIS sur réseaux/systèmes sans autorisation
# [X] Illégal et passible de poursuites
# 
# Réseau Host-only = Isolation totale
# -> Pas de risque fuite vers Internet


# EXERCICES LAB SÉCURITÉ:
# ══════════════════════

# 1. Brute-force SSH (Hydra):
hydra -l user -P /usr/share/wordlists/rockyou.txt ssh://192.168.58.101

# 2. Scan web (Nikto):
nikto -h http://192.168.58.101

# 3. Exploitation Metasploit:
msfconsole
use exploit/unix/ftp/vsftpd_234_backdoor
set RHOST 192.168.58.101
exploit

# 4. Man-in-the-Middle (Ettercap):
sudo ettercap -G
# ARP poisoning entre VMs


# SNAPSHOT AVANT TESTS:
# ════════════════════

# TOUJOURS prendre snapshot avant exploits:
# VM -> Snapshot -> Take Snapshot
# Name: "Before exploitation tests"
# 
# Si système cassé:
# -> Restore snapshot


# ═══ 9.4 LAB 4: ACTIVE DIRECTORY (Windows Server + Client) ═══

# OBJECTIF:
# ════════

# Domaine Active Directory avec:
# - 1 Windows Server (Domain Controller)
# - 1 Windows 10/11 (Client)


# PRÉREQUIS:
# ═════════

# ISOs:
# • Windows Server 2022 (6GB)
# • Windows 10/11 (5GB)
# 
# Licences:
# • Trials 180 jours disponibles
# • https://www.microsoft.com/en-us/evalcenter/


# ARCHITECTURE:
# ════════════

# Domain: lab.local
# DC: dc1.lab.local (192.168.58.10)
# Client: pc1.lab.local (192.168.58.20)
# Réseau: Host-only (isolé)


# ÉTAPE 1: Créer VM Windows Server
# ════════════════════════════════

# Nouvelle VM:
# OS: Windows Server 2022
# RAM: 4GB minimum (8GB recommandé)
# CPU: 2 cores
# Disk: 60GB
# Network: Host-only


# Installation Windows Server:
# ──────────────────────────

# 1. Boot depuis ISO
# 2. Language: English / Français
# 3. Install Now
# 4. Edition: Windows Server 2022 Standard (Desktop Experience)
# 5. Custom Install
# 6. Disk: Use entire disk -> Next
# 7. Installation... (10-20 minutes)
# 8. Administrator password: P@ssw0rd123!


# Configuration initiale:
# ──────────────────────

# 1. Server Manager s'ouvre
# 2. Configure this local server
# 3. Computer name: DC1 -> Restart


# ÉTAPE 2: Configurer IP statique
# ═══════════════════════════════

# Settings -> Network -> Change adapter options
# -> Ethernet -> Properties -> IPv4

# IP: 192.168.58.10
# Mask: 255.255.255.0
# Gateway: (vide, pas besoin)
# DNS: 127.0.0.1 (lui-même après AD)

# -> OK


# ÉTAPE 3: Installer Active Directory
# ═══════════════════════════════════

# Server Manager -> Add roles and features

# 1. Installation Type: Role-based
# -> Next

# 2. Server Selection: DC1
# -> Next

# 3. Server Roles:
# [x] Active Directory Domain Services
# -> Add Features -> Next

# 4. Features: (défaut) -> Next
# 5. AD DS: (info) -> Next
# 6. Confirmation -> Install

# Installation... (5-10 minutes)

# -> Close


# ÉTAPE 4: Promouvoir en Domain Controller
# ════════════════════════════════════════

# Server Manager -> Flag icon (notification)
# -> "Promote this server to a domain controller"

# Deployment Configuration:
# ⦿ Add a new forest
# Root domain name: lab.local
# -> Next

# Domain Controller Options:
# Forest functional level: Windows Server 2016
# Domain functional level: Windows Server 2016
# 
# [x] Domain Name System (DNS) server
# [x] Global Catalog (GC)
# 
# DSRM password: P@ssw0rd123!
# -> Next

# DNS Options: (défaut) -> Next
# Additional Options: NetBIOS: LAB -> Next
# Paths: (défaut) -> Next
# Review: -> Next
# Prerequisites: Vérifications... -> Install

# Installation AD... (10-15 minutes)
# Server redémarre automatiquement


# APRÈS REDÉMARRAGE:
# ═════════════════

# Login: LAB\Administrator
# Password: P@ssw0rd123!

# Server Manager -> Tools -> Active Directory Users and Computers

# Domaine "lab.local" visible!


# ÉTAPE 5: Créer utilisateurs AD
# ══════════════════════════════

# AD Users and Computers:

# 1. Expand lab.local
# 2. Right-click Users -> New -> User

# First name: Jean
# Last name: Dupont
# User logon name: jdupont
# -> Next

# Password: User123!
# [ ] User must change password at next logon
# [x] Password never expires (pour lab)
# -> Next -> Finish

# Créer plusieurs users:
# • jdupont (Jean Dupont)
# • mmartin (Marie Martin)
# • pbernard (Pierre Bernard)


# ÉTAPE 6: Créer Organizational Units (OUs)
# ═════════════════════════════════════════

# Right-click lab.local -> New -> Organizational Unit

# Name: IT
# -> OK

# Repeat:
# • Marketing
# • Sales
# • HR

# Déplacer users dans OUs:
# Drag jdupont -> IT OU


# ÉTAPE 7: Créer VM Windows 10 Client
# ═══════════════════════════════════

# Nouvelle VM:
# OS: Windows 10/11
# RAM: 4GB
# CPU: 2 cores
# Disk: 40GB
# Network: Host-only (même que DC)

# Installation Windows 10:
# Standard, skip Microsoft account


# ÉTAPE 8: Joindre Client au domaine
# ══════════════════════════════════

# Configuration IP Client:
# IP: 192.168.58.20
# Mask: 255.255.255.0
# DNS: 192.168.58.10 (DC!)

# Test DNS:
# CMD:
nslookup lab.local
# Server: dc1.lab.local
# Address: 192.168.58.10
# -> DNS fonctionne!

# Joindre domaine:
# Settings -> System -> About
# -> Advanced system settings
# -> Computer Name -> Change

# Member of:
# ⦿ Domain: lab.local
# -> OK

# Credentials:
# User: LAB\Administrator
# Password: P@ssw0rd123!
# -> OK

# "Welcome to the lab.local domain"
# -> Restart Now


# ÉTAPE 9: Login utilisateur domaine
# ══════════════════════════════════

# Après reboot Client:
# -> Other user
# User: LAB\jdupont
# Password: User123!

# Login réussi!
# User du domaine connecté!


# TESTS FONCTIONNALITÉS AD:
# ════════════════════════

# 1. Group Policy:
# Sur DC: gpmc.msc (Group Policy Management)
# Créer GPO: "Disable USB"
# Link to: lab.local OU

# 2. Shared folders:
# Sur DC: Créer \\dc1\shared
# Permissions: Domain Users (Read)

# Client:
# Explorer: \\dc1\shared
# -> Accessible!

# 3. Roaming Profiles:
# AD Users -> jdupont -> Profile
# Profile path: \\dc1\profiles\%username%

# 4. Password reset:
# AD Users -> jdupont -> Reset Password


# ═══ 9.5 LAB 5: LOAD BALANCER (HAProxy) ═══

# OBJECTIF:
# ════════

# 3 VMs:
# • HAProxy (Load Balancer): 192.168.58.10
# • Web1 (Apache): 192.168.58.11
# • Web2 (Apache): 192.168.58.12


# ARCHITECTURE:
# ════════════

#        Client
#           v
#      [HAProxy] :80
#      192.168.58.10
#         <-    ->
#    [Web1]    [Web2]
#   :80 .11    :80 .12


# PROCÉDURE:
# ═════════

# 1. Créer 3 VMs Ubuntu Server
# 2. IPs statiques (voir config précédentes)
# 3. Network: Host-only


# ÉTAPE 1: Configurer Web1 et Web2
# ════════════════════════════════

# Sur Web1:
sudo apt update
sudo apt install -y apache2

# Page custom:
echo "<h1>Web Server 1</h1>" | sudo tee /var/www/html/index.html

# Test:
curl http://localhost
# <h1>Web Server 1</h1>


# Sur Web2:
sudo apt install -y apache2
echo "<h1>Web Server 2</h1>" | sudo tee /var/www/html/index.html


# ÉTAPE 2: Installer HAProxy
# ══════════════════════════

# Sur HAProxy VM:
sudo apt update
sudo apt install -y haproxy


# ÉTAPE 3: Configurer HAProxy
# ═══════════════════════════

sudo nano /etc/haproxy/haproxy.cfg

# Ajouter à la fin:
frontend http_front
    bind *:80
    default_backend http_back

backend http_back
    balance roundrobin
    server web1 192.168.58.11:80 check
    server web2 192.168.58.12:80 check

# Explication:
# • frontend: Point d'entrée (port 80)
# • backend: Pool de serveurs
# • balance roundrobin: Alternance Web1/Web2
# • check: Health check (ping serveurs)


# Redémarrer HAProxy:
sudo systemctl restart haproxy
sudo systemctl enable haproxy


# ÉTAPE 4: Tester Load Balancing
# ══════════════════════════════

# Depuis hôte ou autre VM:
curl http://192.168.58.10
# <h1>Web Server 1</h1>

curl http://192.168.58.10
# <h1>Web Server 2</h1>

curl http://192.168.58.10
# <h1>Web Server 1</h1>

# -> Alterne entre Web1 et Web2!


# HAProxy Stats:
# ═════════════

# Ajouter à haproxy.cfg:
listen stats
    bind *:8080
    stats enable
    stats uri /stats
    stats auth admin:password

sudo systemctl restart haproxy

# Navigateur: http://192.168.58.10:8080/stats
# Login: admin / password
# -> Dashboard HAProxy avec statuts serveurs!


# EXERCICE: Simuler panne
# ══════════════════════

# Arrêter Web1:
# Sur Web1:
sudo systemctl stop apache2

# Tester:
curl http://192.168.58.10
# Toujours "Web Server 2"!
# -> HAProxy détecte panne Web1, reroute vers Web2

# Redémarrer Web1:
sudo systemctl start apache2
# -> HAProxy re-détecte, redistribue traffic


# ═══ 9.6 LAB 6: CONTENEURS DOCKER DANS VM ═══

# OBJECTIF:
# ════════

# VM Ubuntu avec Docker
# Déployer stack web (Nginx + MySQL + PHP)


# PROCÉDURE:
# ═════════

# 1. Créer VM Ubuntu Server
# RAM: 4GB
# CPU: 2 cores
# Disk: 30GB


# ÉTAPE 1: Installer Docker
# ═════════════════════════

# Mise à jour:
sudo apt update
sudo apt upgrade -y

# Dépendances:
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# Clé GPG Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Repository:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

# Installer Docker:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

# Vérifier:
sudo docker --version
# Docker version 24.0.x

# Ajouter user au groupe docker:
sudo usermod -aG docker $USER
newgrp docker

# Test:
docker run hello-world
# "Hello from Docker!"


# ÉTAPE 2: Installer Docker Compose
# ═════════════════════════════════

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version
# Docker Compose version v2.x.x


# ÉTAPE 3: Créer stack LEMP
# ═════════════════════════

# Créer dossier projet:
mkdir -p ~/docker-lemp
cd ~/docker-lemp

# Créer docker-compose.yml:
nano docker-compose.yml

# Contenu:
version: '3.8'

services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - php
    networks:
      - lemp-network

  php:
    image: php:8.2-fpm
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - lemp-network

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: testdb
      MYSQL_USER: user
      MYSQL_PASSWORD: userpassword
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - lemp-network

networks:
  lemp-network:
    driver: bridge

volumes:
  mysql-data:


# Créer fichier HTML:
mkdir html
echo "<h1>LEMP Stack dans VMware!</h1>" > html/index.html


# Lancer stack:
docker-compose up -d

# Vérifier containers:
docker ps

# CONTAINER ID   IMAGE              STATUS
# abc123         nginx:latest       Up 10 seconds
# def456         php:8.2-fpm       Up 10 seconds
# ghi789         mysql:8.0         Up 10 seconds


# ÉTAPE 4: Tester
# ══════════════

# Trouver IP VM:
ip addr show ens33
# 192.168.58.100

# Depuis hôte:
# Navigateur: http://192.168.58.100
# -> "LEMP Stack dans VMware!"


# COMMANDES DOCKER UTILES:
# ════════════════════════

# Lister containers:
docker ps -a

# Logs container:
docker logs nginx

# Entrer dans container:
docker exec -it nginx bash

# Arrêter stack:
docker-compose down

# Reconstruire:
docker-compose up -d --build

# Supprimer tout:
docker-compose down -v


# ═══ 9.7 LAB 7: VPN (WireGuard Server) ═══

# OBJECTIF:
# ════════

# VM Ubuntu avec WireGuard VPN Server
# Client se connecte depuis hôte


# ARCHITECTURE:
# ════════════

# VM WireGuard Server: 192.168.58.10 (Host-only)
# VPN network: 10.0.0.0/24
# Server VPN: 10.0.0.1
# Client VPN: 10.0.0.2


# PROCÉDURE:
# ═════════

# VM Ubuntu Server 22.04
# Network: Host-only + NAT (2 NICs)
# • ens33: NAT (Internet)
# • ens34: Host-only (192.168.58.10)


# ÉTAPE 1: Installer WireGuard
# ════════════════════════════

sudo apt update
sudo apt install -y wireguard


# ÉTAPE 2: Générer clés
# ═════════════════════

# Clés serveur:
cd /etc/wireguard
sudo umask 077
sudo wg genkey | sudo tee server_private.key
sudo cat server_private.key | wg pubkey | sudo tee server_public.key

# Clés client:
sudo wg genkey | sudo tee client_private.key
sudo cat client_private.key | wg pubkey | sudo tee client_public.key

# Sauvegarder clés:
sudo cat server_private.key  # Noter cette clé
sudo cat server_public.key   # Noter
sudo cat client_private.key  # Noter
sudo cat client_public.key   # Noter


# ÉTAPE 3: Configurer serveur
# ═══════════════════════════

sudo nano /etc/wireguard/wg0.conf

# Contenu (remplacer <SERVER_PRIVATE_KEY> et <CLIENT_PUBLIC_KEY>):
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens33 -j MASQUERADE

[Peer]
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.0.0.2/32

# Explication:
# • Address: IP serveur VPN
# • ListenPort: Port WireGuard
# • PostUp/Down: Règles NAT pour routing
# • Peer: Client autorisé


# Activer IP forwarding:
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p


# Démarrer WireGuard:
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

# Vérifier:
sudo wg show
# interface: wg0
#   listening port: 51820


# ÉTAPE 4: Firewall
# ════════════════

sudo ufw allow 51820/udp
sudo ufw enable


# ÉTAPE 5: Configurer client (Hôte Linux)
# ═══════════════════════════════════════

# Sur hôte, installer WireGuard:
sudo apt install -y wireguard

# Créer config client:
sudo nano /etc/wireguard/wg0-client.conf

# Contenu (remplacer clés):
[Interface]
Address = 10.0.0.2/24
PrivateKey = <CLIENT_PRIVATE_KEY>
DNS = 8.8.8.8

[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = 192.168.58.10:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

# Explication:
# • Endpoint: IP VM serveur
# • AllowedIPs: 0.0.0.0/0 = tout traffic via VPN


# Connecter VPN:
sudo wg-quick up wg0-client

# Vérifier:
sudo wg show
# peer: <SERVER_PUBLIC_KEY>
# endpoint: 192.168.58.10:51820
# latest handshake: 5 seconds ago

# Test:
ping 10.0.0.1
# -> Ping serveur VPN réussit!


# Déconnecter:
sudo wg-quick down wg0-client


# CONFIGURATION CLIENT WINDOWS:
# ════════════════════════════

# 1. Télécharger WireGuard Windows:
# https://www.wireguard.com/install/

# 2. Installer

# 3. Add Tunnel -> Add empty tunnel

# 4. Coller config:
[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = 10.0.0.2/24
DNS = 8.8.8.8

[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = 192.168.58.10:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

# 5. Save -> Activate


# ═══════════════════════════════════════════════════════════════════
# PARTIE 10: TROUBLESHOOTING AVANCÉ
# ═══════════════════════════════════════════════════════════════════


# ═══ 10.1 VM NE DÉMARRE PAS ═══

# SYMPTÔME 1: "This host supports Intel VT-x, but it is disabled"
# ══════════════════════════════════════════════════════════════

# CAUSE:
# Virtualisation désactivée dans BIOS

# SOLUTION:
# 1. Reboot PC
# 2. Entrer BIOS (F2, Del, F10...)
# 3. Advanced -> CPU Configuration
# 4. Intel VT-x (ou AMD-V) -> Enabled
# 5. Save & Exit


# SYMPTÔME 2: "VMware Workstation and Hyper-V are not compatible"
# ══════════════════════════════════════════════════════════════

# CAUSE:
# Hyper-V activé sur Windows (conflit)

# SOLUTION Windows:
# Méthode 1: GUI
# Control Panel -> Programs -> Turn Windows features on/off
# [ ] Hyper-V (décocher)
# -> OK -> Restart

# Méthode 2: PowerShell (Admin)
bcdedit /set hypervisorlaunchtype off
# Restart

# Réactiver Hyper-V (si besoin):
bcdedit /set hypervisorlaunchtype auto


# SYMPTÔME 3: "Failed to lock the file"
# ═════════════════════════════════════

# CAUSE:
# Fichier .vmdk ou .vmx verrouillé

# SOLUTION:
# 1. Fermer toutes instances VMware
# 2. Supprimer fichiers .lck:
cd ~/vmware/Ubuntu-22.04
rm -rf *.lck

# 3. Relancer VM


# SYMPTÔME 4: "Unable to open kernel device"
# ══════════════════════════════════════════

# CAUSE:
# Modules kernel VMware pas chargés

# SOLUTION Linux:
sudo vmware-modconfig --console --install-all
sudo systemctl restart vmware


# SYMPTÔME 5: Écran noir au boot VM
# ═════════════════════════════════

# CAUSE:
# Problème graphique 3D

# SOLUTION:
# VM éteinte -> Settings -> Display
# [ ] Accelerate 3D graphics (décocher)
# -> OK -> Start VM


# ═══ 10.2 PERFORMANCE VM LENTE ═══

# SYMPTÔME: VM très lente, freeze
# ══════════════════════════════

# DIAGNOSTIC:
# ══════════

# 1. Vérifier allocation ressources:
# VM Settings:
# • RAM: Pas trop (zone verte)
# • CPU: Pas overcommit (>100%)

# 2. Dans VM, vérifier utilisation:
top
htop

# 3. I/O disque:
iostat -x 1

# Si I/O > 80%: Disque saturé


# SOLUTIONS:
# ═════════

# 1. Augmenter RAM VM:
# Settings -> Memory -> 4GB -> 8GB

# 2. Augmenter CPU:
# Settings -> Processors -> 2 -> 4 cores

# 3. SSD au lieu HDD:
# Déplacer VM sur SSD

# 4. Désactiver indexation disque (Windows VM):
# Services -> Windows Search -> Disabled

# 5. Désactiver antivirus temps réel (tests):
# Temporaire pour identifier cause

# 6. Compacter disque VM:
# VM -> Settings -> Hard Disk -> Compact

# 7. Défragmenter (HDD):
vmware-vdiskmanager -d disk.vmdk

# 8. Fermer applications hôte lourdes:
# Chrome (20 onglets), jeux, etc.

# 9. Vérifier snapshots:
# Trop de snapshots (>5) = lent
# -> Supprimer anciens

# 10. Installer VMware Tools:
# Optimise performance


# ═══ 10.3 PROBLÈMES RÉSEAU ═══

# SYMPTÔME: Pas d'Internet dans VM
# ════════════════════════════════

# CHECKLIST COMPLÈTE:
# ══════════════════

# 1. Mode réseau:
# Settings -> NAT ou Bridged (PAS Host-only!)

# 2. Carte connectée:
# Settings -> Network Adapter
# [x] Connected
# [x] Connect at power on

# 3. IP attribuée:
ip addr show
# Doit afficher inet X.X.X.X

# 4. DHCP client:
sudo dhclient -v ens33

# 5. Route par défaut:
ip route | grep default

# Si absente:
sudo ip route add default via 192.168.253.2

# 6. DNS:
cat /etc/resolv.conf
# nameserver X.X.X.X

# Si vide:
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

# 7. Ping gateway:
ping -c 3 192.168.253.2

# 8. Ping DNS externe:
ping -c 3 8.8.8.8

# 9. Test DNS resolution:
nslookup google.com

# 10. Firewall VM:
sudo ufw status
# Si actif:
sudo ufw disable  # Test

# 11. Services VMware (hôte Linux):
sudo systemctl status vmware-networking
sudo systemctl restart vmware-networking

# 12. Réinitialiser réseau VM:
sudo systemctl restart NetworkManager

# 13. Recréer interface virtuelle (hôte):
sudo vmware-netcfg


# SYMPTÔME: VM très lente réseau
# ═════════════════════════════

# SOLUTION:
# 1. Changer adapter type:
# Settings -> Network Adapter
# Adapter type: VMXNET3 (meilleur performance)

# 2. Installer VMware Tools (contient drivers optimisés)


# SYMPTÔME: Host-only pas de communication
# ════════════════════════════════════════

# 1. Vérifier IP hôte vmnet:
ip addr show vmnet1
# Doit avoir IP (ex: 192.168.58.1)

# Si absent:
sudo systemctl restart vmware-networking

# 2. VM même subnet:
# VM: 192.168.58.x
# Hôte vmnet1: 192.168.58.1

# 3. Firewall hôte:
# Autoriser vmnet1


# ═══ 10.4 PROBLÈMES VMWARE TOOLS ═══

# SYMPTÔME: Copy-paste ne fonctionne pas
# ══════════════════════════════════════

# SOLUTION:
# 1. Vérifier VMware Tools installé:
dpkg -l | grep open-vm-tools

# Si absent:
sudo apt install open-vm-tools open-vm-tools-desktop

# 2. Vérifier service:
sudo systemctl status vmtoolsd

# Si stopped:
sudo systemctl start vmtoolsd
sudo systemctl enable vmtoolsd

# 3. Vérifier paramètres VM:
# VM -> Settings -> Options -> Guest Isolation
# [x] Enable copy and paste
# [x] Enable drag and drop


# SYMPTÔME: Résolution écran ne s'ajuste pas
# ══════════════════════════════════════════

# SOLUTION:
# 1. Installer open-vm-tools-desktop:
sudo apt install open-vm-tools-desktop

# 2. Redémarrer VM

# 3. Forcer résolution:
xrandr --output Virtual-1 --mode 1920x1080


# SYMPTÔME: Shared folders vides
# ══════════════════════════════

# SOLUTION:
# 1. Vérifier config VM:
# Settings -> Options -> Shared Folders
# -> Enabled

# 2. Monter manuellement:
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid=1000

# 3. Auto-mount au boot:
echo ".host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,defaults 0 0" | sudo tee -a /etc/fstab


# ═══ 10.5 PROBLÈMES SNAPSHOTS ═══

# SYMPTÔME: "Unable to take snapshot"
# ═══════════════════════════════════

# CAUSE 1: Disque plein
# SOLUTION:
df -h
# Libérer espace disque hôte

# CAUSE 2: Trop de snapshots
# SOLUTION:
# Supprimer anciens snapshots

# CAUSE 3: Fichiers snapshot corrompus
# SOLUTION:
# VM éteinte:
cd ~/vmware/VM/
ls -la *.vmsd *.vmsn
# Sauvegarder puis supprimer si corrompu


# SYMPTÔME: "Consolidation needed"
# ════════════════════════════════

# CAUSE:
# Snapshots non consolidés après suppression

# SOLUTION:
# VM -> Snapshot -> Snapshot Manager
# -> Delete All Snapshots
# Attend consolidation complète


# ═══ 10.6 PROBLÈMES DISQUE VM ═══

# SYMPTÔME: Disk space usage incohérent
# ═════════════════════════════════════

# Dans VM: df -h -> 10GB utilisés
# Hôte: disk.vmdk -> 30GB!

# CAUSE:
# Espace libéré dans VM pas rendu à hôte

# SOLUTION:
# 1. Dans VM, zéro espace libre:
sudo apt install zerofree
sudo dd if=/dev/zero of=/tmp/zero.file bs=1M
rm /tmp/zero.file

# 2. VM éteinte, compacter:
vmware-vdiskmanager -k disk.vmdk


# SYMPTÔME: "No space left on device" (VM)
# ════════════════════════════════════════

# SOLUTION:
# 1. Vérifier taille disque VM:
# Settings -> Hard Disk -> 40GB

# 2. Agrandir si nécessaire:
# Settings -> Hard Disk -> Expand
# 40GB -> 60GB

# 3. Dans VM, étendre partition:
sudo apt install cloud-guest-utils
sudo growpart /dev/sda 1
sudo resize2fs /dev/sda1

# Vérifier:
df -h
# /dev/sda1  60G


# ═══ 10.7 RÉCUPÉRATION VM CORROMPUE ═══

# SYMPTÔME: "The file is corrupted"
# ════════════════════════════════

# PROCÉDURE RÉCUPÉRATION:
# ══════════════════════

# 1. SAUVEGARDER fichiers VM:
cp -r ~/vmware/VM ~/backup/

# 2. Tenter réparer .vmdk:
vmware-vdiskmanager -R disk.vmdk

# 3. Si échec, extraire données:
# Monter .vmdk sur autre VM:
# Nouvelle VM -> Use existing disk -> disk.vmdk

# 4. Restaurer snapshot précédent:
# Si snapshots existent

# 5. Last resort - Recréer VM:
# Créer nouvelle VM
# Attacher ancien disque


# SYMPTÔME: VMX file missing/corrupted
# ════════════════════════════════════

# SOLUTION:
# Recréer .vmx manuellement

nano VM.vmx

# Contenu minimal:
.encoding = "UTF-8"
config.version = "8"
virtualHW.version = "19"
guestOS = "ubuntu-64"
displayName = "Ubuntu VM"
memsize = "4096"
numvcpus = "2"
scsi0:0.present = "TRUE"
scsi0:0.fileName = "disk.vmdk"
ethernet0.present = "TRUE"
ethernet0.connectionType = "nat"


# ═══ 10.8 OUTILS DIAGNOSTIC ═══

# VMWARE LOGS:
# ═══════════

# Log principal VM:
tail -f ~/vmware/VM/vmware.log

# Messages importants:
grep -i error vmware.log
grep -i warning vmware.log


# INFORMATIONS SYSTÈME VM:
# ════════════════════════

# VMware version:
vmware --version

# Modules kernel:
lsmod | grep vm

# Services:
systemctl status vmware
systemctl status vmware-networking


# RÉSEAU:
# ══════

# Interfaces virtuelles hôte:
ip addr show | grep vmnet

# Routing tables:
ip route show

# ARP cache:
ip neigh show

# Firewall:
sudo iptables -L -n -v


# DISQUE:
# ══════

# Informations .vmdk:
vmware-vdiskmanager -i disk.vmdk

# Taille:
du -sh disk*.vmdk

# Inodes:
df -i


# PERFORMANCE:
# ═══════════

# CPU/RAM hôte:
htop
top

# I/O:
iostat -x 1 10

# Réseau:
iftop -i vmnet8

# Processes VMware:
ps aux | grep vmware


# ═══════════════════════════════════════════════════════════════════
# PARTIE 11: AUTOMATISATION ET SCRIPTING
# ═══════════════════════════════════════════════════════════════════


# ═══ 11.1 SCRIPTS VMRUN ═══

# SCRIPT 1: Démarrer/Arrêter multiple VMs
# ═══════════════════════════════════════

#!/bin/bash
# vm-manager.sh

VM_DIR="/home/user/vmware"
VMS=(
    "Ubuntu-Server/Ubuntu-Server.vmx"
    "Ubuntu-Client/Ubuntu-Client.vmx"
    "Debian-Web/Debian-Web.vmx"
)

start_vms() {
    echo "Démarrage VMs..."
    for vm in "${VMS[@]}"; do
        echo "  -> Démarrage $vm"
        vmrun start "$VM_DIR/$vm" nogui
        sleep 5
    done
    echo "[OK] Toutes les VMs démarrées!"
}

stop_vms() {
    echo "Arrêt VMs..."
    for vm in "${VMS[@]}"; do
        echo "  -> Arrêt $vm"
        vmrun stop "$VM_DIR/$vm" soft
    done
    echo "[OK] Toutes les VMs arrêtées!"
}

status_vms() {
    echo "=== VMs en cours ==="
    vmrun list
}

case "$1" in
    start)
        start_vms
        ;;
    stop)
        stop_vms
        ;;
    status)
        status_vms
        ;;
    restart)
        stop_vms
        sleep 10
        start_vms
        ;;
    *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
        ;;
esac

# Utilisation:
chmod +x vm-manager.sh
./vm-manager.sh start
./vm-manager.sh status
./vm-manager.sh stop


# SCRIPT 2: Backup automatique VMs
# ════════════════════════════════

#!/bin/bash
# vm-backup.sh

BACKUP_DIR="/media/backup/vmware"
VM_DIR="/home/user/vmware"
DATE=$(date +%Y%m%d-%H%M)

backup_vm() {
    local vm_name=$1
    local vm_path="$VM_DIR/$vm_name"
    
    echo "=== Backup $vm_name ==="
    
    # Vérifier si VM running
    if vmrun list | grep -q "$vm_name"; then
        echo "  VM running, création snapshot..."
        vmrun snapshot "$vm_path/$vm_name.vmx" "Backup-$DATE"
    fi
    
    # Créer archive
    echo "  Compression..."
    tar -czf "$BACKUP_DIR/${vm_name}-${DATE}.tar.gz" -C "$VM_DIR" "$vm_name"
    
    # Vérifier taille
    size=$(du -h "$BACKUP_DIR/${vm_name}-${DATE}.tar.gz" | cut -f1)
    echo "  [OK] Backup créé: $size"
    
    # Supprimer snapshot
    if vmrun list | grep -q "$vm_name"; then
        vmrun deleteSnapshot "$vm_path/$vm_name.vmx" "Backup-$DATE"
    fi
}

# Créer dossier backup
mkdir -p "$BACKUP_DIR"

# Backup chaque VM
for vm in Ubuntu-Server Ubuntu-Client; do
    backup_vm "$vm"
done

# Nettoyer anciens backups (>30 jours)
echo "=== Nettoyage anciens backups ==="
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +30 -delete

echo "[OK] Backup complet terminé!"

# Cron pour backup automatique quotidien:
# crontab -e
# 0 2 * * * /home/user/scripts/vm-backup.sh >> /var/log/vm-backup.log 2>&1


# SCRIPT 3: Clone multiple VMs depuis template
# ════════════════════════════════════════════

#!/bin/bash
# deploy-vms.sh

TEMPLATE="/home/user/vmware/Ubuntu-Template"
BASE_DIR="/home/user/vmware"
COUNT=5
PREFIX="Ubuntu-Node"

for i in $(seq 1 $COUNT); do
    VM_NAME="${PREFIX}-${i}"
    VM_DIR="$BASE_DIR/$VM_NAME"
    
    echo "=== Clonage $VM_NAME ==="
    
    # Créer dossier
    mkdir -p "$VM_DIR"
    
    # Cloner disque
    echo "  Clonage disque..."
    vmware-vdiskmanager -r "$TEMPLATE/template.vmdk" -t 0 "$VM_DIR/${VM_NAME}.vmdk"
    
    # Copier et adapter VMX
    cp "$TEMPLATE/template.vmx" "$VM_DIR/${VM_NAME}.vmx"
    sed -i "s/template/$VM_NAME/g" "$VM_DIR/${VM_NAME}.vmx"
    sed -i "s/displayName = .*/displayName = \"$VM_NAME\"/" "$VM_DIR/${VM_NAME}.vmx"
    
    # Générer nouveau UUID
    echo "ethernet0.generatedAddress = \"\"" >> "$VM_DIR/${VM_NAME}.vmx"
    echo "uuid.action = \"create\"" >> "$VM_DIR/${VM_NAME}.vmx"
    
    echo "  [OK] $VM_NAME créé"
done

echo "[OK] $COUNT VMs clonées avec succès!"

# Utilisation:
./deploy-vms.sh


# SCRIPT 4: Monitoring VMs
# ═══════════════════════

#!/bin/bash
# vm-monitor.sh

LOG_FILE="/var/log/vm-monitor.log"

log_message() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

check_vm_status() {
    local vm_path=$1
    local vm_name=$(basename "$vm_path" .vmx)
    
    if vmrun list | grep -q "$vm_path"; then
        log_message "[OK] $vm_name: RUNNING"
        return 0
    else
        log_message "[X] $vm_name: STOPPED"
        return 1
    fi
}

restart_vm_if_stopped() {
    local vm_path=$1
    local vm_name=$(basename "$vm_path" .vmx)
    
    if ! check_vm_status "$vm_path"; then
        log_message "  -> Redémarrage $vm_name..."
        vmrun start "$vm_path" nogui
        sleep 30
        
        if check_vm_status "$vm_path"; then
            log_message "  [OK] $vm_name redémarré avec succès"
            # Envoyer notification (optionnel)
            # notify-send "VM Alert" "$vm_name a été redémarré"
        else
            log_message "  [X] ERREUR: Impossible de redémarrer $vm_name"
            # Envoyer alerte
        fi
    fi
}

# VMs critiques à surveiller
CRITICAL_VMS=(
    "/home/user/vmware/Production-Web/web.vmx"
    "/home/user/vmware/Production-DB/db.vmx"
)

log_message "=== Début surveillance VMs ==="

for vm in "${CRITICAL_VMS[@]}"; do
    restart_vm_if_stopped "$vm"
done

log_message "=== Fin surveillance ==="

# Cron toutes les 5 minutes:
# */5 * * * * /home/user/scripts/vm-monitor.sh


# ═══ 11.2 SCRIPTS PYTHON ═══

# SCRIPT: Gestion VMs avec Python
# ═══════════════════════════════

#!/usr/bin/env python3
# vm_controller.py

import subprocess
import json
import sys
from datetime import datetime

class VMwareController:
    def __init__(self, vmrun_path="vmrun"):
        self.vmrun = vmrun_path
    
    def list_vms(self):
        """Liste toutes les VMs en cours d'exécution"""
        result = subprocess.run(
            [self.vmrun, "list"],
            capture_output=True,
            text=True
        )
        
        lines = result.stdout.strip().split('\n')
        if len(lines) <= 1:
            return []
        
        return lines[1:]  # Ignore première ligne
    
    def start_vm(self, vmx_path, gui=False):
        """Démarre une VM"""
        mode = "gui" if gui else "nogui"
        result = subprocess.run(
            [self.vmrun, "start", vmx_path, mode],
            capture_output=True,
            text=True
        )
        return result.returncode == 0
    
    def stop_vm(self, vmx_path, hard=False):
        """Arrête une VM"""
        mode = "hard" if hard else "soft"
        result = subprocess.run(
            [self.vmrun, "stop", vmx_path, mode],
            capture_output=True,
            text=True
        )
        return result.returncode == 0
    
    def snapshot_vm(self, vmx_path, snapshot_name):
        """Crée un snapshot"""
        result = subprocess.run(
            [self.vmrun, "snapshot", vmx_path, snapshot_name],
            capture_output=True,
            text=True
        )
        return result.returncode == 0
    
    def get_vm_ip(self, vmx_path):
        """Récupère l'IP d'une VM"""
        result = subprocess.run(
            [self.vmrun, "getGuestIPAddress", vmx_path, "-wait"],
            capture_output=True,
            text=True,
            timeout=30
        )
        return result.stdout.strip() if result.returncode == 0 else None
    
    def execute_in_vm(self, vmx_path, username, password, command):
        """Execute une commande dans une VM"""
        result = subprocess.run(
            [
                self.vmrun,
                "-gu", username,
                "-gp", password,
                "runProgramInGuest",
                vmx_path,
                "/bin/bash",
                "-c",
                command
            ],
            capture_output=True,
            text=True
        )
        return result.stdout, result.stderr

# Utilisation:
if __name__ == "__main__":
    controller = VMwareController()
    
    # Exemple 1: Lister VMs
    print("VMs en cours:")
    for vm in controller.list_vms():
        print(f"  - {vm}")
    
    # Exemple 2: Démarrer VM
    vm_path = "/home/user/vmware/Ubuntu-Server/Ubuntu-Server.vmx"
    if controller.start_vm(vm_path):
        print(f"[OK] VM démarrée")
        
        # Attendre et récupérer IP
        import time
        time.sleep(30)
        ip = controller.get_vm_ip(vm_path)
        print(f"IP: {ip}")


# ═══ 11.3 ANSIBLE POUR VMs ═══

# Automatiser configuration VMs avec Ansible
# ═════════════════════════════════════════

# Installation Ansible:
sudo apt install -y ansible

# Inventaire VMs:
# inventory.ini
[webservers]
web1 ansible_host=192.168.58.11 ansible_user=user
web2 ansible_host=192.168.58.12 ansible_user=user

[databases]
db1 ansible_host=192.168.58.20 ansible_user=user

[all:vars]
ansible_python_interpreter=/usr/bin/python3
ansible_ssh_private_key_file=~/.ssh/id_rsa


# Playbook: Installer Apache sur tous web servers
# webserver-setup.yml
---
- name: Configuration web servers
  hosts: webservers
  become: yes
  
  tasks:
    - name: Mettre à jour cache APT
      apt:
        update_cache: yes
    
    - name: Installer Apache
      apt:
        name: apache2
        state: present
    
    - name: Démarrer Apache
      service:
        name: apache2
        state: started
        enabled: yes
    
    - name: Créer page index custom
      copy:
        content: |
          <html>
          <head><title>{{ inventory_hostname }}</title></head>
          <body>
          <h1>Web Server: {{ inventory_hostname }}</h1>
          <p>IP: {{ ansible_default_ipv4.address }}</p>
          </body>
          </html>
        dest: /var/www/html/index.html
    
    - name: Configurer firewall
      ufw:
        rule: allow
        port: '80'
        proto: tcp

# Exécuter playbook:
ansible-playbook -i inventory.ini webserver-setup.yml

# Output:
# PLAY [Configuration web servers]
# TASK [Mettre à jour cache APT]     ok: [web1]
# TASK [Installer Apache]            changed: [web1]
# ...
# PLAY RECAP
# web1: ok=5  changed=3
# web2: ok=5  changed=3


# Playbook: Déployer application
# deploy-app.yml
---
- name: Déployer application
  hosts: webservers
  become: yes
  
  vars:
    app_dir: /var/www/myapp
    git_repo: https://github.com/user/myapp.git
  
  tasks:
    - name: Installer Git
      apt:
        name: git
        state: present
    
    - name: Cloner repository
      git:
        repo: "{{ git_repo }}"
        dest: "{{ app_dir }}"
        version: main
    
    - name: Configurer Apache vhost
      template:
        src: templates/vhost.conf.j2
        dest: /etc/apache2/sites-available/myapp.conf
      notify: reload apache
    
    - name: Activer site
      command: a2ensite myapp
      notify: reload apache
  
  handlers:
    - name: reload apache
      service:
        name: apache2
        state: reloaded


# ═══════════════════════════════════════════════════════════════════
# PARTIE 12: SÉCURITÉ AVANCÉE
# ═══════════════════════════════════════════════════════════════════


# ═══ 12.1 HARDENING VMs ═══

# SÉCURISER UBUNTU VM:
# ═══════════════════

# 1. Mises à jour automatiques
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

# 2. Firewall (UFW)
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp  # SSH
sudo ufw enable

# 3. Fail2Ban (protection brute-force SSH)
sudo apt install -y fail2ban

sudo nano /etc/fail2ban/jail.local
# Contenu:
[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 3600

sudo systemctl restart fail2ban

# 4. Désactiver root SSH
sudo nano /etc/ssh/sshd_config
# Modifier:
PermitRootLogin no
PasswordAuthentication no  # Utiliser clés SSH

sudo systemctl restart sshd

# 5. SSH avec clés uniquement
# Sur hôte:
ssh-keygen -t ed25519 -C "vm-key"
ssh-copy-id user@192.168.58.10

# Test:
ssh user@192.168.58.10
# Login sans password!

# 6. Désactiver services inutiles
sudo systemctl list-unit-files --state=enabled
sudo systemctl disable bluetooth
sudo systemctl disable cups  # Impression

# 7. Auditer packages
sudo apt install -y debsums
sudo debsums -c  # Vérifier intégrité fichiers

# 8. AppArmor (Mandatory Access Control)
sudo apt install -y apparmor-utils
sudo aa-status  # Statut profiles

# 9. Limiter ressources utilisateurs
sudo nano /etc/security/limits.conf
# Ajouter:
* soft nproc 1000
* hard nproc 1500

# 10. Sysctl hardening
sudo nano /etc/sysctl.conf
# Ajouter:
# Protection SYN flood
net.ipv4.tcp_syncookies = 1
# Désactiver IP forwarding (si pas routeur)
net.ipv4.ip_forward = 0
# Protection ICMP
net.ipv4.icmp_echo_ignore_broadcasts = 1

sudo sysctl -p


# ═══ 12.2 CHIFFREMENT VM ═══

# CHIFFRER DISQUE VM (Workstation Pro):
# ═════════════════════════════════════

# VM éteinte:
# VM -> Manage -> Encrypt

# Password: P@ssw0rd_Strong_123!
# -> Encrypt

# Fichiers .vmdk chiffrés (AES-256)
# Démarrage VM demande password


# ALTERNATIVE: LUKS dans VM
# ════════════════════════

# Chiffrer partition DANS la VM:

# 1. Ajouter nouveau disque (ex: /dev/sdb)

# 2. Installer cryptsetup:
sudo apt install -y cryptsetup

# 3. Créer container LUKS:
sudo cryptsetup luksFormat /dev/sdb
# WARNING: This will overwrite data!
# Are you sure? YES
# Enter passphrase: ********

# 4. Ouvrir container:
sudo cryptsetup luksOpen /dev/sdb encrypted_data

# 5. Créer filesystem:
sudo mkfs.ext4 /dev/mapper/encrypted_data

# 6. Monter:
sudo mkdir /mnt/encrypted
sudo mount /dev/mapper/encrypted_data /mnt/encrypted

# 7. Utiliser:
echo "Données sensibles" | sudo tee /mnt/encrypted/secret.txt

# 8. Fermer:
sudo umount /mnt/encrypted
sudo cryptsetup luksClose encrypted_data


# AUTO-MOUNT LUKS AU BOOT:
# ════════════════════════

# /etc/crypttab:
encrypted_data /dev/sdb none luks

# /etc/fstab:
/dev/mapper/encrypted_data /mnt/encrypted ext4 defaults 0 2

# Au boot, demandera passphrase


# ═══ 12.3 ISOLATION RÉSEAU ═══

# SEGMENTATION AVEC VLANs VIRTUELS:
# ═════════════════════════════════

# Créer réseaux isolés:

# Réseau DMZ (serveurs publics):
# vmnet2: 10.0.1.0/24

# Réseau INTERNE (bases données):
# vmnet3: 10.0.2.0/24

# Réseau ADMIN:
# vmnet4: 10.0.3.0/24


# VM Firewall (pfsense/iptables):
# • NIC1: NAT (Internet)
# • NIC2: vmnet2 (DMZ)
# • NIC3: vmnet3 (Interne)
# • NIC4: vmnet4 (Admin)

# Règles firewall:
# • Internet -> DMZ: HTTP/HTTPS uniquement
# • DMZ -> Interne: MySQL (port 3306) uniquement
# • Admin -> Tous: Accès complet
# • DMZ <-> Interne: Interdit sauf whitelist


# ═══ 12.4 AUDITLOG ET MONITORING ═══

# ACTIVER AUDITD (VM):
# ═══════════════════

sudo apt install -y auditd

# Règles audit:
sudo nano /etc/audit/rules.d/custom.rules

# Surveiller fichiers sensibles:
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/sudoers -p wa -k sudoers_changes

# Surveiller commandes:
-a always,exit -F arch=b64 -S execve -k exec_commands

# Recharger:
sudo augenrules --load

# Consulter logs:
sudo ausearch -k passwd_changes
sudo aureport --summary


# MONITORING AVEC PROMETHEUS + GRAFANA:
# ═════════════════════════════════════

# Architecture:
# • VM1: Prometheus Server
# • VM2-5: Node Exporters (collecte métriques)
# • VM1: Grafana (dashboards)


# Sur chaque VM monitorée:
# ───────────────────────

# Installer node_exporter:
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar -xzf node_exporter-*.tar.gz
sudo mv node_exporter-*/node_exporter /usr/local/bin/

# Service systemd:
sudo nano /etc/systemd/system/node_exporter.service

[Unit]
Description=Node Exporter

[Service]
User=nobody
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target

sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter


# Sur VM Prometheus:
# ─────────────────

# Installer Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
tar -xzf prometheus-*.tar.gz
sudo mv prometheus-*/prometheus /usr/local/bin/
sudo mv prometheus-*/promtool /usr/local/bin/
sudo mkdir /etc/prometheus /var/lib/prometheus

# Configuration:
sudo nano /etc/prometheus/prometheus.yml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets:
        - '192.168.58.11:9100'  # VM1
        - '192.168.58.12:9100'  # VM2
        - '192.168.58.13:9100'  # VM3

# Service:
sudo nano /etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus

[Service]
User=prometheus
ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus

[Install]
WantedBy=multi-user.target

sudo useradd -rs /bin/false prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus

# Accès web: http://192.168.58.10:9090


# Installer Grafana:
# ─────────────────

sudo apt install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo apt update
sudo apt install -y grafana

sudo systemctl start grafana-server
sudo systemctl enable grafana-server

# Accès: http://192.168.58.10:3000
# Login: admin / admin

# Ajouter data source Prometheus:
# Configuration -> Data Sources -> Add Prometheus
# URL: http://localhost:9090

# Importer dashboard:
# Dashboard -> Import -> 1860 (Node Exporter Full)


# ═══════════════════════════════════════════════════════════════════
# PARTIE 13: SCÉNARIOS AVANCÉS
# ═══════════════════════════════════════════════════════════════════


# ═══ 13.1 INFRASTRUCTURE AS CODE (Terraform) ═══

# Déployer VMs avec Terraform:
# ════════════════════════════

# Installation Terraform:
wget https://releases.hashicorp.com/terraform/1.6.6/terraform_1.6.6_linux_amd64.zip
unzip terraform_*.zip
sudo mv terraform /usr/local/bin/

terraform --version


# Provider VMware (vsphere pour ESXi ou custom pour Workstation):
# Pour Workstation, utiliser script wrapper


# Exemple structure:
# main.tf
provider "vmware" {
  # Configuration
}

resource "vmware_virtual_machine" "web" {
  count = 3
  name  = "web-${count.index + 1}"
  
  num_cpus = 2
  memory   = 4096
  
  network_interface {
    network_id = "vmnet8"
  }
  
  disk {
    size = 40
  }
  
  clone {
    template_uuid = "ubuntu-template"
  }
}


# ═══ 13.2 CI/CD AVEC JENKINS ═══

# VM Jenkins + VMs build slaves:
# ══════════════════════════════

# Architecture:
# • VM Jenkins Master: 192.168.58.10
# • VM Build Slave 1: 192.168.58.21
# • VM Build Slave 2: 192.168.58.22


# Installer Jenkins (VM Master):
# ──────────────────────────────

# Java:
sudo apt install -y openjdk-11-jdk

# Jenkins:
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
echo "deb https://pkg.jenkins.io/debian binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list
sudo apt update
sudo apt install -y jenkins

sudo systemctl start jenkins
sudo systemctl enable jenkins

# Password initial:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

# Web: http://192.168.58.10:8080


# Pipeline Jenkins pour tester dans VM:
# ─────────────────────────────────────

# Jenkinsfile:
pipeline {
    agent any
    
    stages {
        stage('Provision VM') {
            steps {
                script {
                    sh '''
                        # Cloner template
                        vmware-vdiskmanager -r /templates/ubuntu.vmdk -t 0 /tmp/test-vm.vmdk
                        
                        # Démarrer VM
                        vmrun start /tmp/test-vm/vm.vmx nogui
                        
                        # Attendre boot
                        sleep 60
                    '''
                }
            }
        }
        
        stage('Deploy App') {
            steps {
                sh '''
                    # Copier app dans VM
                    vmrun -gu user -gp pass copyFileFromHostToGuest \
                        /tmp/test-vm/vm.vmx \
                        ./app.tar.gz \
                        /tmp/app.tar.gz
                    
                    # Installer
                    vmrun -gu user -gp pass runProgramInGuest \
                        /tmp/test-vm/vm.vmx \
                        /bin/bash \
                        -c \
                        "cd /tmp && tar -xzf app.tar.gz && ./install.sh"
                '''
            }
        }
        
        stage('Test') {
            steps {
                sh '''
                    # Récupérer IP VM
                    VM_IP=$(vmrun getGuestIPAddress /tmp/test-vm/vm.vmx)
                    
                    # Tests
                    curl http://$VM_IP/health
                    pytest tests/
                '''
            }
        }
    }
    
    post {
        always {
            sh '''
                # Cleanup: Arrêter et supprimer VM
                vmrun stop /tmp/test-vm/vm.vmx hard
                rm -rf /tmp/test-vm
            '''
        }
    }
}


# ═══ 13.3 LAB KUBERNETES ═══

# Cluster K8s dans VMs:
# ════════════════════

# Architecture:
# • Master: 192.168.58.10 (2 CPU, 4GB RAM)
# • Worker1: 192.168.58.11 (2 CPU, 2GB RAM)
# • Worker2: 192.168.58.12 (2 CPU, 2GB RAM)


# Sur toutes les VMs:
# ──────────────────

# Désactiver swap:
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# Modules kernel:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# Sysctl:
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sudo sysctl --system

# Installer containerd:
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd

# Installer kubeadm, kubelet, kubectl:
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl


# Sur Master uniquement:
# ─────────────────────

# Init cluster:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.58.10

# Output contient commande join, sauvegarder!
# kubeadm join 192.168.58.10:6443 --token xxx --discovery-token-ca-cert-hash sha256:yyy

# Config kubectl:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# Installer CNI (Flannel):
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml


# Sur Workers:
# ───────────

# Join cluster (utiliser commande du master):
sudo kubeadm join 192.168.58.10:6443 --token xxx --discovery-token-ca-cert-hash sha256:yyy


# Vérifier cluster (Master):
# ─────────────────────────

kubectl get nodes
# NAME      STATUS   ROLES           AGE   VERSION
# master    Ready    control-plane   5m    v1.28.0
# worker1   Ready    <none>          2m    v1.28.0
# worker2   Ready    <none>          2m    v1.28.0


# Déployer app test:
# ─────────────────

kubectl create deployment nginx --image=nginx --replicas=3
kubectl expose deployment nginx --port=80 --type=NodePort

kubectl get pods
kubectl get svc


# ═══════════════════════════════════════════════════════════════════
# PARTIE 14: RESSOURCES ET RÉFÉRENCES
# ═══════════════════════════════════════════════════════════════════


# ═══ 14.1 COMMANDES RÉFÉRENCE RAPIDE ═══

# VMWARE WORKSTATION:
# ══════════════════

# VM Management:
vmrun list                                    # Lister VMs running
vmrun start /path/to/vm.vmx nogui            # Démarrer VM
vmrun stop /path/to/vm.vmx soft              # Arrêter VM
vmrun reset /path/to/vm.vmx soft             # Redémarrer VM
vmrun suspend /path/to/vm.vmx                # Suspendre VM
vmrun pause /path/to/vm.vmx                  # Pause VM
vmrun unpause /path/to/vm.vmx                # Reprendre VM

# Snapshots:
vmrun snapshot /path/to/vm.vmx "SnapshotName"
vmrun listSnapshots /path/to/vm.vmx
vmrun revertToSnapshot /path/to/vm.vmx "SnapshotName"
vmrun deleteSnapshot /path/to/vm.vmx "SnapshotName"

# Guest Operations:
vmrun -gu user -gp pass runProgramInGuest /path/to/vm.vmx /bin/ls
vmrun -gu user -gp pass copyFileFromHostToGuest /path/to/vm.vmx /host/file /guest/file
vmrun -gu user -gp pass copyFileFromGuestToHost /path/to/vm.vmx /guest/file /host/file

# Information:
vmrun getGuestIPAddress /path/to/vm.vmx
vmrun listProcessesInGuest /path/to/vm.vmx
vmrun listDirectoryInGuest /path/to/vm.vmx /path

# Disk Management:
vmware-vdiskmanager -c -s 40GB -t 0 disk.vmdk    # Créer disque
vmware-vdiskmanager -x 60GB disk.vmdk             # Étendre disque
vmware-vdiskmanager -k disk.vmdk                  # Compacter disque
vmware-vdiskmanager -d disk.vmdk                  # Défragmenter
vmware-vdiskmanager -r source.vmdk -t 0 dest.vmdk # Convertir


# RÉSEAU VM:
# ═════════

# Configuration IP (Ubuntu VM):
ip addr show                               # Afficher IPs
ip route show                             # Routes
sudo dhclient ens33                       # Renouveler DHCP
sudo systemctl restart NetworkManager     # Redémarrer réseau

# Tests:
ping -c 3 gateway
traceroute google.com
nslookup google.com
dig google.com
netstat -tuln                            # Ports ouverts
ss -tuln                                 # Alternative moderne


# VMWARE SERVICES (Linux):
# ═══════════════════════

sudo systemctl status vmware               # Statut services
sudo systemctl start vmware                # Démarrer
sudo systemctl stop vmware                 # Arrêter
sudo systemctl restart vmware              # Redémarrer
sudo systemctl status vmware-networking    # Réseau

sudo vmware-modconfig --console --install-all  # Recompiler modules
lsmod | grep vm                                # Modules chargés


# ═══ 14.2 FICHIERS CONFIGURATION ═══

# FICHIERS VM:
# ═══════════

~/.vmware/                               # Config VMware Workstation
~/vmware/                                # Dossier VMs (défaut)

VM_DIR/
├── vm.vmx                               # Configuration VM
├── vm.vmxf                              # Metadata
├── vm.vmdk                              # Descripteur disque
├── vm-flat.vmdk                         # Données disque
├── vm.nvram                             # BIOS/UEFI
├── vm.vmsd                              # Snapshots index
├── vm-SnapshotX.vmsn                    # Snapshot metadata
├── vm-SnapshotX.vmem                    # Snapshot mémoire
├── vm-000001.vmdk                       # Snapshot delta
└── vmware.log                           # Logs VM


# FICHIERS SYSTÈME:
# ════════════════

/etc/vmware/                             # Config globale
/etc/vmware/config                       # Paramètres VMware
/usr/lib/vmware/                         # Binaires
/var/log/vmware/                         # Logs

# Réseau:
/dev/vmnet0, /dev/vmnet1, /dev/vmnet8    # Interfaces virtuelles


# ═══ 14.3 RÉSOLUTION PROBLÈMES COURANTS ═══

# CHECKLIST DIAGNOSTIC COMPLÈTE:
# ══════════════════════════════

# 1. VM ne démarre pas:
[WHITE_SQUARE] Virtualisation activée BIOS?
[WHITE_SQUARE] Modules VMware chargés? (lsmod | grep vm)
[WHITE_SQUARE] Hyper-V désactivé? (Windows)
[WHITE_SQUARE] Fichiers .vmdk pas corrompus?
[WHITE_SQUARE] Espace disque suffisant?
[WHITE_SQUARE] RAM suffisante?

# 2. Pas d'Internet VM:
[WHITE_SQUARE] Mode réseau correct? (NAT/Bridged)
[WHITE_SQUARE] Carte réseau connectée?
[WHITE_SQUARE] IP attribuée? (ip addr show)
[WHITE_SQUARE] Route par défaut? (ip route)
[WHITE_SQUARE] DNS configuré? (cat /etc/resolv.conf)
[WHITE_SQUARE] VMware networking actif? (systemctl status)

# 3. Performance lente:
[WHITE_SQUARE] RAM suffisante? (pas swap)
[WHITE_SQUARE] CPU pas overcommit?
[WHITE_SQUARE] Disque SSD?
[WHITE_SQUARE] Snapshots pas trop nombreux?
[WHITE_SQUARE] VMware Tools installé?
[WHITE_SQUARE] Antivirus pas bloquant?

# 4. Copier-coller ne marche pas:
[WHITE_SQUARE] VMware Tools installé?
[WHITE_SQUARE] Service vmtoolsd actif?
[WHITE_SQUARE] Copy-paste activé dans settings?

# 5. Shared folders vides:
[WHITE_SQUARE] VMware Tools installé?
[WHITE_SQUARE] Shared folders activé settings?
[WHITE_SQUARE] /mnt/hgfs monté?


# ═══ 14.4 LIENS UTILES ═══

# DOCUMENTATION OFFICIELLE:
# ════════════════════════

# VMware:
# https://docs.vmware.com/en/VMware-Workstation-Pro/
# https://kb.vmware.com/  (Knowledge Base)

# Ubuntu:
# https://ubuntu.com/server/docs
# https://help.ubuntu.com/

# Virtualisation:
# https://www.linux-kvm.org/
# https://www.virtualbox.org/manual/


# FORUMS ET COMMUNAUTÉS:
# ═════════════════════

# VMware Communities:
# https://communities.vmware.com/

# Reddit:
# r/vmware
# r/homelab
# r/sysadmin

# Stack Overflow:
# https://stackoverflow.com/questions/tagged/vmware


# TUTORIELS ET BLOGS:
# ══════════════════

# VirtualizationHowto:
# https://www.virtualizationhowto.com/

# TechRepublic:
# https://www.techrepublic.com/


# ═══ 14.5 CERTIFICATIONS ═══

# VMWARE CERTIFICATIONS:
# ═════════════════════

# 1. VCP (VMware Certified Professional):
#    - VCP-DCV (Data Center Virtualization)
#    - Niveau intermédiaire
#    - Prérequis: Formation officielle VMware

# 2. VCAP (VMware Certified Advanced Professional):
#    - Niveau avancé
#    - Examen pratique (hands-on)

# 3. VCDX (VMware Certified Design Expert):
#    - Niveau expert
#    - Design infrastructure


# LINUX CERTIFICATIONS:
# ════════════════════

# 1. LPIC-1 / LPIC-2 (Linux Professional Institute)
# 2. RHCSA / RHCE (Red Hat)
# 3. Linux+ (CompTIA)


# ═══════════════════════════════════════════════════════════════════
# CONCLUSION
# ═══════════════════════════════════════════════════════════════════

# FÉLICITATIONS! [BRAVO]
# ════════════════

# Vous avez maintenant une compréhension complète de:

# [OK] Virtualisation (concepts, types, avantages)
# [OK] VMware Workstation (installation, configuration)
# [OK] Création et gestion VMs
# [OK] Réseau virtuel (NAT, Bridged, Host-only)
# [OK] Snapshots et clones
# [OK] VMware Tools et intégration hôte/invité
# [OK] Shared folders et stockage
# [OK] Labs pratiques (web, cluster, sécurité, AD, K8s)
# [OK] Automatisation (scripts, Ansible, Terraform)
# [OK] Troubleshooting avancé
# [OK] Sécurité et hardening
# [OK] Monitoring et logging


# PROCHAINES ÉTAPES:
# ═════════════════

# 1. PRATIQUER:
#    -> Créer vos propres labs
#    -> Tester différentes configurations
#    -> Casser et réparer (apprentissage!)

# 2. APPROFONDIR:
#    -> VMware vSphere / ESXi (Type 1)
#    -> Kubernetes avancé
#    -> Infrastructure as Code (Terraform, Ansible)
#    -> CI/CD avec VMs

# 3. PROJETS PERSONNELS:
#    -> Homelab complet
#    -> Environment dev/test/prod
#    -> Cluster haute disponibilité
#    -> VPN personnel

# 4. CERTIFICATIONS:
#    -> VCP-DCV (VMware)
#    -> LPIC-2 (Linux)
#    -> CKA (Kubernetes)


# RESSOURCES CONTINUES:
# ════════════════════

# Blogs:
# • r/homelab (Reddit)
# • Virtualizationhowto.com
# • VMware Communities

# YouTube:
# • NetworkChuck
# • TechnoTim
# • Learn Linux TV

# Livres:
# • "Mastering VMware vSphere" - Nick Marshall
# • "VMware Cookbook" - Ryan Troy


# PHILOSOPHIE APPRENTISSAGE:
# ═════════════════════════

# "La meilleure façon d'apprendre la virtualisation
#  est de CASSER des VMs et les réparer.
#  
#  Les snapshots existent pour ça! [CAMERA_WITH_FLASH]
#  
#  N'ayez pas peur d'expérimenter.
#  Dans une VM, vous ne pouvez rien casser de permanent.
#  
#  Chaque erreur est une leçon.
#  Chaque problème résolu est une compétence acquise."


# BON LAB! [RAPIDE]
# ═══════════

# Si questions ou problèmes:
# • Consultez logs (vmware.log)
# • Cherchez erreur sur Google + "vmware"
# • Demandez sur forums (avec détails, logs, configs)

# N'oubliez pas:
# • Snapshots avant expérimentations
# • Backups réguliers VMs importantes
# • Documentation de vos labs

# La virtualisation ouvre un monde de possibilités!
# Profitez-en pour apprendre, tester, innover! [IDEE]


# ═══════════════════════════════════════════════════════════════════
# FIN DU GUIDE VMWARE ULTRA-DÉTAILLÉ
# ═══════════════════════════════════════════════════════════════════

# Version: 2.0
# Dernière mise à jour: Janvier 2025
# Auteur: Guide pour débutants complets
# Licence: Libre usage éducatif

# Pour plus d'informations:
# https://www.vmware.com/
# https://ubuntu.com/
# https://www.virtualbox.org/

# Happy Virtualizing! [BRAVO]