NFS-Root-Client Mini-Howto <author>par <htmlurl url="http://www.hcs.co.il/oferm/" name="Ofer Maor">, <htmlurl url="mailto:oferm@hcs.co.il" name="ofer@hadar.co.il"> <date>Version 4.1, le 02 Février 1999 <abstract> (Adaptation française par Antoine Levavasseur <tt>levavass@efrei.fr</tt>, le 4 mars 1999). L'objectif de ce mini-howto est d'expliquer comment créer l'arborescence racine d'un client pour le serveur qui gère des clients utilisant NFS-Root. La dernière version de ce mini Howto peut être récupérée à : <htmlurl url="http://www.hcs.co.il/oferm/NFS-Root-Client/" name="http://www.hcs.co.il/oferm/NFS-Root-Client/"> <sect>Copyright <p> (c) 1996 Ofer Maor (<tt/ofer@hadar.co.il/) Sauf indication contraire, les documents <bf/Howto Linux/ sont copyrightés par leurs auteurs respectifs. Les documents <bf/Howto Linux/ peuvent être reproduits et diffusés d'une manière complète ou partielle, sur n'importe quel support, qu'il soit physique ou électronique, du moment que ce copyright se trouve sur toutes les copies. Les diffusions commerciales sont autorisées et même encouragées. Toutefois, l'auteur aimerait bien être averti de ce genre de distributions.<p> Toute traduction, travail dérivé, ou travaux plus généraux incluant n'importe quel document <bf/Howto Linux/ doit être protégé par ce copyright. De cette manière, vous ne pouvez pas créer un document dérivant d'un Howto et imposer des restrictions supplémentaires sur sa distribution. Des exceptions à ces règles peuvent être accordées sous certaines conditions. Contactez dans ce cas le coordinateur des <bf/Howto Linux/ à l'adresse qui vous sera donnée à la fin de cette section.<p> En résumé, nous souhaitons promouvoir la diffusion de ces informations à travers le maximum de moyens de communications. Toutefois, nous souhaitons absolument conserver un copyright sur ces documents, et nous voulons être consultés pour toute redistribution des Howtos.<p> Si vous avez des questions, contactez alors <em>Ofer Maor (<htmlurl url="mailto:oferm@hcs.co.il" name="ofer@hadar.co.il">) </em>, l'auteur de ce Mini-Howto, ou <em>Greg Hankins</em>, le coordinateur des Howto pour <bf>Linux</bf>, <htmlurl url="mailto:gregh@sunsite.unc.edu" name="gregh@sunsite.unc.edu"> par courrier électronique ou au +1 404 853 9989.<p> Si vous avez quelque chose à ajouter à ce Mini-Howto, envoyez par courrier électronique à l'auteur (Ofer Maor (<htmlurl url="mailto:oferm@hcs.co.il" name="ofer@hadar.co.il">) vos informations. Toute information intéressante sera appréciée. <sect1>Remerciements <p> Je tiens à remercier l'auteur du Howto NFS-Root, Andreas Kostyrca (<htmlurl url="mailto:andreas@medman.ag.or.at" name="andreas@medman.ag.or.at">). Son Mini-Howto m'a aidé lors de mes premiers pas pour mettre en place un client avec le système NFS-Root. Mon Mini-Howto ne cherche en aucun cas à remplacer ce travail, mais à l'améliorer grâce à ma propre expérience.<p> J'aimerais également remercier Mark Kushinsky (<htmlurl url="mailto:mark026@ibm.net" name="marc026@ibm.net">) d'avoir relu et corriger les fautes de ce Howto, le rendant ainsi bien plus lisible. <sect>Préface <p> Ce Mini-Howto à été écrit dans le but d'aider les gens qui veulent utiliser le montage par NFS-Root pour créer l'arborecence de leurs clients. Vous pourrez ainsi remarquer qu'il y a de nombreuses façon d'accomplir cela selon vos besoins et vos intentions. Si les clients sont individuels, et qu'ils ont tous leurs propres utilisateurs et administrateurs, il serai nécessaire de ne pas partager avec d'autres clients une partie significative des répertoires. Dans le cas ou le client est destiné à de multiples utilisateurs, et qu'ils sont tous administrés par la même personne (par exemple les ordinateurs d'une école), il faudrait partager le maximum de fichier afin de simplifier l'administration. Ce Howto, se concentre sur la deuxième possibilité. <sect1>Présentation Générale <p> Lorsque l'on construit le répertoire racine d'un client, en essayant de nous limiter à la taille minimale, nous chercherons principalement quels fichiers nous pouvons partager ou monter à partir du serveur. Dans ce Howto, je recommendrai la configuration d'un client basé sur ma propre expérience. Mais avant de commencer, veuillez remarquer que : <itemize> <item>Ce Mini-Howto n'explique pas comment effectuer le montage de partition par NFS-Root. Se référer au mini HOWTO NFS-Root si vous avez besoin de plus d'informations à ce sujet. <item> J'ai basé la configuration de la plupart de mes clients sur les montages et les liens symboliques. Bon nombre de ces liens symboliques peuvent être remplacés par des liens durs. Chacun choisira selon ses préférences personnelles. Mettre un lien dur à travers un fichier monté a ses avantages, mais peut prêter à confusion. Un fichier ne sera pas effacé tant que tous ses liens durs ne seront pas effacés. Ainsi, pour prévenir les cas ou vous mettez à jour un certain fichier, et que les liens durs référencent toujours l'ancienne version, vous devez être très attentifs et garder une trace de tous les liens que vous mettez. <item>Lorsque vous montez les informations à partir du serveur, il existe 2 possibilités. La première (la plus courante), est de monter la totalité du répertoire racine du serveur dans un répertoire local, et de simplement changer le chemin ou mettre des liens vers les répertoires correspondant. Personnellement, je n'aime pas monter la partition racine du serveur sur les clients. Ainsi, ce Howto suggère une façon de monter les répertoires appropriés du serveur aux endroits appropriés du système. <item> Ce Howto est basé sur mon expérience à construire les répertoires clients sur la distribution Slackware 3.1. Certaines choses peuvent être différentes (en particulier les fichiers rc.*), pour d'autres utilisateurs, cependant les concepts restent les mêmes. </itemize> <sect>Créer le répertoire racine du client<p> <sect1>Création de l'arborescence<p> Tout d'abord, vous devez créer la structure des répertoires elle-même. J'ai créé tous mes clients dans le répertoire <tt>/clients/hostname</tt> et je l'utilise pour tous les exemples suivants. Cela peut toutefois être remplacé par n'importe quoi d'autre. La première étape, est donc de créer les répertoires appropriés sur la racine. Vous devez créer les répertoires suivants : <tscreen><verb> bin, dev, etc, home, lib, mnt, proc, sbin, serveur, tmp, usr, var </verb></tscreen> et tous les autres répertoires que vous souhaitez avoir sur votre système. Les répertoires locaux <tt/proc/ et <tt/dev/ doivent être distincts pour chaque machine alors que le reste des répertoires peut être soit en partie soit complètement partagé avec les autres clients. <sect1>Création d'un système de fichier minimal pour le boot<p> <sect2>Créer le répertoire dev.<p> Bien que le répertoire <tt/dev/ puisse être partagé, il est préférable d'en créer un différent pour chaque client. Vous pouvez créer le répertoire dev de votre client avec le script MAKEDEV approprié, cependant dans la plupart des cas, il est plus simple de le recopier à partir du serveur : <tscreen><verb> cp -a /dev /clients/hostname </verb></tscreen> Vous devez garder à l'esprit que <tt>/dev/mouse</tt>, <tt>/dev/cdrom</tt> et <tt>/dev/modem</tt> sont des liens vers les périphériques courants, il faut donc s'assurer qu'ils sont correctement reliés pour correspondre au matériel du client. <sect2>Copier les exécutables indispensables.<p> Bien que nous montons tout à partir du serveur, il y a un minimum que vous devez recopier pour chaque client. Avant tout, vous avez besoin de "init", car votre système ne sera pas capable de faire marcher quoi que ce soit avant de s'être initialisé (l'auteur l'a difficilement trouvé ;-). Donc premièrement, vous devez copier <tt>/sbin/init</tt> dans le répertoire sbin de votre client ensuite, pour que le fichier rc.S puisse être lancé, vous devez copier /bin/sh dans le répertoire binaire de votre client. Ensuite, de manière à monter tout ce dont vous avez besoin, vous devez copier <tt>/sbin/mount</tt> dans le répertoire sbin de votre client. C'est le minimum, à partir du moment ou la première ligne de votre rc.S <em>(rc.sysinit pour une distribution redhat)</em> est <tt>mount -av</tt>.<p> Cependant, je recommande de copier quelques autres fichiers : <tt>update, ls, rm, cp et umount</tt> comme cela, vous aurez les outils minimum au cas ou le client à des problèmes de montage. Si vous choisissez d'utiliser votre swap avant de monter la racine, vous devez également copier l'exécutable <tt/swapon/. <p> Bien que la plupart de ces exécutables ont eu une édition des liens dynamique, vous devez aussi copier une petite partie de /lib : <tscreen><verb> cp -a /lib/ld.* /lib/libc.* /lib/libcurses.* /client/hostname/lib </verb></tscreen> <em>N.d.T. : sur certaines distributions (en particulier RedHat) ce sont les fichiers /lib/libtermcap* qu'il faut recopier à la place de /lib/libcurses.* selon la façon dont sont compilés les exécutables. </em> Mettre des liens durs vers les fichiers eux-mêmes, au lieu de les copier, est une solution à considérer. Relisez mes commentaires à ce sujet dans la partie 2.1 de ce Howto.<p> Veuillez remarquer que toutes les informations précédentes supposent que le noyau ai obtenu tous les paramètres lors du boot. Si vous pensez utiliser <bf/rarp/ ou <bf/bootp/, vous aurez probablement besoin des fichiers qui leurs correspondent.<p> Généralement, vous aurez besoin du minimum de fichiers qui vous permettent de configurer le réseau et d'exécuter rc.S <em/(ou rc.sysinit sur Redhat)/ jusqu'au moment ou est monté le reste du système de fichier. Assurez-vous que vous avez vérifixiée vos fichiers <tt>/etc/init</tt> et <tt/rc.S/, vérifiez qu'il n'y a pas de "surprises" ou quoi que ce soit d'autre qui aurait besoin d'accéder à d'autres fichiers, avant que le premier montage ait lieu. Si vous le faites toutefois, retrouvez ces fichiers, vous pouvez soit les recopier également, soit enlever les parties correspondantes de vos fichiers <tt/init/ ou <tt/rc.S/. <sect2>Le répertoire var<p> Le répertoire var, dans la plupart des cas, doit être séparé pour chaque client. Cependant, bon nombre des données peuvent êtres partagées. Créez dans le répertoire <tt>/serveur</tt>, un répertoire appelé <tt/var/. Nous recopierons le répertoire <tt/var/ du serveur à cet endroit. Pour créer le répertoire <tt/var/ local, tapez simplement : <tscreen><verb> cp -a /var /clients/hostname </verb></tscreen> Maintenant, vous pouvez choisir ce que vous voulez séparer, et ce que vous voulez partager. Pour tout répertoire/fichier que vous voulez partager, enlevez-le simplement du répertoire var du client, et mettez un lien symbolique vers le répertoire <tt>/serveur/var</tt>. Cependant, vous remarquerez que vous pouvez mettre un lien symbolique vers <tt>/serveur/var</tt> ou vers <tt>../serveur/var</tt> mais surtout PAS vers <tt>/clients/hostname/serveur/var </tt>puisque cela ne marchera plus lorsque la racine aura changé. <p> Généralement, je recommande de séparer <tt>/var/run, /var/lock, /var/spool </tt> et <tt>/var/log</tt>. <sect2>Le cas des autres répertoires<p> <itemize> <item>etc est détaillé dans la section suivante. <item>mnt et proc sont utilisés localement <item>usr et home sont simplement des points de montage <item>tmp est à votre bon choix. Vous pouvez créer un répertoire différent pour chaque client, ou créer un répertoire <tt>/clients/tmp</tt>, et le monter sur chaque client dans <tt>/tmp</tt>. Je recommande de fournir un répertoire tmp pour chaque client </itemize> <sect1>Construire le répertoire etc et configurer le client<p> Remarque - cette section traite de la façon de créer un répertoire <tt/etc/ qui est principalement séparé entre les clients. Si votre station diskless a des administrateurs systèmes différents, il est préférable de faire un répertoire <tt/etc/ séparé pour chaque client. <sect2>Mettre un grand répertoire etc<p> Bien que nous séparions les répertoires <tt/etc/ des clients, nous souhaitons toujours partager une bonne partie des fichiers de cet endroit. D'une façon générale, je pense que partager les fichiers de etc avec le répertoire <tt>/etc </tt> du serveur est une mauvaise idée, et c'est pourquoi je recommande de créer un répertoire <tt>/clients/etc</tt>, qui contiendra les informations dont les clients ont besoin. Pour commencer, recopier simplement le contenu de /etc du serveur vers le répertoire <tt>/client/etc</tt>.<p> Vous devrez ajouter à ce répertoire tous les fichiers de configuration qui ne dépendent pas de la machine, par exemple motd, issue, etc. mais aucun de ceux dépendant du client (i.e. inittab ou fstab)<p> Les changements les plus importants doivent être faits dans le répertoire <tt/rc.d/. Premièrement, vous devez changer rc.inet1 pour qu'il corresponde à votre paramétrage local. Je passe tous mes paramètres réseau au noyau avec LILO/Loadlin, c'est pourquoi j'ai enlevé presque tout de mon fichier <tt/rc.inet1/. La seule chose que j'ai laissé, est le <bf/ifconfig/ et la <bf/route/ vers l'entrée localhost. Si vous utilisez rarp ou bootp, vous devez en tenir compte lors de la création du fichier.<p> Deuxièmement, vous devez éditer le fichier rc.S. D'abord, enlever toutes les parties qui sont responsable d'une recherche d'erreur avec fsck, puisque fsck aura lieu alors que le serveur est déjà démarré. Ensuite, vous devez trouver la ligne ou est monté votre fstab. Cela doit ressembler à : <tscreen><verb> mount -avt nonfs </verb></tscreen> Le <bf/-t nonfs/. est jusque là normal puisque les client lancent en premier rc.S et seulement après rc.inet1 pour configurer l'Ethernet. Mais comme cette ligne ne va pas monter les partitions NFS, elle doit être détruite. Il faut ensuite la remplacer par un <tt>mount -av </tt>. Si vous avez besoin d'utiliser rarp/bootp pour configurer votre réseau, faites le dans rc.S (ou appelez le script approprié dans rc.S), avant de monter, et assurez vous que les répertoires bin et sbin contiennent les fichiers nécessaires.<p> Après que le <tt/mount -av/ ait été accompli, vous devez avoir un système de fichier opérationnel. Créez un fstab générique, que vous pourrez recopier sur chaque client.<p> Votre <tt/fstab/ doit ressembler à : <tscreen><verb> serveur:/clients/hostname / nfs default 1 1 serveur:/bin /bin nfs default 1 1 serveur:/usr /usr nfs default 1 1 serveur:/sbin /sbin nfs default 1 1 serveur:/home /home nfs default 1 1 serveur:/lib /lib nfs default 1 1 serveur:/clients/etc /serveur/etc nfs default 1 1 serveur:/clients/var /serveur/var nfs default 1 1 none /proc proc default 1 1 </verb></tscreen> Veuillez remarquer, que le mot clé _default_ ne doit pas fonctionner avec toutes les versions de mount. Vous devrez alors le changer en _rw_ ou _ro_ ou enlever toute la partie _default 1 1_ . <p> Assurez vous également que sur votre serveur le <tt>/etc/exports</tt> ressemble à : <tscreen><verb> /clients/hostname hostname.domainname(rw,no_root_squash) /clients/etc hostname.domainname(ro,no_root_squash) /clients/var hostname.domainname(ro,no_root_squash) /usr hostname.domainname(ro,no_root_squash) /sbin hostname.domainname(ro,no_root_squash) /bin hostname.domainname(ro,no_root_squash) /lib hostname.domainname(ro,no_root_squash) /home hostname.domainname(rw,no_root_squash) </verb></tscreen> Mise à part la première ligne qui doit être différente pour chaque client, les autres lignes peuvent être remplacées par un masque pour s'appliquer à tout vos clients (comme pc*.domain - gardez à l'esprit, que * se substitue uniquement aux chaînes de caractères ne contenant pas de point). Je propose de mettre la majorité des répertoires en lecture seule <em/ro/, mais c'est à vous de choisir. Le <tt/no_root_squash/ assure que le super-utilisateur aura sur les clients les permissions correspondantes avec nfsd. Jetez un coup d'oeil au <tt/man exports(5)/. Si vous souhaitez que vos utilisateurs puissent utiliser <bf/passwd/ également à partir des clients, assurez-vous que /etc ai les permissions rw et non ro. Toutefois faites comme vous le souhaitez.<p> Vouz remarquerez aussi, en ce qui concerne le fichier rc.S que sur la Slackware, par défaut, un fichier <tt>/etc/issue</tt> et <tt>/etc/motd</tt> sont créés à chaque exécution. Cette fonction DOIT être désactivée si ces fichiers sont montés en ro à partir du serveur, je recommande de les désactiver dans tous les cas. <p> Pour terminer, si vous voulez avoir une base d'utilisateurs commune à votre serveur et vos clients, vous pouvez choisir entre 1), utiliser NIS (lire le NIS-Howto), et ainsi, chaque client aura un <tt>/etc/passwd</tt> et <tt>/etc/group</tt> séparé puisqu'il les recevra du serveur. 2) Dans la plupart des cas, un lien symbolique suffira. Pour cela, vous pourrez soit mettre un lien dur de <tt>/client/etc/passwd</tt> vers <tt>/etc/passwd</tt>, ou si vous préférez un lien symbolique, reliant <tt>/etc/passwd</tt> vers <tt>/client/etc/passwd</tt> (et pas dans l'autre sens puisque le client ne monte pas le répertoire etc du serveur). Faire de même avec <tt>/etc/group</tt> <sect2>Créer le répertoire etc du client<p> Généralement, la plupart des fichiers du répertoire etc du client doivent avoir des liens symboliques vers <tt>/serveur/etc</tt>. Toutefois, certains fichiers sont différents pour chaque machine, et certains doivent être là lorsque le noyau est chargé. Le minimum dont vous avez besoin dans le répertoire etc est : <tscreen><verb> resolv.conf hosts inittab rc.d/rc.S fstab </verb></tscreen> Puisque ces 5 fichiers peuvent êtres identiques sur les clients, vous pouvez simplement les recopier ou mettre des liens durs. Cependant, il est judicieux de garder les fichiers <tt/fstab/ et <tt/rc.S/ différents pour chaque client. Vous devez également séparer <tt> etc/HOSTAME</tt> pour chaque client. Personnellement, je recommande d'avoir les fichiers de <tt/rc.d/ distincts pour chaque client puisque la configuration et le matériel peuvent varier d'une machine à l'autre.<p> Pour chaque client, ajouter dans la <tt/fstab/ la ligne swap appropriée : <tscreen><verb> /dev/swap_partition swap swap default 1 1 </verb></tscreen> Pour le reste des fichiers de /etc du client, vous pouvez soit mettre des liens durs vers <tt>/clients/etc/* </tt>, ou mettre des liens symboliques vers <tt>/serveur/etc</tt> (qui est l'endroit où est monté <tt>/clients/etc</tt>).<p> Assurez-vous que votre machine peut résoudre correctement, soit par <bf/named/ ou grâce à <bf>etc/hosts</bf>. Ce n'est pas une mauvaise idée de garder l'adresse IP du serveur dans <tt>/etc/hosts</tt>, plutôt que de compter sur la résolution. Si vous comptez uniquement sur la résolution de noms, un problème avec <tt/named/ empêchera vos clients de booter. <sect1>Booter la machine<p> Maintenant que vous avez fait tout ce qu'il faut pour démarrer votre machine, croisez vos doigts et priez pour que tout marche comme il faut :-) <sect>Créer d'autres clients<p> Si vous avez suivi mes instructions jusqu'ici, cela devrait être facile - changer de répertoire vers <tt>/clients</tt> et tapez : <tscreen><verb> cp -a hostname1 hostname2 </verb></tscreen> et vérifiez bien les points suivants : <quote> Les fichiers rc.d/* correspondent au matériel et la configuration logicielle <bf>etc/HOSTNAME</bf> est correcte, la ligne de swap de fstab est correcte, les liens symboliques <tt>dev/mouse, dev/modem</tt> et <tt>/dev/cdrom</tt> sont corrects. </quote> <verb> Bonne Chance... </verb> </article>