NFS-Root client et serveur HowTo
Hans de Goede <hans@highrise.nl>
v1.0 30 Mars 1999
Ce document d�crit l'installation et la configuration
d'un serveur pour que ses clients puissent d�marrer et
fonctionner sans disque (par montage NFS de root).
Ce Howto est �galement disponible � l'adresse -
http://x.mame.net/hans.
Il d�crit un exemple de configuration o� root est mont� en NFS, mais il
diff�re des autres NFS-root HowTo sur deux points :
- Il propose � la fois l'aspect serveur et l'aspect client,
offrant une solution compl�te ; il ne d�crit pas les principes
de base du montage de root via NFS mais plut�t un exemple
de configuration qui fonctionne.
- La configuration d�crite est particuli�re dans la mesure o� c'est
l'arborescence root du serveur qui est partag�e avec
les stations (workstations, ws), tandis qu'habituellement,
on a plut�t un mini-root par station.
Ceci a quelques avantages :
- occupe un faible espace disque
- tous les changements sur le serveur sont
automatiquement disponibles c�t� client
(la configuration n'est faite qu'une fois)
- facilite l'ajout de nouveaux clients
- un seul syst�me � maintenir.
Ce document est bas� sur un syst�me RedHat 5.2. On suppose
que le lecteur de ce HowTo a suffisamment d'exp�rience en
administration syst�me linux ; l'adaptation de cette solution
� une autre distribution ne devrait donc pas poser de probl�me.
Ce HOWTO est © Hans de Goede, 1999.
Sauf indication contraire, les droits d'auteur des HOWTO Linux sont
d�tenus par leurs auteurs respectifs. Les HOWTO Linux peuvent �tre
reproduits et distribu�s, en totalit� ou en partie, sur tout m�dia
physique ou �lectronique dans la mesure o� ce copyright est pr�serv�
dans chaque copie. La distribution commerciale en est autoris�e et
encourag�e. L'auteur appr�cierait toutefois qu'on lui notifie
individuellement ce genre de distribution.
Le pr�sent copyright doit couvrir toute traduction, compilation et
autre travail d�riv� des HOWTO Linux. C'est-�-dire qu'il est interdit
d'imposer des restrictions de diffusion allant au del� du pr�sent
copyright � des ouvrages inspir�s, ou incorporant des passages, de
HOWTO Linux. Sous certaines conditions, des exceptions � ces r�gles
seront tol�r�es : contactez le coordinateur des HOWTO � l'adresse
donn�e ci-dessous.
Pour r�sumer, nous souhaitons une diffusion aussi large que possible
de ces informations. N�anmoins, nous entendons garder la propri�t�
intellectuelle (copyright) des HOWTO, et appr�cierions d'�tre inform�s
de leur redistribution.
Pour toute question plus g�n�rale, merci de contacter le coordinateur
des HOWTO, Tim Bynum, � l'adresse �lectronique
tjbynum@wallybox.cei.net
.
- v0.1, 20 Janvier 1999 : premier jet au HHS, l� o� la configuration
a �t� d�velopp�e.
- v1.0, 30 Mars 1999 : premi�re version diffus�e, �crite partiellement
durant ma p�riode de stage chez ISM.
Dans cette configuration
les clients utilisent le syst�me de fichiers racine du serveur.
Ils y acc�dent bien s�r en lecture seule.
Quelques probl�mes apparaissent rapidement.
Chaque station a besoin de sa propre copie d'un certain nombre de r�pertoires
Une configuration linux doit avoir les acc�s en �criture
sur les r�pertoires suivants :
- /dev
- /var
- /tmp
Il y a trois solutions, l'une d'elles ne fonctionnant que pour /dev :
- utiliser (monter) un ramdisk et remplir celui-ci par
extraction d'une archive ou copie depuis un r�pertoire mod�le.
- avantages :
- nettoy� � chaque reboot (suppression des fichiers tmp et log).
Pas de maintenance.
- ne prend pas de place sur le serveur et ne g�n�re pas
de trafic r�seau. Il est donc plus rapide et utilise moins
de ressources c�t� serveur.
- inconv�nients :
- occupe de la m�moire
- les fichiers de log ne sont pas conserv�s.
Il faut configurer syslog pour rediriger les logs
sur le serveur si on tient vraiment � r�cup�rer les messages des clients.
- cr�er un r�pertoire pour chaque station sur le serveur
et le monter par NFS en lecture-�criture.
- avantages & inconv�nients :
- les arguments ci-dessus sont � prendre � l'envers
dans le cas des r�pertoires situ�s sur le serveur.
- � partir du noyau 2.2, on peut utiliser
le type devfs pour /dev (un syst�me de fichiers virtuel � la
mani�re de /proc).
- avantages:
- devfs prend tr�s peu de m�moire compar� � un ramdisk,
et pas du tout d'espace disque sur le serveur.
En plus il est tr�s rapide.
Un /dev normal occupe au moins 1,5 Mo dans la mesure
o� un fichier (un device) fait au minimum 1 ko,
et il y a environ 1200 fichiers. On peut bien entendu utiliser
un mod�le de /dev avec simplement les entr�es n�cessaires
pour �conomiser un peu de place : 1,5 Mo, �a fait beaucoup
pour un ramdisk et �a ne fait pas tr�s propre sur un serveur.
- devfs cr�e automatiquement des entr�es pour les devices
d�tect�s et ajout�s, donc pas besoin de maintenance.
- inconv�nients :
- tout changement sur /dev tel que cr�ation d'un lien
pour la souris ou le lecteur de cdrom est perdu.
Devfs fournit cependant un script nomm� rc.devfs
pour sauvegarder ces changements. Le script pr�sent dans ce HowTo
va alors automatiquement restaurer les liens symboliques nouvellement
positionn�s en appelant rc.devfs. Si on fait des changements
sur /dev, il faut donc appeler rc.devfs soi-m�me de cette fa�on :
/etc/rc.d/rc.devfs save /etc/sysconfig
Comme on peut le voir, il y a plusieurs moyens de r�soudre
ce probl�me d'acc�s en lecture-�criture.
Voici les options choisies pour le reste de ce Howto :
- pour /dev nous utiliserons devfs
- pour /var et /tmp, nous utiliserons un ramdisk de 1 Mo.
Celui-ci sera partag� pour utiliser la m�moire de mani�re efficace.
Pour r�aliser ce partage, /tmp sera en fait un lien symbolique sur /var/tmp.
- pour remplir ce ramdisk, une archive conviendra tout aussi bien
qu'un r�pertoire mod�le. Mais comme les modifications sont plus
ais�es avec le r�pertoire mod�le,
c'est cette derni�re solution qui sera retenue.
Un acc�s en �criture sur /home semble n�cessaire...
Mais ce n'est pas vraiment un probl�me puisque dans
toute configuration unix de type client/serveur,
/home est mont� en lecture-�criture depuis le serveur,
donc �a nous conviendra ;)
Comment une station r�cup�re son adresse IP de mani�re � pouvoir communiquer avec le serveur ?
Heureusement pour nous ce probleme a d�j� �t� r�solu
et le noyau a deux possibilit�s pour la configuration
automatique de l'adresse IP :
- RARP
- Bootp
RARP est le plus facile � configurer, bootp est le plus flexible.
Mais la plupart des bootroms supportent uniquement bootp,
donc nous utiliserons bootp.
Et la configuration sp�cifique � chaque station ?
Sur RedHat, la plupart des fichiers de configuration syst�me
sont d�j� situ�s sous /etc/sysconfig.
Nous d�placerons donc simplement ceux qui ne le sont pas encore
et ajouterons des liens symboliques.
Ensuite nous monterons un r�pertoire /etc/sysconfig par station.
C'est la seule partie qui est propre � la distribution utilis�e ici.
Avec une autre distribution, il suffira de cr�er un r�pertoire sysconfig,
d�placer tous les fichiers de configuration qui ne peuvent �tre partag�s,
et ajouter les liens n�cessaires.
De m�me, /etc/rc.d/rc3.d (ou l'�quivalent dans les autres distribs)
peut pr�senter des diff�rences entre le serveur et les stations.
Si on consid�re que toutes les stations lancent les m�mes services,
on cr�era simplement un rc3.d pour les stations et un pour le serveur :
- cr�er un /etc/rc.d/rc3.ws et un /etc/rc.d/rc3.server
- faire un lien de /etc/rc.d/rc3.d vers /etc/sysconfig/rc3.d
- faire un lien de /etc/sysconfig/rc3.d vers /etc/rc.d/rc3.xxx
- remplacer S99local dans rc3.ws par un lien vers /etc/sysconfig/rc.local pour que chaque station ait son propre rc.local
Divers probl�mes
- /etc/rc.d/rc.sysinit a besoin de /var, donc /var doit
�tre mont� ou cr�� avant que rc.sysinit ne soit ex�cut�.
Il serait �galement int�ressant que /etc/sysconfig (propre � chaque station)
soit mont� avant le lancement des scripts d'initialisation.
- pour cela nous appellerons un script d�s le d�but
de /etc/rc.d/rc.sysinit, aussi bien
sur le serveur que sur les stations ; ce script devra donc d�tecter
sur quelle machine il tourne pour ne rien faire dans le cas du serveur.
- /etc/mtab doit �tre accessible en �criture :
- il suffit de cr�er un lien vers /proc/mounts
et un fichier vide mounts dans /proc pour que fsck
et mount ne se plaignent pas pendant l'initialisation
(alors que /proc n'est pas encore mont�).
Il est � noter que smb(u)mount ne respecte pas le lien mtab
et va l'�craser. Donc si on utilise smb(u)mount,
il faut �crire un wrapper qui va restorer le lien.
Il faut pr�voir le n�cessaire pour supporter root sur nfs.
Voici les �tapes :
- Comme nous utilisons une RedHat 5.2 avec le noyau 2.2,
il faut s'assurer que notre distribution est pr�te pour ce noyau.
RedHat fournit un excellent HowTo � ce sujet.
- J'utilise le m�me noyau pour le serveur et les stations
pour �viter les conflits vu qu'ils partagent le m�me
r�pertoire /lib/modules. Si ce n'est pas possible
dans votre situation, produisez diff�rentes versions
en �ditant le num�ro de version au d�but du Makefile.
Ces num�ros diff�rents devraient �viter les confilts.
- En plus des options habituelles, le noyau devrait supporter :
- ext2 compil� dans le noyau (pour le serveur, ou bien pour les deux)
- NFS et root-over-NFS compil� (pour le client ou pour les deux) ;
pour avoir l'option root-over-NFS, il faut activer
ip-autoconfig dans les options r�seau. Nous utiliserons
bootp comme m�thode de configuration.
- networkcard compil� (pour le client ou les deux)
- devfs compil� (requis pour le client, �galement int�ressant
pour le serveur)
- tout ce que vous utilisez normalement,
les modules pour tous les p�riph�riques pr�sents sur le serveur
et les stations.
- Il faut �diter ensuite les sources du noyau pour
changer le montage root-over-NFS par d�faut :
/tftpboot/<ip>/root au lieu de /tftpboot/<ip>,
de fa�on � avoir une arborescence propre sous /tftpboot
avec un r�pertoire par station contenant son r�pertoire racine
(un lien vers la racine du serveur en fait) et ses r�pertoires sp�cifiques.
- En 2.0, c'est une ligne de DEFINE dans "include/linux/nfs_fs.h" appel�e
"NFS_ROOT"
- En 2.2, c'est un DEFINE dans "fs/nfs/nfsroot.c"
- Il reste � compiler le noyau comme d'habitude (cf Kernel-HowTo).
- Si vous n'avez pas encore de noeud /dev/nfsroot, cr�ez-le :
mknod /dev/nfsroot b 0 255
- Apr�s avoir compil� le noyau, changez la racine en tapant :
rdev <path-to-zImage>/zImage /dev/nfsroot
- Avant de booter avec devfs, vous devez modifier conf.modules :
ajoutez le contenu du fichier conf.modules de la documentation
de devfs au conf.modules du syst�me.
- Ce nouveau noyau est compil� avec la configuration
automatique de l'adresse IP, mais cela va �chouer lors du boot
du serveur puisque c'est lui-m�me qui donne les adresses IP.
Pour �viter une trop longue attente, ajouter :
append="ip=off" � la section linux de /etc/lilo.conf.
- relancez lilo et bootez sur le nouveau noyau.
- avec devfs, sur le serveur, vous allez perdre tous les liens
qui existaient. Sur RedHat, c'est
le plus souvent /dev/mouse et /dev/cdrom. Recr�ez-les.
Remettez �galement vos propri�t�s personnalis�es si vous avez
l'habitude d'avoir des particularit�s sur certaines entr�es
de /dev. Ensuite enregistrez ce param�trage de /dev (sous /etc/sysconfig
puisque c'est d�pendant du type de machine) ainsi :
- Copiez le fichier rc.devfs de la documentation devfs
des sources du noyau vers /etc/rc.d/rc.devfs
et rendez-le ex�cutable
- Sauvegardez les param�trages :
/etc/rc.d/rc.devfs save /etc/sysconfig
La partie automagique
Tout cela est pris en charge par le script ci-dessous.
Si on veut le faire manuellement, il suffit de suivre le script pas a pas.
Ce script effectue des actions un peu os�es telles que supprimer /tmp,
arr�ter temporairement syslog, d�monter /proc.
Donc assurez-vous d'abord que personne n'utilise la machine
pendant ce temps, et que X ne tourne pas. Il n'est pas
n�cessaire de changer de niveau d'ex�cution, si vous �tes s�r d'�tre
le seul connect� et sur une console en mode texte.
D�ni : ce script a �t� test� mais s'il provoque un plantage
du serveur, vous �tes seul responsable. Je ne prends aucune responsabilit�
quoi qu'il arrive. Je r�p�te que ce HowTo est fait pour des administrateurs
exp�riment�s. De plus ce script est fait pour �tre lanc� une fois
et une seule. Le lancer une seconde fois endommagera /etc/fstab,
/etc/X11/XF86Config, /etc/X11/X et /etc/conf.modules.
Ceci dit, copiez-collez ce script et rendez le ex�cutable,
puis ex�cutez-le.
#!/bin/sh
SERVER_NAME=`hostname -s`
###
echo creating /etc/rc.d/rc.ws
#this basicly just echos the entire script ;)
echo "#root on nfs stuff
SERVER=$SERVER_NAME
# on a besoin de proc pour mtab, route, etc.
mount -t proc /proc /proc
IP=\`ifconfig eth0|grep inet|cut --field 2 -d ':'|cut --field 1 -d ' '\`
# si le premier montage echoue, c'est qu'on est probablement
# sur le serveur, ou bien que quelque chose ne va pas.
# donc on ne fait la suite que si le premier montage est reussi
mount \$SERVER:/tftpboot/\$IP/sysconfig /etc/sysconfig -o nolock &&
{
# autres montages
mount \$SERVER:/home /home -o nolock
mount \$SERVER:/ /\$SERVER -o ro,nolock
# creation de /var
echo Creating /var ...
mke2fs -q -i 1024 /dev/ram1 1024
mount /dev/ram1 /var -o defaults,rw
cp -a /tftpboot/var /
# configuration reseau
. /etc/sysconfig/network
HOSTNAME=\`cat /etc/hosts|grep \$IP|cut --field 2\`
route add default gw \$GATEWAY
ifup lo
}
# restauration des p�riph�riques install�s
/etc/rc.d/rc.devfs restore /etc/sysconfig
umount /proc" > /etc/rc.d/rc.ws
###
echo splitting runlevel 3 for the client and server
mv /etc/rc.d/rc3.d /etc/rc.d/rc3.server
cp -a /etc/rc.d/rc3.server /etc/rc.d/rc3.ws
rm /etc/rc.d/rc3.ws/*network
rm /etc/rc.d/rc3.ws/*nfs
rm /etc/rc.d/rc3.ws/*nfsfs
rm /etc/rc.d/rc3.ws/S99local
ln -s /etc/sysconfig/rc.local /etc/rc.d/rc3.ws/S99local
ln -s /etc/rc.d/rc3.server /etc/sysconfig/rc3.d
ln -s /etc/sysconfig/rc3.d /etc/rc.d/rc3.d
###
echo making tmp a link to /var/tmp
rm -fR /tmp
ln -s var/tmp /tmp
###
echo moving various files around and create symlinks for them
echo mtab
/etc/rc.d/init.d/syslog stop
umount /proc
touch /proc/mounts
mount /proc
/etc/rc.d/init.d/syslog start
rm /etc/mtab
ln -s /proc/mounts /etc/mtab
echo fstab
mv /etc/fstab /etc/sysconfig
ln -s sysconfig/fstab /etc/fstab
echo X-config files
mkdir /etc/sysconfig/X11
mv /etc/X11/X /etc/sysconfig/X11
ln -s ../sysconfig/X11/X /etc/X11/X
mv /etc/X11/XF86Config /etc/sysconfig/X11
ln -s ../sysconfig/X11/XF86Config /etc/X11/XF86Config
echo conf.modules
mv /etc/conf.modules /etc/sysconfig
ln -s sysconfig/conf.modules /etc/conf.modules
echo isapnp.conf
mv /etc/isapnp.conf /etc/sysconfig
ln -s sysconfig/isapnp.conf /etc/isapnp.conf
###
echo creating a template dir for the ws directories
echo /tftpboot/template
mkdir /home/tftpboot
ln -s home/tftpboot /tftpboot
mkdir /tftpboot/template
mkdir /$SERVER_NAME
echo root
ln -s / /tftpboot/template/root
echo sysconfig
cp -a /etc/sysconfig /tftpboot/template/sysconfig
rm -fR /tftpboot/template/sysconfig/network-scripts
ln -s /$SERVER_NAME/etc/sysconfig/network-scripts \
/tftpboot/template/sysconfig/network-scripts
echo NETWORKING=yes > /tftpboot/template/sysconfig/network
echo `grep "GATEWAY=" /etc/sysconfig/network` >> /tftpboot/template/sysconfig/network
echo "/dev/nfsroot / nfs defaults 1 1" > /tftpboot/template/sysconfig/fstab
echo "none /proc proc defaults 0 0" >> /tftpboot/template/sysconfig/fstab
echo "#!/bin/sh" > /tftpboot/template/sysconfig/rc.local
chmod 755 /tftpboot/template/sysconfig/rc.local
rm /tftpboot/template/sysconfig/rc3.d
ln -s /etc/rc.d/rc3.ws /tftpboot/template/sysconfig/rc3.d
rm /tftpboot/template/sysconfig/isapnp.conf
echo var
cp -a /var /tftpboot/var
rm -fR /tftpboot/var/lib
ln -s /$SERVER_NAME/var/lib /tftpboot/var/lib
rm -fR /tftpboot/var/catman
ln -s /$SERVER_NAME/var/catman /tftpboot/var/catman
rm -fR /tftpboot/var/log/httpd
rm -f /tftpboot/var/log/samba/*
for i in `find /tftpboot/var/log -type f`; do cat /dev/null > $i; done
rm `find /tftpboot/var/lock -type f`
rm `find /tftpboot/var/run -type f`
echo /sbin/fsck.nfs
echo "#!/bin/sh
exit 0" > /sbin/fsck.nfs
chmod 755 /sbin/fsck.nfs
echo all done
Ajustements manuels
- Le script de configuration des stations
doit �tre ex�cut� au tout d�but de rc.sysinit,
donc il faut ajouter les lignes suivantes apr�s avoir d�fini le PATH :
# pour les stations montant root par NFS
/etc/rc.d/rc.ws
- R�duisez /etc/rc.d/rc3.ws � un minimum.
Il peut �tre utile de cr�er un rc.local.ws, � vous de voir.
R�seau et nfs sont d�ja configur�s. Voici d'ailleurs la liste
de ce qui a d�j� �t� enlev�/mis � jour par le script :
- r�seau
- syst�me de fichiers NFS
- NFS
- rc.local
Export des syst�mes de fichiers
Par exemple ici � l'Universit�, j'ajouterai ceci � /etc/exports :
/ *.st.hhs.nl(ro,no_root_squash)
/home *.st.hhs.nl(rw,no_root_squash)
Remplacez les noms de domaine par les v�tres et relancez NFS :
/etc/rc.d/init.d/nfs restart
Pour les utilisateurs de knfsd : il n'est pas possible
d'avoir plusieurs exports d'une partition avec des permissions
diff�rentes. De m�me, knfsd ne permet pas de changer de partition
(par exemple si un client monte /, et /usr est sur une autre partition,
le client n'aura pas acc�s � /usr).
Ainsi, si vous utilisez knfsd, il faudra qu'au moins /home soit sur une
partition diff�rente ; le script de pr�paration du serveur
a mis /tftpboot sous /home : il ne n�cessite pas une partition
suppl�mentaire. Si vous voulez acc�der � d'autres partitions
depuis vos clients, exportez les s�par�ment et ajoutez les lignes
de montage correspondantes dans /etc/rc.d/rc.ws.
Configurer bootp
- Si bootp n'est pas encore install�, c'est le moment de le faire.
Il est inclus dans la RedHat.
- Editez /etc/inetd.conf et supprimez le commentaire sur
la ligne commen�ant par bootp ; si vous utilisez une bootprom,
enlevez �galement le commentaire pour tftp.
- Red�marrez inetd :
/etc/rc.d/init.d/inetd restart
Cr�er un bootdisk
M�me si vous avez l'intention d'utiliser une bootprom,
il est plus sage de tester d'abord avec un bootdisk. Pour le cr�er :
dd if=/<path-to-zImage>/zImage of=/dev/fd0
Cr�er une bootprom
Il y a plusieurs paquets libres disponibles :
- netboot, c'est le plus complet. Il utilise les pilotes
(packet drivers) DOS standards donc presque toutes les cartes
sont support�es.
Un truc tr�s utile qui �tait pass� sur la mailing list :
compresser les packetdrivers, la plupart des pilotes
commerciaux �tant trop gros pour tenir dans une bootprom.
La documentation de netboot est assez compl�te : on ne la reprendra pas ici.
Avec elle, cr�er une bootprom et d�marrer une station devrait aller de soi.
La page web de netboot :
http://www.han.de/~gero/netboot/
- etherboot, l'autre package libre
Il propose quelques am�liorations comme le dhcp.
Mais il utilise son propre format de drivers donc supporte moins de cartes.
Je ne l'ai pas utilis� donc ne peux en dire plus.
La page web :
http://www.slug.org.au/etherboot/
A propos des roms : la plupart des cartes peuvent recevoir des eproms
de 28 pins. Celle-ci ont une taille maximale de 64 ko.
Pour la plupart des cartes,
on aura besoin de 32 ko avec netboot.
Quelques drivers tiendront dans une rom de 16 ko mais la diff�rence de prix
est minime.
Ces eproms sont standards (on y �crit avec un eprom burner
ordinaire).
Il suffit de recopier le r�pertoire qui sert de
mod�le (template) en tapant :
cd /tftpboot ; cp -a template <ip>
On peut aussi, bien s�r, recopier le r�pertoire
d'une station ayant la m�me souris, carte graphique et moniteur.
Dans ce cas la configuration r�alis�e � l'�tape 4.5 est inutile.
Editer /etc/bootptab et ajouter une entr�e pour une station de test, par
exemple :
nfsroot1:hd=/tftpboot:vm=auto:ip=10.0.0.237:\
:ht=ethernet:ha=00201889EE78:\
:bf=bootImage:rp=/tftpboot/10.0.0.237/root
Remplacer nfsroot1 par le nom d'h�te de la station.
Remplacer 10.0.0.237 par son adresse IP et 00201889EE78 par son adresse
MAC.
Si vous ne connaissez pas cette derni�re, d�marrez avec la disquette de boot
que vous venez de cr�er et vous la verrez appara�tre dans
les messages affich�s au boot.
Bootpd est certainement d�j� lanc�, mais pour en �tre s�r, essayons
de le red�marrer :
killall -HUP bootpd
Si cela �choue, c'est qu'il ne tournait pas. Dans ce cas inetd le
d�marrera au moment voulu.
D�marrez simplement la station depuis le bootdisk.
Vous devriez avoir ainsi une station en mode texte,
avec exactement la m�me configuration que le serveur
except�s l'adresse IP et les services lanc�s.
M�me si vous comptez utiliser une bootprom, il est plus sage de tester
d'abord avec un bootdisk.
- Premi�rement, lancez mouseconfig pour installer la souris.
Pour appliquer les changements, faites un :
/etc/rc.d/init.d restart
- Lancez Xconfigurator ; quand Xconfigurator a d�tect� la carte et que
vous pouvez cliquer sur ok, ne le faites pas !
Comme nous avons d�plac� le lien du serveur X de
/etc/X11/X vers /etc/sysconfig/X11/X,
Xconfigurator ne pourra pas cr�er le bon lien.
Ceci �tant, pour �tre s�r que Xconfigurator continue correctement, basculez
sur une autre console et cr�ez le lien sous /etc/sysconfig/X11 vers le
serveur X conseill�. Maintenant, quittez Xconfigurator et testez le serveur X.
- Configuration de tout ce qui diff�re du serveur ou du template :
- son : il sera peut-�tre n�cessaire de modifier isapnp.conf et
conf.modules, les deux �tant d�j� des liens vers
/etc/sysconfig (modification faite par le script de pr�pration du serveur).
- cdrom : lien sous /dev, entr�e dans /etc/fstab, etc.
- rc.local : faites tous les changements n�cessaires
- Sauvegarde des liens et autres changements effectu�s sous /dev :
/etc/rc.d/rc.devfs save /etc/sysconfig
- Voil�, c'est termin�.
La plupart des op�rations ci-dessus sont valables pour d�marrer depuis
un cdrom. Comme je voulais �galement documenter cette fa�on de booter,
je le pr�cise ici pour �viter de taper trop de choses une seconde fois.
Pourquoi d�marrer depuis un cdrom ?
C'est surtout int�ressant partout o� l'on veut faire tourner
une application sp�cifique comme un kiosque, une base de donn�es de
biblioth�que ou un cyber-caf�, et qu'on n'a pas de r�seau ou de serveur
pour utiliser root par NFS.
C'est simple : d�marrer avec un cdrom en tant que racine.
Pour que ce soit possible, nous utiliserons l'extension rockridge
pour graver un syst�me de fichiers unix et l'extension eltorito pour
rendre le cd amor�able.
Les choses ne peuvent �tre si simples...
Bien s�r cette configuration soul�ve quelques probl�mes.
Ils sont � peu pr�s les m�mes que pr�c�demment :
- Nous avons besoin d'acc�s en �criture sur : /dev, /var et /tmp.
- Nous utiliserons les m�mes solutions :
- pour /dev nous utiliserons Devfs
- pour /var et /tmp nous utiliserons un ramdisk partag� de 1 Mo.
/tmp est remplac� par un lien vers /var/tmp.
- le remplissage du ramdisk peut �tre fait aussi bien � partir
d'une archive que d'un r�pertoire template. Nous retiendrons l�
encore le r�pertoire template pour la simplicit� des modifications.
- Certaines applications ont besoin d'un acc�s � /home en �criture.
- Dans ce cas, on mettra le r�pertoire de l'utilisateur de ces
applications sous /var, et on finira de remplir /var � chaque boot.
- /etc/mtab doit �tre accessible en �criture :
- Cr�er un lien vers /proc/mounts et cr�er un fichier vide sous /proc,
comme d�crit pr�c�demment.
- Pour commencer, prenez une des machines que vous allez utiliser
et mettez dedans un gros disque et un graveur de cd.
- Installez la distribution de votre choix et laissez une
partition de 650 Mo pour le test. Cette installation servira �
cr�er l'image iso et � graver le cd, aussi il faut installer les outils
necessaires. Elle servira �galement � recommencer en cas de probl�me.
- Sur la partition de 650 Mo, installez la distribution de votre choix
avec la configuration que vous voudrez avoir sur le cd. Ce sera la
configuration de test.
- D�marrez sur la configuration de test.
- Compilez le noyau comme d�crit dans la section 3.1, en suivant toutes
les �tapes. Les modifications pour devfs doivent �tre faites ici aussi.
A l'�tape 3, ajoutez ce qui suit :
- isofs compil� dans le noyau
- devfs compil�
- support du cdrom compil�
- tout ce dont vous avez besoin, compil� ou en module
- Configuration de la partition de test :
- cr�er l'utilisateur qui lancera les applications
- mettre son r�pertoire sous /var
- installer l'application (si n�cessaire)
- configurer l'application si n�cessaire
- configurer l'utilisateur de telle fa�on que l'application
d�marre automatiquement apr�s le login
- configurer linux pour d�marrer une session en tant
que cet utilisateur
- configurer tout ce qui doit encore �tre configur�
- V�rifiez que la configuration d�marre correctement sous l'application
et que tout fonctionne bien.
- Red�marrez sur l'installation principale et montez la partition de
650 Mo sur /test.
- Mettez ce qui suit dans un fichier /test/etc/rc.d/rc.iso (il sera
ex�cut� au d�but de rc.sysinit pour cr�er /var) :
#/var
echo Creating /var ...
mke2fs -q -i 1024 /dev/ram1 1024
mount /dev/ram1 /var -o defaults,rw
cp -a /lib/var /
#restore devfs settings, needs proc
mount -t proc /proc /proc
/etc/rc.d/rc.devfs restore /etc/sysconfig
umount /proc
- Editez /test/etc/rc.sysinit en commentant les lignes o� / est
remont� en lecture-�criture et ajoutez les 2 lignes suivantes
apr�s l'initialisation de la variable PATH :
#to boot from cdrom
. /etc/rc.d/rc.iso
- Copiez ce qui suit dans un script et ex�cutez-le : cela va cr�er
un r�pertoire mod�le pour /var et des liens pour /tmp et /etc/mtab.
#!/bin/sh
echo tmp
rm -fR /test/tmp
ln -s var/tmp /test/tmp
###
echo mtab
touch /test/proc/mounts
rm /test/etc/mtab
ln -s /proc/mounts /test/etc/mtab
###
echo var
mv /test/var/lib /test/lib/var-lib
mv /test/var /test/lib
mkdir /test/var
ln -s /lib/var-lib /test/lib/var/lib
rm -fR /test/lib/var/catman
rm -fR /test/lib/var/log/httpd
rm -f /test/lib/var/log/samba/*
for i in `find /test/lib/var/log -type f`; do cat /dev/null > $i; done
rm `find /test/lib/var/lock -type f`
rm `find /test/lib/var/run -type f`
- Enlevez la cr�ation de /etc/issue* de /test/etc/rc.local (�a
planterait � coup s�r).
- Maintenant, d�marrez sur la partition de test : elle sera
en lecture seule comme un cdrom.
Si quelque chose ne fonctionne pas, red�marrez sur la partition de travail
et r�parez puis r�essayez. On peut aussi remonter / en lecture-�criture,
r�parer puis red�marrer directement sur la partition de test.
Pour remonter / :
mount -o remount,rw /
Cr�er une image de d�marrage (image de boot)
D'abord, d�marrer sur la partition de travail. Pour cr�er un cd
amor�able, nous aurons besoin d'une image d'une disquette de d�marrage.
Mais copier par dd une zimage ne suffit pas parce que,
au tout d�but du chargement de celle-ci, un pseudo lecteur de disquette est
cr�� et le chargeur du syst�me ne s'y retrouve plus dans le cas
d'un cd amor�able.
Donc nous utiliserons plut�t syslinux.
- r�cup�rer boot.img sur un cdrom redhat
- monter boot.img quelque part par loopback en tapant :
mount boot.img somewhere -o loop -t vfat
- enlever tout ce qui est dans boot.img sauf :
- copier le noyau de la partition de test vers boot.img
- editer syslinux.cfg pour ajouter ce qui suit, en rempla�ant zImage
par le nom d'image appropri� :
default linux
label linux
kernel zImage
append root=/dev/<insert your cdrom device here>
- d�monter boot.img :
umount somewhere
- Si /etc/mtab est un lien vers /proc/mounts, le d�montage
ne va pas automatiquement lib�rer /dev/loop0 donc il faut le lib�rer en
tapant :
losetup -d /dev/loop0
Cr�er l'image iso
Maintenant que nous avons l'image de boot et une installation qui peut
d�marrer sur un montage en lecture seule, il est temps de cr�er une image
iso du cd :
- copier boot.img sur /test
- aller dans le r�pertoire ou vous voulez stocker l'image (en prenant
garde qu'il y ait assez de place sur la partition)
- g�n�rer l'image :
mkisofs -R -b boot.img -c boot.catalog -o boot.iso /test
V�rifier l'image iso
- monter l'image en loopback en tapant :
mount boot.iso somewhere -o loop -t iso9660
- v�rifier que le contenu est correct
- d�monter boot.iso :
umount somewhere
- si /etc/mtab est un lien sur /proc/mounts, lib�rer /dev/loop0 :
losetup -d /dev/loop0
Graver le cd
Si cdrecord est install� et configur� :
cdrecord -v speed=<desired writing speed> dev=<path to your writers
generic scsi device> boot.iso
H� bien le titre de ce paragraphe a tout dit ! ;)
- La HHS (Haagse Hoge School), l'�tablissement o� j'ai d�velopp�
et test� cette configuration : elle �tait utilis�e dans plusieurs labos.
C'est �galement l� que j'ai �cris la premi�re version de ce HowTo.
- ISM : une soci�t� n�erlandaise o� j'ai r�alis� mon projet
de fin d'�tudes. Une partie de ce projet concernait des machines
sans disque, j'ai donc d� pousser un peu plus loin le d�veloppement
de cette configuration et j'ai eu le temps de mettre � jour ce HowTo.
- A tout ceux qui me donneront des conseils utiles une fois que cette
version sera sortie ;)
Commentaires, suggestions et autres sont les bienvenus et peuvent �tre
adress�s � Hans de Goede : j.w.r.degoede@et.tudelft.nl