Serveur PXE

De Wiki doc


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.

INFORMATION

Cette documentation ne traite que de l'amorçage PXE via un BIOS. Pour un fonctionnement sous UEFI, le document suivant est plus approprié.

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

<source lang="bash">

  1. Désactivation du dynDNS

ddns-update-style none;

  1. Limitation du DDoS

deny declines;

  1. Permet l'envoi de requette DHCPNAK

authoritative;

  1. ------ autorisation du pxe ------

allow bootp; allow booting;

  1. ------ POUR LE PXE ------
  1. adresse du serveur tftpd

next-server 192.168.183.254;

  1. fichier de boot pxe

filename "lpxelinux.0";

  1. ------ 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; } </source>

vim /etc/default/isc-dhcp-server

<source lang="ini">

  1. Spécifiez vos interfaces en les séparant par des espaces

INTERFACESv4="eth0" INTERFACESv6="" </source>

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

<source lang="ini"> TFTP_USERNAME="tftp" TFTP_DIRECTORY="/srv/tftp" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure -v" RUN_DAEMON="yes" </source>

Redémarrer le service

systemctl restart tftpd-hpa.service

Service HTTP

vim /etc/apache2/apache2.conf

<source lang="apache"> <Directory /srv/tftp> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> </source>

vim /etc/apache2/sites-available/pxe.conf

<source lang="apache"> <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /srv/tftp

ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> </source>

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

{{{1}}}

Création du menu PXE

vim /srv/tftp/pxelinux.cfg/default

<source lang="bash">

  1. 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

  1. Rend l'écran blanc transparent (n'affecte pas le menu)
  2. menu color screen 37;40 #80ffffff #ccffffff std
  1. 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

  1. Couleur du font du menu (ne comprend pas le fond du titre). En noir

menu color unsel 37;44 #90ffffff #cc000000 std

  1. 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

  1. Entrée des systèmes de démarrage
  1. 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 </source>

Enfin, envoyez une image PNG (640x480) sur votre serveur pour le fond de votre menu. J'utilise celle-ci.

<source lang="bash"> wget bg-debian.png -P /srv/tftp/boot-screens/ </source>

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/

Importation 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.