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.
Pour faire fonctionner un tel serveur, nous allons avoir besoin de plusieurs outils :
net-misc/dhcp
net-ftp/atftp
sys-boot/syslinux
www-servers/apache
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.
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
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
Voilà les quelques fichiers de configuration que j'ai utilisé pour mon serveur