  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).

  ______________________________________________________________________

  Table des matires


  1. Introduction
     1.1 Copyright
     1.2 Historique

  2. Principes de base
     2.1 Les choses ne peuvent pas tre aussi simples...
        2.1.1 Chaque station a besoin de sa propre copie d'un certain nombre de rpertoires
        2.1.2 Un accs en criture sur /home semble ncessaire...
        2.1.3 Comment une station rcupre son adresse IP de manire  pouvoir communiquer avec le serveur ?
        2.1.4 Et la configuration spcifique  chaque station ?
        2.1.5 Divers problmes

  3. Prparation du serveur
     3.1 Compiler un noyau
     3.2 Cration et remplissage de /tftpboot, cration des liens vers /tmp etc.
        3.2.1 La partie automagique
        3.2.2 Ajustements manuels
     3.3 Export des systmes de fichiers appropris et configuration de bootp
        3.3.1 Export des systmes de fichiers
        3.3.2 Configurer bootp

  4. Ajouter des stations
     4.1 Crer une disquette de dmarrage (bootdisk) ou une bootprom
        4.1.1 Crer un bootdisk
        4.1.2 Crer une bootprom
     4.2 Crer un rpertoire station
     4.3 Ajouter les entres dans /etc/bootptab et /etc/hosts
     4.4 Dmarrer la station pour la premire fois
     4.5 Configuration spcifique  la station

  5. Bonus : dmarrer depuis un cdrom
     5.1 Principe de base
        5.1.1 Les choses ne peuvent tre si simples...
     5.2 Crer une configuration de test
     5.3 Crer le cd
        5.3.1 Crer une image de dmarrage (image de boot)
        5.3.2 Crer l'image iso
        5.3.3 Vrifier l'image iso
        5.3.4 Graver le cd
     5.4 Dmarrer sur le cd et le tester

  6. Remerciements
  7. Commentaires


  ______________________________________________________________________

  11..  IInnttrroodduuccttiioonn

  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..11..  CCooppyyrriigghhtt

  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1..22..  HHiissttoorriiqquuee


    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2..  PPrriinncciippeess ddee bbaassee

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

  22..11..  LLeess cchhoosseess nnee ppeeuuvveenntt ppaass ttrree aauussssii ssiimmpplleess......

  Quelques problmes apparaissent rapidement.

  22..11..11..  CChhaaqquuee ssttaattiioonn aa bbeessooiinn ddee ssaa pprroopprree ccooppiiee dd''uunn cceerrttaaiinn nnoommbbrree
  ddee rrppeerrttooiirreess

  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 :

        a. nettoy  chaque reboot (suppression des fichiers tmp et
           log).  Pas de maintenance.

        b. 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 :

        a. occupe de la mmoire

        b. 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 :

        a. 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:

        a. 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 _d_e_v_i_c_e) 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.
        b. devfs cre automatiquement des entres pour les devices
           dtects et ajouts, donc pas besoin de maintenance.

       inconvnients :

        a. 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.

  22..11..22..  UUnn aaccccss eenn ccrriittuurree ssuurr //hhoommee sseemmbbllee nncceessssaaiirree......

  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 ;)

  22..11..33..  CCoommmmeenntt uunnee ssttaattiioonn rrccuupprree ssoonn aaddrreessssee IIPP ddee mmaanniirree  ppoouu
  vvooiirr ccoommmmuunniiqquueerr aavveecc llee sseerrvveeuurr ??

  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.

  22..11..44..  EEtt llaa ccoonnffiigguurraattiioonn ssppcciiffiiqquuee  cchhaaqquuee ssttaattiioonn ??

  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

  22..11..55..  DDiivveerrss pprroobbllmmeess



  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3..  PPrrppaarraattiioonn dduu sseerrvveeuurr


  33..11..  CCoommppiilleerr uunn nnooyyaauu

  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3..22..  CCrraattiioonn eett rreemmpplliissssaaggee ddee //ttffttppbboooott,, ccrraattiioonn ddeess lliieennss vveerrss
  //ttmmpp eettcc..


  33..22..11..  LLaa ppaarrttiiee aauuttoommaaggiiqquuee

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

  ______________________________________________________________________



  33..22..22..  AAjjuusstteemmeennttss mmaannuueellss



  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..33..  EExxppoorrtt ddeess ssyyssttmmeess ddee ffiicchhiieerrss aapppprroopprriiss eett ccoonnffiigguurraattiioonn ddee
  bboooottpp


  33..33..11..  EExxppoorrtt ddeess ssyyssttmmeess ddee ffiicchhiieerrss

  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.



  33..33..22..  CCoonnffiigguurreerr bboooottpp


  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4..  AAjjoouutteerr ddeess ssttaattiioonnss


  44..11..  CCrreerr uunnee ddiissqquueettttee ddee ddmmaarrrraaggee ((bboooottddiisskk)) oouu uunnee bboooottpprroomm


  44..11..11..  CCrreerr uunn bboooottddiisskk

  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


  44..11..22..  CCrreerr uunnee bboooottpprroomm

  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 :

  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 :

  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 _e_p_r_o_m _b_u_r_n_e_r
  ordinaire).

  44..22..  CCrreerr uunn rrppeerrttooiirree ssttaattiioonn

  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4..33..  AAjjoouutteerr lleess eennttrreess ddaannss //eettcc//bboooottppttaabb eett //eettcc//hhoossttss

  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..44..  DDmmaarrrreerr llaa ssttaattiioonn ppoouurr llaa pprreemmiirree ffooiiss

  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4..55..  CCoonnffiigguurraattiioonn ssppcciiffiiqquuee  llaa ssttaattiioonn



  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5..  BBoonnuuss :: ddmmaarrrreerr ddeeppuuiiss uunn ccddrroomm

  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5..11..  PPrriinncciippee ddee bbaassee

  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.

  55..11..11..  LLeess cchhoosseess nnee ppeeuuvveenntt ttrree ssii ssiimmpplleess......

  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 :

          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 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5..22..  CCrreerr uunnee ccoonnffiigguurraattiioonn ddee tteesstt



  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5..33..  CCrreerr llee ccdd

  55..33..11..  CCrreerr uunnee iimmaaggee ddee ddmmaarrrraaggee ((iimmaaggee ddee bboooott))

  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 _z_i_m_a_g_e 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



  55..33..22..  CCrreerr ll''iimmaaggee iissoo

  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


  55..33..33..  VVrriiffiieerr ll''iimmaaggee iissoo


  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


  55..33..44..  GGrraavveerr llee ccdd

  Si cdrecord est install et configur :


       cdrecord -v speed=<desired writing speed> dev=<path to your
       writers generic scsi device> boot.iso


  55..44..  DDmmaarrrreerr ssuurr llee ccdd eett llee tteesstteerr

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

  66..  RReemmeerrcciieemmeennttss


    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7..  CCoommmmeennttaaiirreess

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



