Servant les images Clonezilla via Apache, avec support BIOS et UEFI sur IPv4, et accès Internet pour les postes clonés. khimananda
Cette documentation a été élaborée avec l'aide de Lumo, l'assistant d'intelligence artificielle développé par Proton (https://lumo.proton.me). Mais malheureusement pour l'instant ça ne fonctionne pas :( Les postes clients UEFI se connectent mais bouclent à la recherche de.... :( ReunigKozh
L'opération de solidarité numérique débutée en 2009 par le Centre des Abeilles avec l'aide technique de Linux Quimper se traduit aujourd'hui par le don d'une vingtaine d'ordinateurs par semaine. Configurer ces ordinateurs avec Clonezilla peut se faire avec une ou plusieurs clés usb Clonezilla. Ces manipulations deviennent fastidieuses surtout lorsqu'il faut mettre à jour ces différentes clés. Un serveur DRBL - Clonezilla est d'une utilisation complexe puisqu'il faut intervenir aussi bien sur le serveur que sur le poste client pour le déploiement des systèmes sur les postes clients. Par contre un serveur iPxe couplé à Clonezilla à l'avantage de laisser à chaque poste client le choix de l'image système à cloner, par exemple Debian BIOS ou UEFI sans intervenir sur le serveur lui-même.
ip a
sudo apt update sudo apt install -y dnsmasq tftpd-hpa syslinux-common grub-efi-amd64-signed shim-signed ipxe
Si votre routeur/switch gère déjà le DHCP sur le réseau 192.168.100.0/24, soit vous le désactivez, soit vous configurez dnsmasq en proxyDHCP (recommandé pour coexister avec un DHCP existant). [stackharbor](https://stackharbor.com/fr/base-de-connaissances/dnsmasq-small-network/)
Configurez eno1 (DHCP).
sudo nano /etc/network/interfaces
auto eno1 iface eno1 inet dhcp
Attribuez une IP statique sur le réseau de clonage :
sudo nano /etc/network/interfaces
Pas de gateway ici : la gateway par défaut reste sur eno1
auto enp2s0 iface enp2s0 inet static address 192.168.100.1 netmask 255.255.255.0
Redémarrez le réseau :
sudo systemctl restart networking # ou sudo nmcli connection up <nom-connexion>
Vérifiez que la route par défaut passe bien par eno1 :
La ligne “default via …” doit pointer vers la gateway de eno1
ip route show
comme ci-dessous
default via 192.168.1.254 dev eno1 proto dhcp src 192.168.1.168 metric 1003 192.168.1.0/24 dev eno1 proto dhcp scope link src 192.168.1.168 metric 1003 192.168.100.0/24 dev enp2s0 proto kernel scope link src 192.168.100.1 linkdown
Si nécessaire, ajustez les métriques pour prioriser eno1 : reddit
Dans
sudo nano /etc/network/interfaces
ajoutez :
iface eno1 inet dhcp metric 100 iface enp2s0 inet static address 192.168.100.1 netmask 255.255.255.0 metric 200
sudo nano /etc/dnsmasq.d/pxe-clonezilla.conf
Contenu (exemple pour un réseau `192.168.100.0/24`) :
# Interface dédiée au réseau de clonage interface=enp2s0 bind-interfaces # Désactiver le DNS si inutile (optionnel) # no-resolv # DHCP sur le réseau de clonage dhcp-range=enp2s0,192.168.100.100,192.168.100.200,12h dhcp-option=enp2s0,3,192.168.100.1 # passerelle (le serveur lui-même) dhcp-option=enp2s0,6,192.168.100.1 # DNS (le serveur, qui forward vers Internet) dhcp-option=enp2s0,15,clonezilla.local # domaine local # Activer TFTP enable-tftp tftp-root=/srv/tftp # Détection architecture client (BIOS vs UEFI) dhcp-match=set:bios,option:client-arch,0 # BIOS/PCAT dhcp-match=set:efi64,option:client-arch,7 # UEFI x86_64 dhcp-match=set:efi32,option:client-arch,6 # UEFI x86 (rare) # Boot BIOS : iPXE undionly.kpxe dhcp-boot=tag:bios,undionly.kpxe # Boot UEFI x64 : iPXE ipxe.efi (ou shim + grub si Secure Boot) dhcp-boot=tag:efi64,ipxe.efi # Optionnel : proxyDHCP si un autre serveur DHCP existe déjà # dhcp-range=enp2s0,proxy
Remarque : Si vous utilisez un DHCP existant sur ce réseau, remplacez la section `dhcp-range` par `dhcp-range=enp2s0,proxy` et assurez-vous que votre DHCP principal ne définit pas les options 66/67 (next-server/filename). stackharbor
sudo mkdir -p /srv/tftp
# iPXE pour BIOS
sudo cp /usr/lib/ipxe/undionly.kpxe /srv/tftp/
# iPXE pour UEFI x64
sudo cp /usr/lib/ipxe/ipxe.efi /srv/tftp/
# Optionnel : pour Secure Boot, utilisez shim + grub
sudo cp /usr/lib/shim/shimx64.efi.signed /srv/tftp/bootx64.efi sudo cp /usr/lib/grub/x86_64-efi-signed/grubx64.efi /srv/tftp/grubx64.efi
3.3. Redémarrer dnsmasq
J'ai été obligé de redémarrer le serveur pour ne plus avoir d'erreur avec la commandes ci-dessous
sudo systemctl restart dnsmasq sudo systemctl enable dnsmasq
Vérifiez les logs :
sudo journalctl -u dnsmasq -f
Récupérez l’ISO Clonezilla Live stable depuis le site officiel : Clonezilla
cd /tmp wget https://clonezilla.org/downloads/download.php?dist=debian&select=stable&version=20240801-noble&iso=clonezilla-live-20240801-noble-amd64.iso -O clonezilla-live.iso
Remplacez l’URL par la dernière version disponible.
sudo mkdir -p /var/www/html/clonezilla sudo mount -o loop clonezilla-live.iso /mnt sudo cp -r /mnt/live /var/www/html/clonezilla/ sudo umount /mnt
Les fichiers importants sont dans
/var/www/html/clonezilla/live/
sudo a2enmod headers sudo systemctl restart apache2
Vérifiez l’accès HTTP :
curl -I http://192.168.100.1/clonezilla/live/vmlinuz
sudo nano /var/www/html/clonezilla/menu.ipxe
Contenu :
#!ipxe
# Menu principal
menu Clonezilla Server
item --gap -- -------------------------
item clonezilla_live Clonezilla Live (sauvegarde/restauration)
item local Boot local
choose --timeout 5000 selected || set selected clonezilla_live
goto ${selected}
:clonezilla_live
echo Chargement de Clonezilla Live...
kernel http://192.168.100.1/clonezilla/live/vmlinuz \
boot=live \
union=overlay \
config \
components \
quiet \
noswap \
edd=on \
nomodeset \
locales=fr_FR.UTF-8 \
keyboard-layouts=fr \
ocs_live_run="ocs-live-general" \
ocs_live_extra_param="" \
ocs_live_batch="no" \
ocs_lang="fr_FR.UTF-8" \
vga=788 \
ip=dhcp \
live-media-path=/clonezilla/live/ \
initrd=initrd.img
initrd http://192.168.100.1/clonezilla/live/initrd.img
boot
:local
echo Boot local...
sanboot --no-describe || chain hd0 || chain fd0 || chain cdrom
Important : Ajustez `live-media-path` si nécessaire. Clonezilla Live peut aussi être configuré pour monter le squashfs via HTTP avec `live-media=HTTP`.khimananda
Les chargeurs `undionly.kpxe` et `ipxe.efi` doivent charger `menu.ipxe` via HTTP. Pour cela, créez un fichier de configuration iPXE dans `/srv/tftp` :
Pour BIOS (`undionly.kpxe`) :
sudo nano /srv/tftp/pxelinux.cfg/default
Mais avec iPXE, il est plus simple d’utiliser un script `.ipxe` chargé directement. Une approche courante est de modifier le comportement de dnsmasq pour qu’il serve un fichier `.ipxe` via TFTP, qui lui-même charge le menu HTTP.
Alternative simple : créer `/srv/tftp/boot.ipxe` :
sudo nano /srv/tftp/boot.ipxe
#!ipxe chain http://192.168.100.1/clonezilla/menu.ipxe
Puis modifier dnsmasq pour servir ce fichier :
# Dans
/etc/dnsmasq.d/pxe-clonezilla.conf
dhcp-boot=tag:bios,boot.ipxe dhcp-boot=tag:efi64,boot.ipxe
Et redémarrer dnsmasq.
Pour que les postes clonés puissent accéder à Internet via `eno1` :
sudo nano /etc/sysctl.conf
Ajoutez ou décommentez :
net.ipv4.ip_forward=1
Appliquez :
sudo sysctl -p
Avec iptables :
sudo iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE sudo iptables -A FORWARD -i enp2s0 -o eno1 -j ACCEPT sudo iptables -A FORWARD -i eno1 -o enp2s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Pour rendre persistant (Debian 13 utilise nftables par défaut, mais iptables-legacy fonctionne) :
sudo apt install -y iptables-persistent sudo netfilter-persistent save
Ou avec nftables :
sudo nano /etc/nftables.conf
table ip nat {
chain postrouting {
type nat hook postrouting priority 100;
oifname "eno1" masquerade
}
}
table ip filter {
chain forward {
type filter hook forward priority 0;
iifname "enp2s0" oifname "eno1" accept
iifname "eno1" oifname "enp2s0" ct state related,established accept
}
}
sudo systemctl restart nftables
Sur un client, lancez :
sudo dhclient -v enp2s0 ip addr show enp2s0 cat /etc/resolv.conf
Le client doit obtenir une IP dans `192.168.100.100-200`, avec `192.168.100.1` comme gateway et DNS.
Une fois Clonezilla démarré, ouvrez un terminal et testez :
ping -c 3 8.8.8.8 ping -c 3 debian.org
## Résumé des fichiers clés
| Fichier | Chemin | Rôle |
| Configuration dnsmasq | `/etc/dnsmasq.d/pxe-clonezilla.conf` | DHCP + TFTP + PXE |
| Chargeur BIOS | `/srv/tftp/undionly.kpxe` | iPXE pour BIOS |
| Chargeur UEFI | `/srv/tftp/ipxe.efi` | iPXE pour UEFI |
| Script iPXE | `/srv/tftp/boot.ipxe` | Chainload vers menu HTTP |
| Menu iPXE | `/var/www/html/clonezilla/menu.ipxe` | Menu de boot Clonezilla |
| Kernel Clonezilla | `/var/www/html/clonezilla/live/vmlinuz` | Noyau Clonezilla |
| Initrd Clonezilla | `/var/www/html/clonezilla/live/initrd.img` | RAM disk Clonezilla |
| Squashfs | `/var/www/html/clonezilla/live/filesystem.squashfs` | Système Clonezilla |
Cette configuration est robuste, supporte BIOS et UEFI, et permet aux postes clonés d’accéder à Internet via le NAT du serveur. [khimananda](https://khimananda.com/blog/pxe-boot-for-automated-os-installs)