Serveur PXE
L'armorçage par le réseau impose dans bien de ces implémentations deux services:
- DHCP: Pour l'apprentissage du serveur TFTP fournissant les fichiers de démarrage par le client
- TFTP: Pour la fourniture de ces fichiers
J'ajouterai un service HTTP afin d'améliorer les performances par rapport au service TFTP (qui est vraiment tout pourris). Ce dernier ne servira donc qu'a l'amorçage de PXELinux, HTTP s'occupant du transfère des différents fichiers de démarrage.
Installation des services
Pour cet exemple j'utiliserai les services suivants:
apt install isc-dhcp-server tftpd-hpa apache2
Configuration des services
Service DHCP
Isc-dhcp-server
vim /etc/dhcp/dhcpd.conf
#Désactivation du dynDNS
ddns-update-style none;
#Limitation du DDoS
deny declines;
#Permet l'envoi de requette DHCPNAK
authoritative;
#------ autorisation du pxe ------
allow bootp;
allow booting;
#------ POUR LE PXE ------
#adresse du serveur tftpd
next-server 192.168.183.254;
#fichier de boot pxe
filename "lpxelinux.0";
#------ définition des serveurs DNS ------
option domain-name-servers 192.168.170.171;
subnet 192.168.183.0 netmask 255.255.255.0 {
range 192.168.183.2 192.168.183.99;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.183.255;
option routers 192.168.183.254;
default-lease-time 600;
max-lease-time 7200;
}
vim /etc/default/isc-dhcp-server
# Spécifiez vos interfaces en les séparant par des espaces
INTERFACESv4="eth0"
INTERFACESv6=""
Redémarrer le service
systemctl restart isc-dhcp-server.service
Dnsmasq
DHCP Cisco
Si vous voulez utiliser le service DHCP d'un équipement Cisco, vous pouvez vous référez à la documentation appropriée.
Service TFTP
vim /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure -v"
RUN_DAEMON="yes"
Redémarrer le service
systemctl restart tftpd-hpa.service
Service HTTP
vim /etc/apache2/apache2.conf
<Directory /srv/tftp>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
vim /etc/apache2/sites-available/pxe.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /srv/tftp
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
a2dissite 000-default.conf a2ensite pxe.conf
systemctl reload apache2.service
Provisionnement des fichiers d'amorçage
Nous utiliserons PXELinux (Syslinux via le réseau) pour effectuer la tâche de chargeur d'amorçage par le réseau.
Téléchargement de Syslinux
wget https://www.kernel.org/pub/linux/utils/boot/syslinux/Testing/6.04/syslinux-6.04-pre1.tar.gz -P /tmp
Si le lien venait à mourir, Syslinux est téléchargeable ici.
Extraction de son contenu
tar xzvf /tmp/syslinux-6.04-pre1.tar.gz -C /tmp
Copie des fichiers d’intérêts pour notre usage
cp /tmp/syslinux-6.04-pre1/bios/com32/elflink/ldlinux/ldlinux.c32 /srv/tftp/ cp /tmp/syslinux-6.04-pre1/bios/com32/lib/libcom32.c32 /srv/tftp/ cp /tmp/syslinux-6.04-pre1/bios/com32/libutil/libutil.c32 /srv/tftp/ cp /tmp/syslinux-6.04-pre1/bios/core/lpxelinux.0 /srv/tftp/ cp /tmp/syslinux-6.04-pre1/bios/memdisk/memdisk /srv/tftp/ mkdir /srv/tftp/boot-screens/ cp /tmp/syslinux-6.04-pre1/bios/com32/menu/vesamenu.c32 /srv/tftp/boot-screens/ mkdir /srv/tftp/pxelinux.cfg
INFORMATION
Vous pouvez utiliser le fichier/tmp/syslinux-6.04-pre1/bios/core/lpxelinux.0
pour assurer la compatibiliter avec le protocole HTTP ou le fichier /tmp/syslinux-6.04-pre1/bios/core/pxelinux.0 /srv/tftp/
pour rester classique et n'utiliser que le TFTP. Pensez dans ce cas à adapter le fichier fournit par votre DHCP.Création du menu PXE
vim /srv/tftp/pxelinux.cfg/default
##########################
# Personnalisation du menu
##########################
default /boot-screens/vesamenu.c32
menu hshift 13
menu width 49
menu vshift 12
menu title Menu PXE Yohan
menu background boot-screens/bg-debian.png
# Rend l'écran blanc transparent (n'affecte pas le menu)
#menu color screen 37;40 #80ffffff #ccffffff std
# Couleur du selectueur (là ou est le curseur. Je le met en orange non transpatrent (ff). 00 pour transparent à 100%
menu color sel 7;37;40 #e0000000 #ccff8000 all
# Couleur du font du menu (ne comprend pas le fond du titre). En noir
menu color unsel 37;44 #90ffffff #cc000000 std
# Couleur du fond du titre (d'une hauteur d'1em donc ça couvre que la taille du texte).
menu color title 1;36;44 #c00090f0 #20000000 std
menu tabmsg Press ENTER to boot or TAB to edit a menu entry
menu autoboot Starting Local System in # seconds
prompt 0
##################################
# Entrée des systèmes de démarrage
##################################
# Démarrage automatique de l'entrée spécifié au bout de 3 secondes
timeout 30
ONTIMEOUT Debian_Stretch
MENU AUTOBOOT Lancement de Debian_Stretch dans # secondes
LABEL Disque_local
MENU LABEL Amorcer le disque local
localboot -1
LABEL Debian_Stretch
MENU LABEL Lancer Debian Stretch
LINUX http://192.168.183.254/noyaux/stretch/vmlinuz-2 quiet
APPEND initrd=http://192.168.183.254/noyaux/stretch/initrd.img-2 boot=live vga=792 config noswap noprompt fetch=http://192.168.183.254/images/stretch-pxe.squashfs ramdisk_size=6666 root=/dev/ram0 rw net.ifnames=0 showmounts toram quickreboot
LABEL Installation_Debian_manu
MENU LABEL Installer Debian 9 manu
KERNEL http://192.168.183.254/noyaux/stretch/debian-installer/linux quiet
APPEND vga=normal initrd=http://192.168.183.254/noyaux/stretch/debian-installer/initrd.gz priority=low
LABEL Installation_Debian_auto
MENU LABEL Installer Debian 9 auto
KERNEL http://192.168.183.254/noyaux/stretch/debian-installer/linux quiet
APPEND vga=normal initrd=http://192.168.183.254/noyaux/stretch/debian-installer/initrd.gz auto=true interface=auto netcfg/dhcp_timeout=60 netcfg/choose_interface=auto priority=critical url=http://192.168.183.254/scripts/preseed/preseed.cfg DEBCONF_DEBUG=5 IPAPPEND 2
Enfin, envoyez une image PNG (640x480) sur votre serveur pour le fond de votre menu. J'utilise celle-ci.
wget --no-check-certificate -P /srv/tftp/boot-screens/
Provisionnement des systèmes distants
Démarrage sur le disque local
Si un système est déjà installé sur le volume local de votre machine, vous pouvez utiliser la première entrée du menu configuré plus haut avec l'option localboot.
SquashFS
Pour la création d'une image SquashfS, je vous invites à lire la documentation appropriée.
Création des répertoires d'accueils
mkdir -p /srv/tftp/noyaux/stretch/ mkdir /srv/tftp/images/
Imoortation de son noyau
scp vmlinuz-2 root@192.168.183.254:/srv/tftp/noyaux/stretch/
Importation de son initrd
scp initrd.img-2 root@192.168.183.254:/srv/tftp/noyaux/stretch/
Importation de l'image
scp stretch-pxe.squashfs root@192.168.183.254:/srv/tftp/images
Vous pouvez désormais démarrer une machine en PXE avec cette image SquashFS.
Debian-installer
Les fichiers suivants sont présents dans l'archive netboot.tar.gz de debian-installer du dépôt officiel de Debian.
Importation du noyau
scp linux root@192.168.183.254:/srv/tftp/noyaux/stretch/debian-installer/
Importation de l'installateur Debian
scp initrd.gz root@192.168.183.254:/noyaux/stretch/debian-installer/
Preseed
Pour la création d'un fichier Preseed, je vous invites à lire la documentation appropriée.
La partie sur le noyau et l'initrd est identique à la section Debian-installer.
Création des répertoires d'accueils
mkdir -p /srv/tftp/scripts/preseed/ mkdir /srv/tftp/noyaux/stretch/debian-installer/
Importation du script d'installation
scp preseed.cfg root@192.168.183.254:/srv/tftp/scripts/preseed/
Importation du noyau
scp linux root@192.168.183.254:/srv/tftp/noyaux/stretch/debian-installer/
Importation de l'installateur Debian
scp initrd.gz root@192.168.183.254:/noyaux/stretch/debian-installer/
Vous pouvez désormais installer une machine en PXE de façon automatique.