Outils pour utilisateurs

Outils du site


serveurnumero1

Installation du serveur des Abeilles numéro 1 de clonage iPXE/Clonezilla sur Debian 13

Cette documentation a été élaborée avec l'aide de Lumo, l'assistant d'intelligence artificielle
développé par Proton (https://lumo.proton.me). L'analyse du serveur, la rédaction des procédures 
et les corrections ont été réalisées conjointement : les commandes de diagnostic ont été exécutées 
et vérifiées sur le serveur réel, et les configurations proposées validées avant publication
mais sans pour autant être certain que tout fonctionne. A vous de vérifier :)
ReunigKozh

## 1. Vue d'ensemble de l'architecture

Le serveur permet de démarrer des machines en réseau (PXE) et de leur proposer soit la restauration automatique d'une image système (Debian, Ubuntu, Mint, PrimTux, MX Linux…), soit l'effacement sécurisé d'un disque (HDD, SSD, NVMe).

PC client (PXE)
   │
   ├─1─ DHCP (isc-dhcp-server, UDP 67)  → donne une IP + le nom du bootloader
   │
   ├─2─ TFTP (tftpd-hpa, UDP 69)        → sert ipxe.efi (UEFI) ou undionly.kpxe (BIOS)
   │
   ├─3─ HTTP (nginx, TCP 80)            → sert boot.ipxe, vmlinuz, initrd.img, squashfs
   │
   └─4─ NFS (TCP 2049)                  → monte /home/partimag (images + scripts)

Hypothèses : le serveur a deux cartes réseau — une reliée à Internet, l'autre (`<CARTE-LAN>`) au LAN de déploiement isolé. Le serveur garde l'adresse 192.168.100.1, codée dans la configuration : ne la changez pas sans tout relire.

## 2. Installation des paquets

sudo apt update
sudo apt install isc-dhcp-server tftpd-hpa nginx nfs-kernel-server nfs-common rsync
Pendant l'installation d'`isc-dhcp-server`, il peut demander une interface : renseignez `<CARTE-LAN>` (vous pourrez la corriger ensuite dans `/etc/default/isc-dhcp-server`).

## 3. Configuration de la carte réseau LAN

Identifier le nom de la carte (débrancher la carte Internet pour lever le doute, ou regarder `nmcli device status`) :

ip link

Créer la connexion statique (remplacer `<CARTE-LAN>` par le nom réel, ex. `enp3s0`) :

sudo nmcli connection add type ethernet con-name "pxe-lan" ifname <CARTE-LAN> \
ipv4.method manual ipv4.addresses 192.168.100.1/24 ipv6.method disabled
sudo nmcli connection up pxe-lan

⚠️ Ne jamais brancher la carte LAN PXE sur un réseau existant tant que le DHCP tourne : le serveur attribuerait des IP 192.168.100.x à votre réseau habituel.

## 4. Configuration DHCP

Créer

sudo nao /etc/dhcp/dhcpd.conf
option domain-name "pxe.local";
option domain-name-servers 8.8.8.8;
option space PXE;
option PXE.arch code 93 = unsigned integer 16;
default-lease-time 600;
max-lease-time 7200;
authoritative;

subnet 192.168.100.0 netmask 255.255.255.0 {
  range 192.168.100.10 192.168.100.120;
  option routers 192.168.100.1;
  option broadcast-address 192.168.100.255;
  next-server 192.168.100.1;

  if exists user-class and option user-class = "iPXE" {
    # iPXE sait parler HTTP : on lui passe directement le menu
    filename "http://192.168.100.1/boot.ipxe";
  } elsif option PXE.arch = 00:07 or option PXE.arch = 00:09 {
    # UEFI x64 → iPXE EFI
    filename "ipxe.efi";
  } else {
    # BIOS legacy → iPXE en mode chainloader
    filename "undionly.kpxe";
  }
}

Déclarer l'interface d'écoute dans

sudo nano /etc/default/isc-dhcp-server
INTERFACESv4="<CARTE-LAN>"
INTERFACESv6=""

## 5. Configuration TFTP

sudo nano /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

Créer la racine TFTP minimaliste (seuls les bootloaders sont servis par TFTP — tout le reste passe en HTTP) :

sudo mkdir -p /srv/tftp
# Copier depuis l'ancien serveur ou récupérer depuis une compilation iPXE :
sudo rsync -av ancien:/srv/tftp/ipxe.efi ancien:/srv/tftp/undionly.kpxe /srv/tftp/
sudo chown -R root:tftp /srv/tftp
chmod 644 /srv/tftp/*
Pourquoi ne pas recopier tout l'ancien `/srv/tftp/` ? Il contient ~1 Go de vestiges (ISO dupliquées, modules GRUB/syslinux, installateur Debian) issus d'essais précédents et non utilisés par la chaîne actuelle. Archivez l'ancien serveur tel quel sur un support externe, puis ne migrez que ces deux fichiers (+ `efi32/` si vous voulez le fallback UEFI 32 bits).

## 6. Contenu HTTP (nginx)

La config nginx par défaut de Debian sert `/var/www/html` sur le port 80 : elle convient telle quelle. Y copier :

sudo rsync -av ancien:/var/www/html/boot.ipxe /var/www/html/
sudo rsync -av ancien:/var/www/html/clonezilla/ /var/www/html/clonezilla/

Contenu attendu dans `/var/www/html/clonezilla/live/` (Clonezilla Live personnalisé — voir §9) :

filesystem.squashfs   (352 Mo)
initrd.img            (37 Mo)
vmlinuz               (8,9 Mo)

## 7. NFS (images et scripts)

Créer le répertoire des images et y copier le contenu de l'ancien serveur :

sudo rsync -av ancien:/home/partimag/ /home/partimag/

Arborescence attendue :

/home/partimag/
├── sda/          ← images pour cibles SATA (disques détectés en /dev/sda)
├── nvme/         ← images pour cibles NVMe
└── scripts/
    ├── restore-by-disk.sh
    └── effacement.sh

Déclarer l'export dans

sudo nano /etc/exports
/home/partimag 192.168.100.0/24(rw,sync,no_subtree_check,no_root_squash)

Puis :

sudo exportfs -ra

## 8. Démarrage et activation des services

sudo systemctl enable --now isc-dhcp-server tftpd-hpa nginx nfs-server

Vérifications :

sudo systemctl status isc-dhcp-server tftpd-hpa nginx nfs-server
ss -tulpn | grep -E ':(67|69|80|2049)'          # les 4 ports doivent répondre
curl http://localhost/boot.ipxe                 # doit afficher le menu iPXE
curl -sI http://localhost/clonezilla/live/filesystem.squashfs | head -3   # 200 OK
showmount -e localhost                          # l'export doit être listé

Si un pare-feu est actif, autoriser sur l'interface LAN : 67/udp, 69/udp, 80/tcp, 2049/tcp + rpcbind.

## 9. Le Clonezilla Live personnalisé (point critique)

Le `filesystem.squashfs` servi n'est pas le Clonezilla Live standard : il intègre `nwipe`, `hdparm`, `nvme-cli` nécessaires au script d'effacement (c'est le sens du nom `clonezilla-3.2.2-15-AUTO-et-effacement.iso`). Concrètement, lors de l'installation :

1. Récupérer le squashfs, vmlinuz et initrd.img depuis l'ancien serveur — la version de `/var/www/html/`, pas celle de `/srv/tftp/` (elles diffèrent) ; 2. Conserver une copie de l'ISO personnalisé hors production ; 3. Documenter la méthode de reconstruction : personnaliser Clonezilla Live (mode “génération d'une version personnalisée” de Clonezilla, ou décompression du squashfs + `unsquashfs`/`mksquashfs` après ajout des paquets `nwipe hdparm nvme-cli`), puis redéployer les trois fichiers dans `/var/www/html/clonezilla/live/`.

## 10. Tests finaux

Brancher un PC client sur le LAN de déploiement, démarrer en PXE : le menu doit apparaître en ~10 secondes (timeout du `choose`). Tester au minimum une machine UEFI et une machine BIOS avant production.

—

Utilisation au quotidien

## 1. Restaurer un poste

  • 1. Relier le PC au LAN de déploiement (switch dédié, pas le réseau Internet)
  • 2. Démarrer en PXE (touche F12/F9/F11 selon le constructeur, ou boot réseau en premier dans l'UEFI)
  • 3. Le menu s'affiche — taper sur une touche dans les 10 secondes sinon le choix par défaut (dernier item) part tout seul
  • 4. Choisir l'image correspondant au firmware de la machine (une image `-UEFI-img` pour un PC UEFI, `-BIOS-img` pour un PC legacy)
  • 5. Confirmer avec `oui` au message d'avertissement (tout autre mot de réponse = annulation)
  • 6. Le poste se restaure puis s'éteint tout seul (`-p poweroff`)
  • Comment ça marche sous le capot : iPXE charge Clonezilla Live (kernel + squashfs en RAM via HTTP), Clonezilla monte le dépôt d'images par NFS, puis exécute `restore-by-disk.sh <image>` qui détecte le disque (`sda` → sous-dossier `sda/`, NVMe → sous-dossier `nvme/`) et lance `ocs-sr restoredisk`.

## 2. Effacer un disque

Choisir EFFACEMENT dans le menu. Le script `effacement.sh` détecte le type de disque et adapte la méthode :

Disque Outil Méthode
———
HDD magnétique `nwipe` écriture de zéros
SSD `hdparm` security-erase (+ dégel si disque *frozen*)
NVMe `nvme-cli` `nvme format` (crypto-erase puis erase si non supporté)

Cas particulier SSD *frozen* : le script propose de mettre la machine en veille profonde pour débloquer la sécurité ATA ; à la sortie de veille, vérifier `not frozen` avant de continuer.

## 3. Ajouter une image au serveur

**Méthode A

— capturer depuis une machine modèle** (recommandé) : démarrer la machine modèle en PXE, mais démarrer Clonezilla manuellement (éditer la ligne `kernel` dans le menu avec l'option `ocs_live_run` vide ou démarrer en shell), puis créer l'image vers `/home/partimag/sda/` ou `nvme/` avec `ocs-sr`. Ou plus simple : faire l'image avec une clé USB Clonezilla Live, puis copier le dossier d'image dans le bon sous-dossier du serveur.

**Méthode B

— ajouter une entrée au menu** : éditer sur le serveur :

sudo nano /var/www/html/boot.ipxe
item Ma-Distrib-UEFI-img        Ma distribution UEFI

et s'assurer que le fichier image existe dans `/home/partimag/sda/` (ou `nvme/`). Le nom d'item (`Ma-Distrib-UEFI-img`) devient l'argument `${IMAGE}` passé au script. Aucun service à redémarrer : le fichier est relu à chaque boot client.

## 4. Maintenance courante

Voir les logs des clients :

sudo journalctl -u isc-dhcp-server -f     # demandes DHCP en temps réel
sudo tail -f /var/log/nginx/access.log    # chargements kernel/squashfs

Espace disque des images :

df -h /home/partimag
du -sh /home/partimag/sda/* /home/partimag/nvme/*

Redémarrer un service après modification :

sudo systemctl restart isc-dhcp-server    # après modification de dhcpd.conf
sudo exportfs -ra                          # après modification de /etc/exports
sudo systemctl reload nginx                # après modification de boot.ipxe (optionnel)

Sauvegarder la configuration du serveur :

sudo tar czf config-ipxe-$(date +%F).tgz \
/etc/dhcp/dhcpd.conf /etc/default/isc-dhcp-server \
/etc/default/tftpd-hpa /etc/exports \
/var/www/html/boot.ipxe /home/partimag/scripts/

## 5. Dépannage rapide

Symptôme Vérifier
——
Le client ne boot pas en PXE, pas d'IP Câble sur le bon port ? DHCP actif ? `journalctl -u isc-dhcp-server -f` pendant un essai ; carte LAN bien en `192.168.100.1`
Le client affiche “PXE-E53 / no boot filename” `ipxe.efi` / `undionly.kpxe` présents dans `/srv/tftp/` et lisibles par l'utilisateur `tftp`
Le menu iPXE ne s'affiche pas (bootloop) Le DHCP renvoie bien `http://.../boot.ipxe` aux clients iPXE ? `curl http://192.168.100.1/boot.ipxe` depuis le serveur
Le client bloque après le choix (chargement squashfs) nginx opérationnel ? `curl -sI http://192.168.100.1/clonezilla/live/filesystem.squashfs`
“Impossible de monter /home/partimag” chez le client NFS exporté ? `showmount -e localhost` ; pare-feu sur 2049 ?
Restauration échoue sur le choix du disque Le script cherche `sda` ou `nvme0n1` — machine avec plusieurs disques ou contrôleur RAID à régler dans le BIOS
Deux serveurs DHCP sur le même câble ⚠️ Ne jamais relier la carte LAN PXE au réseau Internet : le DHCP du serveur attribuerait des IPs 192.168.100.x sur votre réseau principal

## 6. Sécurité et bonnes pratiques

- Le LAN de déploiement doit rester isolé : seule l'interface Internet (`eno1` sur l'ancien serveur) porte la route par défaut - Le menu d'effacement est volontairement dangereux : il ne devrait être utilisé qu'en présence d'un encadrant - Après chaque modification de `boot.ipxe` ou des scripts, tester sur une machine cobaye avant une session de clonage en salle - Conserver l'archive tar de configuration (§4.5) à jour après chaque changement

Quelques pistes d'amélioration possibles pour la suite, si vous le souhaitez : ajouter un inventaire simple des restaurations effectuées (log côté serveur via les scripts), sécuriser l'accès SSH du serveur (ce qu'il a déjà activé), ou mettre en place une sauvegarde automatique de `/home/partimag` — les images représentent le vrai patrimoine de ce serveur, bien plus que sa configuration. Voulez-vous aussi une version imprimable (schéma + une page recto) pour l'atelier ?

serveurnumero1.txt · Dernière modification : de rene