Mini Howto Linux pour systemes sans lecteur de disque(ttes) par Robert Nemkin buci@math.klte.hu Traducteur: Sebastien Blondeel (sebastien.blondeel@lifl.fr) v0.0.3 12 Sep 1996 Ce document decrit la maniere de configurer un systeme sous Linux sans disque dur ni lecteur de disquettes. Ses droits appartiennent a Robert Nemkin, et il est place sous les termes de la Publique Generale GNU. L'auteur remercie Bela Kis pour avoir traduit ce document en anglais. Sebastien Blondeel, a traduit ce document en francais. 11.. MMooddiiffiiccaattiioonnss +o v0.0.3 12 Sep 1996: Quelques erreurs mineures ont ete corrigees 22.. CCoommmmeenntt ccoonnffiigguurreerr uunn ssyysstteemmee ssoouuss LLiinnuuxx ssaannss lleecctteeuurr ddee ddiissqquuee((tttteess)) Ce document decrit la maniere de configurer un systeme sous Linux sans disque dur ni lecteur de disquette. Il peut parfois s'averer necessaire de faire tourner Linux sur des ordinateurs personnels ("PC") qui ne possedent ni disque dur ni lecteur de disquettes. Si on dispose d'un reseau, d'un autre systeme sous Unix avec bootp et tftp, d'un serveur NFS et d'un bruleur d'EPROM, alors il est possible de configurer et de faire tourner un systeme sous Linux sans disque dur ni disquette. 33.. CCoonnssuulltteerr eeggaalleemmeenntt lleess ddooccuummeennttss ssuuiivvaannttss:: +o NFS-root Mini Howto +o Linux NET-2/3-HOWTO par Terry Dawson, 94004531@postoffice.csu.edu.au +o /usr/src/linux/README pour la configuration et la compilation de nouveaux noyaux 44.. MMaatteerriieell Tout ce qui est decrit ici a ete teste avec la configuration suivante: +o Sun-OS 4.1.3 comme serveur d'amorcage +o Slackware 2.3 + Linux 1.2.8 + la carte ethernet wd 8013 +o Un reseau ethernet en etat de fonctionnement 55.. IIddeeeess ffoonnddaammeennttaalleess L'idee de base est la suivante: le PC va obtenir son adresse IP du serveur d'amorcage par le protocole bootp, en utilisant 0.0.0.0 comme adresse IP initiale et en obtenant son noyau par le protocole tftp. (-- Un amorcage a travers des segments (via un routeur) n'est pas un probleme simple, aussi faut-il mettre a la fois le serveur et la machine sans disque sur le meme segment de reseau, ou configurer une adresse UDP d'aide dans votre routeur pointant vers l'adresse du serveur. Referez-vous au manuel de votre routeur pour de plus amples informations sur le sujet.--) Pour cela, suivez les etapes ci-dessous. 55..11.. CCoonnffiigguurreerr llee PPCC Obtenez le paquetage nfsboot (ce paquetage est disponible sur votre site miroir de Linux prefere dans le repertoire /pub/Linux/system/Linux-boot). Il contient une image d'amorcage pour l'EPROM de la carte wd8013 qui peut etre brulee telle quelle. Il y a d'autres manieres de preparer le PC: +o si votre machine contient un petit disque ou un lecteur de disquette, vous pouvez utiliser le petit programme sous DOS, ou +o l'image binaire pour disquette qui se trouve dans le meme paquetage. Si vous choisissez la deuxieme option, il faut utiliser la commande dd pour ecrire l'image sur la disquette. Ces images contiennent un client bootp et un client tftp. Vous devez egalement preparer un noyau pour linux, comportant l'option NFS-root (amorcage par NFS). +o Si vous utilisez le dernier noyau stable, linux-1.2.13, alors il faut corriger le noyau avec le fichier de correction contenu dans le paquetage nfsboot (-- Consulter patch(1)--) +o Si vous utilisez le dernier noyau en date, instable, de la serie linux-1.3.x, il vous faut configurer l'option NFS-root. Vous pouvez ou non choisir de configurer le support pour peripherique en mode bloc (disque dur ou disquette), mais vous devez configurer le support pour tcp/ip, pour la carte ethernet wd, et pour le systeme de fichiers NFS. Puis recompilez le noyau de maniere habituelle. 55..22.. CCoonnffiigguurreerr uunn bboooottppdd ssuurr llee sseerrvveeuurr On peut le trouver dans le paquetage bootpd-2.4.tar.gz (qui se trouve sur votre site miroir de Linux prefere dans le repertoire /pub/Linux/system/Network/boot.net). Chargez le paquetage, compilez-le et installez-le. Si votre autre systeme sous Linux se trouve etre une distribution Slackware, vous pouvez passer a l'etape suivante puisque les distributions standard comportent un bootpd. On peut demarrer le demon, soit en tapant la commande ______________________________________________________________________ bootpd -s ______________________________________________________________________ soit en utilisant inetd. Dans ce dernier cas, il vous faut editer: +o /etc/inetd.conf pour oter le signe diese de mise en commentaire au debut des lignes suivantes: ______________________________________________________________________ # tftp dgram udp wait root /usr/sbin/in.tftpd tftpd /export # bootps dgram udp wait root /usr/sbin/in.bootpd bootpd ______________________________________________________________________ +o inserer ou otez le signe de commentaire pour les deux lignes suivantes dans /etc/services: ______________________________________________________________________ bootps 67/tcp # serveur BOOTP tftp 69/udp # serveur TFTP ______________________________________________________________________ +o redemarrez inetd en tapant ______________________________________________________________________ kill -HUP . ______________________________________________________________________ 55..33.. CCoonnffiigguurreerr llee bboooottppdd ssuurr llee sseerrvveeuurr.. Tout d'abord, bootpd possede un fichier de configuration qui s'appelle bootptab et qui se trouve habituellement dans /etc. Vous devez le modifier en indiquant les adresses IP de votre passerelle, de votre serveur dns, et les adresses ethernet de votre ou vos machines sans disques. Voici un fichier /etc/bootptab d'exemple: ______________________________________________________________________ global.prof:\ :sm=255.255.255.0:\ :ds=192.168.1.5:\ :gw=192.168.1.19:\ :ht=ethernet:\ :bf=linux: machine1:hd=/export/root/machine1:tc=global.prof:ha=0000c0863d7a:ip=192.168.1.140: machine2:hd=/export/root/machine2:tc=global.prof:ha=0800110244e1:ip=192.168.1.141: machine3:hd=/export/root/machine3:tc=global.prof:ha=0800110244de:ip=192.168.1.142: ______________________________________________________________________ global.prof est un patron general pour les entrees d'hotes, ou +o le champ sm contient le masque pour le sous-reseau +o le champ ds contient l'adresse du serveur de nom de domaine (DNS) +o le champ gw contient l'adresse de la passerelle par defaut +o le champ ht contient le type de carte reseau +o le champ bf contient le nom du fichier d'amorcage Apres cela, chaque machine doit posseder sa propre entree sur une ligne: +o le premier champ contient le nom de l'hote +o le champ hd contient le repertoire du fichier d'amorcage +o on peut inclure le patron global avec le champ tc +o le champ ha contient l'adresse materielle de la carte ethernet +o le champ ip contient l'adresse IP qui a ete attribuee 55..44.. CCoommpprreennddrree ttffttpp TFTP (Trivial File Transfer Protocol, ou protocole de transfert de fichiers banal) est un protocole de transfert de fichiers, comme ftp, mais il est beaucoup plus facile a programmer dans des memoires de type EPROM. On peut utiliser TFTP de deux manieres: +o tftp simple: cela signifie que le client peut acceder a la totalite de votre systeme de fichiers. C'est plus simple, mais cela constitue un gros trou de securite (n'importe qui peut obtenir votre fichier de mots de passe par tftp). +o tftp securise: le serveur tftp utilise un appel systeme chroot.2 pour modifier son propre repertoire racine. Tout ce qui n'est pas dans cette racine sera absolument inaccessible. Comme le repertoire chroot devient le nouveau repertoire racine, le champ hd liste dans le fichier bootptab doit prendre cette situation en compte. Par exemple: lorsqu'on utilise tftp non securise, le champ hd contient le chemin complet menant au repertoire d'amorcage: /export/root/machine1. Lorsqu'on utilise tftp securise avec /export comme repertoire racine, alors /export devient / et le champ hd doit etre /root/machine1. Comme pratiquement toute installation Unix comporte un serveur tftp, vous n'aurez probablement pas besoin d'installer la votre. 55..55.. CCoonnffiigguurreerr uunn LLiinnuuxx mmiinniimmaall ssuurr llee sseerrvveeuurr ddiissttaanntt.. Il vous faut pour cela, par exemple, les paquetages a, ap, n et x de la distribution Slackware. Il est possible d'installer plus de choses; ce pendant les paquetages ci-dessus suffiront a l'installation d'un terminal X sans disque. Pour l'installation, il vous faut un systeme sous Linux en etat de marche. Trouvez un peu d'espace disque sur la machine distante et exportez-le en lecture et en ecriture. Montez le repertoire exporte quelque part (par exemple sur /mnt) sur le systeme de fichiers du systeme sous Linux. Demarrez Linux et modifiez l'option de racine dans la configuration; remplacez / par /mnt. Puis configurez les paquetages ci-dessus de maniere habituelle. Si vous ne souhaitez faire tourner qu'un seul Linux sans disque, il ne vous faut rien modifier d'autre. D'un autre cote, si vous pensez utiliser plus d'une machine sans disque, la configuration decrite ci-dessus ne fonctionnera pas parce que certains fichiers et repertoires doivent etre prives pour chaque machine. On peut contourner ce probleme on deplacant le repertoire /usr (il ne contient aucune donnee personnelle) et ensuite de creer un sous-repertoire pour chaque machine sans disque. Par exemple, si /export/linux/machine1 est monte sur /mnt alors la structure des repertoires apres la configuration initiale ressemblera a: ______________________________________________________________________ /export/linux/machine1/bin /export/linux/machine1/sbin /export/linux/machine1/lib /export/linux/machine1/etc /export/linux/machine1/var /export/linux/machine1/usr ______________________________________________________________________ Apres les modifications vous obtiendrez ______________________________________________________________________ /export/linux/machine1/bin /export/linux/machine1/sbin /export/linux/machine1/lib /export/linux/machine1/etc /export/linux/machine1/var /export/linux/usr ______________________________________________________________________ Maintenant creez les sous-repertoires pour les autres machines. Supposons pour l'instant que vos machines sans disque s'appellent machine1, machine2, machine3, etc.; vous pouvez alors utiliser le script bash qui suit pour configurer les autres repertoires: ______________________________________________________________________ cd /export/linux for x in machine2 machine3; do mkdir $x; cd $x (cd ../machine1; tar cf - *) | tar xvf - done ______________________________________________________________________ Puis exportez les repertoires qui suivent: +o /export/linux/usr en lecture seule pour tout le monde. +o /export/linux/machine1 uniquement sur machine1, en lecture/ecriture et avec les droits de root. +o /export/linux/machine2 idem, sur machine2. +o /export/linux/machine3 idem, sur machine3. comme suit (-- le format de cet exemple est conforme a la syntaxe des exportations de fichiers pour SunOS 4.1.3--) : ______________________________________________________________________ # Ce fichier est /etc/export # pour des terminaux sous le systeme Linux distants # Ecrit par Buci # N'ecrivez cette ligne qu'une fois /export/root/usr -access=linuxnet # N'ecrivez ces lignes qu'une fois pour chaque hote /export/root/machine1 rw=machine1,root=machine1 /export/root/machine2 rw=machine2,root=machine2 /export/root/machine3 rw=machine3,root=machine3 ______________________________________________________________________ N'oubliez pas de lancer exportfs -a. 55..66.. CCoonnffiigguurreerr llee sseerrvveeuurr ttffttpp C'est maintenant le moment de configurer le serveur tftp. Si vous n'avez pas besoin de tftp securise alors tout est tres simple puisque vos clients peuvent etre amorces depuis le repertoire /export. Si vous utilisez un tftp securise vous pouvez soit mettre en place une structure de repertoire /export/linux complete sous /tftpboot (en n'utilisant qu'un seul veritable noyau et des liens symboliques pour les autres machines), ou laisser le repertoire /export jouer le role du repertoire d'amorcage pour le tftpd securise. Ou encore, si vous disposez d'un repertoire tftpboot separe, de facon similaire, vous n'aurez besoin que d'un seul noyau dans la structure de repertoires d'origine, et de liens pour les autres. Vous pouvez obtenir ce resultat en tapant ce qui suit: ______________________________________________________________________ mkdir -p /tftpboot/export/linux/machine1 cd /tftpboot/export/linux/machine1 cp /export/linux/machine1/. ______________________________________________________________________ Puis tapez ce qui suit: ______________________________________________________________________ mkdir -p /tftpboot/export/linux/machine2 cd ../machine2 ln -s ../machine2/ ______________________________________________________________________ 55..77.. DDeerrnniieerrss rreeggllaaggeess Enfin, il vous faut inserer ______________________________________________________________________ /sbin/mount nfs_server:/export/linux/usr /usr ______________________________________________________________________ a la premiere ligne de ______________________________________________________________________ /export/linux//etc/rc.d/rc.S ______________________________________________________________________ ou signifie machine1, machine2, etc. 66.. MMeemmooiirree eett eessppaaccee ddiissqquuee rreeqquuiiss;; vviitteessssee . Je n'ai teste ceci que pour la distribution Slackware 2.3; pour d'autres distributions ou versions les nombres qui suivent peuvent varier: +o Espace disque: 28Mo + 6.5Mo/machine +o RAM: J'utilise X avec 8Mo. Comme il ne faut que 8Mo de systeme de pagination sur memoire de masse, on peut les mettre en place, je pense -- de facon separee pour chacune des machines -- dans /tmp. N'oubliez pas de lancer mkswap. +o Vitesse: Je n'ai pas eu de problemes sur un 486 DX2/66 avec 8 Megaoctets. 77.. EErrrreeuurrss ppoossssiibblleess +o J'ai decouvert une erreur etrange: dans le sous-repertoire /dev, SunOS a corrompu les entrees de peripheriques de telle sorte que j'ai du relancer MAKEDEV en montant le sous-repertoire sur un systeme sous Linux avec disque. (La raison de cela provient des differences entre le NFS de linux et le NFS de SunOS: tous deux utilisent 32bits pour les numeros de peripheriques Mineur et Majeur, mais linux utilise des champs de 16bits pour ces deux numeros, alors que SunOS utilise un champ de 14bits pour le numero de peripherique Majeur, et un champ de 18bits pour le numero de peripherique Mineur.) +o Quand on amorce un systeme sous Linux sans disque, la table de routage au serveur tftp ne contient qu'un seul routage, et vous devez configurer des tables de routage correctes. Vous avez pour cela deux possibilites: +o configurer le rc.S de chacune des machines a la main +o utiliser un paquetage de client bootp et rediger un script de configuration generalise 88.. EErrrreeuurrss eett ddeevveellooppppeemmeennttss ppoossssiibblleess ddee ccee ddooccuummeenntt +o Citer correctement les documents lies a tout ceci. +o SunOS est fonde sur BSD. Il faut inclure une configuration de serveur fondee sur SVR4 (c'est-a-dire sur Solaris). +o Meme si Linux ressemble beaucoup a SunOS en tant que serveur bootp/tftp, il peut etre utile de fournir un exemple de serveur fonde sur Linux. +o Mettre a jour ce document pour le paquetage etherboot en cours. +o Montrer les differences entre le noyau version 1.2.13 corrige pour la racine NFS et le dernier noyau 1.3.x, qui contient la correction de racine par NFS. +o Besoin d'essayer d'autres cartes ethernet que la wd8013 +o Inclure des renseignements de configuration pour bootpc, un client bootp pour Linux qui sert a configurer des tables de routage correctes. +o Fautes de frappe et autres: notifiez-les, s'il vous plait, a buci@math.klte.hu ou a Sebastien.Blondeel@lifl.fr pour la traduction francaise. Merci. .