<!--  Traduction : Antoine LEVAVASSEUR    -->
<!--  levavass@efrei.fr			  -->
<!--  Paris, le 14 Février 1999 -->

<!doctype linuxdoc system>

<article>

<title>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> 
