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

Si votre machine est connectée à un réseau local, vous pouvez l'amorcer directement à travers le réseau à partir d'une autre machine en utilisant TFTP. Si vous décidez de le faire, les fichiers d'amorçage doivent être placés à un endroit spécifique sur cette machine et elle doit être configurée pour supporter l'amorçage de votre propre machine.

Vous devez configurer un serveur TFTP et, pour les machines CATS, un serveur BOOTP, ou 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. Le protocole DHCP (« Dynamic Host Configuration Protocole » ou Protocole de configuration dynamique des hôtes, NdT) est une extension bien plus flexible de BOOTP (mais respectant la compatibilité ascendante). Certains systèmes ne peuvent être configurés que via DHCP.

Le protocole de transfert de fichiers trivial (« Trivial Transfert File Protocol » ou TFTP, NdT) est utilisé pour transférer l'image d'amorçage au client. Théoriquement, n'importe quel serveur sur n'importe quelle plate-forme qui implémente 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 (aussi nommée « 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 super-utilisateur) : /usr/etc/rarpd -a ; pour SunOS 5, /usr/sbin/rarpd -a.

4.5.2. Configurer un serveur BOOTP

Il y a deux serveurs BOOTP disponibles pour GNU/Linux, bootpd CMU et l'autre est en fait un serveur DHCP, dhcpd ISC, 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, and disktab. Voyez la page de manuel de bootptab pour avoir plus d'informations. Pour bootpd CMU, il vous 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ériel du client. L'option « bf » spécifie le fichier que le client devra récupérer via TFTP ; cf. Section 4.5.5, « Mettre les images TFTP en place » pour plus de détails.

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. Quelques architectures requièrent une configuration complexe pour amorcer des clients via BOOTP. Si la vôtre en fait partie, lisez la partie Section 4.5.3, « Configurer un serveur DHCP ». Sinon, vous devriez être capable de vous en sortir en ajoutant simplement la directive allow bootp au bloc de configuration pour le sous-réseau contenant le client puis de redémarrer dhcpd avec /etc/init.d/dhcpd restart.

4.5.3. Configurer un serveur DHCP

À l'heure où ces lignes sont écrites, il n'existe qu'un seul serveur DHCP libre appelé dhcpd ISC. Dans Debian GNU/Linux, il est disponible dans le paquet dhcp. Voici un extrait du 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;
}

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 via TFTP.

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

4.5.3.1. PXE Booting

Voici un autre exemple de fichier dhcp.conf utilisant la méthode de chargement du système d'exploitation par le réseau gérée par le matériel (« Pre-boot Execution Environment ») (PXE) de TFTP.


option domain-name "example.com";

default-lease-time 6048;
max-lease-time 604800;

allow booting;
allow bootp;

# The next paragraph needs to be modified to fit your case
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.1.255;
# the gateway address which can be different 
# (access to the internet for instance)
  option routers 192.168.1.1;
# indicate the dns you want to use
  option domain-name-servers 192.168.1.3;
}

host tftpserver {
# tftp server ip address
  fixed-address 192.168.1.90;
# tftp server hardware address
  hardware ethernet 01:23:45:67:89:AB;
}

group {
 next-server 192.168.1.3;
 host tftpclient {
# tftp client hardware address
  hardware ethernet  00:10:DC:27:6C:15;
  filename "/tftpboot/pxelinux.0";
 }
}

Veuillez noter que pour un démarrage PXE, le nom de fichier du client pxelinux.0 est un gestionnaire de démarrage et non une image de noyau (voir Section 4.5.5, « Mettre les images TFTP en place » ci-dessous).

4.5.4. Activer le serveur TFTP

Pour s'assurer du bon fonctionnement du 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

Jetez un oeil dans ce fichier et rappelez-vous le répertoire passé en argument de in.tftpd ; vous en aurez besoin ultérieurement. L'option -l autorise certaines versions de in.tftpd à journaliser toutes les requêtes vers le journal du système ; c'est extrêmement pratique en cas d'erreur d'amorçage. Si vous devez changer /etc/inetd.conf, vous devrez le signaler au processus inetd. Sur une machine Debian, lancez /etc/init.d/inetd reload (pour une Potato 2.2 et système plus récent, utilisez /etc/init.d/netbase reload) ; sur les autres machines, retrouvez le numéro de processus de inetd et tuez-le avec la commande kill -HUP inetd-pid.

Pour utiliser la méthode de démarrage par l'exécution d'un environnement de pré-amorçage (PXE) de TFTP, vous avez besoin d'un serveur TFTP avec tsize. Sur un serveur Debian GNU/Linux, tftp-hpa vous dira si c'est le cas.

4.5.5. Mettre les images TFTP en place

Ensuite, placez les images TFTP dont vous avez besoin (décrites dans la ???) 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 un client particulier. Malheureusement, le nom du fichier est déterminé par le client TFTP et il n'y a pas vraiment de standard.

Souvent, le fichier que le client TFTP recherchera est client-ip-in-hexclient-architecture. Pour calculer client-ip-in-hex, prenez chaque octet de l'adresse IP du client et convertissez-la en hexadécimal. Si vous avez une machine à portée de main avec le programme bc, vous pouvez l'utiliser. En premier, utilisez la commande obase=16 pour configurer la sortie en hexadécimal, puis entrez les composants individuels du client IP un par un. Et pour client-architecture, essayez quelques valeurs.

Pour le démarrage PXE, vous pouvez utiliser le gestionnaire de démarrage inclus avec syslinux : pxelinux.0. Le gestionnaire de démarrage devra être copié dans le répertoire /tftpboot. Créez ensuite un sous-répertoire /tftpboot/pxelinux.cfg dans le répertoire /tftpboot, et dans ce répertoire, créez un fichier texte default. Voici un exemple de ce que peut contenir le fichier default :


default lanlinux
prompt 1

label lanlinux
  kernel tftpboot.img
  append load initrd=root.bin devfs=nomount

devfs=nomount est important, car sans lui il pourrait y avoir des problèmes de montage du fichier système root.bin une fois que le noyau sera lancé.

Enfin, copiez les fichiers tftpboot.img et root.bin de l'archive ftp Debian dans le répertoire /tftpboot. C'est l'emplacement où le gestionnaire de démarrage s'attend à trouver ces fichiers.

4.5.6. Installation de TFTP sur système avec peu de mémoire

Sur certains systèmes, le disque virtuel d'installation standard, combiné avec les exigences en mémoire de l'image d'amorçage TFTP, ne peuvent tenir en mémoire. Dans ce cas, vous pouvez quand même utiliser TFTP mais vous aurez à passer par une étape supplémentaire pour monter votre répertoire racine à travers le réseau. Ce type de configuration est aussi approprié pour les clients sans disque et les clients sans données.

Commencez par suivre toutes les étapes ci-dessus dans Section 4.5, « Préparer les fichiers pour amorcer depuis le réseau en TFTP ».

  1. Copiez l'image du noyau Linux sur votre serveur TFTP en utilisant l'image a.out de l'architecture sur laquelle vous êtes en train d'amorcer.

  2. « Détarez » l'archive de root sur votre serveur NFS (qui peut être le même que votre serveur TFTP) :

    
    # cd /tftpboot
    # tar xvzf root.tar.gz
    
    

    Assurez-vous d'utiliser le tar de GNU (les autres programmes, comme celui de SunOS, manipulent incorrectement certains périphériques comme les fichiers ordinaires).

  3. Exportez votre répertoire /tftpboot/debian-sparc-root avec les accès root pour votre client. Vous devez ajouter la ligne suivante à /etc/exports (syntaxe GNU/Linux, cela devrait être similaire pour SunOS jusqu'à la version 4.1.x) :

    
    /tftpboot/debian-sparc-root client(rw,no_root_squash)
    
    

    Note : « client » est le nom d'hôte ou bien l'adresse IP reconnue par le serveur pour le système que vous allez amorcer.

  4. Créez un lien symbolique depuis votre adresse IP cliente sous forme de nombres séparés par des points dans le fichier debian-sparc-root du répertoire /tftpboot. Par exemple, si l'adresse IP client est 192.168.1.3, faites :

    
    # ln -s debian-sparc-root 192.168.1.3
    
    

4.5.7. Installation avec une racine TFTP et NFS

C'est très proche de l'installation pour système avec peu de mémoire Section 4.5.6, « Installation de TFTP sur système avec peu de mémoire » parce que vous ne voulez pas charger le disque virtuel mais amorcer depuis le système de fichier nfs-root créé il y a peu. Vous n'avez qu'à remplacer le lien vers l'image tftpboot par un lien vers l'image du noyau (p. ex. linux-a.out).

RARP/TFTP requires all daemons to be running on the same server (the workstation is sending a TFTP request back to the server that replied to its previous RARP request).

Pour amorcer la machine cliente, allez à Section 5.1.6, « Amorçage avec TFTP ».