<?xml version="1.0"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<book lang="fr">
  <title>Installation : Diskless, LTSP et OpenMosix</title>

  <bookinfo>
    <title>Cr&#xE9;ation d'un serveur de &#xAB;Terminaux X&#xBB; avec Gentoo</title>
   <copyright>
      <year>2004</year>
      <year>2006</year>
      <holder>Steeve Maltais</holder>
      <holder>Levinux</holder>
   </copyright>
   <legalnotice>
   <title>Licence</title>
   Permission est accord&#xE9;e de copier, distribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ult&#xE9;rieure publi&#xE9;e par la Free Software Fondation; sans Sections Invariables; sans Texte de Premi&#xE8;re de Couverture, et sans Texte de Quatri&#xE8;me de Couverture. Une copie de la pr&#xE9;sente Licence est incluse dans la section intitul&#xE9;e &#xAB; Licence de Documentation Libre GNU &#xBB; (en hyperlien dans le pied-de-page des <ulink url="http://publications.levinux.org">publicatons de levinux</ulink>).
   </legalnotice>

   <authorgroup>

    <author>
      <firstname>Steeve</firstname>

      <surname>Maltais</surname>

      <affiliation>
        <orgname>Levinux</orgname>
        <address><email>steevem@levinux.org</email></address>
      </affiliation>
    </author>
          <editor>
         <firstname>Jacques</firstname>
         <surname>Daignault</surname>
            <affiliation>
               <orgname>Levinux</orgname>
                  <address>
                     <email>jacques@levinux.org</email>
                  </address>
            </affiliation>
      </editor>
        </authorgroup>



    <abstract>
      <para>Ce document contient une proc&#xE9;dure d'installation possible pour
      cr&#xE9;er un serveur pour &#xAB;Terminaux X&#xBB;. Les &#xAB;terminaux X&#xBB; sont des
      ordinateurs branch&#xE9;s en r&#xE9;seau, de classe Pentium 1 ou sup&#xE9;rieur. Ils ne
      sont pas autonomes, au sens de leur capacit&#xE9; &#xE0; fonctionner par eux-m&#xEA;mes
      car ils ne contiennent pas de disque rigide. Par contre, ils deviennent
      autonomes d&#xE8;s qu'ils sont branch&#xE9;s en r&#xE9;seau avec un serveur agissant &#xE0;
      titre de &#xAB;fournisseur de syst&#xE8;me d'exploitation&#xBB; pour ces m&#xEA;me
      terminaux. Cela revient donc &#xE0; dire qu'un laboratoire complet peut
      fonctionner avec un serveur puissant, de classe Pentium 4, et alimenter
      un laboratoire d'une douzaine d'appareils sans probl&#xE8;mes et ce, avec
      tout ce que cela comporte : Interface graphique (KDE ou Gnome),
      navigateur web, courriel, interpr&#xE9;teur de commandes, &#xE9;dition graphique,
      traitement de texte, etc. Enfin, tout ce qui existe comme logiciels sous
      Linux!</para>

      <para>Le but de ce document est de vous amener &#xE0; construire vous m&#xEA;me ce
      serveur de Terminaux X. Prenez note que vous aurez &#xE0; r&#xE9;&#xE9;diter &#xE0;
      plusieurs reprises les m&#xEA;mes fichiers et ceci est tout &#xE0; fait volontaire
      de notre part : cette proc&#xE9;dure vous permettera de tester ce qui
      fonctionne bien ou moins bien et ce, au fur et &#xE0; mesure que nous
      avancerons.</para>

      <para>Ce document repr&#xE9;sente le fruit d'un travail de collaboration
      &#xE9;troit entre plusieurs partenaires de <ulink url="http://www.levinux.org">L&#xE9;vinux</ulink> , laboratoire d'&#xE9;ducation &#xE0;
      la virtualit&#xE9; situ&#xE9; au campus de l'UQAR &#xE0; L&#xE9;vis.</para>

      <para>Ce document sous-entend que vous avous d&#xE9;j&#xE0; un syst&#xE8;me Gentoo
      fonctionnel. Pour plus d'informations &#xE0; ce sujet consultez les autres
      documents disponibles sur le site de <ulink url="http://www.levinux.org">L&#xE9;vinux</ulink>. N'h&#xE9;sitez pas &#xE0; vous
      r&#xE9;f&#xE9;rer au site de Linux Gentoo si n&#xE9;cessaire: <ulink url="http://www.gentoo.org/doc/fr/">Documentation officielle de
      Gentoo</ulink></para>
    </abstract>

    <revhistory>
    <revision>
         <revnumber>1.1</revnumber>
         <date>24 juillet 2006</date>
         <authorinitials>JD</authorinitials>
         <revremark>Modifications mineures aux meta-donn&#xE9;es</revremark>
      </revision>


      <revision>
        <revnumber>1.00</revnumber>

        <date>1er Mars 2004</date>
        <authorinitials>SM</authorinitials>

        <revremark>Document r&#xE9;alis&#xE9; dans le cadre de la ma&#xEE;trise en technologie &#xE9;ducative de l'auteur (stage &#xE0; Levinux).</revremark>
      </revision>
    </revhistory>
  </bookinfo>

  <chapter>
    <title>Architecture r&#xE9;seau</title>

    <sect1>
      <title>R&#xE9;pr&#xE9;sentation visuelle</title>

      <para>Voici la repr&#xE9;sentation visuelle du r&#xE9;seau que vous aurez &#xE0;
      construire une fois que votre serveur &#xAB;rouge&#xBB; sera fonctionnel. Ce
      serveur contient 3 cartes r&#xE9;seau (eth0, eth1, eth2) ayant chacune une
      utilit&#xE9; particuli&#xE8;re.</para>

      <figure>
        <title>Architecture r&#xE9;seau</title>

        <mediaobject>
          <imageobject>
            <imagedata align="center" depth="16cm" fileref="images/architecture_ltsp.png" format="PNG" scalefit="0" valign="middle"/>
          </imageobject>
        </mediaobject>
      </figure>
    </sect1>

    <sect1>
      <title>Description du r&#xE9;seau</title>

      <para>Voici &#xE0; quoi ressemble la configuration des cartes r&#xE9;seau de votre
      r&#xE9;seau. Ces &#xE9;l&#xE9;ments de configuration seront &#xE9;crites aux emplacement
      appropri&#xE9;s plus loin dans ce document. Cette section n'est qu'&#xE0; titre
      informatif...</para>

      <simpara>Serveur</simpara>

      <programlisting>hostname = rouge
eth0 : 192.168.0.50 // Reli&#xE9; &#xE0; Internet
eth1 : 192.168.50.1 // Reli&#xE9; au cluster
eth2 : 192.168.51.1 // Reli&#xE9; aux terminaux X
gateway = 192.168.0.1 // Correspond &#xE0; votre serveur et votre adresse gateway sur votre r&#xE9;seau (changer au besoin)
dns = 192.168.0.14 // Correspond &#xE0; votre serveur et votre adresse dns sur votre r&#xE9;seau (changer au besoin)
</programlisting>

      <para>noeud 1</para>

      <programlisting>host name = dix
mac = 00:04:75:F4:E6:BC //Mac adresse de votre carte r&#xE9;seau. Adapter selon votre mat&#xE9;riel!
ip = 192.168.50.10</programlisting>

      <para>noeud 2</para>

      <programlisting>hostname = onze
mac = 00:04:75:F4:EC:07
ip = 192.168.50.11</programlisting>

      <para>terminal</para>

      <programlisting>hostname = ws100
mac = 00:0A:E6:0D:00:93
ip = 192.168.51.110</programlisting>
    </sect1>
  </chapter>

  <chapter>
    <title>Noyau OpenMosix</title>

    <para>&#xC0; cette &#xE9;tape nous allons configurer votre serveur pour le rendre
    capable de supporter ce que nous appellons en informatique le
    "clustering", soit le "groupage". Pour cela nous utiliserons la
    fonctionnalit&#xE9; <ulink url="http://openmosix.sourceforge.net/">OpenMosix</ulink>. Cette
    fonctionnalit&#xE9; ne n&#xE9;cessite aucun logiciel suppl&#xE9;mentaire car elle est
    fait d&#xE9;j&#xE0; partie int&#xE9;grante de votre noyau Linux. Il ne s'agit que de bien
    configurer ce dernier pour qu'il vous offre ces fonctionnalit&#xE9;s! Le
    clustering est une fa&#xE7;on de transformer un groupe d'ordinateur ordinaires
    en r&#xE9;seau en un super-ordinateur pouvant rouler plus efficacement toute la
    gamme de vos logiciels linux favoris. En anglais c'est ce qu'on appelle
    aussi du "load balancing", ce qui se traduirait en fran&#xE7;ais par "
    &#xE9;quilibrage de charge".</para>

    <sect1>
      <title>Pr&#xE9;-Installation</title>

      <para>Commen&#xE7;ons par installer GCC, le compilateur C et C++ de Linux
      (entre autres langages)...</para>

      <programlisting>#emerge -k gcc</programlisting>

      <note>
        <para>La version propos&#xE9;e sera la version 3.3.2-r5 ou sup&#xE9;rieure. Il
        serait pr&#xE9;f&#xE9;rable d'installer la version 2.95. Pour cela il faut ...
        (Steeve : consigne &#xE0; ajouter ici!!!)</para>
      </note>

      <programlisting>#emerge -k gcc-config
#gcc-config -l // Pour voir les versions de GCC install&#xE9;es</programlisting>

      <para>Cela devrait vous donner quelque chose en sortie comme ceci
      :</para>

      <programlisting>#[1] i686-pc-linux-gnu-3.3.2</programlisting>

      <para>[1] repr&#xE9;sentant la version install&#xE9;e sur votre syst&#xE8;me.</para>
    </sect1>

    <sect1>
      <title>Emerger les sources</title>

      <programlisting>#emerge -k openmosix-sources
#cd /usr/src/
#rm -rf linux
#ln -s linux-2.4.22-openmosixlinux // Le nom du dossier peut changer. 
                                   // Adapter &#xE0; la version en cours, soit linux-2.x.xx-openmosixlinux
#cd /usr/src/linux
#cp .config .config_working        // Conserver l'ancienne configuration du kernel
#make menuconfig</programlisting>
    </sect1>

    <sect1>
      <title>Configuration du noyau</title>

      <para>Nous allons maintenant passer aux choix de modules &#xE0; compiler
      (ajouter) dans le noyau.</para>

      <programlisting>OpenMosix --&gt;
    [*] openMosix process migration support
    [ ] Support clusters with a complex network topology
    [*] Stricter security on openMosix ports
    (1) Level of process-identity disclosure (0-3)
    [*] openMosix File-System
    [ ] Poll/Select exceptions on pipes
    [ ] Disable OOM Killer
    [ ] Load Limit

Code maturity level options  ---&gt;
    [*] Prompt for development and/or incomplete code/drivers

Networking options ---&gt;
    &lt;*&gt; Packet socket
    [ ]   Packet socket: mmapped IO
    &lt; &gt; Netlink device emulation
    [ ] Network packet filtering (replaces ipchains)
    [*] Socket Filtering
    &lt;*&gt; Unix domain sockets
    [*] TCP/IP networking
    [*]   IP: multicasting

File systems ---&gt;
    [*] /proc file system support
    [*] /dev file system support (EXPERIMENTAL)
    [*]   Automatically mount at boot 
     </programlisting>
    </sect1>

    <sect1>
      <title>Compilation du noyau</title>

      <para>Finalement, il faut compiler le noyau. Ceci implique la cr&#xE9;ation
      des d&#xE9;pendances, cr&#xE9;ation de l'image pour le r&#xE9;pertoire boot/, la
      cr&#xE9;ation des modules, leur installation et finalement copie du fichier
      bzImage.</para>

      <programlisting># make dep
# make clean bzImage modules modules_install
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/bzImage</programlisting>
    </sect1>
  </chapter>

  <chapter>
    <title>Outils OpenMosix</title>

    <para>Pour exploiter les fonctionnalit&#xE9;s OpenMosix de votre noyau, il faut
    installer divers outils. Ces petits logiciels vous permetteront de tirer
    certaines informations de vos noeuds pr&#xE9;sents sur le r&#xE9;seau. Un noeud est
    tout simplement un ordinateur pr&#xE9;sent sur le r&#xE9;seau, recevant des t&#xE2;ches &#xE0;
    ex&#xE9;cuter du serveur principal.</para>

    <sect1>
      <title>Installation</title>

      <para>Proc&#xE9;donc maintenant &#xE0; l'installation en tant que telle...</para>

      <programlisting>#emerge -k openmosix-user //Installer les outils OpenMosix
#mkdir mfs //Cr&#xE9;er le point de montage /mfs dans le r&#xE9;pertoire racine, c'est &#xE0; dire " / "</programlisting>

      <para>Modification du fichier /etc/fstab...</para>

      <programlisting>#nano /etc/fstab</programlisting>

      <para>Ajoutez la ligne suivante :</para>

      <programlisting>none          /mfs          mfs         noauto,dfsa=1        0 0</programlisting>

      <para>Quittez nano en enregistrant les changements et ...</para>

      <orderedlist>
        <listitem>
          <para>D&#xE9;marrez OpenMosix et</para>
        </listitem>

        <listitem>
          <para>&#xC9;crivez la commande pour qu'il d&#xE9;marre automatiquement &#xE0;
          l'ouverture du syst&#xE8;me</para>

          <para>en utilisant le code suivant :</para>

          <programlisting>#/etc/init.d/openmosix start
#rc-update add openmosix default</programlisting>
        </listitem>
      </orderedlist>

      <important>
        <para>Le paquetage OpenMosix-user contient quelques outils bien
        pratiques. Pour n'en nommer que quelques uns (&#xE0; ex&#xE9;cuter en ligne de
        commande) :</para>

        <simplelist>
          <member>mosmon : moniteur OpenMosix. Affiche l'&#xE9;tat de vos noeuds
          OpenMosix.</member>

          <member>mtop : version am&#xE9;lior&#xE9;e de top qui affiche sur quel noeud
          les processus tournent.</member>

          <member>mps : version am&#xE9;lior&#xE9;e de ps qui affiche les num&#xE9;ros de
          noeuds.</member>

          <member>mosctl whois : consid&#xE9;rant que mosmon n'affiche que les
          num&#xE9;ros de noeuds, cette commande est tr&#xE8;s utile car elle affiche
          aussi l'adresse ip et le nom d'h&#xF4;te du noeud.</member>

          <member>omdiscd eth1 : OpenMosix sur l'interface eth1</member>
        </simplelist>
      </important>

      <para>Il y a aussi l'application <emphasis><ulink url="http://openmosix.sf.net">openmosixview </ulink></emphasis>qui
      permet d'afficher un aper&#xE7;u de votre cluster et des processus migr&#xE9;s
      d'un noeud &#xE0; l'autre. Vous pouvez l'installer comme ceci...</para>

      <programlisting>#emerge -k openmosixview</programlisting>
    </sect1>
  </chapter>

  <chapter>
    <title>Diskless</title>

    <para>Comme pour OpenMosix au chapitre 2, il faut configurer le noyau (et
    le recompiler) en vue de pouvoir monter une partition racine sur le
    r&#xE9;seau. Contrairement &#xE0; un poste de travail autonome o&#xF9; la partition
    racine serait mont&#xE9;e sur le disque rigide de l'ordinateur en
    question.</para>

    <blockquote>
      <para>Qu'est-ce qu'une machine diskless? (Source : Site de
      Gentoo)</para>

      <para>&#xAB;Une machine diskless est un PC d&#xE9;pourvu des p&#xE9;riph&#xE9;riques de
      d&#xE9;marrage habituels, c-&#xE0;-d. sans disque dur ni lecteur de CDROM ou de
      disquette. Un PC diskless d&#xE9;marre sur le r&#xE9;seau et a besoin d'un serveur
      qui va lui fournir de l'espace disque comme un disque dur local. Nous
      appellerons le serveur le ma&#xEE;tre et les machines sans disques des
      esclaves. Un esclave a besoin d'une carte r&#xE9;seau qui supporte le
      d&#xE9;marrage via PXE. La plupart des cartes modernes les font, les
      adaptateurs r&#xE9;seau int&#xE9;t&#xE9;gr&#xE9;s sur les cartes-m&#xE8;res aussi.&#xBB;</para>
    </blockquote>

    <sect1>
      <title>Param&#xE8;tres du noyau</title>

      <programlisting>#cd /usr/src
#cp .config .config_working   //sauvergarder une copie de la configuration du noyau ma&#xEE;tre
#make menuconfig              //C'est ici qu'on modifie la configuration du noyau ma&#xEE;tre
</programlisting>

      <para>Assurez-vous que votre noyau poss&#xE8;de ces options :</para>

      <programlisting>Code maturity level options  ---&gt;
  [*] Prompt for development and/or incomplete code/drivers


Networking options ---&gt;
  &lt;*&gt; Packet socket
  [ ] Packet socket: mmapped IO
  &lt; &gt; Netlink device emulation
  [ ] Network packet filtering (replaces ipchains)
  [*] Socket Filtering
  &lt;*&gt; Unix domain sockets
  [*] TCP/IP networking
  [*]   IP: multicasting

  
File systems ---&gt;
  [*] /proc file system support
  [*] /dev file system support (EXPERIMENTAL)
  [*] Automatically mount at boot    
  Network File Systems  ---&gt;
    &lt;*&gt; NFS server support
    [*] Provide NFSv3 server support
</programlisting>
    </sect1>

    <sect1>
      <title>Compilation du noyau : diskless</title>

      <para>Finalement, il faut compiler le noyau. Ceci implique la cr&#xE9;ation
      des d&#xE9;pendances, cr&#xE9;ation de l'image pour le r&#xE9;pertoire boot/, la
      cr&#xE9;ation des modules, leur installation et finalement copie du fichier
      bzImage pour remplacer l'ancien.</para>

      <programlisting># make dep
# make clean bzImage modules modules_install
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/bzImage
# cp /usr/src/linux/.config /usr/src/linux/.config_master //Sauvegarder d'une copie de la configuration 
du noyau ma&#xEE;tre)</programlisting>

      <para>Nous allons maintenant proc&#xE9;der &#xE0; la compilation d'un nouveau
      noyau, noyau qui sera n&#xE9;cessaire &#xE0; vos terminaux X...</para>
    </sect1>

    <sect1>
      <title>Compilation du noyau : terminaux</title>

      <para>Vous aurez besoin de nouveaux noyaux pour vos terminaux X. En
      fait, lorsque ceux-ci d&#xE9;marreront, ils utiliseront ce noyau sp&#xE9;cialement
      con&#xE7;u pour eux.</para>

      <warning>
        <para>Assurez-vous que vous s&#xE9;lectionnez les options en tant que
        composantes internes au noyau et non en tant que modules.</para>
      </warning>

      <programlisting>Code maturity level options  ---&gt;
  [*] Prompt for development and/or incomplete code/drivers

Networking options ---&gt;
  &lt;*&gt; Packet socket
  [ ] Packet socket: mmapped IO
  &lt; &gt; Netlink device emulation
  [ ] Network packet filtering (replaces ipchains)
  [ ] Socket Filtering
  &lt;*&gt; Unix domain sockets
  [*] TCP/IP networking
  [*] IP: multicasting
  [*] IP: kernel level autoconfiguration
  [*] IP: DHCP support (NEW)

File systems ---&gt;
  [*] /proc file system support
  [*] /dev file system support (EXPERIMENTAL)
  [*] Automatically mount at boot
  Network File Systems  ---&gt;
  Ajouter toutes les options requises pour les cartes ethernet de vos noeuds esclaves</programlisting>

      <para>Proc&#xE9;dons maintenant &#xE0; la compilation :</para>

      <programlisting>#cd /usr/linux
#make clean dep bzImage //Compilation du noyau esclave
#mkdir /diskless
#cp /usr/src/linux/arch/i386/boot/bzImage /diskless //Copie du noyau esclave</programlisting>
    </sect1>

    <sect1>
      <title>&#xC9;dition des fichiers n&#xE9;cessaires</title>

      <para>Les syst&#xE8;mes de fichiers des noeuds ma&#xEE;tre et esclaves oeuvent
      subir de nombreuses adaptations. Concentrons-nous d'abord sur les
      fichiers de configuration et les points de montage. Nous avons besoin
      d'un r&#xE9;pertoire sous /diskless pour le premier noeud esclave . Chaque
      esclave a besoin de son propre syst&#xE8;me de fichiers racine (le "root")
      parce que certains fichiers ne peuvent pas &#xEA;tre communs &#xE0; plusieurs
      machines sans causer de graves probl&#xE8;mes. Peu importe les noms des
      sous-r&#xE9;pertoires vous pouvez, par exemple, les nommer d'apr&#xE8;s les
      adresses IP car elles sont uniques et explicites. Dans cet exemple,
      l'adresse IP du premier noeud esclave est 192.168.50.10 : vous devez
      faire cette op&#xE9;ration pour chaque noeud esclave. Voir le code
      ci-bas.</para>

      <highlights>
        <para>Qu'est-ce qu'un noeud esclave?</para>

        <para>C'est un ordinateur qui re&#xE7;oit des t&#xE2;ches &#xE0; effectuer par
        &#xAB;l'ordinateur ma&#xEE;tre&#xBB; !</para>
      </highlights>

      <programlisting># mkdir /diskless/192.168.50.10
# cp -r /etc /diskless/192.168.50.10/etc
# mkdir /diskless/192.168.50.10/home
# mkdir /diskless/192.168.50.10/dev
# mkdir /diskless/192.168.50.10/proc
# mkdir /diskless/192.168.50.10/tmp
# mkdir /diskless/192.168.50.10/mnt
# mkdir /diskless/192.168.50.10/mnt/.initd
# mkdir /diskless/192.168.50.10/root
# mkdir /diskless/192.168.50.10/var
# mkdir /diskless/192.168.50.10/var/empty
# mkdir /diskless/192.168.50.10/var/lock
# mkdir /diskless/192.168.50.10/var/log
# mkdir /diskless/192.168.50.10/var/run
# mkdir /diskless/192.168.50.10/mfs</programlisting>

      <important>
        <para>Vous devez recommencer cette proc&#xE9;dure pour chaque station
        (noeud esclave) que vous poss&#xE9;dez. Vous pouvez incr&#xE9;menter de 1 pour
        chaque nouvelle station, comme par exemple : 192.168.50.10 pour la
        premi&#xE8;re, 192.168.50.11 pour la deuxi&#xE8;me, 192.168.50.12 pour la
        troisi&#xE8;me et ainsi de suite...</para>
      </important>

      <para>Vous devez ensuite modifier le fichier &#xAB;net&#xBB; situ&#xE9; dans le
      r&#xE9;pertoire /etc/net pour forcer la carte r&#xE9;seau des postes esclaves &#xE0;
      obtenir une adresse ip par dhcp. Encore une fois, cette proc&#xE9;dure est
      n&#xE9;cessaire pour CHAQUE noeud esclave.</para>

      <programlisting>#nano /diskless/192.168.50.1/etc/net</programlisting>

      <para>Gardez seulement les lignes suivantes :</para>

      <programlisting>iface_eth0="dhcp"
gateway="eth0/192.168.50.1" //Changez le ip pour celui de votre passerelle</programlisting>

      <para>Quittez le fichier et enregistrez les modifications. Nous allons
      maintenant proc&#xE9;der &#xE0; l'installation du serveur DHCP. Le serveur DHCP
      procure une adresse IP de fa&#xE7;on automatique &#xE0; tous les ordinateurs qui
      se brancheront sur votre r&#xE9;seau.</para>

      <programlisting>#emerge -k dhcp</programlisting>

      <para>Modifions maintenant le fichier de configuration du serveur DHCP
      :</para>

      <programlisting>#cp /etc/dhcp/dhcp.conf.sample /etc/dhcp/dhcp.conf
#nano /etc/dhcp/dhcp.conf</programlisting>

      <para>Votre fichier dhcp.conf, version finale, devrait ressembler &#xE0; ceci
      :</para>

      <programlisting>ddns-update-style none;

option space PXE;
option PXE.mtftp-ip             code 1 = ip-address;
option PXE.mtftp-cport          code 2 = unsigned integer 16;
option PXE.mtftp-sport          code 3 = unsigned integer 16;
option PXE.mtftp-tmout          code 4 = unsigned integer 8;
option PXE.mtftp-delay          code 5 = unsigned integer 8;
option PXE.discovery-control    code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr code 7 = ip-address;

subnet 192.168.0.0 netmask 255.255.255.0
{
 option broadcast-address 192.168.0.255;
}

subnet 192.168.50.0 netmask 255.255.255.0
{
 class "pxeclients"
 {
       match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
       option vendor-class-identifier "PXEClient";
       vendor-option-space PXE;
       option PXE.mtftp-ip 0.0.0.0;
       filename "pxelinux.0";
       next-server 192.168.50.1;                       //adresse du serveur
 }

 pool
 {
       max-lease-time 86400;
       default-lease-time 86400;
       deny unknown clients;
 }

 host dix
 {
      hardware ethernet            00:04:75:F4:E6:BC;  //adresse mac du client
      fixed-address                192.168.50.10;
      server-name                  "rouge";            //nom du serveur
      option routers               192.168.50.1;       //adresse du serveur
      option domain-name-servers   192.168.0.14;       //adresse du dns
      option host-name             "dix";              //nom du client
 }

 host onze
 {
      hardware ethernet            00:04:75:F4:EC:07;
      fixed-address                192.168.50.11;
      server-name                  "rouge";
      option routers               192.168.50.1;
      option domain-name-servers   192.168.0.14;
      option host-name             "onze";
 }
}

subnet 192.168.51.0 netmask 255.255.255.0
{
      option broadcast-address     192.168.51.255;
}

}</programlisting>
    </sect1>

    <sect1>
      <title>Activation du DHCP</title>

      <para>Il faut maintenant sp&#xE9;cifier sur quel interface r&#xE9;seau le serveur
      DHCP devra s'ex&#xE9;cuter.</para>

      <programlisting>#nano /etc/conf.d/dhcp //Exemple de /etc/conf.d/dhcp

IFACE="eth1 eth2"
DHCPD_OPTS=""</programlisting>

      <para>Quittez nano en sauvegardant les changements.</para>

      <para>D&#xE9;marrez le serveur DHCP et ajoutez-le &#xE0; la proc&#xE9;dure de d&#xE9;marrage
      pour qu'il s'ex&#xE9;cute automatiquement.</para>

      <programlisting>#/etc/init.d/dhcp start

#rc-update add dhcp default</programlisting>

      <important>
        <para>N'oubliez pas de red&#xE9;marrer le serveur dhcp &#xE0; chaque
        modification du fichier dhcpd.conf<programlisting>#/etc/init.d/dhcpd restart</programlisting></para>
      </important>
    </sect1>

    <sect1>
      <title>tFTP et d&#xE9;marrage via PXE : Configuration</title>

      <para>Le serveur tFTP (Trivial FTP) est utilis&#xE9; pour envoyer le noyau et
      le initrd au terminal, via le r&#xE9;seau.</para>

      <para>Commen&#xE7;ons par installer les services n&#xE9;cessaires :</para>

      <programlisting>#emerge -k syslinux //Installer syslinux

#emerge tftp-hpa  //Installer le serveur tFTP

#cp /usr/lib/syslinux/pxelinux.0 /diskless //installer le d&#xE9;marreur &#xE0; distance

#mkdir /diskless/pxelinux.cfg</programlisting>

      <sect2>
        <title>Cr&#xE9;ation de l'environnement pour PXE</title>

        <para>Pour chaque appareil de votre r&#xE9;seau (terminal X) vous devez
        prendre son adresse ip, la convertir en hexad&#xE9;cimal et cr&#xE9;er un
        fichier portant cette adresse convertie comme nom. Comme ceci :</para>

        <programlisting>#nano /diskless/pxelinux.cfg/C0A8320A //C0A8320A en hexad&#xE9;cimal = 192.168.50.10 en d&#xE9;cimal)</programlisting>

        <highlights>
          <para>Attention, il faut modifier l'adresse IP pour une adresse en
          format hexad&#xE9;cimal. Lorsque vous la r&#xE9;&#xE9;crivez, n'incluez pas les " .
          " tel que vous &#xEA;tes habitu&#xE9;s de la faire comme en &#xE9;crivant, par
          exemple, l'adresse 192.168.0.1</para>
        </highlights>

        <para>Voici un fichier contenant un exemple de contenu pour
        pxelinux.cfg/C0A8320A</para>

        <programlisting>DEFAULT /diskless/bzImage
APPEND ip=dhcp root=/dev/nfs nfsroot=192.168.1.1:/diskless/192.168.1.10</programlisting>

        <para>Il faut maintenant configurer votre serveur tFTPd pour qu'il
        d&#xE9;marre avec les bons param&#xE8;tres. Modifiez pour cela le fichier dans
        /etc/conf.d/in.tftpd :</para>

        <programlisting>INTFTPD_PATH="/diskless"
INTFTPD_OPTS="-l -v -s ${INTFTPD_PATH}"</programlisting>

        <para>En dernier lieu, il faut d&#xE9;marrer le service et l'ajouter au
        d&#xE9;marrage du noeud ma&#xEE;tre (votre serveur) :</para>

        <programlisting>#/etc/init.d/in.tftpd start
# rc-update add in.tftpd default</programlisting>
      </sect2>
    </sect1>

    <sect1>
      <title>Serveur NFS : Configuration</title>

      <para>NFS (Network File System) permet de rendre disponible le syst&#xE8;me
      de fichiers aux terminaux. Un "Network File System" (Syst&#xE8;me de fichiers
      r&#xE9;seau) est un protocole r&#xE9;seau qui supporte le partage de fichiers,
      comme par exemple le protocole SMB pour Windows.</para>

      <para>Commen&#xE7;ons par installer le packetage requis :</para>

      <programlisting>#emerge nfs-utils</programlisting>

      <para>Configurez maintenant le fichier de d&#xE9;marrage du serveur
      NFS</para>

      <programlisting>#nano /etc/init.d/nfs</programlisting>

      <para>Modifiez-le fichier pour qu'il prenne les valeurs suivantes
      :</para>

      <programlisting># Number of servers to be started up by default
RPCNFSDCOUNT=20

#Options to pass to rpc.mountd
RPCMOUNTDOPTS=""</programlisting>

      <para>Sortez de nano et enregistrez les changements. D&#xE9;marrez le serveur
      NFS et ajoutez-le au processus de d&#xE9;marrage du noeud ma&#xEE;tre (votre
      serveur) :</para>

      <programlisting>#/etc/init.d/nfs start

#rc-update add nfs default</programlisting>

      <para>Par la suite, il faut modifier le fichier "exports", fichier
      contenant tous les principes partag&#xE9;s par NFS.</para>

      <programlisting>#nano /etc/exports</programlisting>

      <important>
        <para>Dans ce fichier, il faut ajouter une ligne pour chacun des
        noeuds esclave pr&#xE9;sents sur votre r&#xE9;seau! Les quatres lignes &#xE0; ajouter
        pour chaque terminaux sont celles commen&#xE7;ant par /diskless et
        /var/log</para>
      </important>

      <programlisting># /etc/exports: NFS file systems being exported.  See exports(5).
/diskless/192.168.50.10               192.168.50.10(rw,no_root_squash,no_all_squash,sync)
/diskless/192.168.50.11               192.168.50.11(rw,no_root_squash,no_all_squash,sync)
/opt      192.168.50.0/24(ro,no_root_squash,no_all_squash,sync)
/usr      192.168.50.0/24(ro,no_root_squash,no_all_squash,sync)
/home     192.168.50.0/24(rw,no_root_squash,no_all_squash,sync)
/var/log  192.168.50.10(rw,no_root_squash,no_all_squash,sync)
/var/log  192.168.50.11(rw,no_root_squash,no_all_squash,sync)</programlisting>

      <para>Par la suite, il faut modifier le fichier "fstab" sp&#xE9;cifique &#xE0;
      chaque noeud, comme ceci :</para>

      <programlisting>#nano /diskless/192.168.50.10/etc/fstab</programlisting>

      <para>Le fichier fstab contenu dans /diskless/192.168.50.10/etc/fstab du
      noeud esclave que vous configurez devrait ressembler &#xE0; ceci :</para>

      <programlisting>192.168.50.1:/diskless/192.168.50.10  /     nfs    hard,intr,rw,nolock,rsize=8192,wsize=8192   0 0
192.168.50.1:/opt                     /opt  nfs    hard,intr,ro,nolock,rsize=8192,wsize=8192   0 0
192.168.50.1:/usr                     /usr  nfs    hard,intr,ro,nolock,rsize=8192,wsize=8192   0 0
192.168.50.1:/home                    /home nfs    hard,intr,rw,nolock,rsize=8192,wsize=8192   0 0
192.168.50.1:/var/log              var/log  nfs    hard,intr,rw                                0 0

# NOTE: The next line is critical for boot!
none       /proc        proc      defaults        0 0
none       /mfs         mfs       noauto,dfsa=1   0 0
none       /dev/shm     tmpfs     defaults        0 0</programlisting>

      <para>Passons maintenant &#xE0; la cr&#xE9;ation de certains dossiers n&#xE9;cessaires
      n&#xE9;cessaires &#xE0; chaque noeud esclave. Encore une fois, vous devez cr&#xE9;er
      ces dossiers pour chaque noeud esclave de votre r&#xE9;seau et ce, autant que
      vous en avez. N'oubliez pas de modifier l'adresse ip du noeud esclave en
      question &#xE0; chaque fois que vous cr&#xE9;erez ses dossiers...</para>

      <programlisting># cp -r /bin /diskless/192.168.50.10/bin
# cp -r /sbin /diskless/192.168.50.10/sbin 
# cp -r /lib /diskless/192.168.50.10/lib</programlisting>

      <para>Ensuite, pour chaque noeud esclave (selon l'adresse ip
      correspondante) faites :</para>

      <programlisting>diskless/192.168.50.10/fastboot
# echo "touch /fastboot" &gt;&gt; /diskless/192.168.50.10/etc/conf.d/local.start</programlisting>
    </sect1>
  </chapter>

  <chapter>
    <title>LTSP 4</title>

    <para>LTSP est une application qui permet de brancher plusieurs
    ordinateurs de type "Terminaux" (Aussi appell&#xE9;s "Terminaux X") &#xE0; un
    serveur Linux (le noeud ma&#xEE;tre). Les applications s'ex&#xE9;cutent normalement
    sur le serveur. Ce dernier re&#xE7;oit les requ&#xEA;tes des terminaux et retourne
    les r&#xE9;ponses via leur interface graphique. C'est pourquoi un terminal peut
    &#xEA;tre un simple Pentium 1 et se comporter comme si c'&#xE9;tait un Pentium 4,
    dans le cas o&#xF9; votre serveur en serait un...</para>

    <para>Passons &#xE0; 'installation de ltsp en commen&#xE7;ant par installer GDM
    (Gnome Display Manager) et XFS (X Font System) :</para>

    <programlisting>emerge -k gdm    //installer gdm
emerge -k xfs    //installer xfs</programlisting>

    <para>Une fois la compilation et l'installation termin&#xE9;e, ajoutons ces
    deux services pour qu'il s'ex&#xE9;cutent automatiquement au d&#xE9;marrage du
    serveur :</para>

    <programlisting>#rc-update add gdm default
#rc-update add xfs default</programlisting>

    <important>
      <para>Concernant l'installation du packetage LTSP, il faut le
      t&#xE9;l&#xE9;charger directement du site de LTSP. Vous devez t&#xE9;l&#xE9;charger le
      fichier <emphasis>ltsp-4.iso</emphasis> (ou la version courante au
      moment o&#xF9; vous lirez ces lignes). Voir pour cela le site suivant :
      <ulink url="http://www.ltsp.org">www.ltsp.org</ulink></para>

      <para>Vous devez sauvergarder le fichier .iso en question dans le
      r&#xE9;pertoire /root</para>
    </important>

    <sect1>
      <title>Monter et configurer LTSP</title>

      <programlisting>#mkdir /mnt/ltsp

#mount -o loop /root/ltsp-4.iso /mnt/ltsp

#cd /mnt/ltsp

#./ltsp_installer</programlisting>

      <para>C'est ici que l'installation de LTSP s'effectue...</para>

      <programlisting>Make selection : 2

Make selection : 1

Make selection : A

Are you sure yout want to install ALL components ? Yes

In which directory would you like to place LTSP ? [/opt/ltsp]

Installation de ltsp .................</programlisting>

      <para>Et c'est ici que la configuration de LTSP s'effectue...</para>

      <programlisting>#./ltspcfg

press enter to continue ...

Make selection : C

Make selection : 1

Select run level : 5

Make selection : 2

choisir eth2


Make selection : 8 

Do you want to add entries to /etc/hosts ? Yes

Make selection : R</programlisting>

      <para>&#xC0; pr&#xE9;sent, copions le noyau de ltsp dans le dossier
      diskless</para>

      <programlisting>#cp /tftpboot/bzImageltsp /diskless/bzImageltsp</programlisting>
    </sect1>

    <sect1>
      <title>Modification finale au fichier exports</title>

      <para>&#xC9;ditons maintenant le fichier "exports" :</para>

      <programlisting>#nano /etc/exports</programlisting>

      <para>en ajoutant les lignes suivantes :</para>

      <programlisting>opt/ltsp/i386              192.168.0.0/255.255.255.0(ro,no_root_squash,async)
/var/opt/ltsp/swapfiles    192.168.0.0/255.255.255.0(rw,no_root_squash,async)</programlisting>

      <para>Voici la version finale du fichier exports, ou du moins, ce &#xE0; quoi
      il devrait ressembler :</para>

      <programlisting># /etc/exports: NFS file systems being exported.  See exports(5).

#diskless
/diskless/192.168.50.10   192.168.50.10(rw,no_root_squash,no_all_squash,sync)
/diskless/192.168.50.11   192.168.50.11(rw,no_root_squash,no_all_squash,sync)
/opt                      192.168.50.0/24(ro,no_root_squash,no_all_squash,sync)
/usr                      192.168.50.0/24(ro,no_root_squash,no_all_squash,sync)
/home                     192.168.50.0/24(rw,no_root_squash,no_all_squash,sync)
/var/log                  192.168.50.10(rw,no_root_squash,no_all_squash,sync)
/var/log                  192.168.50.11(rw,no_root_squash,no_all_squash,sync)

#ltsp    
/opt/ltsp/i386            192.168.51.0/255.255.255.0(ro,no_root_squash,async)
/var/opt/ltsp/swapfiles   192.168.51.0/255.255.255.0(rw,no_root_squash,async)</programlisting>
    </sect1>

    <sect1>
      <title>Configuration du DHCP</title>

      <para>DHCP signifie Dynamic Host Configuration Protocol. Le DHCP
      (service syst&#xE8;me) est un outil permettant &#xE0; un ordinateur de se
      connecteur sur un r&#xE9;seau et recevoir automatiquement une adresse IP de
      la part du serveur. Dans notre cas, les adresses sont ordinairement des
      adresses locales (192.168.x.x ou encore 10.0.x.x) et serviront
      strictement aux ordinateurs situ&#xE9;s sur le r&#xE9;seau pour communiquer entre
      eux. L'adresse IP servant &#xE0; la navigation sur Internet ne devrait &#xEA;tre
      connue que par le serveur (interface eth0).</para>

      <para>&#xC9;ditons maintenant le fichier "dhcpd.conf" :</para>

      <programlisting>#nano /etc/dhcp/dhcpd.conf</programlisting>

      <para>Voici la version finale du fichier exports, ou du moins, ce &#xE0; quoi
      il devrait ressembler :</para>

      <programlisting>ddns-update-style none;

option space PXE;
option PXE.mtftp-ip              code 1 = ip-address;
option PXE.mtftp-cport           code 2 = unsigned integer 16;
option PXE.mtftp-sport           code 3 = unsigned integer 16;
option PXE.mtftp-tmout           code 4 = unsigned integer 8;
option PXE.mtftp-delay           code 5 = unsigned integer 8;
option PXE.discovery-control     code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr  code 7 = ip-address;

subnet 192.168.0.0 netmask 255.255.255.0
{
              option broadcast-address  192.168.0.255;
}

subnet 192.168.50.0 netmask 255.255.255.0
{
#diskless
       class "pxeclients"
       {
             match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
             option vendor-class-identifier "PXEClient";
             vendor-option-space PXE;

             option PXE.mtftp-ip 0.0.0.0;
             filename "pxelinux.0";
             next-server 192.168.50.1;
        }

        pool
        {
             max-lease-time 86400;
             default-lease-time 86400;
             deny unknown clients;
        }

       host dix
       {
             hardware ethernet           00:04:75:F4:E6:BC; //ici vous devez &#xE9;crire l'adresse MAC de votre propre carte r&#xE9;seau!
             fixed-address               192.168.50.10;
             server-name                 "rouge";
             option routers              192.168.50.1;
             option domain-name-servers  192.168.0.14;
             option host-name            "dix";
       }

       host onze
       {
             hardware ethernet            00:04:75:F4:EC:07; //ici vous devez &#xE9;crire l'adresse MAC de votre propre carte r&#xE9;seau!
             fixed-address                192.168.50.11;
             server-name                  "rouge";
             option routers               192.168.50.1;
             option domain-name-servers   192.168.0.14;
             option host-name             "onze";
       }
}


#ltsp

subnet 192.168.51.0 netmask 255.255.255.0
{
             option broadcast-address     192.168.51.255;
}

group {
      option domain-name       "nomdedomaine";
      filename                 "bzImageltsp";
      option root-path         "192.168.51.1:/opt/ltsp/i386";
      use-host-decl-names      on;

      host ws110 //Nous n'avons list&#xE9; qu'un seul terminal pour l'exemple mais vous devriez lister tous les v&#xF4;tres pr&#xE9;sents sur le r&#xE9;seau...
      {
           hardware ethernet        00:0A:E6:0D:00:93; //ici vous devez &#xE9;crire l'adresse MAC de votre propre carte r&#xE9;seau!
           fixed-address            192.168.51.110;
      }
}
</programlisting>

      <para>Apr&#xE8;s avoir quitt&#xE9; nano est enregistrant les modifications,
      d&#xE9;marrez le serveur DHCP :</para>

      <para/>

      <programlisting>#/etc/init.d/dhcp restart</programlisting>
    </sect1>

    <sect1>
      <title>&#xC9;dition en vrac de quelques fichiers</title>

      <itemizedlist>
        <listitem>
          <para>Fichier Xaccess : d&#xE9;commentez une ligne en enlevant le # au
          tout d&#xE9;but :</para>
        </listitem>
      </itemizedlist>

      <programlisting>#nano /etc/X11/xdm/Xaccess</programlisting>

      <programlisting># *                 #any host can get a login window</programlisting>

      <itemizedlist>
        <listitem>
          <para>Fichier xdm-config : commentez la ligne
          DisplayManager.requestPort:0 (en ajoutant un # au tout d&#xE9;but)</para>

          <programlisting>#nano /etc/X11/xdm/xdm-config</programlisting>
        </listitem>
      </itemizedlist>

      <itemizedlist>
        <listitem>
          <para>Fichier kdmrc : cherchez la section [Xdmcp] et remplacez
          Enable = false par Enable = True</para>

          <programlisting>#nano /usr/kde/3.1/share/config/kdm/kdmrc</programlisting>
        </listitem>
      </itemizedlist>

      <itemizedlist>
        <listitem>
          <para>Fichier gdm.conf : cherchez la section [xdmcp] et remplacez
          Enable = false par Enable = True</para>

          <programlisting>#nano /etc/X11/gdm/gdm.conf</programlisting>
        </listitem>
      </itemizedlist>

      <itemizedlist>
        <listitem>
          <para>Fichier lts.conf : Pour y faire ?????????</para>

          <programlisting>#nano /opt/ltsp/i386/etc/lts.conf</programlisting>

          <para>Sortez de nano en enregistrant les changement et entrez le
          lignes suivantes en console :</para>

          <programlisting>#rc-update add xdm default

#/etc/init.d/xdm start</programlisting>

          <remark>Vous avez maintenant termin&#xE9; l'installation de votre
          syst&#xE8;me! N'oubliez pas d'activer le d&#xE9;marrage sur la carte r&#xE9;seau
          dans le BIOS de vos terminaux X!</remark>

          <remark>Vous devriez maintenant avoir un serveur, des postes
          diskless et des terminaux X pr&#xEA;ts &#xE0; fonctionner (quelle est la
          diff&#xE9;rence? :-)</remark>
        </listitem>
      </itemizedlist>
    </sect1>
  </chapter>
</book>
