Skip to main content

Déploiement avec FOG

Principe de fonctionnement et intérêts de FOG

Si l'on veut déployer Primtux sur plusieurs ordinateurs de même modèle (cas typique dans une école possédant généralement plusieurs exemplaires d'une même série), il peut être intéressant de le faire à l'aide d'un serveur FOG. On a tout intérêt à installer ce serveur sur un ordinateur portable afin de pouvoir le déplacer facilement sur site.

La solution FOG permet via un réseau Intranet à la fois de récupérer une image d'une machine "modèle" et ensuite de la déployer sur plusieurs machines en même temps, ce qui représente un gros gain de temps par rapport à une installation via clé USB avec CloneZilla.


Matériel

  • Un ordinateur avec le serveur FOG installé dessus.
  • Un swith Gigabit d'au moins 5 ports RJ45 qui permettra le déploiement de 4 machines en même temps.
  • 5 câbles Ethernet pour relier les ordinateurs ainsi que le serveur FOG au switch.


Préparation du serveur FOG

Il n'est pas nécessaire de réserver un ordinateur à cette seule tâche, ce qui serait quand même dommage car on ne déploie pas tous les jours non plus ;-). Ceci est rendu possible grâce à la virtualisation.
Pour une utilisation confortable, il vaudra mieux disposer d'un ordinateur assez récent avec 4 Go de Ram au minimum.

Sur cette page, nous décrirons l'installation d'un serveur FOG sur un ordinateur tournant déjà sous une distribution GNU/Linux, ici en l’occurrence une Linux Mint 21.3 (qui repose elle-même sur Ubuntu 22.04).

Remarque : On peut reprendre les indications ci-dessous pour installer FOG directement sur une Debian 12 sans avoir à virtualiser..

A- Installation de Virtualbox

Une fois Linux Mint installé, installation de VirtualBox qui servira à virtualiser FOG avec les commandes suivantes :
sudo apt update && sudo apt install virtualbox Remarque : Il est nécessaire de redémarrer pour que VirtualBox apparaisse dans la liste des applications.

B- Virtualisation de Debian 12

On récupère l'image iso du système d'exploitation Debian 12.4 (netinstall) sur le site https://www.debian.org/index.fr.html. Puis on crée une machine virtuelle dans VirtualBox en installant Debian à partir de l'image récupérée précédemment. Lors de l'installation, garder les cases cochées par défaut (ne pas changer de bureau sinon le CD guest ne pourra pas se lancer !) et cocher les cases pour installer un Web serveur (Apache) et éventuellement l'accès SSH si utile. Une fois Debian installé, finir en intégrant l'iso "Guest additions" (image CD des Additions invité) pour pouvoir bénéficier de fonctionnalités supplémentaires (meilleur affichage plein écran, presse-papier bidirectionnel, ...).

C- Installation de FOG dans Debian

Remarque : pendant toute la préparation de la machine virtuelle, dans VirtualBox, il faudra paramétrer le réseau en NAT afin d'avoir accès à Internet pour télécharger les programmes notamment. Par contre, il faudra modifier plusieurs fois dans la machine Debian, les paramètres réseaux.

Nous utiliserons FOG sans l'intégrer dans un réseau existant, en utilisation isolée pour faire les installations de Primtux. Pour cela, on peut aller voir cette page (non mise à jour) : https://wiki.fogproject.org/wiki/index.php/FOG_on_an_Isolated_Network.

Pour faciliter l'installation et permettre l'installation de FOG qui a besoin d'avoir accès à Internet pour récupérer des fichiers, il faut paramétrer 2 connexions Ethernet dans Debian. La première est celle déjà existante et qui permet d’accéder à Internet (on ne la modifie pas), c'est la "Connexion filaire1". Par contre, on va se créer une 2e connexion spécifique pour l'utilisation de FOG que j'ai baptisée "Connexion FOG".
Adresse IP de "Connexion FOG" : On va aller dans les réglages du réseau avancé de Debian et se créer une nouvelle connexion Ethernet en fixant les réglages suivantes dans l'onglet IPv4 en configuration manuelle avec une IP fixe :
adresse IP : 192.168.1.100 (ou une autre)
masque de sous-réseau : 255.255.255.0
passerelle : aucune
Remarque : il serait aussi possible de modifier l'adresse IP du serveur a posteriori, en suivant les indications ici : https://docs.fogproject.org/en/latest/kb/how-tos/change-fog-server-ip-address/

Dans notre machine virtuelle Debian, avec la connexion pour accéder à Internet, on va récupérer l'archive FOG dans Git comme cela est recommandé dans la documentation (https://docs.fogproject.org/en/latest/installation/server/install-fog-server/). Pour cela, on installe git avec les commandes suivantes :
su sudo -i apt-get -y install git

Puis on récupère FOG avec les commandes (toujours en étant root via la commande "sudo -i") :
sudo -i cd /root
git clone https://github.com/FOGProject/fogproject.git

Ensuite on revient dans le terminal et on lance l'installeur avec :
sudo -i
cd /root/fogproject/bin

On change de connexion réseau en "Connexion FOG" et on revient dans le terminal pour taper la commande : ./installfog.sh

Voici les différentes options choisies lors de l'installation (les choix par défaut sont indiqués entre crochets [ ] et avec une majuscule) :

  • Choise: [2] -> "2" ou valider directement
  • What type of installation would you like to do? [N/s] -> "n" pour Normal ou valider directement
  • Would you like to change the default network interface from enp0s3? [y/N] -> "n" ou valider directement (il nous faut l'adresse 192.168.1.100/24 correspondant à la connexion FOG)
  • Would you like to setup a router address for the DHCP server? [Y/n] -> "n"
  • Would you like DHCP to handle DNS? [Y/n] -> "n"
  • Would you like to use the FOG server for DHCP service? [y/N] -> "y"
  • you like to install the additional language packs ? [y/N] -> "y" si on veut l'interface en français
  • Would you like to enable secure HTTPS on your FOG server? [y/N] -> "n" ou valider directement
  • Would you like to change it (hostname debian-FOG)? [y/N] -> "n" ou valider directement
  • Are you ok with sending this information? [Y/n] -> "n" inutile car on ne sera pas connecté au réseau lorsqu'on utilisera FOG.
  • On remodifie la connexion Ethernet pour avoir accès à Internet en se mettant sur "Connexion filaire1".
  • Are you sure you wish to continue (Y/N) -> "y" si on n'a pas fait d'erreur sinon "n" pour annuler l'installation et relancer le process du début.
    L'installateur se lance alors et va récupérer les fichiers nécessaires sur Internet.
  • Lorsqu'on arrive à la création de la database, il faut de nouveau modifier l'adresse IP "Connexion FOG" pour pouvoir accéder à la page : http://192.168.1.100/fog/management et créer la base de données.
  • On laisse se finir l'installation.
  • Une fois l'installation terminée, on pourra alors se connecter au serveur FOG à cette adresse http://192.168.1.100/fog/management avec les identifiants suivants :
    Username: fog
    Password: password
  • On peut aller maintenant paramétrer le serveur FOG dans notre langue, en allant sur la configuration de FOG (icône en forme de clé à molette), puis dans l'onglet à gauche "FOG settings" (accès direct : http://192.168.1.100/fog/management/index.php?node=about&sub=settings), puis dans la partie "General Settings", dans le champ KEYMAP, on saisit "fr" pour que les claviers des clients correspondent bien au clavier français, et dans le champ "DEFAULT LOCALE", on choisit "Français" pour avoir l'interface en français.
    On peut aussi en profiter pour allonger le temps de boot de FOG qui par défaut est de 3 secondes, ce qui est un peu juste.

REMARQUE : Si on se trompe dans une étape et que l'on veut reprendre de zéro l'installation de FOG, le mieux est de le désinstaller complètement (sans supprimer le dossier git) et de relancer la commande ./installfog.sh. Plus d'info ici : https://wiki.fogproject.org/wiki/index.php/Uninstall_FOG



Utilisation de FOG

Attention pour la partie qui suit, il faudra avoir réglé auparavant le réseau VirtualBox différemment ! Il faut choisir comme "Mode d'accès réseau :", "Accès par pont" et dans les paramètres avancés, dans l'option "Mode Promiscuité :", choisir "Allow All" :

FOG_reseau_1.png

A- Test de FOG

On peut d'ores et déjà tester le serveur FOG en branchant en filaire sur le même réseau un ordinateur de test et le faire démarrer sur le réseau en PXE. Si on voit le menu FOG qui apparaît sur le client, cela signifie que le serveur est fonctionnel !

B- Récupération de l'image Primtux à déployer

FOG marche dans les 2 sens, c'est-à-dire qu'il peut déployer une image mais aussi "l'aspirer" (comme CloneZilla). On peut donc préparer un ordinateur sous Primtux avec une seule partition (de cette façon, il sera possible de déployer l'image sur un disque de capacité plus petite à condition que les données ne dépassent pas sa capacité) et ensuite récupérer son image qui servira de modèle (master). J'en profite pour y installer DWService, Clipman, BlocksCAD, ... (voir cette page : https://lofurol.fr/joomla/logiciels-libres/338-primtux-installation-de-primtux7).

Source : https://docs.fogproject.org/en/latest/kb/how-tos/capture-an-image/

  • On démarre l'ordinateur servant de modèle Primtux8 en boot PXE (en général, touche F12 au démarrage) et quand le menu FOG apparaît on fait une "Quick registration and inventory" afin d'enregistrer cette machine dans FOG. Une fois l'enregistrement fait, l'ordinateur redémarre sous Primtux8 et on l'éteint.
  • Dans FOG, on va dans le menu "Images" (icône en forme d'image justement), et on crée une nouvelle image. On lui donne un nom comme Primtux8 et sans rien modifier d'autre, on l'enregistre. Remarque : on choisit une seule partition pour l'image car de cette façon, il sera possible de déployer l'image sur un disque de capacité plus petite à condition que les données ne dépassent pas sa capacité.
  • Dans FOG, on revient sur la machine enregistrée auparavant (elle a pour nom son adresse MAC) et on la modifie en cliquant sur son nom. Dans le champ "Image machine" on lui associe l'image Primtux8 créée précédemment. On n'oublie pas de sauvegarder la modification.
  • Toujours dans la modification de la machine, on clique en haut sur l'onglet "Tâches basiques" puis sur l'icône "Capture". On laisse les paramétrages par défaut et on crée la tâche en cliquant sur le bouton bleu "Tâche" -> Un message vert indique que la tâche a été créée avec succès. On peut vérifier l'existence de cette tâche en cliquant sur l'icône "Tâches" représentant un empilement horizontal de dossiers.
  • On redémarre alors l'ordinateur modèle Primtux8 en boot PXE. Cette fois-ci, le menu FOG n'apparaîtra pas mais un terminal indiquant des opérations en cours avec une dernière fenêtre bleue à la Clonezilla avec 2 barres de progression rouges. Sur le serveur FOG, on voit la tâche s'effectuer avec petite roue en mouvement. Au bout d'un certain temps (d'où l'intérêt d'avoir un switch réseau 1 Gigabit), l'image est obtenue (autour de 25 Go).

REMARQUE : il est possible de déployer une image universelle indépendante du matériel sur lequel on veut l'installer. On appelle ce type d'image, une golden image. Piste à creuser : https://forums.fogproject.org/topic/7391/deploying-a-single-golden-image-to-different-hardware-with-fog

C- Déploiement de l'image Primtux

Source : https://docs.fogproject.org/en/latest/kb/how-tos/deploy-an-image/

Tout se fait uniquement à partir de l'ordinateur client (pas besoin d'agir sur le serveur FOG), ce qui est très rapide.
Sur les ordinateurs à installer :

  • on démarre en boot PXE et on procède à leur "Perform Full Host Registration and Inventory" qui permet de leur assigner un nom (nom dans FOG mais qu'on peut aussi donner à la machine via un script, voir ci-dessous) et surtout une image ID (dans notre cas celle créée auparavant de Primtux7 et qui est la numéro 1).
  • On laisse tous les autres champs vides (inutile de renseigner "Primary user" ou les "Tags").
  • À la question "Deploy image now ?", choisir Y puis renseigner les mots de passe FOG (utilisateur = fog ; mot de passe =password).
  • Lorsque l'ordinateur redémarre, il faut le faire en boot PXE (touche F12) et alors l'image Primtux7 s'installera automatiquement.

Scripts de post-installation

Il est possible de lancer des scripts de post-installation pour par exemple renommer les machines à partir de leur nom enregistré dans Fog, redimensionner une partition, ...
Ces scripts doivent être placés dans le répertoire du serveur FOG  /images/postdownloadscripts et se lanceront une fois que l'image aura été déployée.

A- Script pour renommer la machine sous Primtux :

Source :  https://memo-linux.com/fog-1-2-script-post-installation-pour-modifier-le-nom-dune-machine-linux-clonee/

Pour cela, il faut modifier les fichiers /etc/hostname et /etc/hosts. On va pouvoir le faire en créant un script dans le dossier /images/postdownloadscripts. Voici les commandes à saisir dans le terminal du serveur FOG :
cd /images/postdownloadscripts

Ensuite on crée et on édite un fichier "renommage.sh" avec la commande :
nano renommage.sh

Et on colle les lignes de code suivantes :

#!/bin/bash
## Script de post-installation "renommage.sh" pour FOG
## Permettant de renommer une machine après l'installation de Primtux
## créé par Thierry Munoz le 30/01/2024

##création d'un répertoire temporaire /partprimtux
mkdir /partprimtux
##montage temporaire de la partition système du Linux
## ATTENTION : il faut indiquer la partition sur laquelle est installé Printux !!!
## ici il s'agit de la partition sda5 (sinon ça ne marchera pas)
mount /dev/sda5 /partprimtux

##changement du nom host de la machine définie dans l'interface web
echo $hostname > /partprimtux/etc/hostname
##changement du nom "primtux" dans /etc/hosts qui se trouve sur la 2e ligne
sed -i "s/primtux/$hostname/" /partprimtux/etc/hosts

##Démontage de la partition système
umount /partprimtux
##Suppression du répertoire temporaire
rmdir /partprimtux

On sauvegarde (CTRL + O) et on ferme le fichier (CTRL + X) puis on le rend exécutable avec la commande suivante :
chmod +x renommage.sh

Ensuite, on édite et modifie le fichier fog.postdownload qui indique à FOG quel(s) script(s) lancer après la copie de l'image Primtux sur le client :
nano fog.postdownload

Et on colle cette ligne en veillant bien à laisser un espace derrière le point en début de ligne :

. ${postdownpath}renommage.sh

On sauvegarde (CTRL + O) et on ferme (CTRL+X) l'éditeur Nano.

Maintenant le script modifiera automatiquement les fichiers /etc/hostname et /etc/hosts avec le nom de la machine.

B- Script pour redimensionner la partition Primtux :

Le redimensionnement automatique de la partition finale ne fonctionne que pour Windows (en fait FOG a été développé initialement pour Windows) et du coup après avoir copié l'image Primtux, la totalité de la partition du disque dur n'est pas utilisée. On peut la modifier avec GParted mais l'idéal serait de l'agrandir automatiquement avec un script de post-installation.

Autre piste : dans le dossier /images/nom_image, il y a pour les images "resizables", des fichiers d1.minimum.partitions, d1.fixed_size_partitions et d1.partitions.

Voici un script à tester (pour des disques HDD, disques SSD "non sda" ?) :

#!/bin/bash#

#############################################################
# Script de redimensionnement de partition PrimTux pour FOG #
# philippe.dpt35@yahoo.fr                                   #
# La parition de PrimTux doit être la dernière partition    #
# du disque ; elle peut être dans une partition étendue     #
# La variable periphdisk est à modifier si le disque        #
# cible n'est pas sur /dev/sda                              #
#############################################################


periphdisk="sda"

# Récupère le N° de la partition étendue du disque s'il y en une
extendpart=$(LC_ALL=C fdisk -l | awk -v disk="/dev/$periphdisk" '$0 ~ disk && /Extended/ {sub("/dev/sd[a-z]","");sub("\n"," ");print $1}')

# Récupère le N° de la dernière partition du disque
lastpart=$(lsblk -o "name" -n | awk -v disk=$periphdisk '/└─/ && $0 ~ disk {sub("└─sd[a-z]","");print $1}')

if [ -n "$extendpart" ]; then
  parted "/dev/$periphdisk" -- resizepart $extendpart 100%
fi
if [ -n "$lastpart" ]; then
  parted "/dev/$periphdisk" -- resizepart $lastpart 100%
  devpart=$(echo "/dev/$periphdisk$lastpart")
  sleep 1
  resize2fs "$devpart"
fi
exit 0


parted /dev/sda resizepart 2 100%

resize2fs /dev/sda5


Ressources utiles pour les scripts


Ressources