4.5. Préparer les fichiers pour amorcer depuis le réseau avec TFTP

Si votre machine est connectée à un réseau local, vous pouvez l'amorcer directement à partir d'une autre machine de ce réseau en utilisant TFTP. Pour cela, les fichiers d'amorçage doivent être placés à un endroit spécifique de cette machine et elle doit savoir amorcer votre propre machine.

Vous devez configurer un serveur TFTP et, pour beaucoup de machines, un serveur BOOTP, un serveur RARP ou un serveur DHCP.

Le protocole de recherche des adresses inverses (Reverse address Resolution Protocol ou RARP) est une solution pour indiquer à votre client l'adresse IP qu'il doit utiliser pour lui-même. Une autre solution est d'utiliser le protocole BOOTP. BOOTP est un protocole IP qui indique à un ordinateur quelle est son adresse IP et lui dit où obtenir sur le réseau une image d'amorçage. Il existe désormais une autre solution pour les systèmes VMEbus : l'adresse IP peut être configurée manuellement dans la ROM d'amorçage. Le protocole DHCP (« Dynamic Host Configuration Protocole », Protocole de configuration dynamique des hôtes) est une extension bien plus flexible de BOOTP (et respectant la compatibilité ascendante). Certains systèmes ne peuvent être configurés que par DHCP.

Le protocole trivial de transfert des fichiers (« Trivial Transfert File Protocol » ou TFTP) est utilisé pour transférer l'image d'amorçage au client. Théoriquement, tout serveur sur les plateformes qui implémentent ces protocoles peut être utilisé. Dans les exemples qui vont suivre, on donnera les commandes pour SunOS 4.x, SunOS 5.x (mieux connu sous le nom de Solaris) et GNU/Linux.

4.5.1. Configurer un serveur RARP

Pour configurer RARP, il vous faudra connaître l'adresse Ethernet du client (c'est-à-dire, l'« adresse MAC »). Si vous n'avez pas cette donnée, vous pouvez amorcer en mode « secours » (p. ex. à partir de la disquette de secours) et utiliser la commande /sbin/ifconfig eth0.

Pour GNU/Linux (noyau 2.2.x), vous devez renseigner la table RARP du noyau. Pour ce faire, exécutez

# /sbin/rarp -s
client-hostname
client-enet-addr

# /usr/sbin/arp -s
client-ip
client-enet-addr

Si en retour vous obtenez :

SIOCSRARP: Invalid argument

vous devrez probablement charger le module rarp du noyau ou bien recompiler le noyau pour accepter RARP. Essayez modprobe rarp puis essayez à nouveau la commande rarp.

Les systèmes avec un noyau Linux 2.4.x n'ont pas de module RARP, et il faut dans ce cas utiliser le programme rarpd. La procédure est identique à celle utilisée sous SunOS dans le prochain paragraphe.

Sous SunOS, vous devez vous assurer que les adresses matérielles Ethernet pour les clients soient listées dans la base de données « ether » (soit dans le fichier /etc/ethers soit via NIS/NIS+) et dans la base de données « hosts ». Ensuite, vous devez lancer le démon RARP. Pour SunOS 4, essayez la commande (en tant que superutilisateur) : /usr/etc/rarpd -a ; pour SunOS 5, /usr/sbin/rarpd -a.

4.5.2. Configurer un serveur BOOTP

Il existe deux serveurs BOOTP pour GNU/Linux, bootpd CMU et dhcpd ISC ; le second est en fait un serveur DHCP que l'on peut trouver dans les paquets bootp et dhcp dans Debian GNU/Linux.

Pour utiliser bootpd CMU, vous devez commencer par décommenter (ou ajouter) la ligne adéquate dans /etc/inetd.conf. Dans Debian GNU/Linux, vous pouvez tout simplement lancer update-inetd --enable bootps suivi de /etc/init.d/inetd reload pour le faire. Sinon, la ligne en question devrait ressembler à :

bootps  dgram  udp  wait  root  /usr/sbin/bootpd  bootpd -i -t 120

Maintenant, vous devez créer le fichier /etc/bootptab. C'est le même genre de format familier et cryptique que ceux des bons vieux fichiers BSD printcap, termcap, et disktab. Voyez la page de manuel de bootptab pour d'autres informations. Pour bootpd CMU, il sera nécessaire d'obtenir l'adresse matérielle (MAC) du client. Voici un exemple du fichier /etc/bootptab :

client:\
  hd=/tftpboot:\
  bf=tftpboot.img:\
  ip=192.168.1.90:\
  sm=255.255.255.0:\
  sa=192.168.1.1:\
  ha=0123456789AB:

Vous devrez changer au moins l'option « ha » qui spécifie l'adresse matérielle du client. L'option « bf » spécifie le fichier que le client devra récupérer par TFTP ; cf. Section 4.5.5, « Mettre les images TFTP en place » pour plus de précisions.

En comparaison, configurer BOOTP avec dhcpd ISC est très facile parce qu'il traite les clients BOOTP comme des clients DHCP légèrement spéciaux. Certaines architectures requièrent une configuration complexe pour amorcer les clients par BOOTP. Si la vôtre en fait partie, lisez la Section 4.5.3, « Configurer un serveur DHCP ». Sinon, vous pouvez simplement ajouter la directive allow bootp au bloc de configuration pour le sous-réseau contenant le client, puis redémarrer dhcpd avec /etc/init.d/dhcpd restart.

4.5.3. Configurer un serveur DHCP

Il existe un seul serveur DHCP libre, dhcpd ISC. Dans Debian GNU/Linux, il est disponible dans le paquet dhcp. Voici un exemple de fichier de configuration (habituellement /etc/dhcpd.conf) :

option domain-name "example.com";
option domain-name-servers ns1.example.com;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
server-name "servername";

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option routers 192.168.1.1;
}

host clientname {
  filename "/tftpboot/tftpboot.img";
  server-name "servername";
  next-server servername;
  hardware ethernet 01:23:45:67:89:AB; 
  fixed-address 192.168.1.90;
}

Note : dans le nouveau paquet dhcp3, ce fichier s'appelle /etc/dhcp3/dhcpd.conf.

Dans cet exemple, il y a un serveur servername qui joue le rôle de serveur DHCP, serveur TFTP et passerelle réseau. Vous devrez certainement changer les options de domain-name ainsi que le nom du serveur et les adresses matérielles du client. L'option filename devrait être le nom du fichier extrait par TFTP.

Après avoir modifié le fichier de configuration de dhcpd, relancez dhcpd par /etc/init.d/dhcpd restart.

4.5.4. Activer le serveur TFTP

Pour faire fonctionner le serveur TFTP, vous devez vous assurer au préalable que tftpd est activé. Ce dernier est généralement activé grâce à la ligne suivante dans /etc/inetd.conf :

tftp dgram udp wait root /usr/sbin/tcpd in.tftpd /tftpboot

Les paquets Debian, quand ils sont installés, placent correctement cette ligne.

Lisez ce fichier et mémorisez le répertoire passé en argument à in.tftpd ; vous en aurez besoin ultérieurement. L'option -l autorise certaines versions de in.tftpd à enregistrer toutes les requêtes dans le journal du système ; c'est extrêmement pratique en cas d'erreur d'amorçage. Si vous avez dû modifier /etc/inetd.conf, vous devrez le signaler au processus inetd. Sur une machine Debian, lancez /etc/init.d/inetd reload ; sur les autres machines, retrouvez le numéro de processus de inetd et tuez-le avec la commande kill -HUP inetd-pid.

4.5.5. Mettre les images TFTP en place

Ensuite, placez les images TFTP dont vous avez besoin (décrites dans la Section 4.2.1, « Où trouver les fichiers d'installation ? ») dans le répertoire des images d'amorce de tftpd. Généralement, ce répertoire s'appelle /tftpboot. Vous aurez à faire un lien depuis ce fichier vers le fichier que tftpd utilisera pour amorcer le client. Malheureusement, le nom du fichier est déterminé par le client TFTP et il n'y a pas vraiment de standard.

4.5.5.1. Amorçage TFTP pour BVM/Motorola

Pour BVM et les systèmes VMEbus Motorola, recopiez les fichiers .../images/kernel/vmlinuz-2.4.27-bvme6000, .../images/netboot/initrd.gz, .../images/netboot/tftplilo.bvme, and .../images/netboot/tftplilo.conf dans /tftpboot/.

Ensuite, configurez votre ROM d'amorçage et votre serveur BOOTP pour charger en premier les fichiers tftplilo.bvme ou tftplilo.mvme du serveur TFTP. Reportez-vous au fichier tftplilo.txt de votre sous-architecture pour obtenir des informations supplémentaires sur la configuration de votre système.