Cette configuration d'un serveur de clonage par amorçage PXE (Pre-boot eXecution Environment) pour une installation via le réseau, s'inspire d'un article de David Legrand dans NextInpact
Installation avec debian-12.2.0-amd64-netinst.iso
Nom de la machine : debian-pxe-abeilles
Identifiant : Linux Quimper
Nom du compte : linuxquimper
Schéma de partitionnement : tout dans une seule partition avec un swap de 1Go
Sélection des logiciels :
Ajouter l'utilisateur linuxquimper au groupe sudo
Le choix est d'utiliser le serveur DHCP de la box et d'utiliser un proxy DHCP sur notre serveur.
Ainsi, notre serveur utilisé pour l'amorçage PXE ne fera qu'envoyer les requêtes au serveur DHCP de la box, faisant suivre ses réponses en les adaptant au besoin. Pour cela, nous nous reposons sur Dnsmasq. Il s'agit d'une application open source permettant de gérer différents services, dont le proxy DHCP et TFTP
En complément, il nous faut les bibliothèques pxelinux, pour le démarrage du serveur et syslinux pour initialiser les OS.
sudo apt install dnsmasq pxelinux syslinux-common
On commence par créer un répertoire qui sera utilisé comme racine du serveur TFTP et celui pour le menu de l'interface PXE. Nous y plaçons les fichiers qui nous seront nécessaires :
sudo mkdir -p /var/tftpboot/pxelinux.cfg cd /var/tftpboot sudo touch pxelinux.cfg/default sudo cp /usr/lib/PXELINUX/pxelinux.0 . sudo cp /usr/lib/syslinux/memdisk . sudo cp /usr/lib/syslinux/modules/bios/* .
On sauvegarde la configuration de Dnsmasq, contenant sa documentation. Elle pourra vous être utile si vous souhaitez aller plus loin dans la gestion des paramètres et du menu. Puis on ouvre son remplaçant :
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.old sudo nano /etc/dnsmasq.conf
On y place les lignes suivantes. La variable dhcp-range pour le réseau des Abeilles est à 192.168.1.0:
## On n'active pas le serveur DNS port=0 ## On initialise le serveur TFTP enable-tftp tftp-root=/var/tftpboot ## On initialise le proxy DHCP dhcp-range=192.168.1.0,proxy ## On initialise le service PXE dhcp-boot=pxelinux.0 ## On initialise le menu du service PXE pxe-prompt="Veuillez faire votre choix :" pxe-service=x86PC, "Interface PXE", pxelinux pxe-service=x86PC, "Boot depuis le disque local", 30 # ----- faire fonctionner le boot en UEFI : ne fonctionne pas encore ----- # https://github.com/WillChamness/Dnsmasq-PXE/blob/main/dnsmasq.conf ## BIOS ; notez que le nom du fichier n'est PAS une faute de frappe # pxe-service=x86PC,"Interface PXE (BIOS)",bios/pxelinux # UEFI # dhcp-match=set:efi-x86_64,option:client-arch,7 # dhcp-boot=tag:efi-x86_64,efi64/syslinux.efi ## On active le log du serveur DHCP log-dhcp
On relance le service mais peut-être redémarrer le serveur sera plus efficace
sudo systemctl restart dnsmasq.service
Dans /var/tftpboot/pxelinux.cfg/default
ajouter les lignes suivantes (hdt est un outil affichant la composition de l'ordinateur)
DEFAULT menu.c32 MENU TITLE Serveur PXE LABEL hdt MENU LABEL ^Hardware Detection Tool KERNEL hdt.c32 LABEL reboot MENU LABEL Reboot COM32 reboot.c32
Créer un répertoire où seront déposer les fichiers iso
sudo mkdir /var/tftpboot/_iso
Le dispositif est ici assez basique puisque l'on demande à la machine de récupérer l'ISO depuis le serveur TFTP pour la placer en mémoire. Elle est alors montée comme un ramdisk puis utilisée.
Cette façon de faire fonctionne avec les images prévues à cet effet mais ne fonctionne pas passé une certaine taille (1,2 Go environ) et pour la plupart des ISO d'installation classique qui vont chercher un CD/DVD ou une clé USB, sans les trouver comme Debian netinst, antiX ou boot-repair
Ce procédé peut donc être utilisé pour des images de dépannage et autres systèmes minimalistes, mais pas plus.
Déposer les fichiers iso :
Éditons le menu /var/tftpboot/pxelinux.cfg/default
:
Parfois, certaines images nécessitent la ligne APPEND iso raw
pour être chargées correctement (ajouté systématiquement au cas où) :
LABEL clonezillabeilles MENU DEFAULT MENU LABEL ^Clonezilla Abeilles amd64 LINUX memdisk INITRD _iso/clonezilla-live-abeilles-3.1.0-22-amd64.iso APPEND iso raw LABEL clonezilla32 MENU LABEL ^Clonezilla i686 LINUX memdisk INITRD _iso/clonezilla-live-3.0.2-21-i686.iso APPEND iso raw LABEL clonezilla32pae MENU LABEL ^Clonezilla i686 pae LINUX memdisk INITRD _iso/clonezilla-live-3.0.2-21-i686-pae.iso APPEND iso raw LABEL dban MENU LABEL ^Dban i586 LINUX memdisk INITRD _iso/dban-2.3.0_i586.iso APPEND iso raw LABEL shredos MENU LABEL ^Shredos x86-64 LINUX memdisk INITRD _iso/shredos-2021.08.2_23_x86-64_0.34_20221231.iso APPEND iso raw
Une fois Netboot.xyz lancé, vous verrez un large choix de distributions, Live ou non, que vous pourrez installer comme bon vous semble. Attention, aucune donnée n'étant stockée localement, tous les fichiers seront téléchargés depuis des serveurs ce qui nécessite une bonne connexion internet pour ne pas y passer des heures…
Télécharger netboot.xyz.iso et l'installer dans /var/tftpboot/_iso
puis ajouter au fichier /var/tftpboot/pxelinux.cfg/default
les lignes suivantes :
LABEL netboot MENU LABEL ^Netboot.xyz LINUX memdisk INITRD _iso/netboot.xyz.iso APPEND iso raw
Clonezilla pour accéder ou créer des images peut utiliser le protocole NFS. Les images seront crées dans /home/partimag
Installation du serveur NFS
sudo apt install nfs-kernel-server
et on ajoute au fichier /etc/exports
/home/partimag 192.168.1.0/24(sync,no_root_squash,no_subtree_check,rw)
Initialisation du serveur NFS :
sudo exportfs -a
Virtualbox sera utilisé pour créer et mettre à jour les images Clonezilla
Voir le wiki de Debian
Télécharger Virtualbox
et installé le avec sudo dpkg -i
puis faire sudo apt install -f
Installations complémentaires
sudo apt install gcc make perl sudo apt install linux-headers-amd64 linux-headers-6.1.0-12-amd64 sudo /sbin/vboxconfig sudo adduser linuxquimper vboxusers
Crer le répertoire /home/linuxquimper/VirtualBox VMs
et y copier les machines virtuelles
Ajoutez les lignes suivantes dans isolinux.cfg et syslinux.cfg qui se trouvent /home/linuxquimper/clonezilla/syslinux
pour (en cas d'utilisation de iPXE et le démarrage sur un ordi UEFI il faudra changer /home/linuxquimper/clonezilla/boot/grub/grub.cfg) :
* Cloner l'image sur les ordis
label Clonage PXE MENU DEFAULT MENU LABEL CLONAGE disque avec Image sur serveur PXE kernel /live/vmlinuz append initrd=/live/initrd.img boot=live union=overlay username=user config components quiet loglevel=0 noswap edd=on nomodeset enforcing=0 noeject locales="en_US.UTF-8" keyboard-layouts="en" ocs_live_run=" ocs_daemonon="nfs-common" ocs_repository="nfs://192.168.1.15/home/partimag/" ocs_prerun="dhclient" ocs_prerun1="mount -t nfs 192.168.1.15:/home/partimag /home/partimag -o noatime,nfsvers=3" ocs_live_run="/usr/sbin/ocs-sr -g auto -e1 auto -e2 -c -r -j2 -k1 -scr -icds -p poweroff restoredisk Ubuntu-2204-Abeilles sda" ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0 nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1 TEXT HELP * Clonage du disque CIBLE sda * SELECTION : image SOURCE * Connexion via NFS automatique * Mode VGA 1024x768 * MAJ 02/2022 ENDTEXT
* créer l'image à cloner
label Sauvegarde NFS MENU LABEL SAUVEGARDE (utiliser que sur serveur PXE) kernel /live/vmlinuz append initrd=/live/initrd.img boot=live union=overlay username=user config components quiet noswap edd=on nomodeset noeject locales="fr_FR.UTF-8" keyboard-layouts="fr" ocs_numlk="on" ocs_daemonon="nfs-common" ocs_repository="nfs://192.168.1.15/home/partimag/" ocs_prerun="dhclient" ocs_prerun1="mount -t nfs 192.168.1.15:/home/partimag /home/partimag -o noatime,nfsvers=3" ocs_live_run="/usr/sbin/ocs-sr -q2 -c -j2 -z1 -i 0 -sfsck -senc -p poweroff savedisk Ubuntu-2204-Abeilles sda" ocs_live_extra_param="" ocs_live_batch="no" vga=791 ip= net.ifnames=0 nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1 TEXT HELP * Sauvegarde du disque sda * SELECTION : image SOURCE * Connexion via NFS automatique * Mode VGA 1024x768 * MAJ 10/2023 ENDTEXT
Création de /var/tftpboot/_iso/clonezilla-live-Abeilles-NFS-3.1.0-22-amd64.iso
/home/linuxquimper/clonezilla
exécuter la commande suivante pour créer l'iso clonezilla qui sera utilisé pour la création et le clonage de l'image genisoimage -A 'Clonezilla Abeilles live' -f -r -hide-rr-moved -hide-joliet-trans-tbl -J -l -allow-limited-size -b syslinux/isolinux.bin -c syslinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -efi-boot EFI/images/efiboot.png -no-emul-boot ./ > /var/tftpboot/_iso/clonezilla-live-Abeilles-NFS-3.1.0-22-amd64.iso