NFS-Root-Client Mini-Howto par Ofer Maor, ofer@hadar.co.il Version 4, le 1er juillet 1997 (Adaptation francaise par Antoine Levavasseur levavass@efrei.fr, le 18 septembre 1997). L'objectif de ce mini-howto est d'expliquer comment creer l'arborescence racine d'un client pour le serveur qui gere des clients utilisant NFS-Root. La derniere version de ce mini Howto peut etre recuperee a l'URL: http://www.hadear.co.il/ofer/nfs-root-client/ 11.. CCooppyyrriigghhtt (c) 1996 Ofer Maor (ofer@hadar.co.il) Sauf indication contraire, les documents HHoowwttoo LLiinnuuxx sont copyrightes par leurs auteurs respectifs. Les documents HHoowwttoo LLiinnuuxx peuvent etre reproduits et diffuses d'une maniere complete ou partielle, sur n'importe quel support, qu'il soit physique ou electronique, du moment que ce copyright se trouve sur toutes les copies. Les diffusions commerciales sont autorisees et meme encouragees. Toutefois, l'auteur aimerait bien etre averti de ce genre de distributions. Toute traduction, travail derive, ou travaux plus generaux incluant n'importe quel document HHoowwttoo LLiinnuuxx doit etre protege par ce copyright. De cette maniere, vous ne pouvez pas creer un document derivant d'un Howto et imposer des restrictions supplementaires sur sa distribution. Des exceptions a ces regles peuvent etre accordees sous certaines conditions. Contactez dans ce cas le coordinateur des HHoowwttoo LLiinnuuxx a l'adresse qui vous sera donnee a la fin de cette section. En resume, nous souhaitons promouvoir la diffusion de ces informations a travers le maximum de moyens de communications. Toutefois, nous souhaitons absolument conserver un copyright sur ces documents, et nous voulons etre consultes pour toute redistribution des Howtos. Si vous avez des questions, contactez alors _O_f_e_r _M_a_o_r _(_o_f_e_r_@_h_a_d_a_r_._c_o_._i_l_), l'auteur de ce Mini-Howto, ou _G_r_e_g _H_a_n_k_i_n_s, le coordinateur des Howto pour LLiinnuuxx, gregh@sunsite.unc.edu par courier electronique ou au +1 404 853 9989. Si vous avez quelque chose a ajouter a ce Mini-Howto, envoyez par courier electronique a l'auteur (Ofer Maor (ofer@hadar.co.il) vos informations. Toute information interessante sera apreciee. 11..11.. RReemmeerrcciieemmeennttss Je tiens a remercier l'auteur du Howto NFS-Root, Andreas Kostyrca (andreas@medman.ag.or.at). Son Mini-Howto m'a aide lors de mes premiers pas pour mettre en place un client avec le systeme NFS-Root. Mon Mini-Howto ne cherche en aucun cas a remplacer ce travail, mais a l'ameliorer grace a ma propre experience. J'aimerais egalement remercier Mark Kushinsky (marc026@ibm.net) d'avoir relu et corriger les fautes de ce Howto, le rendant ainsi bien plus lisible. 22.. PPrreeffaaccee Ce Mini-Howto a ete ecrit dans le but d'aider les gens qui veulent utiliser le montage par NFS-Root pour creer l'arborecence de leurs clients. Vous pourrez ainsi remarquer qu'il y a de nombreuses facon 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 necessaire de ne pas partager avec d'autres clients une partie significative des repertoires. Dans le cas ou le client est destine a de multiples utilisateurs, et qu'ils sont tous administres par la meme personne, il faudrai partager le maximum de fichier afin de simplifier l'administration. Ce Howto, se concentre sur la deuxieme possiblite. 22..11.. PPrreesseennttaattiioonn GGeenneerraallee Lorsque l'on construit le repertoire racine d'un client, en essayant de nous limiter a la taille minimale, nous chercherons principalement quels fichiers nous pouvons partager ou monter a partir du serveur. Dans ce Howto, je recommendrai la configuration d'un client base sur ma propre experience. Mais avant de commencer, veuillez remarquer que : +o Ce Mini-Howto n'explique pas comment effectuer le montage de partition par NFS-Root. Se referer au mini HOWTO NFS-Root si vous avez besoin de plus d'informations a ce sujet. +o J'ai base la configuration de la plupart de mes clients sur les montages et les liens symboliques. Bon nombre de ces liens symboliques peuvent etre remplaces par des liens durs. Chacun choisira selon ses preferences personnelles. Mettre un lien dur a travers un fichier monte a ses avantages, mais peut preter a confusion. Un fichier ne sera pas efface tant que tous ses liens durs ne seront pas effaces. Ainsi, pour prevenir les cas ou vous mettez a jour un certan fichier, et que les liens durs referencent toujours l'ancienne version, vous devez etre tres attentifs et garder une trace de tous les liens que vous mettez. +o Lorsque vous montez les informations a partir du serveur, il existe 2 possibilites. La premiere (la plus courante), est de monter la totalite du repertoire racine du serveur dans un repertoire local, et de simplement changer le chemin ou mettre des liens vers les repertoires correspondant. Personnellement, je n'aime pas monter la partition racine du serveur sur les clients. Ainsi, ce Howto suggere une facon de monter les repertoires apropries du serveur aux endroits apropries du systeme. +o Ce Howto est base sur mon experience a construire les repertoires clients sur la distribution Slackware 3.1. Certaines choses peuvent etre differentes (en particulier les fichiers rc.*), pour d'autres utilisateurs, cependant les concepts restent les memes. 33.. CCrreeeerr llee rreeppeerrttooiirree rraacciinnee dduu cclliieenntt 33..11.. CCrreeaattiioonn ddee ll''aarrbboorreesscceennccee Tout d'abord, vous devez creer la structure des repertoires elle-meme. J'ai cree tous mes clients dans le repertoire /clients/hostname et je l'utilise pour tous les examples suivants. Cela peut toutefois etre remplace par n'importe quoi d'autre. La premiere etape, donc, est de creer les repertoires apropries dans le repertoire racine. Vous devez creer les repertoires : bin, dev, etc, home, lib, mnt, proc, sbin, serveur, tmp, usr, var et tous les autres repertoires que vous souhaitez avoir sur votre sys- teme. Les repertoires locaux proc et dev doivent distincts pour chaque machine alors que le reste des repertoires peut etre soit en partie soit completement partage avec les autres clients. 33..22.. CCrreeaattiioonn dd''uunn ssyysstteemmee ddee ffiicchhiieerr mmiinniimmaall ppoouurr llee bboooott 33..22..11.. CCrreeeerr llee rreeppeerrttooiirree ddeevv.. Bien que le repertoire dev puisse etre partage, il est preferable d'en creer un different pour chaque client. Vous pouvez creer le repertoire dev de votre client avec le script MAKEDEV approprie, cependant dans la plupart des cas, il est plus simple de le recopier a partir du serveur : cp -a /dev /clients/hostname Vous devez garder a l'esprit que /dev/mouse, /dev/cdrom et /dev/modem sont des liens vers les peripheriques courants, il faut donc s'assurer qu'ils sont correctement relies pour correspondre au materiel du client. 33..22..22.. CCooppiieerr lleess eexxeeccuuttaabblleess iinnddiissppeennssaabblleess.. Bien que nous montons tout a partir du serveur, il y a un minimum que vous devez recopier pour chaque client. Avant tout, vous avez besoin de "init", car votre systeme ne sera pas capable de faire marcher quoi que ce soit avant de s'etre init'ialise (l'auteur l'a difficilement trouve ;-). Donc premierement, vous devez copier /sbin/init dans le repertoire sbin de votre client. Ensuite, de maniere a monter tout ce dont vous avez besoin, vous devez copier /sbin/mount dans le repertoire sbin de votre client. C'est le minimum, a partir du moment ou la premiere ligne de votre rc.S _(_r_c_._s_y_s_i_n_i_t _p_o_u_r _u_n_e _d_i_s_t_r_i_b_u_t_i_o_n _r_e_d_h_a_t_) est mount -av. Cependant, je recommande de copier quelques autres fichiers : update, ls, rm, cp et umount comme cela, vous aurez les outils minimum au cas ou le client a des problemes de montage. Si vous choisissez de laisser votre swap en route avant de monter la racine, vous devez egalement copier l'executable swapon. Bien que la plupart de ces executables ont eu une edition des liens dynamique, vous devez aussi copier une petite partie de /lib : cp -a /lib/ld.* /lib/libc.* /lib/libcurses.* /client/hostname/lib _N_._d_._T_. _: _s_u_r _c_e_r_t_a_i_n_e_s _d_i_s_t_r_i_b_u_t_i_o_n_s _(_e_n _p_a_r_t_i_c_u_l_i_e_r _R_e_d_h_a_t_) _c_e _s_o_n_t _l_e_s _f_i_c_h_i_e_r_s _/_l_i_b_/_l_i_b_t_e_r_m_c_a_p_* _q_u_'_i_l _f_a_u_t _r_e_c_o_p_i_e_r _a _l_a _p_l_a_c_e _d_e _/_l_i_b_/_l_i_b_c_u_r_s_e_s_._* Mettre des liens durs vers les fichiers eux-memes, au lieu de les copier, est une solution a considerer. Relisez mes commentaires a ce sujet dans la partie 2.1 de ce Howto. Veuillez remarquer que toutes les informations precedentes supposent que le noyau a obtenu tous les parametres lors du boot. Si vous pensez utiliser rraarrpp ou bboooottpp, vous aurez probablement egalement besoin des fichiers qui leurs correspondent. Generalement, vous aurez besoin du minimum de fichiers qui vous permettent de configurer le reseau et d'executer rc.S _(_o_u _r_c_._s_y_s_i_n_i_t _s_u_r _R_e_d_h_a_t_) jusqu'au moment ou est monte le reste du systeme de fichier. Assurez-vous que vous avez regarde dans vos fichiers /etc/init et rc.S, assurez- vous qu'il n'y a pas de "surprises" ou quoi que ce soit d'autre, qui aurait besoin d'acceder a d'autres fichiers, avant que le premier montage ait lieu. Si vous le faites toutefois, retrouvez ces fichiers, vous pouvez soit les recopier egalement, soit enlever les parties correspondantes de vos fichiers init ou rc.S. 33..22..33.. LLee rreeppeerrttooiirree vvaarr Le repertoire var, dans la plupart des cas, doit etre separe pour chaque client. Cependant, bon nombre des donnees peuvent etres partagees. Creez dans le repertoire /serveur, un repertoire appele var. Nous recopierons le repertoire var du serveur a cet endroit. Pour creer le repertoire var local, tapez simplement : cp -a /var /clients/hostname Maintenant, vous pouvez choisir ce que vous voulez separer, et ce que vous voulez partager. Pour tout repertoire/fichier que vous voulez partager, enlevez-le simplement du repertoire var du client, et mettez un lieu symbolique vers le repertoire /serveur/var. Cependant, veuillez remarquer que vous pouvez mettre lien symbolique soit vers /serveur/var ou vers Generalement, je recommande de separer /var/run, /var/lock, /var/spool et /var/log. 33..22..44.. LLee ccaass ddeess aauuttrreess rreeppeerrttooiirreess +o etc est detaille dans la section suivante. +o mnt et proc sont utilises localement +o usr et home sont simplement des points de montage +o tmp est a votre bon choix. Vous pouvez creer un repertoire different pour chaque client, ou creer un repertoire /clients/tmp, et le monter sur chaque client dans /tmp. Je recommande de fournir un repertoire tmp pour chaque client 33..33.. CCoonnssttrruuiirree llee rreeppeerrttooiirree eettcc eett ccoonnffiigguurreerr llee cclliieenntt Veuillez Remarquer - cette section traite de la facon de creer un repertoire etc qui est principalement separe entre les clients. Si votre station diskless a des administrateurs systemes differents, il est preferable de faire un repertoire etc separe pour chaque client. 33..33..11.. MMeettttrree uunn ggrraanndd rreeppeerrttooiirree eettcc Bien que nous separions les repertoires etc des clients, nous souhaitons toujours partager une bonne partie des fichiers de cet endroit. D'une facon generale, je pense que partager les fichiers de etc avec le repertoire /etc du serveur est une mauvaise idee, et c'est pourquoi je recommande de creer un repertoire /clients/etc, qui contiendra les informations dont les clients ont besoin. Pour commencer, recopier simplement le contenu de /etc du serveur vers le repertoire /client/etc. Vous devrez ajouter a ce repertoire tous les fichiers de configuration qui ne dependent pas de la machine, par example motd, issue, etc. mais aucun de ceux dependant du client (i.e. inittab ou fstab) Les changements les plus importants doivent etre faits dans le repertoire rc.d. Premierement, vous devez changer rc.inet1 pour qu'il corresponde a votre parametrage local. Je passe tous mes parametres reseau au noyau avec LILO/Loadlin, c'est pourquoi j'ai enleve presque tout de mon fichier rc.inet1. La seule chose que j'ai laisse, est le iiffccoonnffiigg et la rroouuttee vers l'entree localhost. Si vous utilisez rarp ou bootp, vous devez en tenir compte lors de la creation du fichier. Deuxiemement, vous devez editer 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 deja demarre. Ensuite, vous devez trouver la ligne ou est monte votre fstab. Cela doit ressembler a : mount -avt nonfs Le --tt nnoonnffss. etait jusque la normal puisque les client lancent en premier rc.S et seulement apres rc.inet1 pour configurer Ethernet. Mais comme cette ligne ne va pas monter les partitions NFS, elle doit etre detruite. Il faut ensuite la remplacer par un mount -av . Si vous avez besoin d'utiliser rarp/bootp pour configurer votre reseau, faites le dans rc.S (ou appelez le script aproprie dans rc.S), avant de monter, et assurez vous que les repertoires bin et sbin contiennent les fichiers necessaires. Apres que le mount -av ait ete accompli, vous devez avoir un systeme de fichier operationel. Creez un fstab generique, que vous pourrez recopier sur chaque client. Votre fstab doit ressembler a : 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 Veuillez remarquer, que le mot-clef _default_ ne doit pas marcher avec toutes les versions de mount. Vous devrez alors le changer en _rw_ ou _ro_ ou enlever toute la partie _default 1 1_ . Assurez vous egalement que sur votre serveur le /etc/exports ressemble a : /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) Mise a part la premiere ligne qui doit etre differente pour chaque client, les autres lignes peuvent etre remplacees par un masque pour s'appliquer a tout vos clients (comme pc*.domain - gardez a l'esprit, que * se substitue uniquement aux chaines de caraceres ne contenant pas de point). Je propose de mettre la majorite des repertoires en lecture seule _r_o, mais c'est a vous de choisir. Le no_root_squash assure que le super-utilisateur aura sur les clients les permissions correspondantes avec nfsd. Jetez un coup d'oeil au man exports(5). Si vous souhaitez que vos utilisateurs puissent utiliser ppaasssswwdd egalement a partir des clients, assurez-vous que /etc a les permissions rw et non ro. Toutefois faites comme vous le souhaitez. Veuillez notez quelque chose d'autre en ce qui concerne le fichier rc.S. Sur la Slackware, par defaut, un fichier /etc/issue et /etc/motd sont crees a chaque exexcution. Cette fonction DOIT etre desactivee si ces fichiers sont montes en ro a partir du serveur, je recommande qu'ils soient desactives dans tous les cas. Pour termier, si vous voulez avoir une base d'utilisateurs commune a votre serveur et vos clients, vous pouvez choisir entre 1), utiliser NIS (lire le NIS-Howto), et ainsi, chaque client aura un /etc/passwd et /etc/group separe 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 /client/etc/passwd vers /etc/passwd, ou si vous preferez un lien symbolique, reliant /etc/passwd vers /client/etc/passwd (et pas dans l'autre sens puisque le client ne monte pas le repertoire etc du serveur). Faire de meme avec /etc/group 33..33..22.. CCrreeeerr llee rreeppeerrttooiirree eettcc dduu cclliieenntt Generalement, la plupart des fichiers du repertoire etc du client doivent avoir des liens symboliques vers /serveur/etc. Toutefois, certains fichiers sont differents pour chaque machine, et certains doivent etre la lorsque le noyau est charge. Le minimum dont vous avez besoin dans le repertoire etc est : resolv.conf hosts inittab rc.d/rc.S fstab Puisque ces 5 fichiers peuvent etres identiques sur les clients, vous pouvez simplement les recopier ou mettre des liens durs. Cependant, il est judicieux de garder les fichiers fstab et rc.S differents pour chaque client. Vous devez egalement separer etc/HOSTAME pour chaque client. Personellement, je recommande d'avoir les fichiers de rc.d distincts pour chaque client puisque la configuration et le materiel peuvent varier d'une machine a l'autre. Pour chaque client, ajouter dans la fstab la ligne swap appropriee : /dev/swap_partition swap swap default 1 1 Pour le reste des fichiers de /etc du client, vous pouvez soit mettre des liens durs vers /clients/etc/* , ou mettre des liens symboliques vers /serveur/etc (qui est l'endroit ou est monte /clients/etc). Assurez-vous que votre machine peut resoudre correctement, soit par nnaammeedd ou grace a eettcc//hhoossttss. Ce n'est pas une mauvaise idee de garder l'adresse IP du serveur dans /etc/hosts, plutot que de compter sur la resolution. Si vous comptez uniquement sur la resolution de noms, un probleme avec named empechera vos clients de booter. 33..44.. BBooootteerr llaa mmaacchhiinnee Maintenant que vous avez fait tout ce qu'il faut pour demarrer votre machine, croisez vos doigts et priez pour que tout marche comme il faut :-) 44.. CCrreeeerr dd''aauuttrreess cclliieennttss Si vous avez suivi mes instructions jusqu'ici, cela devrait etre facile - changer de repertoire vers /clients et tapez : cp -a hostname1 hostname2 et verifiez bien les points suivants : Les fichiers rc.d/* correspondent au materiel et la configu- ration logicielle eettcc//HHOOSSTTNNAAMMEE est correcte, la ligne de swap de fstab est correcte, les liens symboliques dev/mouse, dev/modem et /dev/cdrom sont corrects. Bonne Chance...