Skip to main content

Déploiement avec FOG 1.6 sous Virt-Manager

 AVERTISSEMENT : Virt-Manager ne fonctionne que sur des ordinateurs sous GNU/Linux !!! 

Il existe une page décrivant l'utilisation de FOG avec VirtualBox ici : Déploiement avec FOG sous VirtualBox.

I- 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.
Site officiel : https://fogproject.org/ 
Documentation en cours de construction : https://docs.fogproject.org/en/latest/

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.

II- Matériel

  • Un ordinateur avec le serveur FOG installé dessus. La dernière version est la 1.6 (elle remplace la version 1.5).
  • 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.


III- Installation de la machine virtuelle sous Linux Mint 22.3

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 la virtualisation, on utilise ici Virt-Manager (VMM) qui fonctionne mieux et est plus léger que VirtualBox.
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 22.3 (qui repose elle-même sur Ubuntu 24.04). L'avantage d'avoir la même distribution sur la machine hôte et la machine invitée, c'est que l'on n'a pas à se familiariser avec une autre interface.

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


A- Installation de Virt-Manager

Page du site officiel de Virt-Manager : https://virt-manager.org/

On retrouve Virt-Manager dans la plupart des dépôts des distributions GNU/Linux. Du coup, il suffit d'installer le paquet avec la commande suivante pour les distributions dérivées de Debian comme Ubuntu ou Linux Mint :

sudo apt install virt-manager

Il faudra redémarrer son ordinateur afin que Virt-Manager soit fonctionnel (sinon on risque d'avoir des messages d'erreurs concernant "libvirt").

Le reste des explications s'appuiera sur une utilisation sous Linux Mint mais cela n'est pas très différents pour d'autres systèmes.


B- Virtualisation de Linux Mint 22.3

On récupère l'image iso du système d'exploitation sur le site https://linuxmint.com/download.php . Puis on crée une machine virtuelle (VM en anglais et en abrégé) dans Virt-Manager en installant Linux Mint à partir de l'image récupérée précédemment (voir ce tutoriel explicitant comment créer une image virtuelle et les réglages utiles).
Sur mon portable avec 16 Go de Ram, je choisis 8192 Mo de ram et un espace disque de 50 Go.
Lors du démarrage de l'iso, je lance Linux Mint et j'installe à partir du raccourci sur le bureau (je ne fais pas une installation OEM directement via le menu de démarrage).



IV- Paramétrage des cartes réseaux de la machine hôte sous Linux Mint 22.3

A- Explications du fonctionnement

La connexion réseau entre la machine hôte (host) et la machine invitée (guest ou VM) doit être de type "Bridge" (pont). Le mode bridge permet aux autres machines sur le réseau de pouvoir récupérer à travers le pc hôte, le serveur FOG de la machine virtuelle : le serveur FOG sera alors visible directement dans le LAN.
Schéma :

 PC physique bootant en PXE      --- Switch --->    PC hôte sous Linux Mint 22.3    --- Bridge br0 --->  PC invité sous Linux Mint 22.3 avec Serveur FOG (DHCP / TFTP / HTTP) 

B- Détection des cartes réseau

On va chercher le nom de nos cartes réseau avec la commande :

ip -br a

On dispose de 2 types de cartes réseau sur le portable :

  • enp1s0 : carte réseau Ethernet  pour se connecter en filaire à un switch qui lui sera relié aux différents ordinateurs à installer.
    ATTENTION : lorsqu'on utilisera la machine virtuelle avec FOG, il ne faudra jamais relier l'ordinateur en filaire à Internet car il y aurait des conflits entre le serveur DHCP de FOG et le serveur DHCP de la box Internet.
  • wlp2s0 : carte réseau Wifi  pour se connecter à Internet et qu'on ne doit pas modifier.

Pour les paramétrer, on va utiliser la ligne de commande de Network-Manager, nmcli qui permet une configuration fine.
Info utiles : La commande nmcli est très puissante avec beaucoup de fonctionnalités dont un prompt. Voir cette page pour plus d'info : https://debian-facile.org/doc:reseau:network-manager

  • Pour supprimer l'interface réseau br0 (ou d'autres) créée (en cas d'erreur) :
    sudo nmcli -f bridge con delete br0
C- Création d'un pont br0 sans IP
  1. Le pont br0 agira comme un switch virtuel entre la machine hôte et la machine virtuelle (VM). On le crée sans adresse IP car ce pont ne sert que de prise :
    sudo nmcli con add type bridge ifname br0 con-name br0 stp no \
    	ipv4.method disabled ipv6.method ignore
  2. Ensuite on fait en sorte que le pont br0 soit relié à la carte Ethernet enp1s0. C'est comme si on avait une prise
    sudo nmcli con add type bridge-slave ifname enp1s0 master br0 con-name br0-port
  3. Ensuite on les active avec ces commandes (en veillant à brancher la prise enp1s0 à un switch isolé auparavant) :
    sudo nmcli con up br0
    sudo nmcli con up br0-port
D- Gestion du réseau virtuel géré par libvirt

Le réseau virtuel NAT de libvirt (géré par Virt-Manager), nommé default, fournit à la VM sa carte « NAT » (192.168.122.x) et son accès à Internet via le Wi-Fi de l’hôte. Il correspond à l’interface virbr0 côté hôte.

  1. On liste les réseaux virtuels connus de libvirt, qu’ils soient démarrés ou non avec cette commande :
    sudo virsh net-list --all

    On doit voir le réseau default qui est celui créé à l'installation de libvirt : 

      Name      State     Autostart    Persistent
    -------------------------------------------------------------
     default    active    yes                 yes
  2. Si State = inactive, cela signifie que virbr0 est arrêté. Il faut donc le relancer avec la commande :
    sudo virsh net-start default
  3. Si Autostart = no, alors ce réseau ne démarrera pas automatiquement lors du démarrage du portable. Il faut donc taper la commande suivante : 
    sudo virsh net-autostart default
  4. Pour vérifier que virbr0 est bien paramétré, taper la commande : 
    ip -br a show virbr0
    → Ça doit afficher 192.168.122.1/24



V- Paramétrage des cartes réseaux de la VM

Précaution : il est fortement recommandé de créer un instantané de son système avec TimeShift afin de pouvoir revenir à un état antérieur avant les manipulations ci-dessous...

A- Vérification de la carte réseau NAT

Pour cela, dans Virt-Manager, sans démarrer la VM, on sélectionne sa machine virtuelle sous Linux Mint 22.3 ① et on va dans le menu "Édition" ② puis "Détails de la machine virtuelle"  ③ :

 Virt-Manager_FOG_1-6.png

Dans la fenêtre de la machine virtuelle, on clique sur l'icône d'information bleue "i" ①, puis sur la carte réseau (NIC) ② et là comme source du réseau, on doit avoir "Réseau virtuel 'default' : NAT" ③  et en "Modèle du périphérique", on doit lire "virtio" ④. Si ce n'est pas le cas, on modifie les valeurs et on n'oublie pas de valider en appuyant sur le bouton "Apply" ⑤ :

linux_mint_22.3 sur QEMU-KVM_001.png

Il s'agit de la carte qui permettra de se connecter à Internet via le wifi du portable.


B- Ajout de la carte réseau Bridge br0

Maintenant, on clique sur le bouton du bas Ajouter un matériel pour rajouter une seconde carte réseau qui servira au serveur FOG. Pour cela on sélectionne Réseau①, comme "Source du réseau" on choisit Bridge device... ②, pour le "Device name" on indique br0 ③ et on valide en appuyant sur le bouton Terminer ④ :

Ajouter un nouveau matériel virtuel_001.png


C- Vérification sur la machine hôte

On peut maintenant lancer la machine virtuelle et vérifier que tout est correctement configuré en lançant dans un terminal de la machine hôte cette commande :

ip -br a

→ doit afficher pour wlp2s0 une adresse IP en 192.168.1.x, virbr0 en 192.168.122.1/24 et br0 sans adresse IP.


D- Finalisation des connexions réseau dans la VM

Dans la machine virtuelle, on supprime les éventuelles connexions Ethernet. Pour cela, le plus rapide est de faire un clic droit sur l'icône du réseau sur la barre de tâches en bas à droite et de choisir "Modifier les connexions...". Puis on les supprime en les sélectionnant et en cliquant sur le bouton "-" (moins).

  1. Création de la connexion Ethernet nat en enp1s0 qui permet la liaison à Internet par le wifi

    # NAT : DHCP, porte la route par défaut

    sudo nmcli con add type ethernet ifname enp1s0 con-name nat connection.interface-name enp1s0 \
    ipv4.method auto ipv6.method ignore
  2. Création de la connexion Ethernet lan en enp7s0 et qui permettra au serveur FOG de communiquer via le switch
    # Pont : IP fixe, jamais de route par défaut

    sudo nmcli con add type ethernet ifname enp7s0 con-name lan \
    connection.interface-name enp7s0 ipv4.method manual \
    ipv4.addresses 192.168.1.100/24 ipv4.never-default yes \
    ipv4.gateway "" ipv6.method ignore
  3.  On active les 2 connexions Ethernet avec les commandes suivantes :

    sudo nmcli con up nat
    sudo nmcli con up lan
  4. On vérifie que tout fonctionne comme attendu avec la commande :
    ip route

    → on doit obtenir une réponse de cette forme :

    default via 192.168.122.1 dev enp1s0 proto dhcp src 192.168.122.118 metric 102 
    192.168.1.0/24 dev enp7s0 proto kernel scope link src 192.168.1.100 metric 103 
    192.168.122.0/24 dev enp1s0 proto kernel scope link src 192.168.122.118 metric 102 


VI- Installation de FOG dans la machine virtuelle

Source officielle : https://docs.fogproject.org/en/latest/1.6/installation/server/install-fog-server/
Remarque : Je ne choisis pas l'installation rapide possible via la commande curl afin de choisir les options d'installation.
Dans notre machine virtuelle, avec la connexion pour accéder à Internet, on va récupérer l'archive FOG via git. 
Pour cela, si ça n'a pas déjà été effectué, on met à jour la VM :

sudo apt update
sudo apt upgrade

Puis on se place en tant qu'utilisateur root avec cette commande (ça évite de devoir faire commencer nos commande avec sudo) :

sudo -i

Ensuite on installe git avec la commande suivante : 

apt install git

Puis, toujours en tant que root,  on récupère FOG avec les commandes :

git clone https://github.com/FOGProject/fogproject.git 

Ensuite on lance l'installeur avec :

cd fogproject/bin
./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 avec Entrée
    • Would you like to change the default network interface from enp0s1? [y/N] -> "y"
    • What network interface would you like to use? -> On tape "enp7s0"
    • Would you like to use the FOG server for DHCP service? [y/N]  -> "y"     
    • Would you like to setup a router address for the DHCP server? [Y/n] -> "y" ou valider directement avec Entrée
    • What is the IP address to be used for the router on the DHCP server? [192.168.122.1] -> taper "192.168.1.1"
    • Would you like DHCP to handle DNS? [Y/n] -> "y" ou valider directement avec Entrée
    • What DNS address should DHCP allow? [127.0.0.53] -> "y" ou valider directement avec Entrée
    • This version of FOG has internationalization support, would  you like to install the additional language packs ? [y/N] -> "y" si on veut l'interface en français
    • Which hostname would you like to use? Currently is: thierry-vm-linux-mint-22-3
        Note: This hostname will be in the certificate we generate for your
        FOG webserver, and in its web server virtual host. Your server is
        already named, so FOG will not rename it.
        Would you like to change it? If you are not sure, select No. [y/N] -> "n" pour Normal ou valider directement avec Entrée
    • By default that means thierry-vm-linux-mint-22-3 and every private IP range
        (10.x, 172.16-31.x, 192.168.x).
        Would you like to narrow or extend that? [y/N] -> "n" pour Normal ou valider directement avec Entrée
    • FOG would like to collect some data:
            We would like to collect the following information:
              1. OS Name (CentOS, RedHat, Debian, etc....)
              2. OS Version (8.0.2004, 7.2.1409, 9, etc....)
              3. FOG Version (1.5.9, 1.6, etc....)

        What is this information used for?
            We would like to simply track the common types of OS
            being used, along with the OS Version, and the various
            versions of FOG being used.

        Are you ok with sending this information? [Y/n] -> "y" ou valider directement avec Entrée

    •  How should this server handle HTTPS, netboot and Secure Boot?
      Choose 1-4, or press Enter for standard: -> taper "1" ou valider directement avec Entrée
    • 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.

    • Lors de l'installation, on valide systématiquement les demande en appuyant sur la touche Entrée.
    • On laisse se finir l'installation.
    • Une fois l'installation terminée, on a un messager final contenant diverses informations comme les adresses du serveur FOG :
    • avec les identifiants suivants :
      Username: fog
      Password: password (avec un clavier AZERTY fonctionnant en QWERTY, il faudra saisir pqsszord)
      Remarque : il peut être utile de changer le mot de passe afin qu'on puisse le saisir quelque soit le type de clavier des machines clientes (souvent en QWERTY lorsqu'on démarre), à la façon de "tuxprof" qui fonctionne quel que soit le clavier.

    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

    1. On se connecte en tant que root avec la commande :
      sudo -i
    2. Puis on se place dans le dossier d'installation avec :
      cd fogproject/bin
    3. Pour tout désinstaller, on tape :
      /installfog.sh --uninstall --purge-all --force



    VII- Paramètrage de FOG dans la machine virtuelle

    • On peut aller maintenant paramétrer le serveur FOG dans notre langue, en allant sur "Configuration FOG" (icône en forme de clé à molette), puis dans "Paramètres BROUILLARD"  (accès direct : https://192.168.1.100/fog/management/index.php?node=about&sub=settings), puis dans la partie "General Settings", dans le champ "FOG_DEFAULT_LOCALE", on choisit "Français" pour avoir l'interface en français.
      Puis dans le champ "FOG_KEYMAP", on saisit "fr" pour que les claviers des clients correspondent bien au clavier français.
    • On peut aussi en profiter pour aller dans la section "FOG Boot Settings" et dans le champ "FOG_PXE_MENU_TIMEOUT", allonger le temps de boot de FOG en le passant de 3 secondes à 20 par exemple.



    VIII- 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.

    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 fog_primtux.renommage

    Et on colle les lignes de code suivantes :

    #!/bin/bash
    # Renomme le poste déployé avec le nom enregistré dans FOG (${hostname}).
    # S'exécute dans FOG, après le téléchargement de l'image.
    
    mnt=/mnt/target
    mkdir -p "$mnt"
    
    # Chercher la partition racine Linux (celle qui contient etc/hostname)
    for part in $(lsblk -lnpo NAME,TYPE | awk '$2=="part"{print $1}'); do
        mount "$part" "$mnt" 2>/dev/null || continue
        if [[ -f "$mnt/etc/hostname" ]]; then
            echo "$hostname" > "$mnt/etc/hostname"
    
            # /etc/hosts : remplacer la ligne 127.0.1.1 (ou l'ajouter)
            if grep -q '^127\.0\.1\.1' "$mnt/etc/hosts"; then
                sed -i "s/^127\.0\.1\.1.*/127.0.1.1\t${hostname}/" "$mnt/etc/hosts"
            else
                printf '127.0.1.1\t%s\n' "$hostname" >> "$mnt/etc/hosts"
            fi
            echo "Nom de machine défini : $hostname"
            umount "$mnt"
            break
        fi
        umount "$mnt"
    done

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

    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 :
    sudo nano fog.postdownload

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

    . ${postdownpath}fog_primtux.renommage

    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.


    IX- Utilisation de FOG

    Source utile : https://forums.fogproject.org/topic/14906/configuring-a-standalone-fog-vm-under-ubuntu-20-04

    A- Test de FOG

    On va tester le serveur FOG pour voir s'il est fonctionnel. Il va falloir vérifier que nous sommes bien avec les réglages suivants :

      • Sur la machine virtuelle sous Debian 13 avec le serveur FOG :
      • Sur l'ordinateur hôte sous Linux Mint :
        • dans Virt-Manager, vérifier que la carte réseau NIC de la VM Debian 13 est en mode bridge avec br0 (pas en NAT),
        • le câble Ethernet est bien branché sur le switch,
        • il peut y avoir une connexion wifi active : pratique pour aller chercher des informations sur Internet, comme cette page ;-) . Attention toutefois à ne pas être sur le même segment de réseau en 192.168.1.xxx.
      • Sur l'ordinateur de test (le client) :
        • le câble Ethernet est bien branché sur le switch,
        • booter 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). Pour Primtux 9, j'en profite pour y installer DWService et le gestionnaire de presse-papier CopyQ (plus complet que Clipman), ... (voir cette page : https://lofurol.fr/joomla/enseignement/391-primtux-installation-de-primtux-9).

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

        • On démarre l'ordinateur servant de modèle Primtux en boot PXE (en général, touche F12 au démarrage) et quand le menu FOG apparaît on a le choix entre 2 options :
          • soit on fait une "Quick registration and inventory" afin d'enregistrer directement cette machine dans FOG.
          • soit on fait un enregistrement plus complet (qui permet notamment de donner un nom plus identifiable à la machine) via l'option "Perform Full Host Registration and Inventory".
        • Une fois l'enregistrement fait, l'ordinateur redémarre sous Primtux 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 Primtux9 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 Primtux 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 Primtux 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 Primtux 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 Primtux s'installera automatiquement.


          Ressources utiles pour les scripts


            Sources utiles