LABRAT

Installation d'un serveur PXE sur Debian 9

Un serveur PXE (Pre-boot eXecution Environment) permet à une machine de démarrer un système d'exploitation depuis le réseau.
Cela permet le déploiement d'images, le lancement d'installation ou de live-CD.

Prérequis


○ Un serveur TFTP
○ Un serveur DHCP
○ Un serveur NFS

Installation des paquets nécessaires


#apt-get install isc-dhcp-server tftpd-hpa syslinux syslinux-efi pxelinux memtest86+ nfs-kernel-server



Créations des répertoires


# rm -rf /srv/tftp/
# mkdir -p /srv/tftp/boot/
# mkdir -p /srv/tftp/bios/pxelinux.cfg/
# mkdir -p /srv/tftp/efi32/pxelinux.cfg/
# mkdir -p /srv/tftp/efi64/pxelinux.cfg/


liens vers le répertoire boot


# cd /srv/tftp/bios && ln -s ../boot boot
# cd /srv/tftp/efi32 && ln -s ../boot boot
# cd /srv/tftp/efi64 && ln -s ../boot boot



Copie d'une image de Debian netboot pour le test


# mkdir -p /srv/tftp/boot/debian/installer/stretch/
# cd /tmp
# wget -c http://ftp.nl.debian.org/debian/dists/stretch/main/installer-amd64/current/images/netboot/netboot.tar.gz
# tar -zxf netboot.tar.gz
# mv debian-installer/amd64/ /srv/tftp/boot/debian/installer/stretch/



Les trois répertoires principaux et leurs menus


Partie bios


# cp /usr/lib/syslinux/modules/bios/* /srv/tftp/bios/
# cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftp/bios/
# cp /boot/memtest86+.bin /srv/tftp/bios/


Créer le fichier menu
# nano /srv/tftp/bios/pxelinux.cfg/default


Copier-coller le contenu suivant:
DEFAULT vesamenu.c32
PROMPT 0
TIMEOUT 300
ONTIMEOUT 0
NOESCAPE 1

menu title **** Menu BIOS PXE ****

label 0
menu label ^Demarrage sur disque dur local
menu default
localboot 0

label 1
menu label ^Redemarrage
kernel reboot.c32

label 2
menu label ^Arret
kernel poweroff.c32

LABEL 3
MENU LABEL ^HDT - Outil de detection materiel
KERNEL hdt.c32

LABEL 4
MENU LABEL Netboot Debian 9
KERNEL boot/debian/installer/stretch/amd64/linux
APPEND vga=788 initrd=boot/debian/installer/stretch/amd64/initrd.gz --- quiet



Partie efi64


# cp /usr/lib/syslinux/modules/efi64/* /srv/tftp/efi64/
# cp /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi /srv/tftp/efi64/
# cp /boot/memtest86+.bin /srv/tftp/efi64/


Créer le fichier menu
# nano /srv/tftp/efi64/pxelinux.cfg/default


Copier-coller le contenu suivant:
DEFAULT vesamenu.c32
PROMPT 0
TIMEOUT 300
ONTIMEOUT 0
NOESCAPE 1
KBDMAP french.kbd

menu title **** Menu EFI64 PXE ****

label 0
menu label ^Demarrage sur disque dur local
menu default
localboot 0

label 1
menu label ^Redemarrage
kernel reboot.c32

label 2
menu label ^Arret
kernel poweroff.c32

LABEL 3
MENU LABEL ^HDT - Outil de detection materiel
KERNEL hdt.c32

LABEL 4
MENU LABEL Netboot Debian 9
KERNEL boot/debian/installer/stretch/amd64/linux
APPEND vga=788 initrd=boot/debian/installer/stretch/amd64/initrd.gz --- quiet



Partie efi32


# cp /usr/lib/syslinux/modules/efi32/* /srv/tftp/efi32/
# cp /usr/lib/SYSLINUX.EFI/efi32/syslinux.efi /srv/tftp/efi32/
# cp /boot/memtest86+.bin /srv/tftp/efi32/


Créer le fichier menu
nano /srv/tftp/efi32/pxelinux.cfg/default


Copier-coller le contenu suivant:
default vesamenu.c32
prompt 0
timeout 300
ontimeout 0.0
noescape 1

menu title **** Menu EFI32 PXE ****

label 0
menu label ^Demarrage sur disque dur local
menu default
localboot 0

label 1
menu label ^Redemarrage
kernel reboot.c32

label 2
menu label ^Arret
kernel poweroff.c32

LABEL 3
MENU LABEL ^HDT - Outil de detection materiel
KERNEL hdt.c32

LABEL 4
MENU LABEL Netboot Debian 9
KERNEL boot/debian/installer/stretch/i386/linux
APPEND vga=788 initrd=boot/debian/installer/stretch/i386/initrd.gz --- quiet



Configuration du serveur DHCP


Editer le fichier /etc/dhcp/dhcpd.conf et y copier le contenu suivant. Adapter la configuration en fonction du réseau.
# nano /etc/dhcp/dhcpd.conf


default-lease-time 600;
max-lease-time 7200;

allow booting;
allow bootp;

option space PXE;
option PXE.mtftp-ip code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;
option arch code 93 = unsigned integer 16;


subnet 192.168.29.0 netmask 255.255.255.0 {
range 192.168.29.3 192.168.29.253;
option broadcast-address 192.168.29.255;
option routers 192.168.29.1;
option domain-name-servers 192.168.29.1;
option tftp-server-name "192.168.29.1";
option root-path "/srv/tftp/";
next-server 192.168.29.1;
# filename "pxelinux.0";

if option arch = 00:06 {
filename "efi32/syslinux.efi";
} else if option arch = 00:07 {
filename "efi64/syslinux.efi";
} else if option arch = 00:09 {
filename "efi64/syslinux.efi";
} else {
filename "bios/pxelinux.0";
}
}



Pour limiter l'accès à certains hôtes, ajouter au fichier de configuration :
Après la ligne " subnet 192.168.29.0 netmask 255.255.255.0 { ", ajouter
deny unknown-clients;


Ajouter ensuite à la fin du fichier
host nom_du_client {
hardware ethernet adresse_MAC_du_client ;
fixed-address adresse_IP_à_attribuer;
}




Mettre le clavier du menu en français


Télécharger le fichier french.kbd provenant de Knoppix.

Copier le fichier dans les répertoires suivants:
# cp french.kbd /srv/tftp/bios/pxelinux.cfg/
# cp french.kbd /srv/tftp/efi64/pxelinux.cfg/
# cp french.kbd /srv/tftp/efi32/pxelinux.cfg/


Ajouter la ligne suivante au fichier " /srv/tftp/bios/pxelinux.cfg /default "
KBDMAP pxelinux.cfg/french.kbd



Configuration du serveur NFS


Le serveur NFS permet aux clients d'accéder aux images ISO.

Partager le dossier /srv/tftp/boot
# nano /etc/exports

Ajouter la ligne suivante
/srv/tftp/boot *(ro,async,no_root_squash,no_subtree_check)


Redémarrer le service
# service nfs-kernel-server restart



Fichiers de configurations du menu et des sous-menus


Afin de faciliter la navigation dans les menus (bios, efi32, efi64), les fichiers de configurations peuvent être divisés en plusieurs parties
○ pxelinux.cfg/defaut = menu par défaut
○ pxelinux.cfg/pxe.conf = fichier contenant la configuration graphique
○ pxelinux.cfg/nom_sous_menu.conf = sous-menu

Les différents fichiers seront placés dans
○ /srv/tftp/bios/pxelinux.cfg/
○ /srv/tftp/efi32/pxelinux.cfg/
○ /srv/tftp/efi64/pxelinux.cfg/


Exemple avec un sous-menu utilitaires

(contenant Super Grub Disk et Gparted live)
fichier defaut
DEFAULT vesamenu.c32
MENU BACKGROUND pxelinux.cfg/fond_pxe.png
MENU INCLUDE pxelinux.cfg/pxe.conf
TIMEOUT 300
ONTIMEOUT 0

menu title **** Menu BIOS PXE ****

label 0.0
menu label ^Demarrage sur disque dur local
menu default
localboot 0

label 0.1
menu label ^Redemarrage
kernel reboot.c32

label 0.2
menu label ^Arret
kernel poweroff.c32

LABEL 0.3
MENU LABEL ^HDT - Outil de detection materiel
KERNEL hdt.c32
LABEL blank
MENU LABEL ------------------------------------------------$
LABEL Utilitaires
MENU LABEL ^Utilitaires
KERNEL vesamenu.c32
APPEND pxelinux.cfg/utilitaires.conf




fichier pxe.conf
KBDMAP pxelinux.cfg/french.kbd
MENU RESOLUTION 1024 768
NOESCAPE 1
ALLOWOPTIONS 1
PROMPT 0
MENU TABMSG [tab] pour editer
MENU MARGIN 25
MENU ROWS 14
MENU VSHIFT 10
MENU COLOR screen 0 #80ffffff #00000000 std
MENU COLOR border 0 #ffffffff #ee000000 std
MENU COLOR title 0 #ffff3f7f #ee000000 std
MENU COLOR sel 0 #ff00dfdf #ee000000 std
MENU COLOR hotsel 0 #ff7f7fff #ee000000 std
MENU COLOR unsel 0 #ffffffff #ee000000 std
MENU COLOR hotkey 0 #ff7f7fff #ee000000 std
MENU COLOR tabmsg 0 #c07f7fff #00000000 std
MENU COLOR timeout_msg 0 #8000dfdf #00000000 std
MENU COLOR timeout 0 #c0ff3f7f #00000000 std
MENU COLOR cmdmark 0 #c000ffff #ee000000 std
MENU COLOR cmdline 0 #c0ffffff #ee000000 std




fichier utilitaires.conf
MENU TITLE Utilitaires
MENU INCLUDE pxelinux.cfg/pxe.conf
MENU BACKGROUND pxelinux.cfg/utilitaires.png

LABEL MENU Principal
MENU LABEL ^Retour au MENU Principal
KERNEL vesaMENU.c32
APPEND pxelinux.cfg/default


LABEL 1.0
KERNEL memdisk
INITRD iso/super_grub2_disk_hybrid_2.02s9.iso bigraw
MENU LABEL Super Grub Disk 2.02s9

LABEL 1.1
MENU LABEL Gparted Live 0.26 i686
KERNEL iso/gparted-live-0.26.1-3-i686/live/vmlinuz
APPEND initrd=iso/gparted-live-0.26.1-3-i686/live/initrd.img vga=788 boot=live union=overlay username=user config components quiet noswap netboot=nfs nfsroot=192.168.29.1:/srv/tftp/iso/gparted-live-0.26.1-3-i686




Boot pxe sur une machine virtuelle Virtualbox


Si sous Virtualbox vous rencontrez un problème pour booter sur le réseau, essayer les commandes suivantes.

Au démarrage de la machine virtuelle, taper F12 puis L
Entrer ensuite les commandes suivantes
dhcp
chain tftp://adresse_IP_serveur_pxe/bios/pxelinux.0

La dernière ligne est à adapter suivant le type d'image à lancer (bios,efi32,efi64).


sources
https://wiki.debian-fr.xyz/PXE_avec_support_EFI
http://thefredsite.free.fr/linux.php?id=56
https://www.foulquier.info/tutoriaux/installation-d-un-serveur-pxe-sur-debian
| Catégorie: Système Serveur PXE