
                       NFS-Root client et serveur HowTo

Hans de Goede <hans@highrise.nl>

   v1.0 30 Mars 1999
     _________________________________________________________________

   _Ce document dcrit l'installation et la configuration d'un serveur
   pour que ses clients puissent dmarrer et fonctionner sans disque (par
   montage NFS de root). _
     _________________________________________________________________

1. Introduction

   Ce Howto est galement disponible  l'adresse -
   http://x.mame.net/hans. Il dcrit un exemple de configuration o root
   est mont en NFS, mais il diffre des autres NFS-root HowTo sur deux
   points :

    1. Il propose  la fois l'aspect serveur et l'aspect client, offrant
       une solution complte ; il ne dcrit pas les principes de base du
       montage de root via NFS mais plutt un exemple de configuration
       qui fonctionne.
    2. La configuration dcrite est particulire dans la mesure o c'est
       l'arborescence root du serveur qui est partage avec les stations
       (workstations, ws), tandis qu'habituellement, on a plutt un
       mini-root par station. Ceci a quelques avantages :
          + occupe un faible espace disque
          + tous les changements sur le serveur sont automatiquement
            disponibles ct client (la configuration n'est faite qu'une
            fois)
          + facilite l'ajout de nouveaux clients
          + un seul systme  maintenir.

   Ce document est bas sur un systme RedHat 5.2. On suppose que le
   lecteur de ce HowTo a suffisamment d'exprience en administration
   systme linux ; l'adaptation de cette solution  une autre
   distribution ne devrait donc pas poser de problme.

1.1 Copyright

   Ce HOWTO est  Hans de Goede, 1999.

   Sauf indication contraire, les droits d'auteur des HOWTO Linux sont
   dtenus par leurs auteurs respectifs. Les HOWTO Linux peuvent tre
   reproduits et distribus, en totalit ou en partie, sur tout mdia
   physique ou lectronique dans la mesure o ce copyright est prserv
   dans chaque copie. La distribution commerciale en est autorise et
   encourage. L'auteur apprcierait toutefois qu'on lui notifie
   individuellement ce genre de distribution.

   Le prsent copyright doit couvrir toute traduction, compilation et
   autre travail driv des HOWTO Linux. C'est--dire qu'il est interdit
   d'imposer des restrictions de diffusion allant au del du prsent
   copyright  des ouvrages inspirs, ou incorporant des passages, de
   HOWTO Linux. Sous certaines conditions, des exceptions  ces rgles
   seront tolres : contactez le coordinateur des HOWTO  l'adresse
   donne ci-dessous.

   Pour rsumer, nous souhaitons une diffusion aussi large que possible
   de ces informations. Nanmoins, nous entendons garder la proprit
   intellectuelle (copyright) des HOWTO, et apprcierions d'tre informs
   de leur redistribution.

   Pour toute question plus gnrale, merci de contacter le coordinateur
   des HOWTO, Tim Bynum,  l'adresse lectronique
   tjbynum@wallybox.cei.net.

1.2 Historique

     * v0.1, 20 Janvier 1999 : premier jet au HHS, l o la configuration
       a t dveloppe.
     * v1.0, 30 Mars 1999 : premire version diffuse, crite
       partiellement durant ma priode de stage chez ISM.

2. Principes de base

   Dans cette configuration les clients utilisent le systme de fichiers
   racine du serveur. Ils y accdent bien sr en lecture seule.

2.1 Les choses ne peuvent pas tre aussi simples...

   Quelques problmes apparaissent rapidement.

  Chaque station a besoin de sa propre copie d'un certain nombre de rpertoires

   Une configuration linux doit avoir les accs en criture sur les
   rpertoires suivants :

    1. /dev
    2. /var
    3. /tmp

   Il y a trois solutions, l'une d'elles ne fonctionnant que pour /dev :

    1. utiliser (monter) un ramdisk et remplir celui-ci par extraction
       d'une archive ou copie depuis un rpertoire modle.
          + avantages :
              1. nettoy  chaque reboot (suppression des fichiers tmp et
                 log). Pas de maintenance.
              2. ne prend pas de place sur le serveur et ne gnre pas de
                 trafic rseau. Il est donc plus rapide et utilise moins
                 de ressources ct serveur.
          + inconvnients :
              1. occupe de la mmoire
              2. les fichiers de log ne sont pas conservs. Il faut
                 configurer syslog pour rediriger les logs sur le serveur
                 si on tient vraiment  rcuprer les messages des
                 clients.
    2. crer un rpertoire pour chaque station sur le serveur et le
       monter par NFS en lecture-criture.
          + avantages & inconvnients :
              1. les arguments ci-dessus sont  prendre  l'envers dans
                 le cas des rpertoires situs sur le serveur.
    3.  partir du noyau 2.2, on peut utiliser le type devfs pour /dev
       (un systme de fichiers virtuel  la manire de /proc).
          + avantages:
              1. devfs prend trs peu de mmoire compar  un ramdisk, et
                 pas du tout d'espace disque sur le serveur. En plus il
                 est trs 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 modle de /dev avec simplement
                 les entres ncessaires pour conomiser un peu de place
                 : 1,5 Mo, a fait beaucoup pour un ramdisk et a ne fait
                 pas trs propre sur un serveur.
              2. devfs cre automatiquement des entres pour les devices
                 dtects et ajouts, donc pas besoin de maintenance.
          + inconvnients :
              1. tout changement sur /dev tel que cration 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 prsent dans ce
                 HowTo va alors automatiquement restaurer les liens
                 symboliques nouvellement positionns en appelant
                 rc.devfs. Si on fait des changements sur /dev, il faut
                 donc appeler rc.devfs soi-mme de cette faon :

     /etc/rc.d/rc.devfs save /etc/sysconfig

   Comme on peut le voir, il y a plusieurs moyens de rsoudre ce problme
   d'accs 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 mmoire de manire efficace. Pour
       raliser ce partage, /tmp sera en fait un lien symbolique sur
       /var/tmp.
     * pour remplir ce ramdisk, une archive conviendra tout aussi bien
       qu'un rpertoire modle. Mais comme les modifications sont plus
       aises avec le rpertoire modle, c'est cette dernire solution
       qui sera retenue.

  Un accs en criture sur /home semble ncessaire...

   Mais ce n'est pas vraiment un problme 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 rcupre son adresse IP de manire  pouvoir communiquer
  avec le serveur ?

   Heureusement pour nous ce probleme a dj t rsolu et le noyau a
   deux possibilits pour la configuration automatique de l'adresse IP :

    1. RARP
    2. 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 spcifique  chaque station ?

   Sur RedHat, la plupart des fichiers de configuration systme sont dj
   situs sous /etc/sysconfig. Nous dplacerons donc simplement ceux qui
   ne le sont pas encore et ajouterons des liens symboliques. Ensuite
   nous monterons un rpertoire /etc/sysconfig par station. C'est la
   seule partie qui est propre  la distribution utilise ici. Avec une
   autre distribution, il suffira de crer un rpertoire sysconfig,
   dplacer tous les fichiers de configuration qui ne peuvent tre
   partags, et ajouter les liens ncessaires. De mme, /etc/rc.d/rc3.d
   (ou l'quivalent dans les autres distribs) peut prsenter des
   diffrences entre le serveur et les stations. Si on considre que
   toutes les stations lancent les mmes services, on crera simplement
   un rc3.d pour les stations et un pour le serveur :

    1. crer un /etc/rc.d/rc3.ws et un /etc/rc.d/rc3.server
    2. faire un lien de /etc/rc.d/rc3.d vers /etc/sysconfig/rc3.d
    3. faire un lien de /etc/sysconfig/rc3.d vers /etc/rc.d/rc3.xxx
    4. remplacer S99local dans rc3.ws par un lien vers
       /etc/sysconfig/rc.local pour que chaque station ait son propre
       rc.local

  Divers problmes

    1. /etc/rc.d/rc.sysinit a besoin de /var, donc /var doit tre mont
       ou cr avant que rc.sysinit ne soit excut. Il serait galement
       intressant que /etc/sysconfig (propre  chaque station) soit
       mont avant le lancement des scripts d'initialisation.
          + pour cela nous appellerons un script ds le dbut de
            /etc/rc.d/rc.sysinit, aussi bien sur le serveur que sur les
            stations ; ce script devra donc dtecter sur quelle machine
            il tourne pour ne rien faire dans le cas du serveur.
    2. /etc/mtab doit tre accessible en criture :
          + il suffit de crer 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.

3. Prparation du serveur

3.1 Compiler un noyau

   Il faut prvoir le ncessaire pour supporter root sur nfs. Voici les
   tapes :

    1. Comme nous utilisons une RedHat 5.2 avec le noyau 2.2, il faut
       s'assurer que notre distribution est prte pour ce noyau. RedHat
       fournit un excellent HowTo  ce sujet.
    2. J'utilise le mme noyau pour le serveur et les stations pour
       viter les conflits vu qu'ils partagent le mme rpertoire
       /lib/modules. Si ce n'est pas possible dans votre situation,
       produisez diffrentes versions en ditant le numro de version au
       dbut du Makefile. Ces numros diffrents devraient viter les
       confilts.
    3. 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 rseau. Nous utiliserons bootp
            comme mthode de configuration.
          + networkcard compil (pour le client ou les deux)
          + devfs compil (requis pour le client, galement intressant
            pour le serveur)
          + tout ce que vous utilisez normalement, les modules pour tous
            les priphriques prsents sur le serveur et les stations.
    4. Il faut diter ensuite les sources du noyau pour changer le
       montage root-over-NFS par dfaut : /tftpboot/<ip>/root au lieu de
       /tftpboot/<ip>, de faon  avoir une arborescence propre sous
       /tftpboot avec un rpertoire par station contenant son rpertoire
       racine (un lien vers la racine du serveur en fait) et ses
       rpertoires spcifiques.
          + En 2.0, c'est une ligne de DEFINE dans
            "include/linux/nfs_fs.h" appele "NFS_ROOT"
          + En 2.2, c'est un DEFINE dans "fs/nfs/nfsroot.c"
    5. Il reste  compiler le noyau comme d'habitude (cf Kernel-HowTo).
    6. Si vous n'avez pas encore de noeud /dev/nfsroot, crez-le :

     mknod /dev/nfsroot b 0 255
    7. Aprs avoir compil le noyau, changez la racine en tapant :

     rdev <path-to-zImage>/zImage /dev/nfsroot
    8. 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 systme.
    9. 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-mme qui donne les adresses IP. Pour viter une trop
       longue attente, ajouter : append="ip=off"  la section linux de
       /etc/lilo.conf.
   10. relancez lilo et bootez sur le nouveau noyau.
   11. 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. Recrez-les. Remettez galement vos proprits
       personnalises si vous avez l'habitude d'avoir des particularits
       sur certaines entres de /dev. Ensuite enregistrez ce paramtrage
       de /dev (sous /etc/sysconfig puisque c'est dpendant 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
            excutable
          + Sauvegardez les paramtrages :

     /etc/rc.d/rc.devfs save /etc/sysconfig

3.2 Cration et remplissage de /tftpboot, cration des liens vers /tmp etc.

  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 oses telles que supprimer /tmp,
   arrter temporairement syslog, dmonter /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 ncessaire de changer de niveau
   d'excution, si vous tes sr d'tre le seul connect et sur une
   console en mode texte.

   Dni : 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 rpte que ce HowTo est fait pour
   des administrateurs expriments. 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 excutable, puis
   excutez-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 priphriques installs
/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/n
etwork
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

    1. Le script de configuration des stations doit tre excut au tout
       dbut de rc.sysinit, donc il faut ajouter les lignes suivantes
       aprs avoir dfini le PATH :
         _____________________________________________________________

# pour les stations montant root par NFS
/etc/rc.d/rc.ws
         _____________________________________________________________

    2. Rduisez /etc/rc.d/rc3.ws  un minimum. Il peut tre utile de
       crer un rc.local.ws,  vous de voir. Rseau et nfs sont dja
       configurs. Voici d'ailleurs la liste de ce qui a dj t
       enlev/mis  jour par le script :
          + rseau
          + systme de fichiers NFS
          + NFS
          + rc.local

3.3 Export des systmes de fichiers appropris et configuration de bootp

  Export des systmes 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 vtres 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 diffrentes. De
   mme, 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 accs  /usr). Ainsi, si vous utilisez knfsd, il faudra qu'au
   moins /home soit sur une partition diffrente ; le script de
   prparation du serveur a mis /tftpboot sous /home : il ne ncessite
   pas une partition supplmentaire. Si vous voulez accder  d'autres
   partitions depuis vos clients, exportez les sparment et ajoutez les
   lignes de montage correspondantes dans /etc/rc.d/rc.ws.

  Configurer bootp

    1. Si bootp n'est pas encore install, c'est le moment de le faire.
       Il est inclus dans la RedHat.
    2. Editez /etc/inetd.conf et supprimez le commentaire sur la ligne
       commenant par bootp ; si vous utilisez une bootprom, enlevez
       galement le commentaire pour tftp.
    3. Redmarrez inetd :

     /etc/rc.d/init.d/inetd restart

4. Ajouter des stations

4.1 Crer une disquette de dmarrage (bootdisk) ou une bootprom

  Crer un bootdisk

   Mme si vous avez l'intention d'utiliser une bootprom, il est plus
   sage de tester d'abord avec un bootdisk. Pour le crer :

     dd if=/<path-to-zImage>/zImage of=/dev/fd0

  Crer une bootprom

   Il y a plusieurs paquets libres disponibles :

    1. netboot, c'est le plus complet. Il utilise les pilotes (packet
       drivers) DOS standards donc presque toutes les cartes sont
       supportes. Un truc trs 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 complte : on ne la reprendra pas ici. Avec
       elle, crer une bootprom et dmarrer une station devrait aller de
       soi. La page web de netboot : http://www.han.de/~gero/netboot/
    2. etherboot, l'autre package libre Il propose quelques amliorations
       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 diffrence de prix est minime.
   Ces eproms sont standards (on y crit avec un _eprom burner_
   ordinaire).

4.2 Crer un rpertoire station

   Il suffit de recopier le rpertoire qui sert de modle (template) en
   tapant :

     cd /tftpboot ; cp -a template <ip>

   On peut aussi, bien sr, recopier le rpertoire d'une station ayant la
   mme souris, carte graphique et moniteur. Dans ce cas la configuration
   ralise  l'tape 4.5 est inutile.

4.3 Ajouter les entres dans /etc/bootptab et /etc/hosts

   Editer /etc/bootptab et ajouter une entre 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'hte de la station. Remplacer
   10.0.0.237 par son adresse IP et 00201889EE78 par son adresse MAC. Si
   vous ne connaissez pas cette dernire, dmarrez avec la disquette de
   boot que vous venez de crer et vous la verrez apparatre dans les
   messages affichs au boot. Bootpd est certainement dj lanc, mais
   pour en tre sr, essayons de le redmarrer :

     killall -HUP bootpd

   Si cela choue, c'est qu'il ne tournait pas. Dans ce cas inetd le
   dmarrera au moment voulu.

4.4 Dmarrer la station pour la premire fois

   Dmarrez simplement la station depuis le bootdisk. Vous devriez avoir
   ainsi une station en mode texte, avec exactement la mme configuration
   que le serveur excepts l'adresse IP et les services lancs. Mme si
   vous comptez utiliser une bootprom, il est plus sage de tester d'abord
   avec un bootdisk.

4.5 Configuration spcifique  la station

    1. Premirement, lancez mouseconfig pour installer la souris. Pour
       appliquer les changements, faites un :

     /etc/rc.d/init.d restart
    2. Lancez Xconfigurator ; quand Xconfigurator a dtect la carte et
       que vous pouvez cliquer sur ok, ne le faites pas ! Comme nous
       avons dplac le lien du serveur X de /etc/X11/X vers
       /etc/sysconfig/X11/X, Xconfigurator ne pourra pas crer le bon
       lien. Ceci tant, pour tre sr que Xconfigurator continue
       correctement, basculez sur une autre console et crez le lien sous
       /etc/sysconfig/X11 vers le serveur X conseill. Maintenant,
       quittez Xconfigurator et testez le serveur X.
    3. Configuration de tout ce qui diffre du serveur ou du template :
          + son : il sera peut-tre ncessaire de modifier isapnp.conf et
            conf.modules, les deux tant dj des liens vers
            /etc/sysconfig (modification faite par le script de
            prpration du serveur).
          + cdrom : lien sous /dev, entre dans /etc/fstab, etc.
          + rc.local : faites tous les changements ncessaires
    4. Sauvegarde des liens et autres changements effectus sous /dev :

     /etc/rc.d/rc.devfs save /etc/sysconfig
    5. Voil, c'est termin.

5. Bonus : dmarrer depuis un cdrom

   La plupart des oprations ci-dessus sont valables pour dmarrer depuis
   un cdrom. Comme je voulais galement documenter cette faon de booter,
   je le prcise ici pour viter de taper trop de choses une seconde
   fois.

   Pourquoi dmarrer depuis un cdrom ? C'est surtout intressant partout
   o l'on veut faire tourner une application spcifique comme un
   kiosque, une base de donnes de bibliothque ou un cyber-caf, et
   qu'on n'a pas de rseau ou de serveur pour utiliser root par NFS.

5.1 Principe de base

   C'est simple : dmarrer avec un cdrom en tant que racine. Pour que ce
   soit possible, nous utiliserons l'extension rockridge pour graver un
   systme de fichiers unix et l'extension eltorito pour rendre le cd
   amorable.

  Les choses ne peuvent tre si simples...

   Bien sr cette configuration soulve quelques problmes. Ils sont 
   peu prs les mmes que prcdemment :

    1. Nous avons besoin d'accs en criture sur : /dev, /var et /tmp.
          + Nous utiliserons les mmes solutions :
               o pour /dev nous utiliserons Devfs
               o pour /var et /tmp nous utiliserons un ramdisk partag de
                 1 Mo. /tmp est remplac par un lien vers /var/tmp.
               o le remplissage du ramdisk peut tre fait aussi bien 
                 partir d'une archive que d'un rpertoire template. Nous
                 retiendrons l encore le rpertoire template pour la
                 simplicit des modifications.
    2. Certaines applications ont besoin d'un accs  /home en criture.
          + Dans ce cas, on mettra le rpertoire de l'utilisateur de ces
            applications sous /var, et on finira de remplir /var  chaque
            boot.
    3. /etc/mtab doit tre accessible en criture :
          + Crer un lien vers /proc/mounts et crer un fichier vide sous
            /proc, comme dcrit prcdemment.

5.2 Crer une configuration de test

    1. Pour commencer, prenez une des machines que vous allez utiliser et
       mettez dedans un gros disque et un graveur de cd.
    2. Installez la distribution de votre choix et laissez une partition
       de 650 Mo pour le test. Cette installation servira  crer l'image
       iso et  graver le cd, aussi il faut installer les outils
       necessaires. Elle servira galement  recommencer en cas de
       problme.
    3. 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.
    4. Dmarrez sur la configuration de test.
    5. Compilez le noyau comme dcrit 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
    6. Configuration de la partition de test :
          + crer l'utilisateur qui lancera les applications
          + mettre son rpertoire sous /var
          + installer l'application (si ncessaire)
          + configurer l'application si ncessaire
          + configurer l'utilisateur de telle faon que l'application
            dmarre automatiquement aprs le login
          + configurer linux pour dmarrer une session en tant que cet
            utilisateur
          + configurer tout ce qui doit encore tre configur
    7. Vrifiez que la configuration dmarre correctement sous
       l'application et que tout fonctionne bien.
    8. Redmarrez sur l'installation principale et montez la partition de
       650 Mo sur /test.
    9. Mettez ce qui suit dans un fichier /test/etc/rc.d/rc.iso (il sera
       excut au dbut de rc.sysinit pour crer /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
         _____________________________________________________________

   10. Editez /test/etc/rc.sysinit en commentant les lignes o / est
       remont en lecture-criture et ajoutez les 2 lignes suivantes
       aprs l'initialisation de la variable PATH :
         _____________________________________________________________

#to boot from cdrom
. /etc/rc.d/rc.iso
         _____________________________________________________________

   11. Copiez ce qui suit dans un script et excutez-le : cela va crer
       un rpertoire modle 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`

         _____________________________________________________________

   12. Enlevez la cration de /etc/issue* de /test/etc/rc.local (a
       planterait  coup sr).
   13. Maintenant, dmarrez sur la partition de test : elle sera en
       lecture seule comme un cdrom. Si quelque chose ne fonctionne pas,
       redmarrez sur la partition de travail et rparez puis ressayez.
       On peut aussi remonter / en lecture-criture, rparer puis
       redmarrer directement sur la partition de test. Pour remonter / :

     mount -o remount,rw /

5.3 Crer le cd

  Crer une image de dmarrage (image de boot)

   D'abord, dmarrer sur la partition de travail. Pour crer un cd
   amorable, nous aurons besoin d'une image d'une disquette de
   dmarrage. Mais copier par dd une _zimage_ ne suffit pas parce que, au
   tout dbut du chargement de celle-ci, un pseudo lecteur de disquette
   est cr et le chargeur du systme ne s'y retrouve plus dans le cas
   d'un cd amorable. Donc nous utiliserons plutt syslinux.

    1. rcuprer boot.img sur un cdrom redhat
    2. monter boot.img quelque part par loopback en tapant :

     mount boot.img somewhere -o loop -t vfat
    3. enlever tout ce qui est dans boot.img sauf :
          + ldlinux.sys
          + syslinux.cfg
    4. copier le noyau de la partition de test vers boot.img
    5. editer syslinux.cfg pour ajouter ce qui suit, en remplaant zImage
       par le nom d'image appropri :
         _____________________________________________________________

default linux

label linux
kernel zImage
append root=/dev/<insert your cdrom device here>
         _____________________________________________________________

    6. dmonter boot.img :

     umount somewhere
    7. Si /etc/mtab est un lien vers /proc/mounts, le dmontage ne va pas
       automatiquement librer /dev/loop0 donc il faut le librer en
       tapant :

     losetup -d /dev/loop0

  Crer l'image iso

   Maintenant que nous avons l'image de boot et une installation qui peut
   dmarrer sur un montage en lecture seule, il est temps de crer une
   image iso du cd :

    1. copier boot.img sur /test
    2. aller dans le rpertoire ou vous voulez stocker l'image (en
       prenant garde qu'il y ait assez de place sur la partition)
    3. gnrer l'image :

     mkisofs -R -b boot.img -c boot.catalog -o boot.iso /test

  Vrifier l'image iso

    1. monter l'image en loopback en tapant :

     mount boot.iso somewhere -o loop -t iso9660
    2. vrifier que le contenu est correct
    3. dmonter boot.iso :

     umount somewhere
    4. si /etc/mtab est un lien sur /proc/mounts, librer /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

5.4 Dmarrer sur le cd et le tester

   H bien le titre de ce paragraphe a tout dit ! ;)

6. Remerciements

     * La HHS (Haagse Hoge School), l'tablissement o j'ai dvelopp et
       test cette configuration : elle tait utilise dans plusieurs
       labos. C'est galement l que j'ai cris la premire version de ce
       HowTo.
     * ISM : une socit nerlandaise o j'ai ralis 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 dveloppement 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 ;)

7. Commentaires

   Commentaires, suggestions et autres sont les bienvenus et peuvent tre
   adresss  Hans de Goede : j.w.r.degoede@et.tudelft.nl
