Compare commits
13 Commits
developmen
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d9107636c2 | ||
|
|
ec86370916 | ||
|
|
f7477f152e | ||
|
|
ec0bb64ba6 | ||
|
|
982ecf5118 | ||
|
|
44979f22c8 | ||
|
|
79af06ff9d | ||
|
|
afe5542374 | ||
|
|
85973baedb | ||
|
|
74d149f5f6 | ||
|
|
52ec6d5b2e | ||
|
|
598233bc33 | ||
|
|
d4f8af8e54 |
22
.env.exemple
Normal file
22
.env.exemple
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#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 (8 pour du multicast)
|
||||||
|
TASK_TYPE="8"
|
||||||
|
|
||||||
|
#Éteindre les PCs à la fin (mettre à 1 ou 0)
|
||||||
|
SHUTDOWN="1"
|
||||||
176
README.md
Normal file
176
README.md
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
# ⚙️ 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
|
||||||
|
* Les paquets suivants doivent être installés :
|
||||||
|
* wakeonlan
|
||||||
|
* curl
|
||||||
|
* jq
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt install curl
|
||||||
|
apt install wakeonlan
|
||||||
|
apt install jq
|
||||||
|
```
|
||||||
|
|
||||||
|
### ✅ 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=8**
|
||||||
|
* **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 (8 pour du multicast)
|
||||||
|
TASK_TYPE="8"
|
||||||
|
|
||||||
|
#É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/<nom-de-votre-choix>
|
||||||
|
```
|
||||||
|
Maitenant, \<nom-de-votre-choix> est considéré comme une commande sur la machine.
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔗 Ressources
|
||||||
|
|
||||||
|
* [FogProject - GitHub](https://github.com/FOGProject/fogproject)
|
||||||
|
* [Documentation officielle Fog](https://wiki.fogproject.org/)
|
||||||
|
|
||||||
@ -1,54 +1,59 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
#Charger les variables du fichier .env
|
||||||
# Charger le .env
|
|
||||||
if [ -f .env ]; then
|
if [ -f .env ]; then
|
||||||
export $(grep -v '^#' .env | xargs)
|
export $(grep -v '^#' .env | xargs)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#Si rien n'est passé dans le prompt valeur n par défaut
|
#Prompt de confirmation de l'utilisateur
|
||||||
read -e -p "Attention vous allez réinitialiser complétement la salle, voullez vous vraiment continuer [o/n] : " -i "n" confirmation
|
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}"
|
echo "Vous avez entré ${confirmation}"
|
||||||
|
|
||||||
|
#Si o est entré, réveil des machines et lancement de la tâche
|
||||||
if [ $confirmation == 'o' ];
|
if [ "$confirmation" == "o" ]; then
|
||||||
then
|
|
||||||
|
|
||||||
echo "Lancement de la tâche de réinitialisation de la salle"
|
echo "Lancement de la tâche de réinitialisation de la salle"
|
||||||
|
|
||||||
#Script
|
|
||||||
#curl -H "fog-api-token: ${FOG_API_TOKEN}" -H "fog-user-token: ${FOG_USER_TOKEN}" -H "Content-Type: application/json" -X GET http://localhost/fog/group | jq
|
#Récupération des MAC des PCs
|
||||||
|
MACS=$(curl -s -H "fog-api-token: $FOG_API_TOKEN" -H "fog-user-token: $FOG_USER_TOKEN" \
|
||||||
|
http://localhost/fog/host | jq -r '.hosts[].macs[]')
|
||||||
|
|
||||||
|
#Envoi du WOL à chaque MAC
|
||||||
|
echo "Révéil des machines"
|
||||||
|
for MAC in $MACS; do
|
||||||
|
#Broadcast Global
|
||||||
|
#echo "💡 Envoi WOL à $MAC via 255.255.255.255"
|
||||||
|
wakeonlan -i 255.255.255.255 "$MAC"
|
||||||
|
|
||||||
|
#Broadcast Local
|
||||||
|
#echo "💡 Envoi WOL à $MAC via 192.168.106.255"
|
||||||
|
wakeonlan -i "$LOCAL_BROADCAST_IP" "$MAC"
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
#Variables de configuration de la tâche
|
|
||||||
GROUP_ID="1"
|
|
||||||
IMAGE_ID="1"
|
|
||||||
TASK_TYPE="1" #Déploiement multicast
|
|
||||||
SHUTDOWN="1" #Eteindre les machines à la fin
|
|
||||||
|
|
||||||
|
# Construction du JSON avec les paramètres de tâche à envoyer à l'API
|
||||||
#Wake On LAN du groupe
|
DATA=$(cat <<EOF
|
||||||
echo "Envoi du Wake On LAN vers le groupe ${GROUP_ID}"
|
{
|
||||||
curl -H "fog-api-token: ${FOG_API_TOKEN}" -H "fog-user-token: ${FOG_USER_TOKEN}" -X POST http://localhost/fog/group/${GROUP_ID}/wol
|
"taskTypeID": "$TASK_TYPE",
|
||||||
|
"shutdown": "$SHUTDOWN",
|
||||||
|
"imageID": "$IMAGE_ID"
|
||||||
#Construction du JSON avec les paramètres de la tâche
|
}
|
||||||
DATA=$(cat <<EOF
|
|
||||||
{
|
|
||||||
"taskTypeID": "$TASK_TYPE",
|
|
||||||
"shutdown": "$SHUTDOWN",
|
|
||||||
"imageID": "$IMAGE_ID"
|
|
||||||
}
|
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
|
|
||||||
#Création de la tâche
|
#Création de la tâche via l'API de FOG
|
||||||
curl -H "fog-api-token: ${FOG_API_TOKEN}" -H "fog-user-token: ${FOG_USER_TOKEN}" -H "Content-Type: application/json" -X POST http://localhost/fog/group/${GROUP_ID}/task -d "$DATA"
|
echo "Création de la tâche pour le groupe ${GROUP_ID}"
|
||||||
|
curl -s -H "fog-api-token: ${FOG_API_TOKEN}" -H "fog-user-token: ${FOG_USER_TOKEN}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-X POST http://localhost/fog/group/${GROUP_ID}/task -d "$DATA"
|
||||||
|
|
||||||
|
|
||||||
|
#Sinon, on ne fait rien
|
||||||
else
|
else
|
||||||
echo "Annulation de la tâche de réinitialisation de la salle"
|
echo "Annulation de la tâche de réinitialisation de la salle"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "FIN"
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user