diff --git a/README.md b/README.md index a538dd3..a3e9059 100644 --- a/README.md +++ b/README.md @@ -1,104 +1,170 @@ -# Fog_Reinitialisation - - -# **Attention, ce projet est en cours de dévelopement et peut ne pas fonctionner pour l'instant** - -# Reinit - Réinitialisation rapide des PC via FogProject - -Un script Bash permettant de **réinitialiser rapidement et simplement les PC des salles de TP** en s'appuyant sur l'API de [FogProject](https://github.com/FOGProject/fogproject). - -## 🔧 Fonctionnalités - -- Réinitialisation à distance des machines via FogProject -- Automatisation simple par script Bash -- Utilisation prévue dans des environnements scolaires ou universitaires -- Déploiement transparent : Allumage via Wake On Lan -> Déploiement multicast -> Extinction des machines. - - -## 🛠️ Prérequis - -- Serveur **FogProject** configuré et accessible -- Accès à l'API REST de Fog (clé d'authentification si nécessaire) -- Les machines clientes doivent être correctement enregistrées dans Fog - - -## ⚠️ Problèmes connus sur les machines Windows - - -### ❗ Erreur : `The NTFS partition is in an unsafe state` - -#### 🧭 Cause - -Cette erreur apparaît lors de la capture ou du déploiement d'une image via démarage réseau. Elle indique que **Windows ne s'est pas arrêté correctement**. Le système de fichiers NTFS est resté dans un état non sécurisé. - - -#### ✅ Solution -1. Démarrer la machine sous Windows -2. Ouvrir PowerShell -3. Exécuter la commande suivante pour forcer un arrêt complet : - ``powershell - shutdown -s -t 0 -`` - -Cela assurera un arrêt propre de Windows, évitant les erreurs lors du démarrage sous Fog. - -## 📁 Structure du projet - -```bash -Fog_Reinitialisation/ # Dossier du projet -├── reinitialisation_salle.sh # Script Bash principal -├── .env.exemple # Variables pour l'API Fog -└── README.md # Documentation -``` - -## 🚀 Utilisation - -1. Téléchargement, mettez vous dans le répertoire de votre choix pour installer le dossier du projet (De façon à ce qu'il ne soit pas déplacé par la suite): - - ```bash - curl -L "https://git.nelson-thomas.fr/nelson/Fog_Reinitialisation/archive/main.tar.gz" | tar -xz - ``` - -2. Rentrer dans le répertoire du projet : - - ```bash - cd ./fog_reinitialisation - ``` -3. Mettre les token de l'api fog dans le .env.exemple et le renommer : - - ```bash - nano .env.exemple - ``` - - Puis - - ```bash - mv .env.exemple ./.env - ``` - -4. Rendre le script exécutable : - - ```bash - chmod u+x reinitialisation_salle.sh - ``` - -5. (Optionnel) Installer globalement : - - ```bash - sudo ln -s $(pwd)/reinitialisation_salle.sh /usr/local/bin/reinit - ``` - -6. Exécuter la commande depuis n'importe où : - - ```bash - reinit - ``` ---- - -## 🔗 Ressources - -* [FogProject GitHub](https://github.com/FOGProject/fogproject) -* [Documentation officielle de Fog](https://wiki.fogproject.org/) - - - +# ⚙️ Fog\_Reinitialisation + +> **🚧 Attention** : Ce projet est en cours de développement et peut ne pas fonctionner pour l'instant. + +## 🧩 Contexte + +Dans le passé, le redéploiement des machines des salles de TP se faisait via **Symantec Ghost**. Cette méthode impliquait de : + +* Insérer un **DVD bootable** dans chaque machine +* Configurer manuellement le **boot sur le lecteur DVD** +* Lancer le déploiement depuis le **poste professeur** + +Ce processus était **fastidieux** et **souvent négligé** par les intervenants. Résultat : les machines restaient souvent **polluées** après les séances. + +Le projet **Fog\_Reinitialisation** vise à automatiser ce processus via L'API **[FogProject](https://github.com/FOGProject/fogproject)**, afin de **réinitialiser rapidement les machines à la fin de chaque TP** avec une image vierge, **sans intervention manuelle** sur chaque poste. + +--- + +## 🚀 Objectif + +Fournir un **script Bash simple** permettant à un intervenant de **réinitialiser toute une salle** en une seule commande, en s’appuyant sur les fonctionnalités de **Wake On LAN**, **PXE boot**, et **déploiement multicast** via l'API FogProject. + +--- + +## 🔧 Fonctionnalités + +* Wake On LAN de tous les PC clients +* Boot réseau automatique via PXE +* Déploiement multicast de l’image système +* Extinction automatique des machines après déploiement +* Commande unique, exécutable depuis le poste professeur + +--- + +## 🛠️ Prérequis + +### ✅ Serveur + +* Installer le serveur [FOG](https://docs.fogproject.org/en/latest/installation/server/install-fog-server/) sur le poste professeur de la salle +* Activer l'API de fog +* Créer une Image et un groupe à associer aux machines de la salle +* Enregistrez les machines de la salle dans le serveur : + 1. Démarrer les machines en **boot PXE** + 2. Dans le menu Fog, sélectionner **"Perform Full Host Registration and Inventory"** + 3. Attribuer : + + * Un **nom d’hôte** + * Une image et un groupe +* Le paquet **wakeonlan** doit être installé : + ```bash + sudo apt install wakeonlan + ``` + +### ✅ Configuration machines clientes + +**🚧 Attention** le projet a été expérimenté avec des machines de la marque **HP**. +Ne l'ayant pas fait avec un autre constructeur il est possible que les prérequis nécessaires diffèrent. + +* **Activer le PXE boot** dans le BIOS +* **Activer Wake On LAN (WOL)** dans le BIOS +* Le **Wake On LAN doit booter sur le réseau** +* **Brancher le câble réseau** sur la **carte réseau de base** (intégrée à la carte mère) +* Sous Windows : + + * Désactiver **Fast Boot** : + *Panneau de configuration > Options d'alimentation > Choisir l'action des boutons d’alimentation > Modifier les paramètres actuellement non disponibles > Décocher "Activer le démarrage rapide"* +* **Activer le portfast** sur les ports du switch reliés aux PC : + Permet d’éviter que le DHCP échoue lors du boot PXE + +* Mettre à jour le BIOS des machines + +--- +## ⚙️ Configuration par défaut et personnalisation + +Par défaut, le script utilise : + +* **GROUP_ID=1** +* **IMAGE_ID=1** +* **TASK_TYPE=1** +* **SHUTDOWN=1** + +Vous pouvez modifier ces valeurs dans le fichier `.env.exemple` en fonction de l'ID de groupe, d'image, du type de tâche et du besoin d'éteindre les machines : + + +```bash +#Token d'API et d'Utilisateur FOG +FOG_USER_TOKEN="" +FOG_API_TOKEN="" + + +#Adresse IP de broadcast local de la salle (si la salle est en 192.168.106.0/24 -> Entrez 192.168.106.255) +LOCAL_BROADCAST_IP=192.168.xxx.255 + + +#Configuration des paramètres de la tâche + +#ID du groupe sur lequel déployer l'image +GROUP_ID="1" + +#ID de l'image a déployer +IMAGE_ID="1" + +#Type de déploiement (1 pour du multicast) +TASK_TYPE="1" + +#Éteindre les PCs à la fin (mettre à 1 ou 0) +SHUTDOWN="1" +``` + + +--- + +## 📁 Structure du projet + +``` +fog_reinitialisation/ # Dossier principal +├── reinitialisation_salle.sh # Script Bash principal +├── .env.exemple # Variables d'authentification API Fog +└── README.md # Documentation +``` + +--- + +## 📦 Installation et utilisation + +1. Téléchargement du projet : + + ```bash + curl -L "https://git.nelson-thomas.fr/nelson/Fog_Reinitialisation/archive/main.tar.gz" | tar -xz + ``` + +2. Accéder au répertoire : + + ```bash + cd ./fog_reinitialisation + ``` + +3. Configurer les variables dans le .env.exemple puis le renommer : + + ```bash + nano .env.exemple + mv .env.exemple .env + ``` + +4. Rendre le script exécutable : + + ```bash + chmod u+x reinitialisation_salle.sh + ``` + +5. Exécutez le script pour réinitialiser la salle : + + ```bash + ./reinitialisation_salle.sh + ``` +### Installation Globale (Optionnel) + +Créez un alias de votre choix pour exécuter le script de n'importe où : + + ```bash + sudo ln -s $(pwd)/reinitialisation_salle.sh /usr/local/bin/ + ``` +Maitenant, \ est considéré comme une commande sur la machine. +--- + +## 🔗 Ressources + +* [FogProject - GitHub](https://github.com/FOGProject/fogproject) +* [Documentation officielle Fog](https://wiki.fogproject.org/) + diff --git a/reinitialisation_salle.sh b/reinitialisation_salle.sh index 72bcfac..6b8a23e 100755 --- a/reinitialisation_salle.sh +++ b/reinitialisation_salle.sh @@ -5,10 +5,11 @@ if [ -f .env ]; then export $(grep -v '^#' .env | xargs) fi -#Confirmation de l'utilisateur +#Prompt de confirmation de l'utilisateur read -e -p "⚠️ Attention vous allez réinitialiser complètement la salle, voulez-vous vraiment continuer [o/n] : " -i "n" confirmation echo "Vous avez entré ${confirmation}" +#Si o est entré, réveil des machines et lancement de la tâche if [ "$confirmation" == "o" ]; then echo "Lancement de la tâche de réinitialisation de la salle" @@ -32,13 +33,13 @@ if [ "$confirmation" == "o" ]; then - # Construction du JSON de tâche + # Construction du JSON avec les paramètres de tâche à envoyer à l'API DATA=$(cat <