Si on questionne un moteur de recherche pour trouver des informations sur internet pour mettre en place un boot PXE depuis un dépôt géré par un serveur TFTP, on trouve des tas de résultats probablement tous super pertinents. Cependant, aucun howto rencontré lors de mes recherches ne proposait un système permettant de démarrer clonezilla en PXE en utilisant la liste suivante d’ingrédients:
- n’importe quel windows décemment récent comme OS
- Open DHCP server pour windows comme serveur dhcp
- TFTPD64 comme serveur tftp
- debian netboot pour faire une image de démarrage
- clonezilla comme OS live à booter depuis le tftp
En voici donc un, un tantinet quick and dirty, mais qui peut servir de point de départ. Le but recherché ici étant de mettre en place rapidement une petite infrastructure de création / déploiement d’images disque, pour cloner facilement des lots de PC sans avoir à multiplier les CD de boot ou autres clés USB.
Dans la liste des ingrédients qui vont être utilisés, tous sont open source si on excepte windows (c’est une grosse exception ceci dit…).
Préparation de l’OS
Le dossier de base du serveur TFTP, ainsi que le dossier partagé qui va héberger les images seront tous deux dans un volume dédié, disons le volume D, sur notre machine windows dont l’adresse IP sera 192.168.99.30 . Le TFTP aura pour dossier de base D:\tftp et les images produites avec clonezilla seront stockées dans D:\clonezilla. On créera un utilisateur sans habilitations d’administrateur, que l’on appellera clonezilla (avec comme mot de passe clonezilla par exemple) et nous lui attribuerons des droits ntfs en contrôle total sur le dossier D:\clonezilla. Ce dernier sera également partagé et son chemin d’accès UNC sera \\192.168.99.30\clonezilla ; l’utilisateur clonezilla aura également les habilitations maximales sur le partage.
Configuration du serveur TFTP
On installera la version « service » de TFTPD, et on lui préparera la configuration suivante:
fichier de conf de tftpd64 (tftpd32.ini)
[TFTPD32]
BaseDirectory=D:\tftp
TftpPort=69
Hide=1
WinSize=0
Negociate=1
PXECompatibility=0
DirText=0
ShowProgressBar=1
Timeout=3
MaxRetransmit=6
SecurityLevel=3
UnixStrings=1
Beep=0
VirtualRoot=0
MD5=0
LocalIP=192.168.99.30
Services=1
TftpLogFile=
SaveSyslogFile=
PipeSyslogMsg=0
LowestUDPPort=0
HighestUDPPort=0
MulticastPort=0
MulticastAddress=
PersistantLeases=1
DHCP Ping=1
DHCP LocalIP=
Max Simultaneous Transfers=100
UseEventLog=0
Console Password=tftpd32
Support for port Option=0
UseEventLog=0
Keep transfer Gui=5
Ignore ack for last TFTP packet=0
Enable IPv6=0
UnicastBOOTP=0
DHCP Double Answer=0
Reduce TFTP Path=0
HttpBaseDirectory=.
La configuration vue depuis l’interface graphique ressemble à ça:
Préparation de l’image de démarrage
Afin de permettre aux clients de démarrer clonezilla sur le réseau, notre serveur TFTP doit leur présenter une image de démarrage. Ici nous allons utiliser celle qui est fournie par debian pour la debian netboot. Il faut télécharger le package contenant les fichiers nécessaires, puis réaliser leur extraction. Comme ce pakage contient des liens symboliques, il est possible qu’ils ne soient pas correctement recréés à l’extraction, suivant le logiciel utilisé pour décompacter le package. Voici la méthode utilisée ici pour ne pas s’encombrer avec les soucis de symlink:
- créer à la racine du serveur TFTP les dossiers suivants:
- pxelinux.cfg
- boot-screens
- naviguer au sein de l’archive, à l’aide de 7zip par exemple, et extraire les fichiers suivants:
- netboot.tar.gz\netboot.tar.\debian-installer\amd64\boot-screens\menu.cfg à déposer dans le dossier boot-screens.
- netboot.tar.gz\netboot.tar.\debian-installer\amd64\boot-screens\vesamenu.c32 à déposer dans le dossier boot-screens.
- netboot.tar.gz\netboot.tar.\debian-installer\amd64\boot-screens\splash.png à déposer dans le dossier boot-screens.
- netboot.tar.gz\netboot.tar.\debian-installer\amd64\boot-screens\libcom32.c32 à déposer dans le dossier boot-screens
- netboot.tar.gz\netboot.tar.\debian-installer\amd64\boot-screens\libutil.c32 à déposer dans le dossier boot-screens.
- netboot.tar.gz\netboot.tar.\debian-installer\amd64\boot-screens\syslinux.cfg dans le dossier pxelinux.cfg . Renommer ce fichier en « default ».
- netboot.tar.gz\netboot.tar.\debian-installer\amd64\pxelinux.0 à la racine du serveur TFTP.
- netboot.tar.gz\netboot.tar.\debian-installer\amd64\boot-screens\ldlinux.c32 à la racine du serveur TFTP.
Le contenu du fichier « pxelinux.cfg\default » doit-être le suivant:
path boot-screens/
include boot-screens/menu.cfg
default boot-screens/vesamenu.c32
prompt 0
timeout 0
Ce fichier indique le chemin depuis lequel charger les librairies .c32 permettant de générer le menu de démarrage, ainsi que le fichier de configuration décrivant le menu.
Le contenu du fichier « boot-screens\menu.cfg » est celui-ci:
menu title Home PXE boot env
menu background boot-screens/splash.png
label clonezilla-live
MENU label clonezilla live
KERNEL vmlinuz
APPEND initrd=initrd.img boot=live username=user union=overlay config components quiet noswap edd=on nomodeset nodmraid locales=fr_FR.UTF-8 keyboard-layouts=fr ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch=no ocs_repository="smb://clonezilla:clonezilla@192.168.99.30/clonezilla" net.ifnames=0 nosplash noprompt fetch=tftp://192.168.99.30/filesystem.squashfs
Ce fichier de configuration présente un menu doté d’une seule entrée : clonezilla live. Le fond du menu est customisable en utilisant n’importe quelle image png en 640×480, et en la nommant splash.png.
Le noyau à démarrer est contenu dans le fichier vmlinuz, et les paramètres passés au noyau sont listés par la directive APPEND. Notons en particulier les paramètres suivants:
- fetch=tftp://192.168.99.30/filesystem.squashfs : indique au système où est situé le système de fichier à charger en ramdisk depuis le serveur TFTP.
- locales=fr_FR.UTF-8 : pour passer l’interface en français.
- keyboard-layouts=fr : pour passer le clavier en français.
- ocs_live_run= »ocs-live-general » : pour démarrer clonezilla en mode général, c’est à dire qu’on va parcourir les menus pour choisir les actions désirées.
- repository= »smb://clonezilla:clonezilla@192.168.99.30/clonezilla » : ce paramètre va monter directement le dépôt hébergé par le partage de fichier configuré à l’étape de préparation de l’OS dans le dossier de dépôt des images clonezilla.
Il faut ensuite extraire les fichiers de la distribution clonezilla live, sur laquelle nous allons démarrer; on procède ainsi à l’extraction à la racine du serveur TFTP du contenu du répertoire « live » de l’archive qui aura été téléchargée.
Remarquons que le système de fichiers live sera décompacté dans un ramdisk, il faudra une quantité de RAM sur la machine à démarer en PXE supérieure à la taille du fichier filesystem.squashfs.
Configuration du serveur DHCP
Open DHCP server sera installé dans C:\OpenDHCPServer, et on s’assurera que le service soit bien enregistré et configuré pour démarrer automatiquement. Son fichier de configuration ressemblera à ceci:
[LISTEN_ON]
192.168.99.30
[LOGGING]
LogLevel=Normal
[HTTP_INTERFACE]
HTTPServer=192.168.99.30:6789
[RANGE_SET]
DHCPRange=192.168.99.150-192.168.99.200
SubnetMask=255.255.255.0
Router=192.168.99.1
DomainServer=192.168.99.1
AddressTime=3600
[GLOBAL_OPTIONS]
NextServer=192.168.99.30
TFTPServerName=pxeboot
BootFileName=pxelinux.0
Cette configuration fait que le serveur DHCP écoutera les requêtes DHCP sur son interface 192.168.99.30. On y indique également une étendue DHCP dans le même réseau que le serveur DHCP et le serveur TFTP. Enfin, deux paramètres très importants pour ce projet sont à fournir aux clients:
- NextServer=192.168.99.30 : indique aux clients l’existence d’un serveur TFTP à l’adresse 192.168.99.30.
- BootFileName=pxelinux.0 : indique aux clients le fichier de démarrage par le réseau.
Cette maquette a été réalisée sur une machine virtuelle de mon micro-datacenter, mais en réalisant cette configuration sur un ordinateur portable par exemple, équipé d’un disque dur conséquent, on disposera d’un environnement de clonage portable et complet, bootable par le réseau.
o/