Serveur de boot sous Debian pour machines diskless PowerPC
Le problème des machines PowerPC, c'est que le boot en réseau se fait par BOOTP au lieu de PXE (pour les machines x86). Il fallait donc un serveur BOOTP sur le réseau. Il n'y a pas de serveur BOOTP sur GNU/Linux, c'est le serveur DHCP de ISC qui fournit cette fonctionnalité. Mais que fait-on lorsqu'un serveur DHCP est déjà présent sur le réseau pour fournir les adresses de centaines de stations ?
Réponse: On configure le serveur DHCP pour qu'il ne fasse que du BOOTP.
Installation
Sous Debian:
# aptitude install dhcp3-server
Configuration
Le principe :
- Créer un serveur DHCP “non autoritaire”.
- N'assigner des adresses IP qu'aux machines dont on connait l'adresse MAC via BOOTP.
Un serveur non autoritaire permet de ne pas gêner un autre serveur DHCP sur le réseau lorsque le serveur refuse d'assigner une adresse (réponse DHCPNAK) à un client. On laisse donc la gestion des refus à l'autre serveur. Par contre, il faut faire attention au sous-réseau géré par notre serveur, si une machine de ce sous réseau à déjà une adresse fournit par l'autre server DHCP, elle pourra envoyer des DHCPDISCOVER vers notre serveur pour renouveller son bail. Dans ce cas, notre serveur répondra DHCPNAK. Il est donc important de choisir un sous réseau petit, l'idéal étant de choisir un sous-réseau non géré par l'autre serveur DHCP.
En refusant d'assigner des adresses au machines dont on ne connait pas l'adresse MAC (elles seront déclarées dans la configuration) on ne risque pas d'assigner une adresse à la place de l'autre serveur. Cette configuration pour un serveur “non autoritaire” permet d'ignorer totalement les requêtes DHCP et ne fournir que le service de BOOTP.
Voici le fichier de configuration :
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
#
not authoritative;
boot-unknown-clients false;
ddns-update-style none;
ignore client-updates;
subnet 192.168.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name-servers 192.168.0.2, 192.168.0.3;
option domain-name "example.org";
# BOOTP Clients
}
On remarque qu'on ne definit pas de “range” allouable.
Déclarer des clients
Pour ajouter un client BOOTP, il faut insérer un bloc host dans le bloc subnet, en dessous du commentaire :
host qs22 {
hardware ethernet 00:1A:64:B8:06:5A;
fixed-address 192.168.0.4;
filename "qs22.boot";
}
hardware ethernet: l'adresse MAC de la machine à booterfixed-address: permet de définir l'adresse IP de la machine à booter. Le reste des informations de configuration réseau de la machine sera pris des options du bloc subnet.filename: le chemin vers l'image de boot. Pour les PowerPC, il s'agit d'un fichier contenant le kernel et l'initrd.
Mettre en place le service TFTP pour les images de boot.
Le service TFTP (Trivial File Transfert Protocol) est fournit par le super serveur inetd ou xinetd. xinetd est un remplacement de inetd censé être supérieur. Comme il est par défault sur par mal de distributions, on va l'utiliser.
Sur ma Debian, xinetd n'était pas installé au profit de l'historique inetd :
# aptitude install xinetd tftpd
Ensuite, il faut l'activer en créant un fichier /etc/xinetd.d/tftp :
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = /srv/tftp
}
La directive server_args indique le répertoire des fichiers servis par tftpd. C'est la configuration par défaut sur Debian, mais on peut utiliser l'historique /tftpboot:
# mkdir /srv/tftp
Enfin, on relance xinetd pour activer cette configuration :
# /etc/init.d/xinetd restart
On n'oublie pas non plus de copier l'image de boot dans /srv/tftp. Il ne reste plus qu'à booter la machine diskless sur le réseau.