Racine Carte Themes Recherche Nouvelles Archives Liens A Propos
[Top Bar]
[Bottom
Bar]
[Photo de l'auteur]

by Ken Yap
L'auteur: Vit à Sydney en Australie. Sa première rencontre avec Unix date de 1979. Il utilisé Linux les 4 dernières années pour le traitement de textes, l'accès Internet et comme support pour son passe temps: l'électronique amateur. Quand il ne joue pas avec Linux ou qu'il n'est pas à son travail, il aime voyager, rencontrer des gens intéressants, essayer de nouvelles cuisines ou simplement apprécier l'environnement en se promenant. Il travail pour une société multinationale en tant que scientifique.

Une Introduction au Démarrage Réseau avec Etherboot

[Ilustration]

Résumé: Cet article d'un niveau avancé, explique comment démarrer un ordinateur à partir d'un programme stocké dans une mémoire non volatile et sans accèder au disque dur. C'est une technique idéale pour maintenir et configurer un parc de machines Linux.




Qu'est ce que le démarrage réseau?

Le démarrage réseau est une vielle idée: l'ordinateur a dans une mémoire non volatile, par exemple une ROM, un programme qui lui permettra de contacter un serveur et d'obtenir des fichiers système au moyen d'un réseau. Un des objectifs est d'éviter l'utilisation d'un disque dur pour le démarrage. Il y a plusieurs arguments en faveur de ce choix. L'un est de réduire le coût de la maintenance du logiciel sur plusieurs machines différentes. Avec le démarrage réseau, tous les fichiers sont centralisés dans un seul serveur et peuvent être mis à jour à un seul endroit. Utiliser des ordinateurs dans un endroit où les disques durs ne sont pas assez fiables est une autre raison. Par exemple, il pourrait s'agir d'un ordinateur posé sur le sol d'une usine où un disque dur serait trop fragile. Enfin, une autre raison consiste à vouloir démarrer une machine avec différents systèmes d'exploitation sans avoir à recharger le logiciel.

Le démarrage réseau coéxiste souvent avec le démarrage disque. Par exemple, un système peut exécuter Windows depuis le disque mais quelques fois Linux depuis le réseau. Il y a quelques applications interessantes de cette technique. Ainsi, un de mes amis l'utilise pour recharger Windows depuis le réseau. Quand une installation Windows se dégrade, comme souvent, l'administrateur peut re-installer une version toute neuve en démarrant Linux depuis le réseau et en laissant un script automatique formater le disque et y recopier l'installation Windows.

Comment cela fonctionne t-il?

Afin de démarrer sur le réseau, un ordinateur doit avoir:
1. une identité
2. une image de système d'exploitation et
3. généralement un système de fichiers en état de marche.

Considerons un ordinateur sans disque (DC) qui a une mémoire morte (ROM) de démarrage réseau. Il peut s'agir de n'importe lequel d'une série identique de DCs. Comment distinguer cet ordinateur des autres? Il existe une information spécifique à cet ordinateur (en fait son adaptateur réseau), c'est son adresse Ethernet. Chaque adaptateur Ethernet au monde possède une adresse unique de 48 bits car chacun des fabricants de matériel Ethernet s'est vu assigné un bloc d'adresses. Par convention, ces adresses sont écrites avec des chiffres hexadécimaux répartis par groupes de deux chiffres et séparés par deux points, par exemple: 00:60:08:C7:A3:D8.

Les protocoles utilisés pour obtenir une adresse IP, à partir d'une adresse Ethernet, sont appelés Boot Protocol (Protocole de démarrage) (BOOTP) et Dynamic Host Configuration Protocol (Protocole de Configuration Dynamique de l'Hôte) (DHCP). DHCP est une évolution de BOOTP. Pour notre propos et sans avis contraire, tout ce qui s'applique à BOOTP s'applique aussi à DHCP. (En fait il n'est pas exact que BOOP et DHCP traduisent uniquement les adresses Ethernet. Les concepteurs de BOOTP et DHCP ont prévus qu'ils fonctionnent avec n'importe quel type d'adresse physique. Mais Ethernet est ce que les gens utilisent le plus.)

Un exemple d'échanges BOOTP se passe ainsi:

DC: Salut, mon adresse physique est 00:60:08:C7:A3:D8, donnez moi mon adresse IP s'il vous plait.

Serveur BOOTP: (Regarde l'adresse dans la base de donnée.) Votre nom est aldebaran, votre adresse IP est 192.168.1.100, votre serveur est 192.168.1.1, le fichier a partir duquel vous devez démarrer /tftpboot/vmlinux.nb (et quelques autres informations).

Vous pouvez vous demander comment le DC a trouvé l'adresse du serveur BOOTP en premier lieu. La réponse est: il ne l'a pas trouvée. La requête BOOTP à été diffusée sur le réseau local et n'importe quel serveur BOOTP capable de répondre à la requête le fera.

Après avoir obtenu une adresse IP, le DC doit télécharger une image d'un système d'exploitation et l'exécuter. Un autre protocole Internet est alors utilisé ici, il est appellé Trivial File Transfer Protocol (Protocole Trivial de Transfert de Fichiers) (TFTP). TFTP est une version expurgée de FTP. Il n'y a pas d'identification et il fonctionne au dessus de UDP (User Datagram Protocol) au lieu de TCP (Transmission Control Protocol). UDP fut choisit au lieu de TCP pour des raisons de simplicité. L'implantation de UDP sur le DC peut être de petite taille ce qui permet de loger le code dans une ROM. Comme UDP est un protocol de transfert de blocs, contrairement aux protocoles de transfert de flux, le transfert se fait bloc par bloc, de la manière suivante:

DC: Donnez moi le bloc 1 de/tftpboot/vmlinux.nb.
TFTP serveur: Le voilà.
DC: Donnez moi le bloc 2.

et ainsi de suite, jusqu'à ce que tout le fichier soit transféré. Le contrôle des échanges est un simple schéma d'acceptation de chaque bloc. Les paquets perdus sont retransmis après atteinte du temps limite. Quand tous les blocs ont été reçus, la ROM de démarrage réseau, donne la main à l'image du système d'exploitation au point d'entrée.

Enfin, afin d'exécuter un système d'exploitation, un système de fichiers racine doit être fournit. Le protocole utilisé par Linux et autres Unix est normalement Network File System (NFS), bien que d'autres choix soit possibles. Dans ce cas, le code n'a pas besoin de résider dans la ROM mais peut faire partie intégrante du système d'exploitation qui vient juste d'être chargé. Toutefois, le système d'exploitation doit pouvoir s'exécuter avec un système de fichier racine qui est NFS, au lieu d'un véritable disque. Linux possède les paramêtres de configuration pour construire une version qui peut le faire.

La pratique du démarrage réseau

En plus des ROMs commerciales de démarrage, il y a deux sources pour des paquetages gartuits de démarrage réseau. Ce sont Etherboot et Netboot. Les deux peuvent être trouvés sur la Page Etherboot. En premier lieu, il faut vérifier que votre carte réseau supporte Etherboot ou Netboot. Enfin, il vous faudra trouver une personne qui peut mettre le code pour vous sur une EPROM (Erasable Programmable Read Only Memory), mais pour commencer vous pourrez démarrer par le réseau depuis une disquette.

Pour créer une disquette de démarrage, un secteur de démarrage spécial est fournit dans la distribution. Ce petit programme de 512 octets charge en mémoire les secteurs de la disquette qui le suivent et en lance l'éxécution. Ainsi, pour faire une disquette de démarrage, il suffit de concatener le secteur de démarrage avec le code binaire Etherboot qui contient le pilote pour une carte réseau comme suit:

cat floppyload.bin 3c509.lzrom > /dev/fd0

Avant d'utiliser la diquette de démarrage réseau, vous devez installer trois services dans Linux: BOOTP (ou DHCP), TFTP et NFS. Vous n'avez pas à installer les trois d'un coup, vous pouvez le faire par étapes en vous assurant qu'une fonctionne avant de passer à la suivante.

Je suppose que vous avez installé le serveur BOOTP d'une distribution ou que vous avez recompilé les sources. Vous devez alors vous assurer que ce serveur attend bien les requêtes bootp. Il y a deux façons de le faire: l'une consiste à démarrer bootpd comme un service réseau qui écoute en permanence lorque l'ordinateur est actif, et l'autre est de le démarrer depuis inetd. Dans ce dernier cas, /etc/inetd.conf doit contenir une ligne comme celle ci:

bootps dgram udp wait root /usr/sbin/tcpd bootpd

Si vous devez modifier /etc/inetd.conf, vous devrez alors redémarrer inetd en envoyant au processus un signal HUP.

Ensuite, vous devez donner à bootp une table de correspondance entre les adresses Ethernet et les adresses IP. Cette table est dans /etc/bootptab. Elle contient des lignes de la forme:

aldebaran.foo.com:ha=006008C7A3D8:ip=192.168.1.100:bf=/tftpboot/vmlinuz.nb

D'autres informations peuvent être spécifiées mais nous commenceront par des choses simples.

Démarrer maintenant le DC avec la disquette, il devrait détecter la carte Ethernet et diffuser une requête BOOTP. Si tout se passe bien, le serveur renverra au DC les informations requises. Comme /tftpboot/vmlinux.nb n'existe pas encore, il s'arrêtera en essayant de charger le fichier.

Vous devez maintenant compiler un noyau spécial, c'est à dire un noyau qui permet de monter un système de fichier racine depuis NFS. Vous devez aussi activer l'option qui permet d'obtenir l'adresse IP du noyau depuis la réponse originale de BOOTP. Vous devrez aussi compiler le pilote Linux de votre carte réseau dans le noyau et non comme un module. Il est possible de ne charger qu'un ramdisque initial de telle sorte que le chargement de module fonctionne, mais vous pourrez faire cela plus tard.

Vous ne pouvez pas installer directement le fichier zImage qui résulte de la compilation. Il doit être transformer en une image marquée (tagged image). C'est un noyau normal qui contient une entête spéciale qui dit au programme de démarrage réseau à quel endroit de la mémoire vont les octets et où démarrer le programme (point d'entrée). Le programme mknbi-linux permet de créer cette image marquée. Cet utilitaire se trouve dans la distribution Etherboot. Après avoir généré l'image, placez la dans le répertoire /tftpboot/etc/bootptab. Assurez vous de rendre ce fichier lisible par tous car le serveur tftp n'a aucun privilège particulier.

Pour TFTP, je suppose que vous avez installé tftpd d'une distribution ou que vous avez recompilé les sources. Tftpd est normalement démarré par inetd avec une ligne comme la suivante dans /etc/inetd.conf.

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

Redémarrez inetd avec un signal HUP et réessayez le démarrage. Cette fois ci il devrait charger l'image du noyau et le démarrer. Vous constaterez qu'il continuera jusqu'au moment où il cherche à monter le système de fichier racine. Vous devez alors configurer et exporter des partitions NFS pour continuer.

Pour diverses raisons, il n'est pas conseillé d'utiliser le système de fichier racine (root) du serveur comme système de fichier racine des DCs. Entre autre raisons, il y figure plusieurs fichiers de configuration et les DCs récupèrerons la mauvaise information de cette manière. Autre raison, la sécurité. Il est dangereux de donner un accès en écriture à la racine de votre serveur (et cet accès est nécessaire pour le système de fichier racine). Toutefois, le bon coté de la chose est qu'un système racine pour le DC n'est pas très gros, environ 30 MB, et la majorité de ce volume peut être partagé par plusieurs DCs.

Idéalement, vous devez savoir quels fichiers votre système d'exploitation attend dans le système de fichiers racine pour le construire. Pour le démarrage, les fichiers des périphériques (/dev), ceux dans /sbin et ceux de /etc sont critiques. Vous pouvez gagner du temps en recopiant un système de fichiers existants et en modifiant quelques fichiers pour le DC. Il y a, dans la distribution Etherboot, un didactitiel et des liens vers quelques scripts qui créeront un tel système de fichier pour DC à partir d'un système de fichier racine sur un serveur. On trouve aussi quelques astuces de dépannage dans la distribution Etherboot car c'est souvent la partie la plus critique de l'installation.

Le noyau personnalisé Linux pour le DC s'attend à voir la racine du système de fichier en /tftpboot/<adresse IP du DC>, par exemple: /tftpboot/192.168.1.100 dans la cas ci-dessus. Ceci peut être changé en configurant le noyau si nécessaire.

Maintenant créez ou editez /etc/exports sur le serveur et mettez y une ligne de la forme suivante:

/tftpboot/192.168.1.100 aldebaran.foo.com(rw,no_root_squash)

L'accès rw est nécessaire à différents services système. L'attribut no_root_squash empêche NFS d'associer l'identificateur root à un autre. Si cela n'est pas précisé, divers démons et tâches d'enregistrement (loggers) ne seront pas satisfaits.

Démarrez ou redémarrez les services NFS (rpc.portmap and rpc.mountd) et réessayez le démarrage sans disque. Si cela fonctionne, le noyau devrait être capable de monter un système de fichiers et de démarrer complètement jusqu'à l'invite. Vous trouverez probablement plusieurs choses mal configurées. La plupart des distributions Linux sont orientées vers des opérations disque et nécessitent peu de modifications pour le démarrage sans disque. L'erreur la plus commune est liée à la dépendance de fichiers dans /usr pendant le processus de démarrage. Les deux solutions possibles sont:
1. Fournir les quelques fichiers requis dans dans un petit répertoire /usr dans le système de fichier racine, qui sera à son tour écrasé quand /usr sera importé.
2. Modifier les chemins pour rechercher les fichiers dans le système de fichiers racine. Les fichiers à modifier sont dans /tftpboot/192.168.1.100 (rappelez vous que ceci est le répertoire racine du DC).

Vous pouvez aussi souhaiter monter d'autres répertoires depuis le serveur, tels que /usr (qui peut être exporté en lecture seule).

Une fois que vous êtes satisfait de votre démarrage réseau sans problèmes, vous pouvez mettre le code sur une EPROM. Un programmateur d'EPROM coute environ 100 dollars americains, et n'est pas un investissement rentable pour un amateur qui l'utilise sporadiquement. On peut en trouver sur le marché de l'occasion à des prix interessants si l'on est certain de disposer du logiciel nécessaire à son utilisation. Un amateur électronicien compétent peut en construire un à partir des quelques schémas gratuits que l'on trouve sur Internet, mais pour la majorité des lecteurs, la meilleure solution, est de se rapprocher de quelqu'un qui en a un, peut être un groupe d'électroniciens amateurs ou un employé de l'industrie électronique.

Nota sur la technologie des EPROM: Les bits d'une EPROM sons programmés en injectant des électrons à haut voltage dans la porte (Gate) d'un transistor à effet de champ (FET), là ou un bit à 0 est souhaité. Les électrons piègés là rendent ce transistor conducteur, ce qui est lu comme un 0. Pour effacer l'EPROM, les électrons piégés sont accèlérés au moyen d'un bombardement ultra-violet au travers de la fenêtre de quartz. Pour éviter un effacement lent sur plusieurs années, à cause de la lumière du soleil et des lampes fluorescentes, cette fenêtre de quartz est couverte avec une étiquette opaque pendant l'utilisation normale.

Il existe une autre technologie, appelée EEPROM pour Electrically Erasable PROM (Mémoire Programmable à lecture seule effaçable Electriquement), aussi appelée mémoires Flash. Dans ce cas, les bits sont effacés par un signal électrique. Evidement, cela élimine le besoin d'un effaceur si l'EPROM doit être réutilisée, mais nécessite des circuit plus complexes pour traiter les signaux d'effacement. Si l'on est à l'aise en électronique, il y a dans la distribution Etherboot un circuit et le logiciel de pilotage associé pour une carte EEPROM. La carte est logée dans un emplacement bus ISA du PC et démarre une carte réseau logée dans un autre emplacement.

Utilisation du démarrage réseau

Les terminaux X constituent une utilisation naturelle du démarrage réseau. L'abscence de disque dans le terminal le rend plus silencieux et contribue à un environnement de travail plus agréable. La machine devra avoir 16 MB de mémoire vive ou plus et la meilleure carte vidéo possible. C'est une utilisation idéale pour un 486 haut de gamme ou un pentium bas de gamme qui est devenu obsolète avec les progrès des matériels.

D'autres utilisateurs ont choisis le démarrage réseau pour des groupes de machines où la charge des DC est faible et ne nécessite pas de disque dur. Par exemple un groupe de machines dans une classe.

Pour en savoir plus

Votre premir point de passage obligé est le site Etherboot:
http://www.slug.org.au/etherboot/

Vous y trouverez des liens vers d'autres ressources y compris une liste de diffusion à laquelle vous pourrez vous inscrire et où l'on discute des problèmes et des solutions.

Joyeux netbooting!


Traduit par JohnPerr


Ce site web est maintenu par Miguel Angel Sepulveda
© Ken Yap 1998
LinuxFocus 1998