AS201281 Wiki

Your check engine light is on!

User Tools

Site Tools


gnu_linux_server:pxe_server:install

Installation d'un serveur de boot PXE

Un serveur de boot PXE est un serveur permettant à d'autres machines de démarrer depuis le réseau. Le serveur de boot PXE offre un service DHCP et un TFTP. Le DHCP permet aux clients de récupérer une adresse IP alors que le TFTP est chargé d'envoyer les fichiers de boot. On peut voir là dedans plusieurs intérêts dont le fait de pouvoir se passer de clé USB ou CD/DVD pour installer les systèmes d'exploitation.

Toutes les manipulations ci-dessous sont à faire avec l'utilisateur root. Comme d'habitude, les étapes ont été réalisées sur Debian mais cela est susceptible de marcher sur d'autres distributions avec plus ou moins de modifications.

Installation

La première étape est d'installer un serveur DHCP si ce n'est pas déjà fait. On ne détaillera pas cette manipulation ici puisqu'elle est disponible sur cette page. On apporte tout de même une légère modification au fichier /etc/dhcp/dhcpd.conf en ajoutant avant la déclaration du sous-réseau les deux lignes suivantes.

filename "pxelinux.0"
next-server 192.168.0.252

La première ligne donne le fichier contenant l'amorce réseau, la seconde donne l'adresse du serveur où se trouve le fichier.

Une fois le serveur DHCP en place, on peut installer les paquets permettant d'offrir la seconde partie du serveur PXE à savoir le serveur TFTP.

aptitude install tftpd-hpa pxe syslinux

Configuration TFTP

Un serveur TFTP se comporte plus ou moins comme un serveur FTP mais est basé sur le protocole TFTP qui est plus basique et moins sûr que FTP. Cependant, pour un réseau local le serveur TFTP est tout de même efficace et à l'avantage de nécessité très peu de configuration.

Ici nous allons simplement dire au serveur où se trouvent les fichiers à servir sur le réseau. On édite pour cela le fichier /etc/default/tftpd-hpa. On affecte à la variable TFTP_DIRECTORY la valeur /srv/tftp et on crée bien entendu ce répertoire.

mkdir /srv/tftp

Maintenant, il faut mettre à disposition les fichiers de base du boot PXE. Ceux-ci se trouvent dans le répertoire /usr/lib/syslinux. On copie alors plusieurs fichiers qui sont nécessaires au bon fonctionnement du serveur.

cd /usr/lib/syslinux
for i in chain.c32 mboot.c32 menu.c32 pxelinux.0 \
         reboot.c32 gpxelinux.0 memdisk vesamenu.c32 do
    cp ${i} /srv/tftp
done

Enfin on configure le démon PXE en lui donnant les informations concernant l'interface et l'adresse réseau à utiliser, le répertoire de base du serveur TFTP et éventuellement le nom de domaine du réseau. On édite le fichier /etc/pxe.conf et on change ou édite quelques lignes.

interface=eth0
default_address=192.168.0.252
...
tftpdbase=/srv/tftp
domain=chezmoi.me

Dans un premier temps, et pour pouvoir tester le boot PXE, on va mettre en place un menu très simple. Il contiendra 2 choix possibles : démarrer sur le disque local ou redémarrer la machine.

On commence par créer un répertoire qui contiendra tous les fichiers de configuration permettant de définir le ou les menus à afficher.

mkdir /srv/tftp/pxelinux.cfg/

Pour se faciliter la vie, on peut commencer par télécharger un fichier qui permettra d'utiliser le clavier en AZERTY french.kdb. On place ce fichier dans le répertoire /srv/tftp/pxelinux.cfg. Maintenant, on édite le fichier /srv/tftp/pxelinux.cfg/default et on y met le contenu suivant.

default vesamenu.c32
prompt 0
kdbmap french.kdb
noescape 1
timeout 300

label bootlocal
  menu label ^Local Boot
  localboot 0

label reboot
  menu label ^Reboot
  kernel reboot.c32

Une fois le menu créé, on donne les droits d'accès qui vont bien pour que le serveur PXE fonctionne.

chown -R tftp:root /srv/tftp
chmod -R 755 /srv/tftp

Puis on peut démarrer une machine pour tester que le boot PXE fonctionne. On doit normalement avoir un menu avec les 2 entrées et un délai de 30 secondes.

Jusque là le menu de boot PXE ne sert pas à beaucoup de chose mais il est possible d'aller plus loin. Nous allons modifier le contenu du TFTP et du menu afin de pouvoir lancer l'installation de systèmes d'exploitation. Dans ce cas pratique, nous allons voir l'installation de Debian.

On prépare le terrain en créant les répertoires qui accueilleront les fichiers de boot afin de pouvoir lancer l'installation des versions stable, testing et unstable de Debian dans les architectures i386 et amd64.

mkdir -p /srv/tftp/images/debian/{stable,testing,unstable}{i386,amd64}

Maintenant on télécharge les fichiers de boot depuis les archives de Debian. Les URL de téléchargement ont toutes la même forme, à savoir.

http://ftp.fr.debian.org/debian/dists/${VERSION}/main/installer-${ARCH}/current/images/netboot/netboot.tar.gz

La variable VERSION peut être stable, testing ou unstable. La variable ARCH peut être i386 ou amd64.

On télécharge les archives contenant les fichiers de netboot grâce à l'URL ci-dessus. On extrait le contenu et on crée les liens symboliques vers le fichier linux et initrd.gz pour se faciliter la vie plus tard.

for i in stable testing unstable; do
  for j in i386 amd64; do
    wget -P /srv/tftp/images/debian/${i}/${j} http://ftp.fr.debian.org/debian/dists/${i}/main/installer-${j}/current/images/netboot/netboot.tar.gz
 
    tar xzf /srv/tftp/images/debian/${i}/${j}/netboot.tar.gz
    ln -s /srv/tftp/images/debian/${i}/${j}/debian-installer/amd64/linux /srv/tftp/images/debian/${i}/${j}/linux
    ln -s /srv/tftp/images/debian/${i}/${j}/debian-installer/amd64/initrd.gz /srv/tftp/images/debian/${i}/${j}/initrd.gz
  done
done

Il ne reste qu'à créer le menu de boot spécifique pour Debian. On commence par éditer le fichier /srv/tftp/pxelinux.cfg/default et on y ajoute une entrée qui fera le lien vers le menu dédié au boot de Debian.

label debianboot
  menu label ^Debian -->
  kernel menu.c32
  append pxelinux.cfg/debian.conf

Enfin on crée le fichier /srv/tftp/pxelinux.cfg/debian.conf qui va contenir le menu de boot sur le réseau.

default vesamenu.c32
prompt 0
kdbmap french.kdb
noescape 1
timeout 300
default stable_i386

label stable_i386
  menu label ^Stable i386
  kernel images/debian/stable/i386/linux
  append vga=normal initrd=images/debian/stable/i386/initrd.gz --

label stable_amd64
  menu label ^Stable amd64
  kernel images/debian/stable/amd64/linux
  append vga=normal initrd=images/debian/stable/amd64/initrd.gz --

label testing_i386
  menu label ^Testing i386
  kernel images/debian/testing/i386/linux
  append vga=normal initrd=images/debian/testing/i386/initrd.gz --

label testing_amd64
  menu label ^Testing amd64
  kernel images/debian/testing/amd64/linux
  append vga=normal initrd=images/debian/testing/amd64/initrd.gz --

label unstable_i386
  menu label ^Unstable i386
  kernel images/debian/unstable/i386/linux
  append vga=normal initrd=images/debian/unstable/i386/initrd.gz --

label unstable_amd64
  menu label ^Unstable amd64
  kernel images/debian/unstable/amd64/linux
  append vga=normal initrd=images/debian/unstable/amd64/initrd.gz --

label root_menu
  menu label ^ <-- Previous menu
  kernel vesamenu.c32
  append pxelinux.cfg/default

Un petit coup de rectification de droits.

chown -R tftp:root /srv/tftp
chmod -R 755 /srv/tftp

Et le menu est prêt pour installer Debian par le réseau sans utiliser un périphérique comme une clé USB ou un CD. Il va sans dire qu'il est possible de faire de même avec d'autres distributions GNU/Linux comme Ubuntu, etc.

gnu_linux_server/pxe_server/install.txt · Last modified: 2021/01/04 20:41 by 127.0.0.1