Serveur PXE avec choix de la distribution

Préambule

Un serveur PXE n'est ni plus ni moins qu'une manière de booter un système à travers le réseau. Ainsi, fini la gravure de CD ou encore la manipulation de clé USB, tout est géré côté serveur. Le seul impératif à avoir côté client, c'est d'avoir une carte réseau supportant le boot par le réseau, ce qui est le cas de la plupart d'entre elles.

Avant de commencer, il faut s'assurer de ne pas avoir de serveur DHCP sur le réseau. Difficile de nos jours avec les set-top boxes de nos FAI. Heureusement qu'il est possible de désactiver cette fonctionnalité (voir panneau d'administration de la box).
Cette modification implique donc l'attribution automatique des adresses IP. Ainsi, le serveur DHCP ne sera plus géré par la box mais par le serveur. Ce serveur devra donc rester tout le temps allumé pour profiter du DHCP. Dans le cas contraire, il est toujours possible de configurer les clients avec un adressage IP statique.

Installation des outils nécessaires

Pour faire fonctionner un tel serveur, nous allons avoir besoin de plusieurs outils :

  • un serveur DHCP : net-misc/dhcp
  • un serveur TFTP : net-ftp/atftp
  • un système d'amorçage : sys-boot/syslinux
  • un serveur HTTP (faculatif) : www-servers/apache
  • un serveur NFS (facultatif) : net-fs/nfs-utils
emerge net-misc/dhcp net-ftp/atftp sys-boot/syslinux

À noter qu'il semblerait qu'il soit possible de remplacer dhcp et atftp par dnsmasq, mais j'ai rencontré quelques difficultés étant donné que j'avais déjà un serveur DNS (bind9) en route.

Configuration du serveur DHCP

Pour pouvoir envoyer le système d'amorce PXE, il est nécessaire de configurer notre propre serveur DHCP.

Fichier /etc/dhcp/dhcpd.conf :

option domain-name "gromez.fr";
option domain-name-servers 192.168.0.1, 212.27.40.240, 212.27.40.241;
option routers 192.168.0.254;

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

ddns-update-style none;

authoritative;

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.10 192.168.0.100;
  filename "gpxelinux.0";
}

host ion {
  hardware ethernet 90:e6:ba:7a:48:90;
  fixed-address 192.168.0.1;
}

host alf {
  hardware ethernet 00:15:c5:6f:25:25;
  fixed-address 192.168.0.10;
}

Cette configuration prend en compte un serveur DNS auto-hébergé.
L'option domain-name représente le nom de domaine du réseau.
L'option domain-name-servers représente les adresses des serveurs DNS que les clients devront utiliser. Dans mon cas, j'ai mis mon serveur DNS (192.168.0.1) ainsi que les serveurs DNS de mon FAI.
L'option routers représente l'adresse du routeur. Ici, il s'agit de la Freebox (192.168.0.254).

Pour le reste, j'ai défini que mon serveur DHCP allait attribuer des adresses IP sur le sous-réseau 192.168.0.0/24. Les adresses IP attribuées par le serveur DHCP iront de 192.168.0.10 à 192.168.0.100.
Enfin, on précise le fichier à envoyer au client lorsqu'il fera un boot PXE : gpxelinux.0. Il y a également le fichier pxelinux.0 mais celui-ci est un peu moins complet.

Pour finir, je définis certaines machines de manière statique grâce à leur adresse MAC afin d'avoir tout le temps la même adresse IP.

Ne pas oublier de lancer le serveur et de l'ajouter au lancement automatique de la machine :

/etc/init.d/dhcpd start
rc-update add dhcpd default

Configuration du serveur TFTP

TFTP est comparable à FTP à la différence près qu'il utilise UDP à la place de TCP. De même, il n'y a aucun mécanisme de connexion ni d'authentification.

Au niveau de la configuration, il n'y a pas grand chose à faire si ce n'est de configurer le répertoire racine du serveur.

Pour des raisons pratiques, j'ai décidé de créer un répertoire tftp dans /home

mkdir /home/tftp

Puis, il reste à éditer le fichier de configuration /etc/conf.d/atftp :

TFTPD_ROOT="/home/tftp"

Enfin, il faut lancer le serveur et le rajouter au démarrage de la machine :

/etc/init.d/atftp start
rc-update add atftp default

Exemples de fichier de configuration

Voilà les quelques fichiers de configuration que j'ai utilisé pour mon serveur

config_pxe.tar.gz

gentoo powered apache powered dokuwiki powered