Lorsque vous possédez plusieurs ordinateurs en réseau, il est parfois utile de pouvoir démarrer un système Linux distant depuis une simple disquette. Voilà exactement ce que permet de faire un serveur Bootp.
Prenons une configuration réseau composée de quatre PCs. L'un d'entre eux est une machine puissance équipée d'un gros disque dur sur lequel est installé Linux. Les trois autres sont de simple stations bureautique sous DOS et/ou Windows. Bootp vous permettra de démarrer l'un de ces trois PC depuis une disquette ou un répertoire du disque dur contenant quelques fichiers. Pour démarrer sous Linux, il conviendra de charger uniquement le kernel avec quelques paramètres, l'ensemble des données utiles à la procédure de démarrage seront ensuite acheminées via le réseau. Une fois le PC sous Linux, ce qui vous semblera être votre disque dur sera en fait un système de fichiers NFS.
CONFIGURATION DE DEMARRAGE
Sur la machine faisant office de serveur bootp, il faudra configurer le fichier /etc/inetd.conf afin le lancer automatiquement le démon bootpd au démarrage d'inetd. Pour cela, ajoutez la ligne suivant dans /etc/inetd.conf :
bootps dgram udp wait root /etc/bootpd bootp bootptab
Ceci n'est pas la seul manière de procéder. Le démon bootpd ne sera lancé dans ce cas, que lorsqu'une requête bootp sera reçu par l'hôte. Il est également possible de lancer manuellement le démon en l'invoquant sur la ligne du shell. Bootpd est capable de détecter de quelle manière il a été lancé. En cas de problème, il est possible de spécifier un paramètre au démon : -s pour standalone (ligne de shell) ou -i pour inetd.
BASE DE DONNEES BOOTP
Lorsque le démon boopd est lancé, il va automatiquement lire son fichier de base de données /etc/bootptab. Lorsqu'une requête arrive au serveur, bootp vérifiera si une entrée correspond dans la base. La syntaxe de ce fichier est la suivante :
.allhost:\
:sm=255.255.255.0:\
:ds=172.16.1.1:\
:gw=172.16.1.1:\
:ht=ethernet:\
:bf=test
machine1:\
hd=/tftpboot/172.16.1.4:\
tc=.allhost:\
ha=0040053b4032:\
ip=172.16.1.4
machine2:\
hd=/tftpboot/172.16.1.5:\
tc=.allhost:\
ha=00DD00CAF000:\
ip=172.16.1.5
Ce fichier exemple détermine un profil par défaut (.allhosts) définissant dans l'ordre, un masque réseau 255.255.255.0 (sm), une adresse DNS 172.16.1.1 (ds), une passerelle 172.16.1.1 (gw), un type de matériel ethernet (ht) et enfin le fichier de boot ãtestä (bf).
Ensuite, nous définissons deux autres profils. Machine 1 aura ses fichiers système placés dans /tftpboot/172.16.1.4 (hd), une adresse matériel 0040053b4032 (ha) et nous attribuerons l'adresse IP 172.16.1.4 (ip). La mention tc détermine le reste du profil, ici tc=.allhost.
Pour machine2, nous changeons le répertoire, l'adresse IP et bien sûr l'adresse matériel de la carte ethernet. Cette adresse physique est unique pour chaque carte ethernet, vous la voyez lorsque, par exemple, le module de la carte s'installe.
LE REPERTOIRE TFTPBOOT
Ce répertoire doit contenir tous les fichiers nécessaires pour un système Linux. En somme, il s'agit du résultat de l'installation d'une distribution. Pour une Slackware, les packages minimums sont a, ap, n et x. Bien sûr, vous pouvez en installer plus si vous le désirez. Ces 4 packages forment une installation minimum pour une stations de travail sous X. Le répertoire /tftpboot doit contenir les sous-répertoires définis dans la base de données bootptab. Eux même devant contenir les fichiers du système distant.
PREPARATION DU KERNEL
Pour pouvoir démarrer une station avec un système de fichier distant, il faut préparer un kernel spécifique. Lors de la configuration de celui-ci, il vous faudra désactiver la gestion des périphériques en mode block (block devices).
Le kernel devra prendre en charge la carte réseau. Dernier point, validez les options Root file system on NFS, BOOTP support et RARP support dans la configuration des systèmes de fichiers du kernel.
Pour que le kernel puisse booter directement en bootp, il faut également lui préciser le périphérique root. Dans bien des cas le périphérique utile a bootp n'existe pas encore, vous devrez le créer en tapant :
mknod /dev/nfsroot b 0 255
Ensuite, précisez à votre kernel fraîchement compilé le périphérique root :
rdev zImage /dev/nfsroot
Voilà tout ce qui concerne le kernel. Vous pourrez ensuite l'utiliser pour créer une disquette de démarrage ou le passer comme paramètre à l'utilitaire loadlin.
DEMARRAGE
Au moment du démarrage, notre kernel se chargera et enverra les requètes bootp en affichant de message :
Sending BOOTP requests...
Si tout se passe bien, le démarrage doit se poursuivre jusqu'au login. Dans le cas contraire, vérifiez tous vos paramètres (démons bootp, adresses matériels, répertoires, etc.).Vérifiez également que le client est autorisé à lire votre disque dur (/etc/exports).
Nous avons fait l'impasse sur bon nombre de caractéristiques de bootp que vous pourrez connaître en parcourant ces documentations. Cet article ne constitue qu'un point de départ et n'a pas la prétention d'être la documentation de bootp.
SoURCE D'INFORMATIONS
Bon nombre de documents explique le fonctionnement de bootp, voyez dans :