Ce dispositif est un assemblage de deux services : DHCP et TFTP. Ainsi avant que le système démarre sur le disque, il est possible de démarrer sur le réseau grâce à une modification d'une option dans le BIOS (son nom diffère en fonction de sa version et de sa marque). En d'autre terme, l'amorçage PXE (sigle de Pre-boot eXecution Environment) permet à une station de travail de démarrer depuis le réseau en récupérant une image de système d'exploitation qui se trouve sur un serveur. Il permet également d'installer de manière automatique et à distance des serveurs sous divers OS.
Voici un exemple du mode de fonctionnement :
Admettons que le “PXE Server” ait l'IP 192.168.0.211, et les clients 1 et 2 aient une IP entre 192.168.0.10 et 192.168.0.200. Techniquement voici les étapes au cours d'un boot :
Rien de plus!
Dans un premier temps, installons le service DHCP qui va permettre de fournir à la machine cliente une IP pour communiquer avec le serveur PXE.
apt-get install isc-dhcp-server
On déclare le réseau logique ainsi que l'hôte qui contiendra toujours à la même adresse IP. Prenez garde à ce que ces lignes soient adapté à vos besoins :
nano /etc/dhcp/dhcpd.conf
Il doit contenir au minimum ces informations :
ddns-update-style none; option domain-name "mon-domaine.fr"; max-lease-time 7200; log-facility local7; allow booting; # On définit la place d'adresse de notre réseau local 192.168.0.0/24 : subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.100 192.168.0.200; option broadcast-address 192.168.0.255; option routers 192.168.0.254; option domain-name-servers 192.168.0.254; filename "pxelinux.0"; } # On définit l'adresse du serveur délivrant les fichiers ISO/images group { next-server 192.168.0.211; host srv-pxe { filename "pxelinux.0"; } }
Enfin on prend en compte ces modifications :
/etc/init.d/isc-dhcp-server restart
On peut suivre les demandes d'IPs via les logs :
tail -f DHCP /var/log/syslog
Dans un second temps, on met en place le service TFTP qui va permettre au client de récupérer les données avec simplicité vu que c'est un protocole supporté par le BIOS!
Installons les dépendances :
apt-get install tftpd-hpa
Ainsi il nous reste à placer les images système dans le dossier /srv/tftp/. Téléchargeons l'image de démarrage de Debian Jessie dans le dossier respectif :
cd /srv/tftp/ wget http://cdn-fastly.deb.debian.org/debian/dists/jessie/main/installer-amd64/current/images/netboot/netboot.tar.gz tar xf netboot.tar.gz
On vérifie que le service est bien lancé :
/etc/init.d/tftpd-hpa restart
Il reste plus qu'a ce que la machine cliente démarre sur le réseau et le tour est joué!
Il y a un moyen rapide d'approuver qu'il fonctionne bien. Après avoir récupéré une IP via le DHCP que nous venons d'installer, installons le paquet suivant :
apt-get install tftp
Puis on se connecte au serveur TFTP :
tftp 192.168.0.211
Mettons en mode verbeux les échanges et téléchargeons par exemple une ISO :
tftp> verbose tftp> get lubuntu.iso
A ce moment là on peut voir ce type de message qui indique qu'il a bien télécharger l'ISO :
getting from 192.168.0.211:lubuntu.iso to lubuntu.iso [netascii]
Et dès que l'on quitte l'interface, on peut voir que le fichier est bien présent.
Je ne suis pas allé plus loin mais voici de bonnes documentations pour installer un système depuis un ISO :
Avec l'utilitaire Kickstart, il est possible de personnaliser une installation automatisée grâce à la lecture d'un document accessible depuis un serveur web par exemple.
Voici à quoi peux ressembler le fichier :
Admettons qu'il soit accessible depuis l'URL : http://mon-serveur.com/install_auto.cfg
Alors il sera possible de le récupérer lors de l’exécution d'une commande permettant de le récupérer en ligne. En effet, lors du démarrage d'un système, on voit appaire rapidement ce type d'interface GRUB :
Il suffira alors de taper sur <TAB> pour éditer la commande permettant de démarrer le système comme ceci :
vmlinuz ks=http://192.168.0.211/install_auto.cfg initrd=initrd.img
Ensuite il faudra attendre pendant plusieurs minutes pour qu'une fois le système installé, il vous rendra la main.