<h2>But de ce document</h2>
<p class="spip">Ce document me sert de <strong class="spip">mémo</strong> pour <strong class="spip">installer et configurer « Linux Terminal Server (LTSP 4.2) » </strong>sur une Debian Etch.</p>

<p class="spip">Ce système permet de recycler de vieux ordinateurs en terminaux graphiques. Pour cela, il faut un ordinateur assez puissant (qui fera office de serveur) et avec suffisamment de mémoire vive pour pouvoir gérer les terminaux. Les terminaux peuvent être, par exemple, des pentium 166 avec 32 Mo de mémoire vive et sans disque dur.</p>

<p class="spip">Pour seulement 200€, il est possible également d’acheter de vrais terminaux Linux (ou clients légers) comme les t5000 de chez HP :
<br /></p>
<li> <a href="http://h10010.www1.hp.com/wwpc/fr/fr/sm/WF04a/35943-342061-342061-342061-637147.html" class="spip_out">http://h10010.www1.hp.com/wwpc/fr/fr/sm/WF04a/35943-342061-342061-342061-637147.html</a>
<p class="spip">Les développeurs de LTSP propose même un site pour acheter des terminaux et des cartes réseaux valides pour LTSP :
<br /></p>
<li> <a href="http://www.disklessworkstation.com/" class="spip_out">http://www.disklessworkstation.com/</a>
<h2>Pré-requis</h2>
<p class="spip">Avoir installé une Debian avec un serveur X opérationnel et toutes les applications utiles aux terminaux. Pour cela, vous pouvez consulter mon mémo sur l’installation de KDE :
<br /></p>
<li> <a href="http://www.coagul.org/article.php3?id_article=159" class="spip_out">http://www.coagul.org/article.php3 ?id_article=159</a>
<p class="spip">En plus de ce document, je conseille vivement la lecture de la documentation officielle très complète et en français disponible à cette adresse :
<br /></p>
<li> <a href="http://wiki.ltsp.org/twiki/bin/view/Ltsp/Documentation" class="spip_out">http://wiki.ltsp.org/twiki/bin/view/Ltsp/Documentation</a>
<p class="spip">LTSP est un système relativement complexe faisant intervenir plusieurs services qu’il est nécessaire de connaître au moins un minimum avant de se lancer dans l’installation :
<br /></p>
<li> Serveur DHCP pour la connexion automatique des terminaux au réseau 
<br /><li> Serveur TFTP pour fournir le noyau Linux des terminaux (FTP limité)
<br /><li> Serveur NFS pour fournir le système de fichiers des terminaux
<br /><li> Serveur XDMCP permettant d’exporter le serveur graphique vers les terminaux
<h2>Deux normes pour faire booter des terminaux</h2>
<p class="spip">Il existe au moins deux normes pour booter un ordinateur sur le réseau :</p>

<h3>PXE </h3>
<p class="spip">Cette norme est maintenant reconnue en standard par quasiment toutes les cartes réseaux et par toutes les cartes mères récentes.</p>

<p class="spip">Sur une carte mère compatible PXE, il est possible de paramétrer le bios pour que le boot se fasse directement sur le réseau. Malheureusement ce système n’existe que sur les ordinateurs récents (Pentium IV) alors qu’il est surtout intéressant d’utiliser des vieux ordinateurs pour en faire des terminaux graphiques.</p>

<p class="spip">Cependant cette méthode de boot est plus rapide et plus fiable, car elle ne nécessite pas de lecteur de disquette. De plus, le fait d’installer une carte réseau PXE sur un veille ordinateur dont le bios ne connaît pas cette norme permet quand même de booter sur le réseau (Testé avec une carte 3COM 3C905CX à 30€).</p>

<p class="spip">Avec cette norme, le terminal cherche un bootloader spécial (pxelinux.0) dont l’adresse est fournie par le serveur DHCP.</p>

<h3>Etherboot</h3>
<p class="spip">Cette norme est un système libre et très flexible qui permet de faire booter même de vieux PC via le réseau à l’aide de différentes méthodes (Disquettes, CD-ROM, Lilo, Carte Réseau spéciale avec ROM Etherboot,...).</p>

<p class="spip">Il faut donc utiliser cette norme si la carte réseau ou la carte mère du terminal ne permet pas d’utiliser la norme PXE.</p>

<p class="spip">Avec cette norme, le terminal cherche un noyau spécial (vmlinuz-2.4.26-ltsp-2) dont l’adresse est fournie par le serveur DHCP.</p>

<h3>Choix entre PXE et Etherboot</h3>
<p class="spip">Si votre carte réseau ne reconnaît pas la norme PXE, je conseil vivement de la remplacer (30€) car cela évite de booter sur un lecteur de disquettes.</p>

<h2>Mise en place de l’utilitaire d’installation</h2>
<p class="spip">LTSP utilise des scripts permettant d’automatiser l’installation. Ces scripts permettent également de vérifier que tous les services fonctionnent correctement.</p>

<p class="spip">Ces scripts sont disponibles dans ce paquet :</p>

<p class="spip"><code class='spip_code' dir='ltr'># aptitude install ltsp-utils</code></p>

<p class="spip">Les scripts disponibles suite à cette installation sont les suivants :
<br /></p>
<li> <strong class="spip">ltspadmin</strong> : Script principal pour télécharger et configurer les paquets
<br /><li> <strong class="spip">ltspcfg</strong> : Script de configuration pouvant être appelé directement par ltspadmin
<br /><li> <strong class="spip">ltspinfo</strong> : Pas d’info sur ce script :-)
<h2>Téléchargement des paquets de LTSP </h2>
<p class="spip">La commande « <strong class="spip">ltspadmin</strong> » installée précédemment, permet de télécharger les paquets.</p>

<p class="spip"><code class='spip_code' dir='ltr'># ltspadmin</code></p>

<p class="spip">Ensuite, il faut sélectionner le menu « <strong class="spip">Install/Update LTSP Packages</strong> » et suivre les indications.</p>

<p class="spip">Sur l’écran de sélection des paquets, il faut télécharger tous les paquets.</p>

<p class="spip">Lors du lancement de « <strong class="spip"> ltspadmin </strong> », les paramètres de configuration seront enregistrés dans le fichier « <strong class="spip">/etc/ltsp.conf</strong> ».</p>

<h2>Configuration de LTSP  </h2>
<p class="spip">Toujours avec l’utilitaire « <strong class="spip">ltspadmin </strong> », le menu « <strong class="spip">Configure LTSP</strong> » permet de configurer le système.</p>

<p class="spip">Dans le menu « Configure LTSP » de « <strong class="spip">ltspadmin </strong> », il y a deux sous-menus :
<br /></p>
<li> Show de status of all services -> Permet de vérifier l’installation et la configuration des services.
<br /><li> Configure the services manually -> Permet de configurer les différents services comme indiqué dans les chapitres suivants.
<h3>1 - RunLevel</h3>
<p class="spip">Sous Debian, le RunLevel par défaut est 2 alors qu’il est à 5 sur la plupart des autres distributions, mais cela ne pose pas de problème.</p>

<h3>2 - Interface Selection</h3>
<p class="spip">Possibilité de sélectionner l’interface réseau à utiliser pour les clients.</p>

<h3>3 - DHCP Configuration</h3>
<p class="spip">Pour faire fonctionner LTSP, il est impératif de disposer d’un serveur DHCP opérationnel. Dans mon cas, le réseau utilise déjà un serveur DHCP qui n’est pas le même que le serveur LTSP.</p>

<p class="spip">Pour avoir plus d’informations sur l’installation d’une serveur DHCP, vous pouvez consulter mon mémo sur le sujet 
<br /></p>
<li> <a href="http://www.coagul.org/article.php3?id_article=167" class="spip_out">http://www.coagul.org/article.php3 ?id_article=167</a>
<p class="spip">Pour faire fonctionner LTSP, j’ai dû commencer par ajouter la ligne suivante dans le fichier « <strong class="spip">/etc/dhcp3/dhcpd.conf</strong> », pour indiquer l’adresse du serveur LTSP, car celui-ci est différent du serveur DHCP. Dans le cas où tout est sur le même serveur, cette ligne n’est pas nécessaire (Remplacer « pgltsp » par le nom ou l’adresse IP du serveur ltsp) :</p>

<p class="spip"><code class='spip_code' dir='ltr'>next-server         pgltsp;</code></p>

<p class="spip">Ensuite, il faut ajouter une ligne pour indiquer le chemin du système de fichiers utilisé par les terminaux qui sera utilisé via NFS (Remplacer « pgltsp » par le nom ou l’adresse IP du serveur ltsp) :</p>

<p class="spip"><code class='spip_code' dir='ltr'>option root-path    "pgltsp:/opt/ltsp/i386";</code></p>

<p class="spip">Pour finir, il faut indiquer le chemin du noyau pour un boot avec la norme Etherboot qui sera obtenu par le serveur TFTP :</p>

<p class="spip"><code class='spip_code' dir='ltr'>filename            "/lts/2.6.16.1-ltsp-2/bzImage-2.6.16.1-ltsp-2";</code></p>

<p class="spip">Ou le chemin du « bootloader » pour un boot avec la norme PXE :</p>

<p class="spip"><code class='spip_code' dir='ltr'>filename                "/lts/2.6.16.1-ltsp-2/pxelinux.0";</code></p>

<p class="spip"><strong class="spip">Remarque1</strong> : Il est important de vérifier que le chemin « /opt/ltsp/i386 » contient bien l’arborescence complète d’un système Linux (/bin, /dev, /etc,...) qui sera utilisé par les terminaux via NFS.</p>

<p class="spip"><strong class="spip">Remarque2</strong> : Il faut vérifier également que le noyau « bzImage-2.6.16.1-ltsp-2 » ou le bootloader « pxelinux.0 » existe bien dans le dossier « /tftpboot »</p>

<p class="spip"><strong class="spip">ATTENTION </strong> : Pour faire cohabiter les normes PXE et Etherboot sur le serveur DHCP, il est obligatoire d’utiliser une des deux normes par défaut et d’utiliser l’autre en spécifiant les adresses MAC des terminaux qui l’utiliseront.</p>

<p class="spip">L’exemple complet du fichier « <strong class="spip">/etc/dhcp3/dhcpd.conf </strong> » ci-dessous, permet d’utiliser la  norme « <strong class="spip"> pxe </strong> » par défaut pour tous les ordinateurs du réseau qui boot via la carte réseau et d’utiliser la norme « <strong class="spip"> Etherboot </strong> » uniquement pour l’ordinateur « ws001 » dont l’adresse mac est « 00:a0:cc:66:75:51 »</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>ddns-update-style none;<br />
option domain-name "mondomaine.com";<br />
option domain-name-servers 192.0.0.4, 194.2.0.50;<br />
option routers 192.0.0.151;<br />
<br />
default-lease-time 3600;<br />
max-lease-time 7200;<br />
log-facility local7;<br />
<br />
next-server             pgltsp;<br />
option root-path        "pgltsp:/opt/ltsp/i386";<br />
filename                "/lts/2.6.16.1-ltsp-2/pxelinux.0";<br />
<br />
subnet 192.0.0.0 netmask 255.255.255.0 {<br />
  range 192.0.0.170 192.0.0.254;<br />
}<br />
<br />
host ws001 {<br />
  hardware ethernet       00:a0:cc:66:75:51;<br />
  filename                "/lts/2.6.16.1-ltsp-2/bzImage-2.6.16.1-ltsp-2";<br />
}</code></div>
<p class="spip">Dans le cas de la mise ne place de plusieurs serveurs LTSP, c’est le serveur DHCP qui doit aiguiller le terminal vers le bon serveur.</p>

<p class="spip">Par exemple la section suivante à ajouter au fichier « <strong class="spip">/etc/dhcp3/dhcpd.conf </strong> » permet d’utiliser un serveur LTSP spécifique (achat-ltsp) pour le terminal ws021 possédant l’adresse MAC indiquée :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>host ws021 {<br />
        fixed-address           192.0.0.21;<br />
        hardware ethernet       00:0a:5e:51:78:f7;<br />
        next-server             achat-ltsp;<br />
        option root-path        "achat-ltsp:/opt/ltsp/i386";<br />
        filename                "/lts/2.6.16.1-ltsp-2/pxelinux.0";<br />
}</code></div>
<h3>4 - TFTP Configuration </h3>
<p class="spip">Le serveur TFTP (Serveur FTP limité) permet de fournir aux terminaux le noyaux linux ou le bootloader qui sera utilisé pour le démarrage.</p>

<p class="spip"><strong class="spip">ATTENTION</strong> : Sur Débian, il existe trois serveurs « <strong class="spip"> tftp </strong> » (tftpd, tftpd-hpa et atftpd) Le premier fonctionne uniquement avec la norme Etherboot et les deux autres avec les normes Etherboot et PXE (Ils supportent l’option tsize). Il est donc conseillé de ne pas utiliser le premier :</p>

<p class="spip"><code class='spip_code' dir='ltr'># aptitude install tftpd-hpa</code></p>

<p class="spip">Ensuite, j’ai dû activer le serveur « <strong class="spip"> tftpd </strong> » en modifiant manuellement la ligne ci-dessous dans le fichier « <strong class="spip">/etc/inetd.conf </strong> » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /tftpboot</code></p>

<p class="spip">Dans mon cas, j’ai modifié la fin de la ligne en remplaçant « /var/lib/tftpboot » par « <strong class="spip">/tftpboot </strong> »</p>

<p class="spip">Ensuite, il faut relancer « <strong class="spip"> inetd </strong> » pour prendre en compte les modifications :</p>

<p class="spip"><code class='spip_code' dir='ltr'># /etc/init.d/openbsd-inetd reload</code></p>

<p class="spip"><strong class="spip">Remarque 1 </strong> : Après l’installation et la configuration de « <strong class="spip">tftpd </strong> », il faut relancer le menu « Configure LTSP » pour que le programme « <strong class="spip"> ltspadmin </strong> » refasse les checking.</p>

<p class="spip"><strong class="spip">Remarque 2</strong> : Pour avoir plus de logs sur l’utilisation du serveur « <strong class="spip"> tftpd </strong> » lors du démarrage du terminal, il faut ajouter l’option « -v » avant « -s /tftpboot » dans « <strong class="spip">/etc/inetd.conf</strong> ».</p>

<h3>5 - Portmapper Configuration</h3>
<p class="spip">Pour valider ce menu, j’ai dû installer le paquet suivant<strong class="spip"> </strong> :</p>

<p class="spip"><code class='spip_code' dir='ltr'># aptitude install portmap</code></p>

<p class="spip">A la question « Portmap doit-il se limiter à l’adresse de bouclage 127.0.0.1 ? », il faut répondre « Non »</p>

<p class="spip"><strong class="spip">Remarque</strong> : Lors de ma dernière installation d’un serveur LTSP, ce paquet était déjà installé</p>

<h3>6 - NFS Configuration</h3>
<p class="spip">Pour valider ce menu, j’ai dû installer le paquet suivant<strong class="spip"> </strong> :</p>

<p class="spip"><code class='spip_code' dir='ltr'># aptitude install nfs-kernel-server</code></p>

<p class="spip">Ensuite, le menu « <strong class="spip">10 - Create /etc/exports entries</strong> » de « <strong class="spip">ltspadmin </strong> » permet d’ajouter dans le fichier de configuration de NFS (/etc/exports) les lignes nécessaires au fonctionnement de NFS.</p>

<p class="spip">Pour information, voici le contenu du fichier de configuration de NFS « /etc/exports » :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>/opt/ltsp               192.0.0.0/255.255.255.0(ro,no_root_squash,sync)<br />
/var/opt/ltsp/swapfiles 192.0.0.0/255.255.255.0 rw,no_root_squash,async)</code></div>
<p class="spip"><strong class="spip">Remarque</strong> : Le chemin de cette dernière entrée n’existe pas, mais cela ne semble pas gêner le fonctionnement du système.</p>

<p class="spip">Une fois le fichier de configuration de NFS correct, il est possible de lancer le démon :</p>

<p class="spip"><code class='spip_code' dir='ltr'># /etc/init.d/nfs-kernel-server restart</code></p>

<h3>7 - XDMCP configuration </h3>
<p class="spip">Ce menu permet de configurer KDM, GDM ou XDM pour qu’il autorise les clients légers à accéder au serveur X. Par défaut, le serveur X n’autorise pas les accès distants.</p>

<p class="spip">A la question « <strong class="spip">Do </strong><strong class="spip">you</strong><strong class="spip"> </strong><strong class="spip">want</strong><strong class="spip"> </strong><strong class="spip">to</strong><strong class="spip"> </strong><strong class="spip">disable</strong><strong class="spip"> </strong><strong class="spip">the</strong><strong class="spip"> graphique login</strong> », j’ai répondu « <strong class="spip">n</strong> », car je souhaite avoir un accès graphique sur le serveur.</p>

<p class="spip">Suite à cette validation, le fichier « <strong class="spip">/etc/kde3/kdm/kdmrc</strong> », et la section « <strong class="spip"> Xdmcp </strong> » doit contenir au moins ces deux lignes :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[Xdmcp]<br />
Enable=true<br />
Willing=/etc/kde3/kdm/Xwilling</code></div>
<p class="spip">Ensuite il faut recharger la configuration de KDM en saisissant la commande suivante :</p>

<p class="spip"><code class='spip_code' dir='ltr'># /etc/init.d/kdm reload</code></p>

<p class="spip">Pour finir, il faut que la résolution des noms soit opérationnelle. Le plus simple pour cela est d’utiliser le menu « 9 - Create /etc/hosts.allow  entries » de « <strong class="spip">ltspadmim </strong> »</p>

<p class="spip">Ensuite pour vérifier qu’il est possible de se connecter au serveur X à distance, il faut depuis un autre poste ayant un serveur X correctement configuré, saisir la commande suivante :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ Xnest :1 -query NomDuServeur</code></p>

<p class="spip"><strong class="spip">Remarque</strong> : Installer le paquet « <strong class="spip"> xnest </strong> », ci la commande ci-dessus n’est pas disponible.</p>

<p class="spip">Pour faire un test en plein écran, il faut saisir la commande suivante sous root :</p>

<p class="spip"><code class='spip_code' dir='ltr'># X :1 -query NomDuServeur</code></p>

<p class="spip"><strong class="spip">Remarque</strong> : Pour quitter ce nouvel écran, il faut faire « CTRL + ALT + F7 » et arrêter la commande »</p>

<p class="spip">Si ça ne fonctionne pas, il ne faut pas hésiter à regarder les logs sur le serveur :</p>

<p class="spip"><code class='spip_code' dir='ltr'># tail -f /var/log/syslog</code></p>

<h3>8 - Create /etc/hosts entries</h3>
<p class="spip">Je dispose d’un serveur DNS Bind, mais j’ai préféré ajouter les entrées des clients LTSP, dans le fichier /etc/hosts du serveur LTSP. Cela me paraissant plus simple à gérer.</p>

<p class="spip">Donc, j’ai répondu « y » a la question « Do you want to add entries to /etc/hosts » et celui-ci a créé 255 entrées nommées de ws000 à ws254 pour les adresses IP de 192.168.0.0 à 192.168.0.254.</p>

<p class="spip"><strong class="spip">Remarque1 </strong> : Mais cela ne semble pas fonctionner correctement car je n’arrive pas à configurer un terminal par son nom. Je le configure par son adresse IP ou son adresse Mac. Je pense que ce problème est lié au fait que mon serveur DHCP n’est pas le même que mon serveur LTSP.</p>

<h3>9 - Create /etc/hosts.allow  entries</h3>
<p class="spip">Ce fichier permet d’autoriser les postes du réseau à accéder au serveur LTSP. J’ai donc répondu « y ».</p>

<h3>10 - Create the /etc/exports  file</h3>
<p class="spip">J’ai déjà utilisé ce menu au chapitre « 6 - NFS Configuration » donc, je ne l’ai pas utilisé une nouvelle fois.</p>

<h3>11 - Create lts.conf file</h3>
<p class="spip">Le fichier « /opt/ltsp/i386/etc/lts.conf » donne la configuration par défaut des clients. J’ai donc répondu « y ».</p>

<h2>Configuration des terminaux</h2>
<p class="spip">Toute la configuration des terminaux est faite sur le serveur dans le fichier <strong class="spip">« /opt/ltsp/i386/etc/lts.conf »</strong> Par défaut, voici son contenu :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[Default]<br />
        SERVER             = 192.0.0.5<br />
        XSERVER            = auto<br />
        X_MOUSE_PROTOCOL   = "PS/2"<br />
        X_MOUSE_DEVICE     = "/dev/psaux"<br />
        X_MOUSE_RESOLUTION = 400<br />
        X_MOUSE_BUTTONS    = 3<br />
        USE_XFS            = N</code></div>
<p class="spip">La section [Default] est valable pour tous les terminaux.</p>

<p class="spip"><strong class="spip">Remarque </strong> : Vérifier que l’adresse IP de SERVER correspond bien à celle du serveur LTSP.</p>

<p class="spip">Pour activer la molette de la souris, j’ai modifié la ligne suivante :</p>

<p class="spip"><code class='spip_code' dir='ltr'>X_MOUSE_PROTOCOL   = "ImPS/2"</code></p>

<p class="spip">Pour avoir un clavier Français Azerty, j’ai ajouté ces deux lignes :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>XKbModel    = "pc105"<br />
XkbLayout   = "fr"</code></div>
<p class="spip">Pour faire fonctionner en mode 800x600 un terminal spécifique qui ne supportait pas le 1024x768, j’ai ajouté la section suivante en me basant sur l’adresse MAC du terminal :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[00:A0:CC:66:75:51]<br />
        XSERVER            = XF86_SVGA</code></div>
<p class="spip">J’aurais pu utiliser aussi l’adresse IP, mais celle-ci est susceptible de changer :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[192.0.0.191]<br />
        XSERVER            = XF86_SVGA</code></div>
<p class="spip">Normalement il est possible d’utiliser le nom du terminal, mais dans mon cas cela ne fonctionne pas :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[ws191]<br />
        XSERVER            = XF86_SVGA</code></div>
<p class="spip">Pour mettre un taux de rafraîchissement à 60Hz pour un terminal avec écran plat, j’ai ajouté la section suivante en me basant sur l’adresse MAC du terminal :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[00:0a:5e:51:78:f7]<br />
        X_VERTREFRESH      = "60"</code></div>
<p class="spip">Pour mettre une résolution de 1280x1024 avec un taux de rafraîchissement à 60Hz sur un terminal spécifique, j’ai ajouté cette section :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[00:0a:5e:51:78:f7]<br />
        X_VERTREFRESH      = "60"<br />
        X_MODE_0           = 1280x1024</code></div>
<p class="spip">Pour faire fonctionner une souris USB sur un terminal spécifique, j’ai ajouté cette section :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[00:14:c2:05:93:dd]<br />
        X_MOUSE_DEVICE     = "/dev/input/mouse0"</code></div>
<p class="spip">Après chaque modification de ce fichier, il est possible de faire « CTRL+ALT+Backspace » sur le terminal pour prendre en compte les modifications sans devoir le redémarrer complètement.</p>

<p class="spip">Pour les autres options disponibles, je conseille la lecture du chapitre « Paramètres du fichier lts.conf » de la documentation officielle :
<br /></p>
<li> <a href="http://ltsp.mirrors.tds.net/pub/ltsp/docs/ltsp-4.1-fr.html#AEN1294" class="spip_out">http://ltsp.mirrors.tds.net/pub/ltsp/docs/ltsp-4.1-fr.html#AEN1294</a>
<p class="spip"><strong class="spip">Remarque </strong> : Pour connaître l’adresse IP ou l’adresse MAC de la carte réseau d’un nouveau terminal, il faut regarder les logs au début du démarrage du terminal ou les logs dans le fichier « <strong class="spip"> syslog </strong> » du serveur DHCP.</p>

<h2>Démarrage des terminaux avec la norme Etherboot</h2>
<h3>Création d’une disquette pour démarrer (booter) un terminal</h3>
<p class="spip">Pour créer une disquette, il faut se rendre sur le site ci-dessous :
<br /></p>
<li> <a href="http://www.rom-o-matic.net/" class="spip_out">www.rom-o-matic.net</a>
<p class="spip">Sur la première page, il faut sélectionner la version de la norme « Etherboot » à utiliser. Je conseille d’utiliser la dernière version stable, mais il ne faut pas hésiter à essayer une autre version en cas de problème de boot.</p>

<p class="spip">Sur le deuxième écran il faut sélectionner le driver correspondant à la carte réseau du terminal. Pour trouver plus facilement le bon driver, il faut utiliser la page spéciale en cliquant sur le lien « here ». Si vous ne connaissez pas le type de votre carte réseau, il est possible de booter sur un live-cd comme la Knoppix et de faire un « <strong class="spip"> lspci </strong> » pour connaître le type de la carte.</p>

<p class="spip">Pour finir, il faut sélectionner le type de ROM par défaut « Floppy bootable ROM (.zdsk) ». et cliquer sur le bouton « Get Rom »</p>

<p class="spip">Ensuite pour enregistrer l’image sur une disquette depuis un poste Linux, il faut saisir la commande suivante :</p>

<p class="spip"><code class='spip_code' dir='ltr'># cat NomDuFichier.zdsk > /dev/fd0 </code></p>

<p class="spip">Pour un poste Windows, il faut utiliser l’utilitaire « rawrite » disponible à cette adresse :
<br /></p>
<li> <a href="http://www.minix-vmd.org/pub/Minix-vmd/dosutil/" class="spip_out">http://www.minix-vmd.org/pub/Minix-vmd/dosutil/</a>
<p class="spip">Il faut renommer l’image téléchargée en « boot.img » et sous Dos, il faut lancer la commande suivante pour créer la disquette :</p>

<p class="spip"># rawrite2 -f boot.img -d A</p>

<h3>Création d’un CD-ROM pour démarrer (booter) un terminal</h3>
<p class="spip">La procédure est la même que pour une disquette, sauf qu’il faut utiliser le type de ROM « .liso » et non pas « .iso » et encore moins « .zdsk ».</p>

<p class="spip">Ensuite, il faut graver cette image comme une image iso et non pas comme un simple fichier.</p>

<p class="spip"><strong class="spip">Remarque1 </strong> : Avec le logiciel de gravure « Prassi Primo CD » sous Windows, j’ai dû renommer le fichier « .liso » en « .iso » pour qu’il veuille bien me graver l’image. Avec K3B sous Linux, ce n’est pas nécessaire.</p>

<p class="spip"><strong class="spip">Remarque2 </strong> : Avec le même PC et la même carte Ethernet, le boot en utilisant le driver générique « Etherboot-pci-all » fonctionne avec la disquette mais pas avec le cd-rom. Pour arriver à booter depuis le cd-rom, j’ai dû utiliser le driver spécifique de la carte réseau. Avec le driver générique, j’avais le message d’erreur suivant :</p>

<p class="spip"><code class='spip_code' dir='ltr'>Could not find Kernel image : etherboo.t-p</code></p>

<h2>Démarrage des terminaux avec la norme PXE</h2>
<p class="spip">Avec cette norme, il n’y a que le bios de la carte mère à configurer pour indiquer qu’il faut booter via la carte réseau.</p>

<p class="spip">Par exemple sur un portable DELL Latitude, il faut modifier la séquence de boot pour mettre la  ligne « Onboard NIC » en premier</p>

<h2>Connexion et installation d’une imprimante sur un terminal</h2>
<h3>Configuration du terminal</h3>
<p class="spip">Sur un terminal, il est possible de connecter jusqu’à 3 imprimantes simultanément en utilisant les ports parallèles, séries ou USB.</p>

<p class="spip">Pour ajouter une imprimante, il faut ajouter ces lignes dans la configuration du terminal du fichier « <strong class="spip">/etc/lts.conf</strong> » :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[192.168.0.100]<br />
PRINTER_0_DEVICE = /dev/lp0<br />
PRINTER_0_TYPE   = P </code></div>
<p class="spip">La première ligne indique comment est connecté l’imprimante sur le terminal :
<br /></p>
<li> Port parallèle : /dev/lp0
<br /><li> Port série : /dev/ttyS0 
<br /><li> Port USB :  /dev/usb/lp0
<p class="spip">La deuxième ligne indique qu’il faut démarrer un serveur d’impression en local qui écoutera sur le port tcp 9100. Le paramètre « P » indique qu’il s’agit d’une imprimante parallèle. Pour une imprimante série ou USB, il faut utiliser le paramètre « S »</p>

<p class="spip"><strong class="spip">ATTENTION</strong> : Après avoir ajouté ces lignes, il faut redémarrer le terminal, car le serveur d’impression est lancé pendant la phase de boot de celui-ci.</p>

<p class="spip">Pour la deuxième imprimante connectée qui écoutera sur le port tcp 9101, il faut utiliser les paramètres « PRINTER_1_DEVICE » et « PRINTER_1_TYPE ».</p>

<p class="spip">Pour la troisième imprimante connectée qui écoutera sur le port tcp 9102, il faut utiliser les paramètres « PRINTER_2_DEVICE » et « PRINTER_2_TYPE ».</p>

<p class="spip"><strong class="spip">Remarque</strong> : Pour connaître les autres paramètres concernant l’impression, il faut consulter la documentation officielle.</p>

<p class="spip">La commande suivante permet de vérifier que le terminal est bien en écoute sur le port 9100 :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code># nmap 192.168.0.100 | grep 9100<br />
9100/tcp open  jetdirect</code></div>
<h3>Configuration du serveur</h3>
<p class="spip">Sur le serveur LTSP, il faut créer une nouvelle imprimante (avec Kprinter ou CUPS) de type réseau en indiquant l’adresse IP du terminal et le port 9100 ou 9101 ou 9102.</p>

<h2>Résolution des problèmes au démarrage :</h2>
<p class="spip">Sur ce point, je conseille vivement la lecture du chapitre « <strong class="spip">Diagnostic et mise au point</strong> » de la documentation officielle :
<br /></p>
<li> <a href="http://ltsp.mirrors.tds.net/pub/ltsp/docs/ltsp-4.1-fr.html#AEN874" class="spip_out">http://ltsp.mirrors.tds.net/pub/ltsp/docs/ltsp-4.1-fr.html#AEN874</a>
<p class="spip">Mais voici un bref résumé :</p>

<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Type de problème </strong></th><th scope='col'><strong class="spip">Résolution</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td>L’ordinateur ne boot pas et l’adresse MAC et le type de la carte réseau ne s’affichent pas. </td><td>Essayer avec un autre driver ou une autre version du driver Etherboot.Essayer avec le driver spécifique à la carte et non pas le driver all-pciProblème de lecteur de disquettes ou de CD-ROM.Carte réseau non reconnue -> Essayer avec une autre carte réseau.</td></tr>
<tr class="row_odd"><td>Reboot automatique après le chargement de la ROM</td><td>Essayer avec un autre driver ou une autre version du driver Etherboot.</td></tr>
<tr class="row_even"><td>Le message suivant apparaît « could not find kernel image »</td><td>Si le système LTSP fonctionne avec d’autres terminaux, essayer avec un autre driver ou une autre version du driver Etherboot.</td></tr>
<tr class="row_odd"><td>L’affichage reste bloqué sur la recherche du serveur DHCP </td><td>Problème dans la configuration du serveur DHCP.Essayer avec un autre driver ou une autre version du driver Etherboot.</td></tr>
<tr class="row_even"><td>Les messages de démarrage du noyau ne s’affichent pas.</td><td>Problème dans la configuration de TFTP. </td></tr>
<tr class="row_odd"><td>Le noyau démarre, mais affiche un kernel panic.</td><td>Problème de configuration de NFS</td></tr>
<tr class="row_even"><td>Le serveur X démarre mais seulement avec une croix comme curseur sur un fond gris</td><td>Problème de configuration de XDMCPVérifier l’adresse IP du fichier « ltsp.conf »</td></tr>
</tbody>
</table>
<h2>Problèmes rencontrés</h2>
<h3>Boot impossible depuis un CD-ROM</h3>
<p class="spip">Étant donné que certains de mes ordinateurs ne disposent pas de lecteurs de disquettes, mais uniquement d’un lecteur de CD-ROM, j’ai essayé de graver des images ISO en provenance du site <a href="http://www.rom-o-matic.net/" class="spip_out">www.rom-o-matic.net</a>, mais sans succès.</p>

<p class="spip">En bootant sur le cd-rom, la carte réseau n’était pas détectée, l’adresse mac n’était pas affichée et le démarrage restait bloqué sur l’écran :</p>

<p class="spip"><code class='spip_code' dir='ltr'><sleep></code></p>

<p class="spip">Avec l’aide de la liste [Bourginux], j’ai finis par trouver qu’il fallait utiliser le format « <strong class="spip"> .liso </strong> » et non pas le format « <strong class="spip"> .iso </strong> » :
<br /></p>
<li> <a href="http://www.coagul.org/article.php3?id_article=151" class="spip_out">http://www.coagul.org/article.php3 ?id_article=151</a>
<h3>Problème de Configuration de DHCP</h3>
<p class="spip">J’ai eu du mal à faire fonctionner LTSP, car mon serveur DHCP n’est pas le même que le serveur LTSP et j’ai dû ajouter cette ligne pour l’indiquer :</p>

<p class="spip"><code class='spip_code' dir='ltr'>next-server MonServeurLTSP</code></p>

<h3>Problème avec la carte réseau Digitale 21143 PC</h3>
<p class="spip">Cette carte réseau fonctionne correctement sous Linux et est reconnue avec un « <strong class="spip"> lspci </strong> » comme une « dec 21142/43 », mais après avoir essayé plusieurs drivers Etherboot de <a href="http://www.rom-o-matic.net/" class="spip_out">www.rom-o-matic.net</a>, je n’ai pas réussi à la faire booter sur le réseau. Voici les drivers testés :
<br /></p>
<li> Etherboot 5.3.9 : Etherboot-pci-all -> Driver impossible à télécharger
<br /><li> Etherboot 5.3.8 : Tulip / ds21142
<br /><li> Etherboot 5.3.7 : Tulip / ds21142
<br /><li> Etherboot 5.3.7 : Etherboot-pci-all
<br /><li> Etherboot 5.2.6 : Tulip / ds21142
<br /><li> Etherboot 5.2.2 : Driver non trouvé avec cette version d’Etherboot
<p class="spip">Pour tous ces drivers, le démarrage restait bloqué sur le message suivant :</p>

<p class="spip"><code class='spip_code' dir='ltr'>.TX Timeout !</code></p>

<h3>Problème de configuration du serveur DHCP</h3>
<p class="spip">Lors du boot d’un poste client juste après la détection de la carte réseau et l’affichage de l’adresse MAC, le démarrage du client est resté bloqué sur ce message :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>Searching for Server (DHCP)<br />
F?.F?.F?</code></div>
<p class="spip">Cela signifie que le serveur DHCP a bien été détecté, mais qu’il est mal configuré pour les clients qui boot sur le réseau.</p>

<h3>Problème avec la configuration de TFTP </h3>
<p class="spip">En utilisant le paquet « tftpd », j’ai eu le message suivant lors du boot avec la norme PXE :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>TFTP server does not support the tsize option<br />
Boot failed</code></div>
<p class="spip">Pour régler ce problème, il faut remplacer le paquet « <strong class="spip"> tftpd </strong> » par le paquet « <strong class="spip">tftpd-hpa</strong> », car celui-ci supporte l’option « <strong class="spip"> tsize </strong> »</p>

<h3>Problème avec la carte réseau D-LINK DFE 530 TX</h3>
<p class="spip">Après le boot du noyau trouvé dans tftp et juste avant le montage de la partition NFS, le démarrage restait bloqué sur le message suivant :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>crc error <6> Freeing initrd memory<br />
Freeing unused Kernel memory : 88k freed</code></div>
<p class="spip">Ou aléatoirement sur le message suivant</p>

<p class="spip"><code class='spip_code' dir='ltr'>Kernel panic : No init found</code></p>

<p class="spip">Normalement ce message apparaît quand le système de fichiers dans le partage NFS est vide mais ce n’était pas mon cas.</p>

<p class="spip">A la place du driver « D-LINK 530 TX », j’ai fait un essai avec le driver générique « <strong class="spip">Etherboot 5.3.7 : Etherboot-pci-all</strong> » et le boot s’est passé correctement.</p>

<p class="spip">D’une manière générale, ce driver générique a fonctionné pour toutes mes cartes réseaux et je le conseille donc vivement.</p>

<h3>Problème de carte graphique </h3>
<p class="spip">Sur de vieux PC (Pentium 166), la carte graphique ne supporte pas le mode 1024x768, et le serveur X refusait de démarrer en mettant le message suivant :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>Fatal server error<br />
no screen found</code></div>
<p class="spip">J’ai dû dans le fichier « <strong class="spip">lts.conf</strong> » remplacer la ligne « <strong class="spip">XSERVER=auto</strong> » par la ligne « <strong class="spip">XSERVER=XF86_SVGA</strong> » pour démarrer le serveur X en 800x600.</p>

<h3>Le boot ne fonctionne pas toujours du premier coup en PXE </h3>
<p class="spip">Lors du démarrage des terminaux bootant en PXE, il arrive très régulièrement (pour ne pas dire toujours) que le boot ne fonctionne pas du premier coup.</p>

<p class="spip">Je fais donc CTRL+ALT+SUPPR 1 ou 2 fois pour arriver à faire booter le terminal.</p>

<h3>Problèmes suite au changement de configuration réseau du serveur LTSP</h3>
<p class="spip">Après avoir changé l’adresse IP et la classe d’adresses de mon serveur LRSP, j’ai du effectuer plusieurs réglages pour le faire fonctionner :
<br /></p>
<li> Mettre la nouvelle adresse IP du serveur LTSP dans le fichier « <strong class="spip">/opt/ltsp/i386/etc/lts.conf</strong> »
<br /><li> Revoir les entrées de « <strong class="spip">/etc/hosts</strong> » en utilisant éventuellement « <strong class="spip"> ltspadmin </strong> »
<br /><li> Revoir les entrées de « <strong class="spip">/etc/hosts.allow</strong> » en utilisant éventuellement « <strong class="spip"> ltspadmin </strong> »
<br /><li> Revoir les entrées de « <strong class="spip">vim /etc/exports</strong> » en utilisant éventuellement « <strong class="spip"> ltspadmin </strong> »
<p class="spip"><strong class="spip">Remarque </strong> : Pour ce dernier point, j’ai du corriger le fichier manuellement, car « <strong class="spip"> ltspadmin </strong> » indiquait un chemin erroné.</p>

<h3>Problème carte réseau terminal HP t5000 avec le noyau 2.6.17.8 de LTSP</h3>
<p class="spip">Lors du chargement du noyau 2.6.17.8 via PXE sur un terminal HP t5000, j’ai obtenu le message suivant :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>ERROR! dhcpd failed!<br />
Kernel panic – not syncing: Attempted to kill init!</code></div>
<p class="spip">Pour régler ce problème, j’ai utilisé le noyau précédent « 2.6.16.1 »</p>

<h3>Défaut d’affichage du curseur avec terminal HP t5000 et LTSP 4.2</h3>
<p class="spip">Avec LTSP 4.2 et un terminal HP t5000, le curseur de la souris est affiché par moment avec un gros carré noir. Je n’ai pas ce problème avec d’autres terminaux ni avec ce terminal sous LTSP 4.1</p>

<p class="spip">Ce problème est lié à Xorg qui ne détecte pas correctement la carte graphique et la mémoire du terminal. Pour contourner ce problème, il faut indiquer explicitement le type et la mémoire de la carte graphique.  Voici un exemple de configuration complète d’un de mes terminaux :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[00:17:a4:f4:7a:b2]<br />
        XSERVER         = "via"<br />
        X_VIDEORAM      = "16384"<br />
        X_COLOR_DEPTH   = "24"<br />
        X_MODE_0        = "1280x1024"<br />
        X_HORZSYNC      = "60-70"<br />
        X_VERTREFRESH   = "60-75"</code></div>
<h3>Problème avec la résolution 1280x1024</h3>
<p class="spip">Quelque soit le terminal utilisé et la version de LTSP, je n’ai jamais réussi à utiliser la résolution d’affichage « 1280x1024 ». Le maximum que j’ai pu atteindre est « 1280x960 ».</p>

<p class="spip">Pour régler ce problème, il fallait simplement ajouter la ligne suivante au fichier « <strong class="spip">lts.conf</strong> » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>X_HORZSYNC = "60-70"</code></p>

<h3>Problème de fonctionnement de TFTP</h3>
<p class="spip">Sur un nouveau serveur LTSP en voulant démarrer mon premier terminal via PXE, il est resté bloqué sur le message suivant :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>PXE-E32 TFTP OPEN TIMEOUT<br />
PXE-MOF exiting intel PXE POM<br />
error: non system disk or disk error </code></div>
<p class="spip">Comme mon serveur TFTP était bien opérationnel et que le chemin vers le noyau était correcte, j’ai cherché et j’ai fini par trouvé que le problème venait de la configuration de DHCP et de la résolution des noms. Pour régler ce problème, j’ai remplacé dans la configuration du serveur DHCP le nom du serveur par son adresse IP sur les lignes « <strong class="spip">next-server</strong> » et « <strong class="spip">option root-path</strong> ».</p>

<h3>Autres sources d’informations en cas de problèmes</h3>
<p class="spip">Ce document contient les problèmes rencontrés par le laboratoire de CIL-CETRIL durant sa progression dans les méandres du boot PXE :
<br /></p>
<li> <a href="http://www.cetril.org/http://download.tuxfamily.org/assocoagul/drupal-files/spip/Journal_des_erreurs_ltsp.pdf" class="spip_out">http://www.cetril.org/IMG/pdf/Journal_des_erreurs_ltsp.pdf<a>
<h2>Historique des modifications</h2>
<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Version</strong></th><th scope='col'><strong class="spip">Date</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td>0.1</td><td>23/02/05</td><td>Création par Tony GALMICHE</td></tr>
<tr class="row_odd"><td>0.6</td><td>12/07/06</td><td>Mise à jour suite à installation troisième serveur LTSP</td></tr>
<tr class="row_even"><td>0.7</td><td>11/12/06</td><td>Mise à jour suite à l’installation d’un terminal HP 5000 sous LTSP 4.2</td></tr>
<tr class="row_odd"><td>0.83</td><td>03/04/07</td><td>Correction du problème du chapitre « Défaut d’affichage du curseur avec terminal HP t5000 et LTSP 4.2 »</td></tr>
<tr class="row_even"><td>0.9</td><td>03/04/07</td><td>Ajout chapitre « Installation d’une imprimante sur un terminal »</td></tr>
<tr class="row_odd"><td>1.0</td><td>31/03/08</td><td>Mise à jour suite à l’installation d’un nouveau serveur</td></tr>
</tbody>
</table>