<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.1//EN">

<!-- TOCTITLE="Table des Matières" -->

<book id="ltsp-4.1-0" lang="fr">

<bookinfo>
<title>LTSP - Linux Terminal Server Project - v4.1</title>

<authorgroup>
	<author>
	<firstname>James</firstname>
	<surname>McQuillan</surname>
	<affiliation>
	<address><email>jam@LTSP.org</email>
	</address>
	</affiliation>
	</author>
	<othercredit>
	<firstname>Pierre</firstname>
	<surname>Baco</surname>
	<affiliation>
		<jobtitle>Traduction française</jobtitle>
		<address><email>pbaco@carlit.net</email> </address>
	</affiliation>
	</othercredit>
	<othercredit>
	<firstname>Yonnel</firstname>
	<surname>Poivre-Le Lohé</surname>
	<affiliation>
		<jobtitle>Traduction française</jobtitle>
		<address><email>yonnel.poivre@psil.fr</email> </address>
	</affiliation>
	</othercredit>
	<othercredit>
	<firstname>Laurent</firstname>
	<surname>Wafflard</surname>
	<affiliation>
		<jobtitle>Traduction française</jobtitle>
		<address><email>laurent.wafflard@psil.fr</email> </address>
	</affiliation>
	</othercredit>
</authorgroup>

<revhistory>
<revision>
	<revnumber>4.1&nbsp;</revnumber>
	<date>2004-06-20</date>
	<authorinitials>jam</authorinitials>
</revision>
<revision>
	<revnumber>4.1.3-0-fr&nbsp;</revnumber>
	<date>2004-06-20</date>
	<authorinitials>jam</authorinitials>
</revision>
<revision>
	<revnumber>4.1.3-1-fr&nbsp;</revnumber>
	<date>2006-11-16</date>
	<authorinitials>PSIL</authorinitials>
</revision>
</revhistory>

<copyright>
	<year>2004</year>
	<holder>James A. McQuillan</holder>
</copyright>

<abstract>
<para>
	GNU/Linux est une plate-forme idéale pour le déploiement de stations sans disque ou "clients légers".
	L'objectif premier de ce document est d'expliquer comment déployer des clients légers
	en utilisant LTSP. Ce document couvre également plusieurs autres éléments relatifs aux
	clients légers et stations de travail.
</para>
</abstract>
</bookinfo>

<preface>
<title>Introduction</title>

<para>
	Le Projet de Serveur de Terminaux Linux (LTSP) offre une solution simple pour utiliser
	des micro-ordinateurs peu coûteux (ou recyclés) comme des terminaux graphiques ou caractère
	d'un serveur GNU/Linux.
</para>

<para>
		Dans un environnement classique, on trouve des micro-ordinateurs à base Intel,
		relativement puissants, sur chaque bureau. Chacun dispose de plusieurs giga-octets
		d'espace disque. Les utilisateurs stockent leurs données personnelles sur ces disques
		durs locaux où des sauvegardes sont rarement (voire jamais) effectuées.
</para>

<para>
	Est-il vraiment raisonnable d'installer un ordinateur complet sur chaque bureau ?
</para>

<para>
	Nous pensons que non.
</para>

<para>
	Il existe heureusement une autre solution. En utilisant LTSP, vous
	pourrez (ré)utiliser des PCs technologiquement dépassés, en retirer le disque dur,
	le lecteur de disquette et de CD-ROM et y installer une carte réseau bootable. 
	La plupart des cartes réseau disposent d'un emplacement prévu pour accueillir un "bootrom"
	(un circuit contenant un programme de démarrage), qu'il suffit d'insérer pour démarrer depuis le réseau.
</para>

<para>
	Pendant la phase de démarrage, la station sans disque (client léger) récupère son adresse
	IP et un noyau Linux depuis le serveur, puis monte la racine de son système de fichiers (/) 
	depuis ce même serveur via NFS.
</para>

<para>
	Le client léger peut être configuré dans un des 3 modes suivants :
	<itemizedlist>
	<listitem>
		<para><command>Interface graphique X Window</command></para>
		<para>
		Avec X Window, le client léger peut être utilisé pour
		accéder à n'importe quelle application installée sur le serveur LTSP,
		ou n'importe quel autre serveur du même réseau.
		</para>
	</listitem>
	</itemizedlist>

	<itemizedlist>
	<listitem>
		<para><command>Sessions Telnet en mode caractère</command></para>
		<para>
		Le client léger peut créer plusieurs sessions telnet vers le serveur.
		Chacune de ces sessions telnet sera accessible sur un écran virtuel
		séparé. En utilisant les touches Alt-F1 à Alt-F9, vous pouvez ainsi passer
		d'une session telnet à une autre.
		</para>
	</listitem>
	</itemizedlist>

	<itemizedlist>
	<listitem>
		<para><command>Ligne de commande (prompt shell)</command></para>
		<para>
		Le client léger peut enfin être configuré pour entrer directement
		dans un shell bash en mode console locale. Ceci est particulièrement
		utile pour la mise au point en cas de problème avec X Window ou NFS.
		</para>
	</listitem>
	</itemizedlist>
</para>

<para>
		Le grand avantage de LTSP est de pouvoir déployer un nombre important de clients
		légers à partir d'un seul serveur GNU/Linux. Combien ? Cela dépend bien sûr des 
		capacités du serveur et des applications qui seront utilisées.
</para>

<para>
		Il est tout à fait possible de faire fonctionner Mozilla et Open Office sur 
		50 clients légers reliés au même serveur bi-processeur P4 2.4 Ghz avec 4 Go de Ram.
		Nous savons que cela marche. Et la charge moyenne du serveur dépasse rarement 1.0 !
</para>

<sect1>
	<title>Limite de responsabilité</title>
	<para>
	En aucun cas l'auteur, le(s) distributeur(s) et toute autre personne ayant contribué
	à ce document ne peuvent être tenus responsables pour les dommages physiques,
	financiers, moraux ou autres qui pourraient survenir par 
	la mise en pratique des recommandations exposées dans ce texte.
	</para>
</sect1>

<sect1 id="copyright">
	<title>Droit d'auteur (Copyright) et Licence</title>
	<para>
	Ce document est Copyright 2004 par James McQuillan, distribué
	selon les termes de la licence "GNU Free Documentation License",
	dont la référence est incluse dans le présent document. Le texte de la licence peut être consulté à l'adresse http://www.gnu.org/licenses/fdl.htm
	</para>
</sect1>
</preface>

<chapter>
<title>Principes de fonctionnement</title>
<para>
		L'initialisation et le démarrage (boot) d'un client léger s'effectuent en plusieurs étapes.
		Si un problème devait apparaître, une bonne connaissance de chacune de ces
		étapes facilitera grandement la mise au point et la correction du problème. Ce chapitre décrit
		en détail ce processus de démarrage.
</para>
<para>
	Pour démarrer un client léger, quatre services de base sont nécessaires sur le serveur.
	Ce sont :
	<itemizedlist>
	<listitem>
		<para>DHCP</para>
	</listitem>
	<listitem>
		<para>TFTP</para>
	</listitem>
	<listitem>
		<para>NFS</para>
	</listitem>
	<listitem>
		<para>XDMCP</para>
	</listitem>
	</itemizedlist>

</para>

<para>
	La configuration de LTSP est très souple : ces services peuvent
	être fournis par le même serveur, ou par des serveurs différents.
	Pour l'exemple qui suit, nous utiliserons une configuration simple,
	dans laquelle tous les services sont fournis par le même serveur.
</para>

<sect1>
<title>Etapes de démarrage du client léger</title>

<orderedlist spacing="normal">

	<listitem>
	<para>
		Chargement du noyau Linux en mémoire du client léger.
		Ceci peut être réalisé de plusieurs manières :
		<orderedlist>
		<listitem>
		<para>
		avec un Bootrom (Etherboot,PXE,MBA,Netboot) ;
		</para>
		</listitem>
		<listitem>
		<para>
		à partir du lecteur de disquette ;
		</para>
		</listitem>
		<listitem>
		<para>
		à partir du disque dur ;
		</para>
		</listitem>
		<listitem>
		<para>
		depuis un CD-ROM ;
		</para>
		</listitem>
		<listitem>
		<para>
		ou d'une clé mémoire USB.
		</para>
		</listitem>
		</orderedlist>
	</para>
	<para>
	Chacune de ces méthodes de démarrage sera détaillée dans ce chapitre. 
	</para>
	</listitem>

	<listitem>
	<para>
				Une fois le noyau Linux chargé dans la mémoire du client léger, il va 
				commencer à s'exécuter.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Le noyau va initialiser l'ensemble du système et tous les périphériques
		qu'il peut reconnaître.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		C'est ici que les choses sérieuses commencent : pendant le
		chargement du noyau, une image de disque virtuel est également
		chargée en mémoire du client léger.
		Un argument de la ligne de commande
		<command>root=/dev/ram0</command> demande au noyau
		de monter cette image comme racine de son système de fichiers.
	</para>
	<para></para>
	</listitem>
		
	<listitem>
	<para>
		En principe, lorsque le noyau a terminé son démarrage, il lance
		le programme <command>init</command> pour continuer l'initialisation du système.
		Mais ici, il est demandé au noyau de lancer un petit script shell se trouvant sur
		le disque virtuel. Ceci est fait en passant l'argument <command>init=/linuxrc</command> 
		sur la ligne de commande du noyau.
	</para>
	<para></para>
	</listitem>
		
	<listitem>
	<para>
		Le script <command>/linuxrc</command> commence par un balayage (scan) du
		bus PCI du client léger, afin de rechercher une carte réseau. Chaque 
		composant PCI trouvé est comparé aux descriptions stockées dans le fichier
		<filename>/etc/niclist</filename>. En cas d'égalité, le nom du module-driver correspondant à
		la carte réseau trouvée est renvoyé par le script, et ce module est chargé
		en mémoire. Pour les cartes ISA (qui ne sont pas détectées automatiquement), 
		le nom du module-driver DOIT impérativement être spécifié sur la ligne de
		commande du noyau, ainsi que ses paramètres éventuels (IRQ, adresses E/S, DMA, etc).
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Un petit module client DHCP appelé <command>dhclient</command> est ensuite
			lancé, afin d'envoyer une nouvelle requête au serveur DHCP.
			Cette requête, émise depuis le mode user, est nécessaire pour récupérer
			des informations supplémentaires que la première requête DHCP du bootrom
			ne pouvait retourner.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Lorsque <command>dhclient</command> reçoit une réponse du serveur,
		il exécute alors le script <command>/etc/dhclient-script</command>,
		qui récupère les informations renvoyées et configure l'interface eth0.
	</para>
	<para></para>
	</listitem>


	<listitem>
	<para>
			Jusqu'à cette étape, le système de fichiers était un disque virtuel en ram.
			Le script <command>/linuxrc</command> va maintenant monter un nouveau système de fichiers sur sa racine (root)
			via NFS. Le répertoire exporté par NFS depuis le serveur vers le client léger
			est en principe	<filename class="directory">/opt/ltsp/i386</filename>.
		Cette opération ne peut être réalisée en montant directement ce répertoire sur <filename class="directory">/</filename>.  
		Il doit d'abord être monté sur <filename class="directory">/mnt</filename>, puis la commande 
		<command>pivot_root</command> est lancée.
		<command>pivot_root</command> va échanger la racine courante (le disque virtuel) avec le nouveau
		système de fichiers. Lorsque cela est terminé, le répertoire exporté par NFS est
		monté sur <filename class="directory">/</filename> et l'ancienne racine est montée sur <filename class="directory">/oldroot</filename>.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Une fois le montage et l'échange de racine effectués,
		le script <command>/linuxrc</command> a terminé son travail. Il est temps d'appeler
		le véritable programme <command>/sbin/init</command>.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Init va lire le fichier <filename>/etc/inittab</filename> 
		et mettre en place l'environnement du client léger.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Un des premières commandes d'<filename>inittab</filename> à être exécutée est le script
		<command>rc.sysinit</command> qui restera actif tant que le client
		léger est dans sa phase '<emphasis role="strong">sysinit</emphasis>'.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Le script <command>rc.sysinit</command> crée un nouveau disque virtuel en mémoire (ramdisk)
		de 1 Mo, destiné à contenir toutes les données et informations
		devant être écrites ou modifiées par la suite (disque en lecture/écriture).
		</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Ce disque virtuel est monté en tant que <filename class="directory">/tmp</filename>
		sur le système de fichiers local du client léger.
		Tous les fichiers en lecture/écriture du système de fichiers seront stockés dans
		<filename class="directory">/tmp</filename>, et ce même s'ils sont dans d'autres
		répertoires locaux, grâce à des liens symboliques pointant vers ces fichiers.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Le (pseudo) système de fichiers <filename class="directory">/proc</filename> est ensuite monté.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Le fichier <filename>lts.conf</filename> est examiné, et
		tous les paramètres spécifiques au client léger en cours d'initialisation
		sont exportés comme variables d'environnement, afin que le
		script <command>rc.sysinit</command> puisse les utiliser par la suite.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Si le client léger est configuré pour accéder à un fichier-partition de swap via NFS,
		le répertoire <filename class="directory">/var/opt/ltsp/swapfiles</filename> du serveur
		est monté sur le répertoire <filename class="directory">/tmp/swapfiles</filename> du client léger.
		Si le fichier de swap, pour ce client fin, n'existe pas encore dans ce répertoire, il est automatiquement créé.
		Sa taille est paramétrable (à spécifier dans le fichier <filename>lts.conf</filename> du serveur).
	</para>
	<para>
		Le fichier de swap est alors activé par la commande <command>swapon</command>.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		L'interface réseau <emphasis role="strong">loopback</emphasis> (la boucle locale, interface virtuelle) est ensuite
		configurée. Il s'agit de l'interface "interne" ayant pour adresse IP
		<emphasis>127.0.0.1</emphasis>.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Si l'exécution locale d'applications est activée, le répertoire 
		<filename class="directory">/home</filename> du serveur est exporté via NFS pour être monté sur le
		répertoire <filename class="directory">/home</filename> du client léger, afin que les applications puissent
		avoir accès aux répertoires personnels des utilisateurs.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Plusieurs sous-répertoires sont créés dans
		<filename class="directory">/tmp</filename> pour stocker les fichiers
		temporaires nécessaires au fonctionnement du système. Les sous-répertoires 
		comme :
		<orderedlist>
		<listitem>
			<para>
			<filename class="directory">/tmp/compiled</filename>
			</para>
			<para></para>
		</listitem>
		<listitem>
			<para>
			<filename class="directory">/tmp/var</filename> 
			</para>
			<para></para>
		</listitem>
		<listitem>
			<para>
			<filename class="directory">/tmp/var/run</filename> 
			</para>
			<para></para>
		</listitem>
		<listitem>
			<para>
			<filename class="directory">/tmp/var/log</filename> 
			</para>
			<para></para>
		</listitem>
		<listitem>
			<para>
			<filename class="directory">/tmp/var/lock</filename> 
			</para>
			<para></para>
		</listitem>
		<listitem>
			<para>
			<filename class="directory">/tmp/var/lock/subsys</filename>
			</para>
			<para></para>
		</listitem>
		</orderedlist>
	</para>
	<para></para>

	<para>
		seront donc créés.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Le fichier <filename>/tmp/syslog.conf</filename> est créé.
		Ce fichier contient les paramètres nécessaires au fonctionnement
		du daemon <command>syslogd</command>, afin d'indiquer vers quel
		serveur du réseau le client léger doit envoyer ses messages à journaliser (logs).
		Le nom du serveur syslog est spécifié dans le fichier <filename>lts.conf</filename>.
		Il existe un lien symbolique <filename>/etc/syslog.conf</filename> (position habituelle
		de  <filename>syslog.conf </filename>) qui pointe vers	<filename>/tmp/syslog.conf</filename>.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Le daemon <command>syslogd</command> est lancé, avec le fichier de 
		paramètres créé à l'étape précédente.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
	Lorsque le script <command>rc.sysinit</command> est terminé, le contrôle revient au 
	programme <command>/sbin/init</command>, qui va alors changer le niveau d'exécution (runlevel)
	de <emphasis role="strong">sysinit</emphasis> à <emphasis role="strong">5</emphasis>.
	</para>
	<para>
	Ceci aura pour effet de lancer toutes les autres commandes 
	spécifiées dans le fichier
	<filename>/etc/inittab</filename>.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
	Par défaut, le fichier <filename>inittab</filename> contient des lignes demandant
	l'exécution du script <command>/etc/screen_session</command>
	sur tty1, tty2 et tty3. Il est donc possible d'utiliser 3 sessions
	simultanées sur le client léger. 
	Le type de ces sessions est contrôlé par les paramètres
	<emphasis role="strong">SCREEN_01</emphasis>, 
	<emphasis role="strong">SCREEN_02</emphasis> et
	<emphasis role="strong">SCREEN_03</emphasis> que l'on trouve dans le fichier
	de configuration <filename>lts.conf</filename>.
	</para>
	<para>
	Des lignes supplémentaires peuvent être ajoutées dans
	<filename>inittab</filename>, si d'autres sessions sont nécessaires.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Si le paramètre <emphasis role="strong">SCREEN_01</emphasis> de <filename>lts.conf</filename>
		a pour valeur <emphasis role="strong">startx</emphasis>,
		le script <command>/etc/screen.d/startx</command> est
		exécuté, ce qui lancera l'interface graphique X Window sur le client léger.
	</para>
	<para>
		Dans le fichier <command>lts.conf</command>, il existe un 
		paramètre appelé <command>XSERVER</command>.  Si ce paramètre
		est absent, ou a pour valeur "<command>auto</command>", le script <command>startx</command>
		tente de détecter automatiquement quelle est la carte vidéo du client léger.
		Si la carte est de type PCI ou AGP, l'identifiant PCI de la carte (et de son fabricant) sera
		récupéré et comparé aux identifiants contenus dans le fichier
		<filename>/etc/vidlist</filename>.
	</para>
	<para>
		Si la carte vidéo est supportée par Xorg 6.7, la routine <command>pci_scan</command>
		renverra le nom du module-driver correspondant. Si la carte
		est seulement supportée par XFree86 3.3.6, <command>pci_scan</command> renverra
		le nom du serveur X à utiliser.
		Le script <command>startx</command> sait faire la différence entre les deux systèmes car le
		nom des anciens serveurs X 3.3.6 commence toujours par 'XF86_', tandis que
		le nom des modules du nouveau serveur Xorg est en minuscules, comme par exemple
		<emphasis>ati</emphasis> ou <emphasis>trident</emphasis>.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Si Xorg est utilisé, le script <command>/etc/build_x4_cfg</command>
		est appelé pour créer un fichier <filename>XF86Config</filename> correspondant à la carte vidéo trouvée.
		Si XFree86 3.3.6 est utilisé, le script <command>/etc/build_x4_cfg</command> 
		est appelé pour créer ce fichier. Ces fichiers sont alors
		stockés dans le répertoire <filename class="directory">/tmp</filename>, qui, on s'en souvient, est
		un disque virtuel (ramdisk), accessible seulement depuis et par le client léger.
	</para>
	<para>
		Le fichier <filename>XF86Config</filename> est également créé en fonction des paramètres
		trouvés dans le fichier de configuration <filename>/etc/lts.conf</filename>.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Une fois le fichier XF86Config créé, le script 
		<command>startx</command> lance le serveur X correspondant avec ce nouveau
		fichier de configuration.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Le serveur X lance alors une requête <emphasis role="strong">XDMCP</emphasis>
		au serveur LTSP, qui ouvre un écran de login.
	</para>
	<para></para>
	</listitem>

	<listitem>
	<para>
		Arrivé à ce stade, l'utilisateur peut s'identifier et se connecter (login)
		au serveur. Une fois authentifié, l'utilisateur a enfin accès à une nouvelle session
		graphique sur le serveur, et à tous les programmes installés sur ce dernier.
	</para>
	<para>
		Au premier abord, ceci est un peu déroutant. L'utilisateur est assis face
		au client léger, mais tout le travail se déroule sur le serveur. Tous les programmes 
		sont exécutés sur le serveur, mais leur sortie est affichée sur l'écran
		du client léger.
	</para>
	<para></para>
	</listitem>

</orderedlist>
</sect1>

<sect1>
<title>Téléchargement du noyau en mémoire du client léger.</title>
<para>
Le téléchargement du noyau Linux dans la mémoire du client
léger peut être réalisé de plusieurs façons :
	</para>
<itemizedlist>
<listitem>
	<para>bootrom</para>
</listitem>
<listitem>
	<para>média local</para>
	</listitem>
</itemizedlist>
<para></para>

<sect2>
<title>Bootrom</title>
<itemizedlist>
	<listitem>
	<para>Etherboot</para>
	<para>
	Etherboot est un projet de bootrom open-source (libre) très connu.
	Il contient les drivers de nombreuses cartes réseau,
	et fonctionne parfaitement avec LTSP.
	</para>
	<para>
	Pour pouvoir être téléchargés via Etherboot, les noyaux Linux
	doivent être "marqués" avec l'utilitaire
	<command>mknbi-linux</command>, qui prépare le noyau pour un démarrage (boot) par
	le réseau. Du code supplémentaire est inséré au début du noyau, tandis que
	le fichier <filename>initrd</filename> est ajouté à la fin.
	</para>
	<para>
	Les noyaux fournis avec LTSP sont déjà marqués et prêts à être téléchargés
	par Etherboot.
	</para>
	<para>
	Le code Etherboot peut aussi être stocké sur une disquette. Ceci est très 
	pratique lorsqu'on n'a pas la possibilité d'intégrer Etherboot dans une PROM, ou 
	simplement pour effectuer des tests avant de programmer une PROM.
	</para>
	</listitem>
	<listitem>
	<para>PXE</para>
	<para>
	A l'origine, PXE est une partie de la spécification 'Wired for Management' datant de la fin des années 90,
	décrivant une technologie de bootrom appelée
	<emphasis>Pre-boot Execution Environment</emphasis>, plus communément
	abrégée en <emphasis role="strong">PXE</emphasis>.
	</para>

	<para>
	Un bootrom PXE peut télécharger un fichier de 32 Ko maximum.
	Mais un noyau Linux est nettement plus gros. En conséquence, 
	LTSP est configuré pour télécharger un "boot-loader" (chargeur) de 2ème niveau
	appelé <emphasis role="strong">pxelinux</emphasis>. pxelinux est
	assez petit pour être téléchargé par PXE, pour ensuite (2ème niveau) 
	télécharger lui même des fichiers bien plus gros, comme un noyau Linux.
	</para>
	</listitem>
	<listitem>
	<para>MBA</para>
	<para>
	Managed Boot Agent (MBA) est un bootrom conçu par la société
	<emphasis role="strong">emBoot</emphasis>.  A l'origine, emBoot était le
	département "Lanworks" de 3Com.  MBA supporte en fait 4 bootroms en un seul.
	Il peut gérer PXE, TCP/IP, RPL et Netware.
	</para>
	<para>
	L'implémentation PXE de MBA fonctionne parfaitement. Il est possible de l'utiliser
	avec pxelinux pour télécharger un noyau Linux.
	</para>
	<para>
	L'option <emphasis role="strong">TCP/IP</emphasis> de MBA peut aussi
	être utilisée, mais le noyau doit subir une préparation spéciale,
	avec l'utilitaire <command>imggen</command>.
	</para>
	</listitem>
	<listitem>
	<para>Netboot</para>
	<para>
	Netboot, comme Etherboot, est un autre projet libre d'images bootrom.
	Sa particularité est de construire un bootrom en "encapsulant" les drivers
	NDIS ou les packet drivers originaux fournis avec les cartes réseau.
	</para>
	</listitem>
</itemizedlist>
</sect2>

<sect2>
<title>Média local</title>
<itemizedlist>
	<listitem>
	<para>Disquette</para>
	<para>
	Il y a 2 façons de démarrer un client léger LTSP à partir d'un lecteur de disquette.
	La première consiste à copier le code d'EtherBoot dans le secteur de
	démarrage d'une disquette. Une fois chargé, il fonctionnera exactement comme
	une véritable bootrom installée sur la carte réseau. Cette dernière sera 
	initialisée, puis le noyau Linux sera chargé depuis le serveur LTSP.
	</para>
	<para>
	Il est également possible de copier la totalité d'un noyau Linux et son fichier initrd
	sur une disquette, et de démarrer à partir de celle ci.
	Toutefois, et à condition que le noyau tienne sur la disquette, le chargement
	sera bien plus lent qu'avec la première méthode (par le réseau).
	</para>
	</listitem>
	<listitem>
	<para>Disque dur</para>
	<para>
	Le même noyau (et son initrd) peut être installé sur un disque dur local, 
	dont le secteur de démarrage (MBR) aura été initialisé avec LILO ou GRUB.
	Il est aussi possible de simplement copier le code Etherboot sur le secteur de
	démarrage du disque dur, qui agira alors exactement comme un
	bootrom ou une disquette.
	</para>
	</listitem>
	<listitem>
	<para>CD-ROM</para>
	<para>
	Si le client léger permet de démarrer depuis le lecteur de CD-ROM,
	un CD-ROM bootable peut être utilisé, contenant soit un noyau Linux
	entier (et son initrd) soit le code Etherboot.
	</para>
	</listitem>
	<listitem>
	<para>Périphérique USB</para>
	<para>
	Tout comme un CD-ROM, une disquette ou un disque dur, un périphérique (clé, disque dur, ...)
	USB peut être utilisé pour démarrer un client léger (si le BIOS le supporte).
	Selon sa taille, le périphérique USB peut héberger le code Etherboot ou
	un noyau Linux complet et son fichier initrd.
	</para>
	</listitem>
</itemizedlist>
</sect2>

</sect1>

</chapter>


<chapter>
<title>Installation de LTSP sur le serveur</title>
<para>
Il est préférable de considérer LTSP comme une distribution Linux complète, à ceci près
qu'il s'agit d'une distribution installée "par dessus" la distribution
déjà installée sur un serveur hôte. Ce serveur hôte peut utiliser n'importe
quelle distribution Linux. De fait, il n'y a pas d'obligation stricte à ce que
le serveur fonctionne sous Linux.
Le seul pré-requis est que le serveur puisse être un serveur NFS (Network File
System). La majorité des systèmes Unix propose cette fonctionnalité. Et de fait, certaines
versions de Windows pourraient être configurées pour héberger un serveur LTSP.
</para>

<para>
La mise en place d'un serveur LTSP se déroule en 3 étapes.
<itemizedlist>
	<listitem>
	<para>Installation des utilitaires LTSP.</para>
	</listitem>

	<listitem>
	<para>Installation des packages clients LTSP (pour les clients légers).</para>
	</listitem>

	<listitem>
	<para>Configuration des services requis par LTSP.</para>
	</listitem>

</itemizedlist>
</para>

<sect1>
	<title>Installation des utilitaires LTSP</title>
<para>
	Depuis sa version 4.1, LTSP dispose d'un package d'utilitaires pour
	installer (télécharger) et gérer tous les autres packages LTSP (tout
	ce qui concerne les clients légers), et pour configurer les services
	sur le serveur LTSP.      
</para>

<para>
	L'utilitaire d'administration s'appelle <command>ltspadmin</command> et
	celui de configuration s'appelle <command>ltspcfg</command>.
	Ces deux programmes font partie du package <command>ltsp-utils</command>.
</para>

<para>
	Le package <emphasis role="strong">ltsp-utils</emphasis> est disponible soit
	en format <emphasis role="strong">RPM</emphasis>, soit en format
	<emphasis role="strong">TGZ</emphasis> (tar compressé). Vous pouvez choisir
	le format qui vous convient et suivre les instructions d'installation suivantes.
</para>

<sect2>
	<title>Installation du package RPM</title>
	<para>
	Téléchargez la dernière version du package RPM <command>ltsp-utils</command> 
	et installez-la en utilisant la commande suivante:
	<programlisting>
		rpm -ivh ltsp-utils-0.1-0.noarch.rpm
		</programlisting>
	Cette commande installera les utilitaires sur le serveur.
	</para>
</sect2>

<sect2>
	<title>Installation du package TGZ</title>
	<para>
	Téléchargez la dernière version du package TGZ <command>ltsp-utils</command> 
	et installez-la en utilisant les commandes suivantes:
	<programlisting>
			tar xzf ltsp-utils-0.1-0.noarch.tgz
			cd ltsp_utils
			./install.sh
			cd ..
			</programlisting>
	Ces commandes installeront les utilitaires sur le serveur. Ce format
	de package peut être utile pour les distributions Linux n'utilisant pas
	le format RPM (ex: Debian).
	</para>
</sect2>
</sect1>

<sect1>
	<title>Installation des packages clients LTSP</title>
	<para>
	Une fois l'installation du package <command>ltsp-utils</command> terminée, on
	peut alors lancer la commande <command>ltspadmin</command>.
	Cet utilitaire se charge de la gestion des packages, entre autres 
	en interrogeant le site de téléchargement de LTSP pour en obtenir une liste à jour.
	</para>

	<para>
	En lançant la commande <command>ltspadmin</command> on obtient l'écran
	suivant:
	</para>
	<para>
	<figure>
	<title>Installation de LTSP - Ecran principal</title>
	<GRAPHIC FILEREF="pics/installer_main_window.jpg"
		FORMAT="JPG"
		SRCCREDIT="James McQuillan, 2004" >
	</figure>

	</para>

	<para>
	A partir de ce menu, choisissez l'option "Install/Update". Si le programme
	est lancé pour la première fois, l'écran de configuration suivant apparaît:
	</para>
	<para>
	<figure>
	<title>Installation de LTSP - Ecran de configuration</title>
	<GRAPHIC FILEREF="pics/installer_config_window.jpg"
		FORMAT="JPG"
		SRCCREDIT="James McQuillan, 2004" >
	</figure>
	</para>

	<para>
	Dans l'écran <emphasis role="strong">configuration</emphasis>,
	vous pouvez initialiser certains paramètres utilisés
	par le programme d'installation pour télécharger et installer les autres
	packages LTSP.
	Ces paramètres sont:
	<variablelist>

	<varlistentry>
	<term><command>Where to retrieve packages from</command></term>
	<listitem>
		<para>
		(Où récuperer les packages). Il s'agit d'une URL 
		qui pointe vers le serveur de dépôt des packages.
		Par défaut, il s'agit de
		<filename>http://www.ltsp.org/ltsp-4.1</filename>, mais si
		vous souhaitez installer les packages depuis une source locale,
		vous pouvez utiliser la syntaxe <filename>file:</filename>.
		Par exemple, si les packages sont stockés sur un CD-ROM, et que ce
		dernier est monté sur <filename>/mnt/cdrom</filename>, il faut
		alors indiquer:
		<filename>file:///mnt/cdrom</filename>. (Noter les 3 slashes).
		</para>
		<para></para>
	</listitem>
	</varlistentry>

	<varlistentry>
	<term><command>In which directory would you like to place the LTSP client tree</command></term>
	<listitem>
		<para>
		(Dans quel répertoire souhaitez-vous installer l'arborescence LTSP pour les clients légers?)
		C'est le répertoire où l'arborescence utilisée par les clients légers sera créée.
		Par défaut, il s'agit de <filename>/opt/ltsp</filename>.
		Si ce répertoire n'existe pas, il sera créé.
		</para>
		<para>
		Dans ce répertoire, une arborescence sera créée pour chaque
		architecture de client léger. Pour l'instant, seuls les clients légers 
		à base de x86 sont officiellement supportés par LTSP, mais plusieurs
		équipes travaillent sur le portage vers d'autres architectures, comme
		les stations PPC ou Sparc.
		</para>
		<para></para>
	</listitem>
	</varlistentry>

	<varlistentry>
	<term><command>HTTP Proxy</command></term>
	<listitem>
		<para>
		(Serveur Proxy HTTP) Si le serveur est protégé par un pare-feu,
		et/ou que l'accès à l'Internet passe par un serveur proxy,
		on peut spécifier ici l'URL du proxy à utiliser, protocole et numéro
		de port inclus. Par exemple:
		<filename>http://firewall.mondomaine.com:3128</filename>.
		</para>
		<para>
		Si aucun proxy HTTP n'est nécessaire, la valeur de ce paramètre doit être 
		"<filename>none</filename>".
		</para>
		<para></para>
	</listitem>
	</varlistentry>

	<varlistentry>
	<term><command>FTP Proxy</command></term>
	<listitem>
		<para>
		(Serveur Proxy FTP) Si les packages à récupérer sont stockés
		sur un serveur FTP et qu'il faut passer par un proxy FTP pour y accéder,
		on peut en indiquer l'URL ici. La syntaxe est identique à l'option HTTP Proxy.
		</para>
		<para>
		Si aucun proxy FTP n'est nécessaire, la valeur de ce paramètre doit être 
		"<filename>none</filename>".
		</para>
		<para></para>
	</listitem>
	</varlistentry>
	</variablelist>
	</para>

	<para>
	Une fois ces paramètres confirmés, le programme d'installation va interroger
	le serveur de dépôt et récupérer la liste des composants disponibles.
	</para>

	<para>
	<figure>
	<title>Installation de LTSP - Liste des composants</title>
	<GRAPHIC FILEREF="pics/installer_comp_list_window.jpg"
		FORMAT="JPG"
		SRCCREDIT="James McQuillan, 2004" >
	</figure>
	Sur cet écran, vous pouvez sélectionner les composants à récupérer et 
	à installer. Pour ce faire, positionnez la ligne en surbrillance sur le 
	composant désiré (à l'aide des touches de déplacement du clavier)
	puis appuyez sur '<command>I</command>' pour le sélectionner. Répétez l'opération pour
	chaque composant choisi. On peut aussi appuyer sur la touche '<command>A</command>'  (A=All) pour 
	sélectionner TOUS les composants proposés. C'est ce qui est généralement recommandé, pour
	supporter une plus large gamme de clients légers.
	</para>

	<para>
	Plusieurs touches de clavier peuvent être utilisées pour naviguer
	sur cet écran. Pour obtenir une aide à ce propos, appuyez sur la
	touche '<command>H</command>' (H=Help).
	<figure>
	<title>Installation de LTSP - Ecran d'aide</title>
	<GRAPHIC FILEREF="pics/installer_help_window.jpg"
		FORMAT="JPG"
		SRCCREDIT="James McQuillan, 2004" >
	</figure>
	</para>

	<para>
	Par exemple, si vous souhaitez connaître la liste des packages formant un composant
	particulier, appuyez sur la touche '<command>S</command>' (S=Show), et la liste
	des packages correspondants apparaîtra, chacun avec la version courante et la dernière
	version disponible.

	<figure>
	<title>Installation de LTSP - Liste des packages d'un composant</title>
	<GRAPHIC FILEREF="pics/installer_pkg_list_window.jpg"
		FORMAT="JPG"
		SRCCREDIT="James McQuillan, 2004" >
	</figure>
	</para>

	<para>
	Lorsque tous les composants désirés ont été sélectionnés, quittez 
	l'écran de sélection avec la touche '<command>Q</command>' (Q=Quit). Le 
	programme demande alors si on souhaite réellement installer ou
	mettre à jour la sélection. Si vous répondez '<command>Y</command>' (Y=Yes), le
	programme commence à télécharger les packages puis les installe sur le serveur.
	</para>

</sect1>

<sect1>
	<title>Configuration des services requis par LTSP</title>
	<para>
	Il y a quatre services de bases nécessaires au démarrage de clients légers
	avec LTSP. Ce sont : 
	<itemizedlist>
	<listitem><para>DHCP</para></listitem>
	<listitem><para>TFTP</para></listitem>
	<listitem><para>NFS</para></listitem>
	<listitem><para>XDMCP</para></listitem>
	</itemizedlist>
	</para>

	<para>
	L'utilitaire <command>ltspcfg</command> peut être utilisé pour
	configurer ces services, ainsi que d'autres paramètres relatifs à LTSP.
	</para>
	<para>
	Il est possible de lancer le programme <command>ltspcfg</command> directement
	depuis <command>ltspadmin</command>, ou bien depuis la ligne
	de commande du shell, en entrant <command>ltspcfg</command>.
	</para>

	<para>
	Lorsque <command>ltspcfg</command> est lancé, il effectue une série de contrôles sur le
	serveur, afin de vérifier ce qui est actuellement installé et opérationnel (activé).
	Un écran similaire apparaît alors:
	<figure>
	<title>ltspcfg - Ecran initial</title>
	<GRAPHIC FILEREF="pics/ltspcfg_initial_screen.jpg"
		FORMAT="JPG"
		SRCCREDIT="James McQuillan, 2004" >
	</figure>
	Cet écran présente tous les éléments contrôlés par <command>ltspcfg</command>.
	</para>

	<para>
	Pour configurer ces éléments, appuyez sur la touche '<command>C</command>' (C=Choose), 
	et un écran de configuration est alors affiché.
	A partir de ce nouveau menu, vous devrez vérifier chaque élément, afin de vous assurer
	qu'ils sont configurés correctement pour desservir les clients légers.
	<figure>
	<title>ltspcfg - Sélection des éléments à paramétrer</title>
	<GRAPHIC FILEREF="pics/ltspcfg_service_list.jpg"
		FORMAT="JPG"
		SRCCREDIT="James McQuillan, 2004" >
	</figure>

	<variablelist>
	<varlistentry>
	<term><command>1 - Runlevel</command></term>
	<listitem>
		<para>
		<command>Runlevel</command> ("niveau d'exécution") est une valeur utilisée
		par le programme <command>init</command>.
		Sur les systèmes Unix et Linux, à tout moment, le système
		est dans un "runlevel" donné. Les niveaux 2 et 3 sont
		en général utilisés lorsque le serveur est en mode texte (pas de 
		système graphique). Un "runlevel" 5 indique que le serveur
		est passé en mode graphique avec gestion du réseau.
		</para>
		<para>
		Pour un serveur LTSP, c'est le niveau 5 qui est utilisé. La plupart
		des serveurs sont déjà configurés pour que NFS et XDMCP soient activés
		en niveau 5. Pour les serveurs où ce n'est pas le cas, <command>ltspcfg</command> peut s'en charger.
		</para>
	</listitem>
	</varlistentry>

	<varlistentry>
	<term><command>2 - Interface selection</command></term>
	<listitem>
		<para>
		(Choix d'une interface réseau) Pour les serveurs équipés de
		plusieurs cartes réseau, il est nécessaire d'indiquer ici sur quelles
		interfaces seront connectés les clients légers.
		</para>
		<para>
		Une fois le(s) interface(s) choisie(s), <command>ltspcfg</command> pourra
		alors créer les fichiers de configuration correspondants,
		comme <filename>/etc/dhcpd.conf</filename> et <filename>/etc/exports</filename>.
		</para>
	</listitem>
	</varlistentry>

	<varlistentry>
	<term><command>3 - DHCP configuration</command></term>
	<listitem>
		<para>
		(Configuration DHCP) DHCP doit être configuré pour fournir
		les informations suivantes aux clients légers en cours de démarrage:
		<command>fixed-address</command>, <command>filename</command>,
		<command>subnet-mask</command>,
		<command>broadcast-address</command> et 
		<command>root-path</command>.
		</para>
		<para>
		En sélectionnant cette option du menu, <command>ltspcfg</command> va créer le fichier
		<filename>dhcpd.conf</filename>, et activer le daemon <command>dhcpd</command>
		pour qu'il se lance dès le démarrage du serveur.
		</para>
	</listitem>
	</varlistentry>

	<varlistentry>
	<term><command>4 - TFTP configuration</command></term>
	<listitem>
		<para>
		(Configuration TFTP) TFTP (Trivial FTP) est un sous ensemble du protocole FTP
		utilisé par les clients légers pour télécharger leur noyau
		Linux à partir du serveur. Le daemon correspondant, <command>tftpd</command>, doit
		être activé sur le serveur LTSP pour distribuer le noyau Linux de LTSP.
		</para>
	</listitem>
	</varlistentry>

	<varlistentry>
	<term><command>5 - Portmapper configuration</command></term>
	<listitem>
		<para>
		(Configuration Portmapper) Le service (daemon) <command>Portmapper</command> est utilisé
		par tous les programmes RPC (clients ou serveurs), comme par exemple NFS.
		</para>
	</listitem>
	</varlistentry>

	<varlistentry>
	<term><command>6 - NFS configuration</command></term>
	<listitem>
		<para>
		(Configuration NFS) NFS est le service qui permet "d'exporter" des répertoires du serveur
		vers des machines distantes, où il seront montés sur l'arborescence locale.
		Ce service est indispensable pour les clients légers LTSP. En effet, NFS sert à 
		monter la racine de leur système de fichier (<filename class="directory">/</filename>)
		 à partir d'un répertoire du serveur (<filename class="directory">/opt/ltsp/i386</filename> par défaut).
		</para>
		<para>
		Cette option du menu sert à configurer NFS, afin qu'il soit activé dès le
		démarrage du serveur. Le fichier de configuration 
		<filename>/etc/exports</filename> est également créé (cette opération
		est décrite plus loin dans ce chapitre).
		</para>
	</listitem>
	</varlistentry>

	<varlistentry>
	<term><command>7 - XDMCP configuration</command></term>
	<listitem>
		<para>
		(Configuration XDMCP) XDMCP signifie "X Display Manager Control Protocol". Les serveurs X (s'exécutant
		sur les clients légers) envoient une requête au serveur XDMCP (en général celui où est
		aussi installé LTSP) afin de recevoir leur écran de login.
		</para>
		<para>
		Les gestionnaires de connexion X(X display manager) les plus
		courants sont <command>XDM</command>,
		<command>GDM</command> et <command>KDM</command>.
		Cette option du menu affiche les gestionnaires installés
		sur le serveur et celui qui est actuellement activé.
		</para>

		<para>
		Pour des questions de sécurité, le gestionnaire de connexion X d'un
		serveur est souvent configuré pour ne PAS accepter la connexion
		depuis des machines distantes. Ce paramétrage restrictif est la cause principale
		des erreurs de connexion depuis les clients légers, qui affichent un premier 
		<emphasis role="strong">écran gris avec curseur en forme de croix</emphasis>, 
		mais ne peuvent ensuite trouver un serveur XDMCP pour obtenir une connexion.
		Dans la plupart des cas, le programme <command>ltspcfg</command> peut configurer le gestionnaire
		de connexion X pour qu'il accepte les demandes de connexion en provenance des clients
		légers.
		</para>
	</listitem>
	</varlistentry>

	<varlistentry>
	<term><command>8 - Create <filename>/etc/hosts</filename> entries</command></term>
	<listitem>
		<para>
		(Création d'entrées dans <filename>/etc/hosts</filename>) Comme NFS et le gestionnaire de connexion X,
		de nombreux services réseau doivent trouver l'adresse IP d'un hôte
		(host) à partir de son nom.
		Il est possible d'utiliser le daemon "<command>bind</command>" (Berkeley Internet Naming Daemon)
		pour implémenter cette fonction (serveur de noms DNS), et il faut également
		s'assurer que la fonction <emphasis role="strong">inverse</emphasis> (reverse) est correctement
		configurée (récupération du nom d'un hôte à partir de son adresse IP).
		Le daemon <command>bind</command> est probablement le meilleur moyen de le faire, mais le paramétrage
		de ce service dépasse le cadre de ce document et les possibilités de <command>ltspcfg</command>.
		</para>

		<para>
		Une approche beaucoup plus simple de la résolution de noms est l'utilisation
		du fichier <filename>/etc/hosts</filename>.
		</para>

	</listitem>
	</varlistentry>

	<varlistentry>
	<term>
		<command>9 - Create <filename>/etc/hosts.allow</filename> entries</command>
	</term>
	<listitem>
		<para>
		(Création d'entrées dans <filename>/etc/hosts.allow</filename>) Plusieurs services réseau
		utilisent un système de sécurité supplémentaire appelé
		<emphasis role="strong">tcpwrappers</emphasis>, dont la configuration
		se trouve dans le fichier <filename>/etc/hosts.allow</filename>.
		Cette option du menu <command>ltspcfg</command> permet de configurer ce fichier.
		</para>
	</listitem>
	</varlistentry>

	<varlistentry>
	<term>
		<command>10 - Create the <filename>/etc/exports</filename> file</command>
	</term>
	<listitem>
		<para>
		(Création du fichier <filename>/etc/exports</filename>) Ce fichier décrit les répertoires du serveur
		exportés par NFS et quelles sont les machines distantes autorisées à les monter dans
		leur arborescence locale.
		Cette option du menu <command>ltspcfg</command> permet de créer ce fichier.
		</para>
	</listitem>
	</varlistentry>

	<varlistentry>
	<term>
		<command>11 - Create the <filename>lts.conf</filename> file</command>
	</term>
	<listitem>
		<para>
		(Création du fichier <filename>lts.conf</filename>) 
		La configuration de chaque client léger devant se connecter au serveur LTSP
		est définie dans le fichier <filename>lts.conf</filename> 
		(créé par défaut dans le répertoire <filename class="directory">/opt/ltsp/i386/etc</filename>).
		Pour des clients légers récents, équipés d'un bus PCI, il n'est pas
		nécessaire d'ajouter ou modifier les paramètres par défaut, mais ce
		fichier doit exister. Cette option du menu <command>ltspcfg</command> permet de le créer.
		</para>
	</listitem>
	</varlistentry>

	</variablelist>
	</para>

</sect1>

<sect1>
	<title>Configuration spécifique pour un client léger</title>
	<para>
	Après la configuration du serveur, on peut maintenant se pencher sur les
	paramètres LTSP concernant les clients légers.
	Pour cela, trois fichiers sont utilisés.
	<orderedlist>
		<listitem>
		<para><filename>/etc/dhcpd.conf</filename></para>
		</listitem>
		<listitem>
		<para><filename>/etc/hosts</filename></para>
		</listitem>
		<listitem>
		<para><filename>/opt/ltsp/i386/etc/lts.conf</filename></para>
		</listitem>
	</orderedlist>

	</para>

	<sect2>
	<title><filename>/etc/dhcpd.conf</filename></title>
	<para>
		Chaque client léger devant se connecter au serveur doit obtenir une
		adresse IP, ainsi que d'autres données. Au démarrage (boot),
		le client léger va recevoir du serveur DHCP les informations suivantes:
		<itemizedlist>
		<listitem> <para>adresse IP ;</para> </listitem>
		<listitem> <para>nom de machine (hostname) ;</para> </listitem>
		<listitem> <para>adresse IP du serveur ;</para> </listitem>
		<listitem> <para>passerelle par défaut ; </para> </listitem>
		<listitem> <para>chemin d'accès vers le noyau à télécharger ;</para> </listitem>
		<listitem> <para>serveur et chemin d'accès vers le répertoire à monter comme racine
		de son système de fichier local.</para> </listitem>
		</itemizedlist>
	</para>
	<para>
		Dans l'exemple qui suit, DHCP est configuré pour
		distribuer des adresses IP aux clients légers de son réseau.
	</para>
	<para>
		Pendant la configuration du serveur par <command>ltspcfg</command>, un fichier <filename>dhcpd.conf</filename> est créé à titre
		d'exemple. Il se nomme <filename>/etc/dhcpd.conf.example</filename>.
		Vous pourrez ensuite le copier ou le renommer en <filename>/etc/dhcpd.conf</filename>
		et s'en servir comme base de la véritable configuration DHCP.
		A ce stade, il est nécessaire de modifier ce fichier pour qu'il corresponde
		à l'environnement réel du serveur et des clients légers.
		<figure float="1">
		<title>/etc/dhcpd.conf</title>
		<programlisting>
default-lease-time            21600;
max-lease-time                21600;

option subnet-mask            255.255.255.0;
option broadcast-address      192.168.0.255;
option routers                192.168.0.254;
option domain-name-servers    192.168.0.254;
option domain-name            "ltsp.org";
option root-path              "192.168.0.254:/opt/ltsp/i386";

shared-network WORKSTATIONS {
subnet 192.168.0.0 netmask 255.255.255.0 {
}
}

group	{
use-host-decl-names       on;
option log-servers        192.168.0.254;

host ws001 {
	hardware ethernet     00:E0:18:E0:04:82;
	fixed-address         192.168.0.1;
	filename              "/lts/vmlinuz.ltsp";
}
} </programlisting>
		</figure>
	</para>

	<para>
	Depuis la version 2.09pre2 de LTSP, il n'est plus nécessaire
	de spécifier un noyau particulier pour chaque client léger.
	Le noyau standard supporte désormais toutes les cartes réseau
	reconnues par Linux.
	Selon les versions de LTSP, on trouvera 2 noyaux inclus dans le package ltsp-kernel. Le premier
	a été modifié avec le patch "Linux Progress Patch" (LPP), le second
	ne l'est pas. Ces noyaux sont respectivement nommés:           
		<programlisting>
vmlinuz-2.4.9-ltsp-5
vmlinuz-2.4.9-ltsp-lpp-5 </programlisting>
	</para>
	<para>
		NDLT: les dernières versions de LTSP ne contiennent qu'un seul 
		noyau Linux 2.4.26.
		</para>
		<para>
		<emphasis role="strong">IMPORTANT:</emphasis>
		Le noyau Linux à télécharger par les clients légers est stocké 
		dans le sous-répertoire <filename class="directory">/tftpboot/lts</filename>,
		mais le paramètre "filename" du fichier
		<filename>/etc/dhcpd.conf</filename> n'indique pas le
		chemin d'accès complet. La partie <filename class="directory">/tftpboot</filename>
	n'est pas spécifiée. En effet, à partir de la version 7.1 de Red Hat,
		le daemon TFTP est lancé avec l'option '-s'.
		Ceci a pour effet de demander au daemon tftpd de fonctionner
		en mode <emphasis role="strong">sécurisé</emphasis>.
		En conséquence, le daemon effectue un <command>chroot</command>
		vers le répertoire <filename class="directory">/tftpboot</filename> lorsqu'il 
		démarre. Dès ce moment, tous les fichiers accessibles par le daemon
		ont un chemin d'accès relatif à sa racine <filename class="directory">/tftpboot</filename>.
	</para>
	<para>
		D'autres distributions Linux peuvent installer-utiliser 
		tftpd sans l'option '-s'. Dans ce cas, il faut ajouter le préfixe 
		<filename class="directory">/tftpboot</filename> au chemin d'accès vers le
		noyau à télécharger.
	</para>
	</sect2>

	<sect2>
	<title><filename>/etc/hosts</filename></title>
	<para>Récupération d'un nom d'hôte à partir de son adresse IP</para>
	<para>
		Généralement, les ordinateurs se suffisent de leur adresse IP
		(ex : 192.168.0.5) pour communiquer. Mais pour un utilisateur, il est beaucoup
		plus facile de se souvenir d'un nom que d'une série de chiffres.
		C'est pour cela qu'on utilise le service DNS ou le fichier
		<filename>/etc/hosts</filename>, permettant d'assigner un nom
		à une adresse IP (et vice-versa). Ce service n'est pas obligatoire, mais LTSP en a absolument
		besoin, en particulier lors du montage du système de fichier des clients légers 
		via NFS. En l'absence de ce service, le système pourrait générer des erreurs d'autorisation.
	</para>
	<para>
		Il est non seulement essentiel pour NFS, mais aussi pour les
		gestionnaires de connexion X <emphasis role="strong">GDM</emphasis> ou
		<emphasis role="strong">KDM</emphasis>. Si le nom d'un client léger
		n'existe pas dans le fichier <filename>/etc/hosts</filename>, le gestionnaire
		de connexion ne fonctionnera pas correctement.
	</para>
	</sect2>

	<sect2>
	<title><filename>/opt/ltsp/i386/etc/lts.conf</filename></title>
	<para>
		La majorité des paramètres de configuration des clients légers
		est regroupée dans ce fichier <filename>lts.conf</filename>.
	</para>

	<para>
		Le format de <filename>lts.conf</filename> est plutôt simple. 
		Il est découpé en plusieurs "sections".
		Il y a une section générale par défaut appelée <command>[default]</command>
		et il peut y avoir d'autres sections, spécifiques à des clients légers
		ne rentrant pas dans le cas général. Le nom de ces sections
		spécifiques peut être le nom d'hôte du client léger, son adresse IP ou son
		adresse physique (MAC address).
	</para>

	<para>
		Voici un exemple de fichier <filename>lts.conf</filename> :
		<example>
		<title>lts.conf file</title>
		<programlisting>
#
# Config file for the Linux Terminal Server Project (www.ltsp.org)
#

[Default]
	SERVER             = 192.168.0.254
	XSERVER            = auto
	X_MOUSE_PROTOCOL   = "PS/2"
	X_MOUSE_DEVICE     = "/dev/psaux"
	X_MOUSE_RESOLUTION = 400
	X_MOUSE_BUTTONS    = 3
	USE_XFS            = N
	LOCAL_APPS         = N
	RUNLEVEL           = 5

[ws001]
	USE_NFS_SWAP       = Y
	SWAPFILE_SIZE      = 48m
	RUNLEVEL           = 5

[ws002]
	XSERVER            = XF86_SVGA
	LOCAL_APPS         = N
	USE_NFS_SWAP       = Y
	SWAPFILE_SIZE      = 64m
	RUNLEVEL           = 3
	</programlisting>
	</example>
	</para>

	<para>
		Explications de certains paramètres de cet exemple :
		<variablelist>
		<varlistentry>
			<term><command>XSERVER</command></term>
			<listitem>
			<para>
				Si le client léger possède une carte graphique
				PCI, et qu'elle est supportée par XFree86 4.1 ou Xorg,
				il suffit d'installer le package <filename>lts_x_core</filename> qui contient
				tous les drivers nécessaires.
			</para>
			<para>
			LTSP contient également des packages XFree86 3.3.6 supplémentaires
			pour les cartes qui ne sont pas encore supportées par
			les serveurs XFree86 4.1 ou Xorg.
			</para>
			<para>
				Comme pour les autres paramètres, on peut définir
				XSERVER dans la section [default] afin que sa valeur
				soit utilisée par tous les clients légers, ou dans une section
				spécifique à un client léger particulier.
			</para>
			<para>
			Dans cet exemple, tous les clients légers (sauf ws002) ont
			une carte vidéo PCI automatiquement détectée. Il suffit
			de donner la valeur "auto" au paramètre XSERVER de la section
			[default]. Le client léger "ws002" possède une ancienne carte vidéo
			qui n'est reconnue que par le serveur X XF86_SVGA.
			On indique donc le nom de ce serveur dans la section spécifique
			à ce client léger.
			</para>
			</listitem>
		</varlistentry>

		<varlistentry>
			<term><command>RUNLEVEL</command></term>
			<listitem>
			<para>
		Pour tous les clients légers (sauf ws002) qui doivent
			fonctionner en mode graphique, on positionnera la valeur
			du runlevel à "5".
			Et pour que le client léger ws002 fonctionne en mode caractère,
			on positionne le runlevel à "3" dans sa section particulière.
			</para>
			</listitem>
		</varlistentry>
		</variablelist>
	</para>
	</sect2>

</sect1>

<sect1>
	<title>Affichage de la configuration courante</title>
	<para>
	Le programme <command>ltspcfg</command> permet d'afficher à l'écran
	le statut de tous les services requis par LTSP. Pour cela, appuyer sur
	la touche '<command>S</command>' (S=Show).

	<figure>
	<title>ltspcfg - Configuration courante</title>
	<GRAPHIC FILEREF="pics/ltspcfg_status.jpg"
		FORMAT="JPG"
		SRCCREDIT="James McQuillan, 2004" >
	</figure>
	</para>

</sect1>

</chapter>


<chapter>
<title>Paramétrage des clients légers</title>
<para>
	Le serveur à présent configuré, il est temps de se pencher
	sur la configuration des clients légers.
</para>
<para>
	L'essentiel du projet LTSP concerne ce qui se passe APRES le chargement
	du noyau Linux en mémoire d'un client léger. Pour l'instant, nous allons étudier
	comment télécharger ce noyau. Il y a plusieurs façons de le faire: 
	avec Etherboot, Netboot, PXE et depuis un lecteur de disquette.
</para>

<sect1>
<title>Démarrage avec PXE</title>
<para>
	Si la carte réseau (ou le BIOS) du client léger permet l'utilisation de PXE
	pour démarrer, vous pouvez utiliser cette méthode pour charger le noyau Linux
	en mémoire. PXE est une technologie de bootrom similaire à Etherboot ou Netboot.
</para>

<para>
	Il peut être nécessaire d'activer préalablement PXE sur la carte réseau. De même,
	l'ordre dans lequel sont classés les périphériques de démarrage doit être modifié
	dans le BIOS, pour que l'option "Démarrage depuis le réseau" (Boot from Lan) soit placée
	en première position. PXE sera alors utilisé en priorité, avant de tenter un démarrage depuis le disque dur
	ou le lecteur de disquette.
</para>

<para>
	PXE ne peut télécharger que des fichiers dont la taille est inférieure ou égale à 32Ko.
	Un noyau Linux étant bien plus gros, il n'est pas possible de le charger directement
	avec PXE. Pour contourner ce problème, le chargement se fait en deux étapes. PXE va d'abord
	charger un "Network Boostrap Program" (NBP: programme de démarrage par réseau).
</para>

<para>
	LTSP contient un programme NBP pour charger les noyaux Linux: 
	<command>pxelinux.0</command>. Cet outil fait partie du 
	package <command>syslinux</command> conçu par le développeur noyau
	H. Peter Anvin. 
</para>

<para>
	Le NBP <command>pxelinux.0</command> et son fichier de configuration se trouvent dans le
	package <command>kernel</command> de LTSP. Il permet de télécharger Linux
	et son disque virtuel initial (initrd).
</para>
<para>
	Le démarrage d'un client léger avec PXE se déroule de la façon suivante:
	<itemizedlist>
	<listitem>
	<para>
	Le bootrom PXE initialise la carte réseau et envoie une requête
	DHCP.
	</para>
	</listitem>
	<listitem>
	<para>
	Le serveur DHCP répond en renvoyant une adresse IP pour le client léger,
	et le nom du NBP à télécharger (dont la taille ne dépasse pas 32 Ko).
	</para>
	</listitem>
	<listitem>
	<para>
	Le bootrom PXE télécharge le NBP, le copie en mémoire et le lance.
	</para>
	</listitem>
	<listitem>
	<para>
	Le NBP prend le contrôle et utilise le protocole TFTP pour
	télécharger un fichier de configuration depuis le serveur.
	</para>
	</listitem>
	<listitem>
	<para>
	Ce fichier de configuration contient le nom du noyau, le nom du disque
	virtuel initial (initrd) et les options à passer au noyau une fois qu'il sera
	chargé.
	</para>

	<para>
	Voici un exemple de fichier de configuration pour pxelinux :
	<programlisting>
prompt=0
label linux
	kernel bzImage-2.4.24-ltsp-4
	append init=/linuxrc rw root=/dev/ram0 initrd=initrd-2.4.24-ltsp-4.gz
	</programlisting>
	</para>
	</listitem>
	<listitem>
	<para>
	Le NBP utilise à nouveau TFTP pour télécharger le noyau Linux indiqué,
	ainsi que son disque virtuel initial (initrd).
	</para>
	</listitem>
	<listitem>
	<para>
	Lorsque le noyau est complètement chargé en mémoire, le NBP lui passe le contrôle.
	Le noyau démarre en montant son disque virtuel, puis continue
	son initialisation comme cela est détaillé dans le 
	chapitre "Principes de fonctionnement".
	</para>
	</listitem>
	</itemizedlist>
</para>

</sect1>

<sect1>
<title>Démarrage avec Etherboot</title>
<blockquote><attribution>Ken Yap</attribution>
	<para>
	Etherboot est un package logiciel destiné à créer des images de bootrom.
	Ces bootrom peuvent télécharger des programmes sur un réseau Ethernet,
	pour des ordinateurs de type x86. De nombreuses cartes réseau ont un emplacement (socket) libre 
	destiné à accueillir une bootrom. C'est dans cette bootrom que
	l'on copie le code Etherboot.
	</para>
</blockquote>

<para>
	Etherboot est un logiciel libre, distribué sous licence "GNU General
	Public License, Version 2 (GPL2)".
</para>

<para>
	Pour utiliser Etherboot, si le client léger possède une carte réseau
	avec une bootrom Etherboot, il faudra sans doute paramétrer le BIOS pour
	que ce dernier démarre en priorité depuis la carte réseau (Boot from LAN)
	avant d'essayer depuis le disque dur, le lecteur de disquette ou le CD-ROM.
</para>

<para>
	Si vous ne possèdez pas de bootrom, vous pouvez en programmer ("brûler") une avec un appareil
	prévu à cet effet avant de l'installer sur la carte réseau. Vous pouvez
	également copier le code Etherboot sur le secteur de démarrage d'une
	disquette et démarrer à partir du lecteur de disquette.
</para>
<para>
	Etherboot gère une vaste gamme de cartes réseau, plus de 200 modèles, 
	et cette liste s'enrichit régulièrement.
	Qu'il s'agisse de brûler le code Etherboot dans une bootrom (EPROM) ou de le
	copier sur une disquette, la seule chose à connaître est le type précis
	de la carte réseau du client léger.
</para>

<sect2>
	<title>Sélection d'un driver Etherboot pour une carte réseau ISA</title>
	<para>
	Pour les anciennes cartes ISA, il n'est pas indispensable de connaître son
	type exact. La plupart d'entre elles sont de type ne2000 ou 3com 3c509.
	La seule chose qui compte est de choisir le driver en fonction du câblage
	10 base-2 (Coaxial) ou 10 base-T (paire torsadée).
	</para>
</sect2>

<sect2>
	<title>Sélection d'un driver pour une carte réseau PCI</title>
	<para>
	Pour les cartes PCI, il faut par contre choisir le driver correspondant
	exactement à l'identifiant PCI de la carte et de son fabricant.
	</para>

	<para>
	La plupart du temps, on peut facilement récupérer ces informations, car elles
	sont imprimées sur la carte et correspondent à la description du driver.
	Mais il arrive qu'on ne puisse pas les retrouver.
	</para>

	<para>
	Dans ce cas, si le client léger est équipé d'un lecteur de disquette, on peut y insérer
	une disquette tomsrtbt (Tom's Root Boot). Ou bien, si le client léger dispose
	d'un lecteur CD-ROM, on peut démarrer avec un Live-CD Linux, comme Knoppix.
	S'il n'est pas possible de lancer Linux sur le client léger pour découvrir
	le type de la carte réseau, le seul moyen restant est de déplacer la carte réseau sur
	une machine où cela est possible.

	</para>


	<para>
	Lorsque Linux est chargé, vous pouvez alors utiliser la commande
	<command>lspci</command> avec l'option '-n'.
	<programlisting>
[root@jamlap root]# lspci -n
0000:00:00.0 Class 0600: 8086:7190 (rev 03)
0000:00:01.0 Class 0604: 8086:7191 (rev 03)
0000:00:03.0 Class 0607: 104c:ac1c (rev 01)
0000:00:03.1 Class 0607: 104c:ac1c (rev 01)
0000:00:07.0 Class 0680: 8086:7110 (rev 02)
0000:00:07.1 Class 0101: 8086:7111 (rev 01)
0000:00:07.2 Class 0c03: 8086:7112 (rev 01)
0000:00:07.3 Class 0680: 8086:7113 (rev 03)
0000:00:08.0 Class 0401: 125d:1978 (rev 10)
0000:01:00.0 Class 0300: 1002:4c4d (rev 64)
0000:06:00.0 Class 0200: 8086:1229 (rev 09)
	</programlisting>
	Dans l'exemple ci-dessus, <command>lspci</command> affiche une ligne pour chaque
	carte PCI installée dans la machine. La seule ligne qui compte concerne
	les composants de classe <emphasis role="strong">Class 0200</emphasis>.
	On peut donc filtrer le résultat de <command>lspci</command> pour obtenir quelque chose de
	plus simple.
	<programlisting>
[root@jamlap root]# lspci -n | grep "Class 0200"
0000:06:00.0 Class 0200: 8086:1229 (rev 09)
	</programlisting>
	Les identifiants PCI recherchés sont <command>8086:1229</command>.  
	Le premier champ, <command>8086</command> correspond à l'identifiant
	du fabricant. Dans cet exemple, il s'agit d'Intel Corporation. 
	Le deuxième champ, <command>1229</command> est l'identifiant de la carte, et il s'agit
	ici d'une EtherExpress 100 card.
	NDLT : Voir aussi <command>lspci</command> avec l'option '-v'.
	</para>

</sect2>

<sect2>
	<title>Création d'une disquette de démarrage</title>

	<para>
	</para>

	<para>
	Pour créer un bootrom Etherboot, il faut d'abord télécharger
	le package Etherboot, puis l'installer et le configurer pour le type de bootrom
	souhaité. Ensuite on compilera le source pour générer le code Etherboot. 
	Ce dernier peut alors être brûlé dans une bootrom (EPROM), ou copié sur disquette.
	</para>

	<para>
	Mais il existe un moyen beaucoup plus simple d'arriver au même résultat,
	grâce au site Internet de Marty Connor
	<ulink url="http://www.rom-o-matic.net"><citetitle>www.Rom-O-Matic.net</citetitle></ulink>.
	</para>

	<para>
	Marty a réalisé un excellent travail, en créant une interface
	permettant de créer un bootrom Etherboot à partir d'un simple
	navigateur web. Toutes les opérations de configuration et de compilation
	sont effectuées sur son serveur. Il suffit de choisir le type
	de carte et de bootrom dans les listes proposées, et d'indiquer
	quelques autres paramètres. Il ne reste plus ensuite qu'à 
	appuyer sur le bouton 'Get ROM' pour qu'un bootrom soit généré !
	</para>

	<para>
	Pour pouvoir copier le bootrom sur une disquette, choisissez l'option
	'Floppy Bootable ROM Image'. Ceci va insérer un en-tête de 512 octets dans
	dans le bootrom. Lorsque le client léger démarre, cet en-tête charge
	le bootrom en mémoire, où il est exécuté.
	</para>

	<para>
	Appuyez sur le bouton 'Get ROM'. Après quelques secondes, une nouvelle fenêtre
	apparaît dans le navigateur, demandant où sauvegarder le fichier bootrom. Il n'y a plus
	qu'à choisir un emplacement sur le disque dur local, et le bootrom est aussitôt téléchargé.
	</para>

	<para>
	Une fois sauvegardé sur le disque dur, il faut ensuite copier le bootrom sur une disquette.
	Insérez une disquette dans le lecteur et lancez la commande suivante:
	<programlisting>
dd if=<emphasis>Etherboot_Image</emphasis> of=/dev/fd0 </programlisting>
	</para>
</sect2>

<sect2>
	<title>Création d'un bootrom</title>
	<para>
	Pour écrire (on dit aussi "brûler") un bootrom Etherboot dans une EPROM, il faut un programmateur
	d'EPROM. On trouve ce type d'appareil dans toutes les gammes, de quelques centaines d'euros
	à plusieurs milliers, selon les fonctionnalités offertes.
	</para>
	<para>
	La copie d'un bootrom dans une EPROM varie d'un programmateur à l'autre. 
	La description de cette opération dépasse le cadre de ce document.
	</para>
</sect2>

</sect1>

</chapter>


<chapter>
<title>Démarrage du client léger</title>
<para>
En admettant que le serveur et le client léger ont été correctement configurés,
il ne reste plus qu'à insérer la disquette dans le lecteur et à mettre le client léger
sous tension.
</para>

<para>
	Le code Etherboot est alors lu depuis la disquette et chargé en mémoire, la carte
	réseau est identifiée et initialisée, une requête DHCP est envoyée au serveur, qui
	répond à son tour, puis le noyau Linux est téléchargé dans la mémoire du client léger.
	Une fois que le noyau aura initialisé le matériel du client léger, le serveur X Window démarrera
	et une fenêtre d'identification (login) devrait s'afficher à l'écran, comme dans l'exemple
	ci dessous.
</para>

<figure><title>Ecran de connexion</title>
	<GRAPHIC FILEREF="pics/ltsplogin1.gif"
		FORMAT="GIF"
		SRCCREDIT="James McQuillan, 2001" >
</figure>

<para>
	A partir de là, il est possible de s'identifier et de se connecter au serveur.
	Il est important de se rappeler que toutes les commandes lancées sur le client léger sont en
	fait exécutées sur le serveur, leurs sorties sont déportées sur le client léger.
	C'est un des points forts de la technologie X Window.
</para>

<para>
	Vous pouvez maintenant utiliser n'importe quel programme installé sur le serveur.
</para>

</chapter>


<chapter>
<title>Editions et imprimantes</title>
<para>
	En dehors de son utilisation comme terminal graphique ou caractère, un client
	léger peut aussi fonctionner (simultanément) comme un serveur d'impression. Jusqu'à 3
	imprimantes peuvent être rattachées sur les ports parallèle et série du client léger.
</para>

<para>
	Ceci est totalement transparent pour l'utilisateur du client léger. Le trafic
	supplémentaire qui passe au travers du client léger vers les imprimantes 
	n'a pas ou peu d'impact sur son fonctionnement.
</para>

<sect1>
	<title>Configuration côté client léger</title>

	<para>
	Sur le client léger, le programme <command>lp_server</command> 
	redirige les travaux d'impression en provenance du serveur vers les imprimantes locales.
	</para>

	<para>
	Pour activer une imprimante sur un client léger, il faut l'indiquer dans le
	fichier de configuration du serveur: <filename>lts.conf</filename>.
	<programlisting>
[ws001]
PRINTER_0_DEVICE = /dev/lp0
PRINTER_0_TYPE   = P 
</programlisting>
	Ce paramètre va demander au programme <command>lp_server</command> de fonctionner en tant
	que daemon sur le client léger, à l'écoute sur le port TCP/IP 9100.
	Ce port recevra le flux d'impression en provenance du serveur. Le daemon
	<command>lp_server</command> va rediriger ce flux vers l'imprimante connectée au port parallèle
	<filename>/dev/lp0</filename> du client léger.
	</para>

	<para>
	Il existe de nombreux autres paramètres d'impression. Voir le chapitre
	relatif au fichier <filename>lts.conf</filename> pour plus de détails.
	</para>
</sect1>

<sect1>
	<title>Configuration côté serveur</title>

	<para>
	Côté serveur, la configuration consiste à définir une file d'impression
	à l'aide de l'outil graphique de gestion des imprimantes.
	</para>

	<para>
	Sur un serveur Redhat 7.2, on dispose d'un outil de configuration en mode
	caractère et en mode graphique. La version graphique se nomme
	<command>printconf-gui</command>, et la version texte <command>printconf-tui</command>.
	Les versions plus anciennes contiennent un programme
	nommé <command>printtool</command>. Les autres distributions
	Linux disposent de leurs propres outils de configuration (comme
	CUPS).
	</para>

	<figure>
	<title>Ajout d'une imprimante avec Printconf-gui</title>
	<GRAPHIC FILEREF="pics/printconf-gui-add.gif"
		FORMAT="GIF"
		SRCCREDIT="James McQuillan, 2001" >
	</figure>

	<para>
	Une fois le programme lancé, il faut créer une nouvelle imprimante.
	Dans cet exemple, on utilise le mode émulation HP JetDirect
	supporté par <command>lp_server</command>.  Il suffit donc de créer une imprimante
	<command>JetDirect</command>.
	</para>

	<para>
	Pour accéder à cette imprimante, il faut définir un nom de file
	d'impression (queue). N'importe quel nom peut être spécifié, mais autant donner
	un nom significatif. Les caractères acceptés dans un nom sont :
	<itemizedlist>
		<listitem>
		<para>
			<computeroutput>
			"a-z"  les lettres minuscules 
			</computeroutput>
		</para></listitem>
		<listitem>
		<para>
			<computeroutput>
			"A-Z"  les majuscules 
			</computeroutput>
		</para></listitem>
		<listitem>
		<para>
			<computeroutput>
			"0-9"  les chiffres 
			</computeroutput>
		</para></listitem>
		<listitem>
		<para>
			<computeroutput>
			"-"    &nbsp;&nbsp;le tiret 
			</computeroutput>
		</para></listitem>
		<listitem>
		<para>
			<computeroutput>
			"_"    &nbsp;&nbsp;le tiret bas (souligné)
			</computeroutput>
		</para></listitem>
	</itemizedlist>
	</para>
	<para>
	Le nom choisi dans cet exemple est 
	<command>ws001_lp</command>, ce qui permet de comprendre que
	l'imprimante concernée est connectée au client léger
	<command>ws001</command>.
	</para>

	<figure>
	<title>Paramétrage de l'imprimante avec Printconf-gui</title>
	<GRAPHIC FILEREF="pics/printconf-gui-detail.gif"
	FORMAT="GIF"
	SRCCREDIT="James McQuillan, 2001" >
	</figure>
	<para>
	Pour communiquer avec l'imprimante, deux autres champs doivent
	être renseignés :
	<orderedlist>
		<listitem>
		<para>
		Adresse IP ou nom de l'hôte sur lequel est connectée l'imprimante.
		</para>
		</listitem>
		<listitem>
		<para>
		Numéro de port TCP sur lequel le daemon <command>lp_server</command>
		est à l'écoute (en attente).
		</para>
		<para>
		Pour la première imprimante connectée à un client léger, on 
		utilise le port TCP/IP <command>9100</command>.  Pour la deuxième imprimante sur ce même client, 
		on utilisera le port <command>9101</command>, et <command>9102</command> pour la troisième.
		</para>
		</listitem>
	</orderedlist>
	</para>
</sect1>

</chapter>


<chapter>
<title>Scripts d'écrans</title>
<para>
Depuis la version 4.0 de LTSP, une nouvelle fonctionnalité
appelée <command>Screen Scripts</command> (Scripts d'écrans) est disponible.
Les scripts permettent de lancer différents types de sessions sur les
clients légers.
</para>

<para>
Il est possible de définir plusieurs scripts d'écrans pour un même
client léger, ce qui permet d'avoir de multiples sessions. Ils peuvent être de types différents ou du même type.
On peut par exemple spécifier :
<programlisting>
SCREEN_01 = startx
SCREEN_02 = shell
</programlisting>
	Ceci aura pour effet de lancer une session X sur le premier écran,
	et une console locale (shell) sur le second. Pour passer d'un écran à l'autre, utilisez
	la combinaison de touches Ctrl-Alt-Fn, où 'n' est un numéro de 1 à 12. 
	Ctrl-Alt-F1 bascule vers le premier écran, Ctrl-Alt-F2 vers le deuxième, etc.
</para>

<para>
	Même s'il est possible de créer jusqu'à 12 écrans différents, on n'en utilise
	en général qu'un seul.
</para>

<para>
	Les types d'écran disponibles sont les suivants:
	<variablelist>
	<varlistentry>
	<term><command>startx</command></term>
	<listitem>
		<para>
		Ce script d'écran lance sur le client léger un serveur X avec l'option
		-query, ce qui a pour effet d'envoyer une requête
		XDMCP à un gestionnaire de connexion X à l'écoute sur le réseau. 
		Le gestionnaire qui répond renvoie au client léger
		un écran d'identification (login).
		</para> 
	</listitem>
	</varlistentry>

	<varlistentry>
	<term><command>shell</command></term>
	<listitem>
		<para>
		Ce script d'écran lance un shell sur l'écran du client
		léger. Il s'agit d'une session LOCALE sur le client léger,
		ce qui offre peu d'interêt, sauf pour la mise au point en
		cas de problème. A partir de ce shell, il n'est
		pas possible d'exécuter des applications se trouvant
		sur le serveur.
		</para> 
	</listitem>
	</varlistentry>

	<varlistentry>
	<term><command>telnet</command></term>
	<listitem>
		<para>
		Ce script d'écran lance sur le client léger une session
		telnet pour une connexion vers le serveur. Ceci
		ouvre une session en mode caractère sur le serveur.
		</para> 
		<para> 
		Par défaut, telnet tente de se connecter sur le serveur LTSP.
		Il est possible de spécifier un autre serveur, en ajoutant un paramètre
		supplémentaire au script d'écran. Exemple :	
		<programlisting>
SCREEN_01 = telnet server2.mydomain.com</programlisting>
		On peut également ajouter n'importe quelle option
		acceptée par telnet. Mais dans ce cas, il faut aussi
		spécifier le nom du serveur à contacter.
		</para> 
	</listitem>
	</varlistentry>

	<varlistentry>
	<term><command>rdesktop</command></term>
	<listitem>
		<para>
		Ce script d'écran lance le programme <command>rdesktop</command>, 
		qui établit une connexion sur un serveur Microsoft Windows.
		On peut spécifier en option n'importe quel paramètre
		reconnu par <command>rdesktop</command>, directement après le nom
		du script. Par exemple, pour indiquer le nom du
		serveur à contacter :
		<programlisting>
SCREEN_01 = rdesktop -f w2k.mydomain.com
</programlisting>
		Ceci va lancer <command>rdesktop</command> en mode plein écran. L'utilisateur
		voit apparaître un écran de login Windows, à partir duquel
		il peut s'identifier et se connecter. Une fois connecté, l'utilisateur
		ne s'aperçoit même pas que son client léger fonctionne sous Linux.
		</para> 
	</listitem>
	</varlistentry>

	</variablelist>

</para>

<para>
Ces scripts d'écrans sont stockés dans le répertoire
<filename class="directory">/opt/ltsp/i386/etc/screen.d</filename>.
Vous pouvez créer d'autres scripts et les placer dans le même répertoire
pour qu'ils soient pris en compte. Il est conseillé de s'inspirer des scripts
existants pour en créer de nouveaux.
</para>

</chapter>


<chapter>
<title>Diagnostic et mise au point</title>
<para>
Après avoir suivi les instructions des chapitres précédents, si un client léger ne
démarre pas de la manière attendue, vous devrez alors en rechercher les causes et tenter
de corriger le problème. Ce chapitre décrit les principaux problèmes rencontrés.
</para>

<para>
	La première chose à faire est de vérifier à quelle étape le processus de démarrage 
	a rencontré un problème.
	</para>

<sect1>
	<title>Démarrage Etherboot</title>
	<para>
	Lorsqu'on démarre un client léger à partir d'une disquette Etherboot,
	l'écran doit en principe afficher un message similaire à ce qui suit: 
	</para>
	<para>
	<screen>
loaded ROM segment 0x0800 length 0x4000 reloc 0x9400
Etherboot 5.0.1 (GPL) Tagged ELF for [LANCE/PCI]
Found AMD Lance/PCI at 0x1000, ROM address 0x0000
Probing...[LANCE/PCI] PCnet/PCI-II 79C970A base 0x1000, addr 00:50:56:81:00:01
Searching for server (DHCP)...
&#60;sleep&#62; </screen>
	</para>
	<para>
	Cet exemple montre ce qui doit normalement se passer lorsqu'on
	démarre depuis une disquette Etherboot. Si ces messages n'apparaissent pas, il 
	y a de grandes chances que la disquette soit défectueuse, ou que
	le code Etherboot n'ait pas été copié correctement.
	</para>

	<para>
	Si un message similaire à ce qui suit apparaît, il se peut alors que le code
	Etherboot utilisé ne corresponde pas à la carte réseau installée sur le client léger.
	<screen>
ROM segment 0x0800 length 0x8000 reloc 0x9400
Etherboot 5.0.2 (GPL) Tagged ELF for [Tulip]
Probing...[Tulip]No adapter found
&#60;sleep&#62;
&#60;abort&#62; </screen>
	</para>

	<para>
	Si la carte est détectée et que son adresse MAC est affichée, la disquette
	et le code Etherboot qu'elle contient sont corrects.
	</para>

</sect1>

<sect1>
	<title>DHCP</title>
	<para>
	Lorsque la carte réseau est correctement initialisée, elle envoie
	un broadcast DHCP sur le réseau local, afin de contacter un serveur
	DHCP.
	</para>

	<para>
	Si le client léger reçoit une réponse valide d'un serveur DHCP, la carte
	réseau est correctement configurée. On peut le vérifier lorsque l'
	adresse IP renvoyée par le serveur apparaît à l'écran. En voilà un exemple :
	<screen>
ROM segment 0x0800 length 0x4000 reloc 0x9400
Etherboot 5.0.1 (GPL) Tagged ELF for [LANCE/PCI]
Found AMD Lance/PCI at 0x1000, ROM address 0x0000
Probing...[LANCE/PCI] PCnet/PCI-II 79C970A base 0x1000, addr 00:50:56:81:00:01
Searching for server (DHCP)...
&#60;sleep&#62;
Me: 192.168.0.1, Server: 192.168.0.254, Gateway 192.168.0.254 </screen>

	Si la ligne commençant par 'Me:' suivi d'une adresse IP est affichée,
	on peut considérer que DHCP fonctionne correctement. On peut passer
	au diagnostic suivant pour vérifier TFTP.
	</para>

	<para>
	Si, au contraire, on voir apparaître le message ci-dessous, suivi par
	plusieurs messages &#60;sleep&#62;, quelque chose ne va pas au niveau DHCP.
	Notez toutefois qu'il est courant de voir un ou deux messages &#60;sleep&#62;
	avant que le serveur DHCP ne réponde.
	<screen>
Searching for server (DHCP)...  </screen>
	</para>

	<para>
	Diagnostiquer ce qui se passe exactement est parfois difficile,
	mais on peut déjà explorer les pistes suivantes.
	</para>
	<sect2>
		<title>Vérifier les connexions et le câblage</title>
		<para>
		Est-ce que le client léger est physiquement relié
		au même réseau que le serveur ?
		</para>
		<para>
		Lorsque le client léger est sous tension, vérifier que le LED "Link" de la carte
		réseau est allumé, ainsi que sur l'appareil (switch, hub, routeur) à l'autre bout du câble.
		</para>

		<para>
		S'il s'agit d'une connexion directe entre un client léger et un serveur 
		(sans hub ou switch), il faut s'assurer que le câble est un câble croisé.
		Si la connexion passe par un hub ou un switch, il faut alors utiliser
		des câbles droits, aussi bien entre le client léger et le hub qu'entre le hub et le serveur LTSP.
		</para>

	</sect2>

	<sect2>
		<title>Est-ce que DHCP est activé ?</title>
		<para>
		Il se peut que le daemon <command>dhcpd</command> ne soit pas en cours
		d'exécution sur le serveur. On peut le vérifier de plusieurs façons.
		</para>

		<para>
		<command>dhcpd</command> s'exécute en tâche de fond (background),
		à l'écoute sur le port UDP 67. La commande
		<command>netstat</command> permet de vérifier si un processus
		est à l'écoute sur ce port :
		<programlisting>
netstat -an | grep ":67 " </programlisting>
		Un message similaire à ce qui suit devrait apparaître :
		<programlisting>
udp     0    0   0.0.0.0:67         0.0.0.0:*</programlisting>
		La 4ème colonne indique l'adresse IP et le port, séparés par deux
		points (':').  Une adresse composée uniquement de zéros ('0.0.0.0')
		indique une écoute du port 67 sur toutes les interfaces
		réseau. C'est le cas si un serveur possède par exemple une carte <command>eth0</command> et
		une autre <command>eth1</command> et que <command>dhcpd</command> 
		est à l'écoute sur ces deux interfaces.
		</para>

		<para>
		Ce n'est pas parce que netstat montre qu'un processus est à l'écoute
		sur le port UDP 67 qu'il s'agit pour autant du daemon 
		<command>dhcpd</command>. Cela peut être un autre programme, 
		comme <command>bootpd</command>, bien que cela soit peu probable,
		car le daemon <command>bootp</command> n'est plus fourni par défaut 
		dans les distributions Linux récentes.
		</para>

		<para>
		Pour être absolument sûr que c'est bien <command>dhcpd</command>
		qui fonctionne, on peut s'en assurer avec la commande <command>ps</command>.
		<programlisting>
ps aux | grep dhcpd </programlisting>

		Une ligne équivalente à celle ci-dessous doit alors s'afficher :

		<programlisting>
root 23814 0.0 0.3 1676 820 ?      S 15:13 0:00 /usr/sbin/dhcpd
root 23834 0.0 0.2 1552 600 pts/0  S 15:52 0:00 grep dhcp </programlisting>

		La première ligne prouve effectivement que <command>dhcpd</command> est
		en cours d'exécution. La deuxième correspond à l'exécution de la commande
		<command>grep</command>.
		</para>

		<para>
		S'il n'y a aucune ligne montrant que <command>dhcpd</command> est lancé, il faut
		alors vérifier que le serveur est configuré pour fonctionner en
		runlevel (niveau d'exécution) 5, et que <command>dhcpd</command>
		est lui-même paramétré pour démarrer en runlevel 5.
		Sur un serveur Redhat, la commande <command>ntsysv</command>
		permet de le vérifier.
		</para>

		<para>
		On peut aussi tenter de lancer manuellement le daemon <command>dhcpd</command> avec la
		commande suivante :
		<programlisting>
service dhcpd start</programlisting>

		Vérifiez les messages affichés, car le démarrage peut échouer.
		</para>
		
	</sect2>

	<sect2>
		<title>Re-vérifier la configuration de <command>dhcpd</command></title>
		<para>
		Est-ce que le fichier <filename>/etc/dhcpd.conf</filename> contient une
		section pour le client léger qui ne démarre pas ?
		</para>
		<para>
		Si on a opté pour une adresse IP fixe (fixed-address) pour ce client
		léger, re-vérifiez que l'adresse MAC spécifiée correspond bien
		à celle de sa carte réseau.
		</para>
	</sect2>
	
	<sect2>
		<title>Est-ce que ipchains et/ou iptables bloquent la requête ?</title>
		<sect3>
		<title>Vérification d'ipchains</title>
		<para>
			Lancez la commande suivante:
			<programlisting>
ipchains -L -v </programlisting>
			Si ce programme est installé et qu'un message équivalent apparaît:
			<programlisting>
Chain input (policy ACCEPT: 229714 packets, 115477216 bytes):
Chain forward (policy ACCEPT: 10 packets, 1794 bytes):
Chain output (policy ACCEPT: 188978 packets, 66087385 bytes): 
</programlisting>
le problème n'est pas lié à ipchains (pas de filtrage).
		</para>
		</sect3>
		<sect3>
		<title>Vérification d'iptables</title>
		<para>
			Lancer la commande suivante:
			<programlisting>
iptables -L -v </programlisting>
Si ce programme est installé et qu'un message équivalent apparaît:
			<programlisting>
Chain INPUT (policy ACCEPT 18148 packets, 2623K bytes)
pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 17721 packets, 2732K bytes)
pkts bytes target     prot opt in     out     source               destination</programlisting>
Ce n'est pas non plus iptables qui pose problème.
		</para>
		</sect3>
	</sect2>
	
	<sect2>
		<title>Est-ce que le client léger envoie bien une requête ?</title>
		<para>
		Vérifiez le contenu du journal <filename>/var/log/messages</filename> pendant
		que le client léger démarre. On peut le faire avec la commande suivante:
		<programlisting>
tail -f /var/log/messages </programlisting>
		Ceci affiche le journal au fur et à mesure que des lignes y sont ajoutées.
		<programlisting>
server dhcpd: DHCPDISCOVER from 00:50:56:81:00:01 via eth0
server dhcpd: no free leases on subnet WORKSTATIONS
server dhcpd: DHCPDISCOVER from 00:50:56:81:00:01 via eth0
server dhcpd: no free leases on subnet WORKSTATIONS </programlisting>
Si des messages 'no free leases' apparaissent, cela signifie
que <command>dhcpd</command> fonctionne bien, mais qu'il n'a aucune information
lui permettant d'identifier le client léger qui demande une adresse IP.
</para>
	</sect2>
	
</sect1>

<sect1>
	<title>TFTP</title>
	<para>
	Etherboot utilise le protocole TFTP pour télécharger le noyau Linux
	depuis le serveur. C'est un protocole relativement simple, mais un
	mauvais paramétrage peut l'empêcher de fonctionner.
	</para>

	<para>
	Si un message équivalent à ce qui suit apparaît sur l'écran du client léger :
	<screen>
Loading 192.168.0.254:/lts/vmlinuz-2.4.24-ltsp-4......... </screen>
	suivi d'une série de points remplissant rapidement l'écran, alors TFTP fonctionne
	correctement et le noyau Linux est en cours de téléchargement.
	</para>
	<para>
	Si, au contraire, on ne voit pas les points s'afficher, le problème est peut-être
	l'un des suivants. 
	</para>

	<sect2>
	<title><command>tftpd</command> n'est pas lancé</title>
	<para>
		Si <command>tftpd</command> n'est pas activé, il ne répondra pas aux 
		requêtes du client léger. Pour vérifier qu'il est bien actif, utilisez la commande
		<command>netstat</command> comme ceci:
		<programlisting>
[root@bigdog]# netstat -anp | grep ":69 "

udp     0   0 0.0.0.0:69         0.0.0.0:*                 453/inetd        
		</programlisting>
		Si aucun message n'apparaît, le daemon <command>tftpd</command> n'est pas lancé.
	</para>
	<para>
		Il y a généralement deux méthodes pour lancer <command>tftpd</command> automatiquement, soit avec
		<command>inetd</command>, soit avec <command>xinetd</command>, qui est plus récent.
	</para>
	<para>
		<command>inetd</command> est contrôlé par le fichier de configuration
		<filename>/etc/inetd.conf</filename>.  Dans ce fichier, il faut s'assurer
		que la ligne demandant le démarrage du daemon tftp n'est PAS mise en commentaire.
		Normalement la ligne doit correspondre à ceci :
		<programlisting>
tftp dgram udp wait nobody /usr/sbin/tcpd  /usr/sbin/in.tftpd -s /tftpboot
		</programlisting>
	</para>
	<para>
		<command>xinetd</command> utilise un répertoire contenant
		autant de fichiers de configuration que de services contrôlés par xinetd.
		Si le serveur est équipe de xinetd, le fichier de configuration pour tftpd est
		<filename>/etc/xinetd.d/tftp</filename>.
		En voici un exemple de contenu:
		<programlisting>
service tftp
{
disable          = no
socket_type      = dgram
protocol         = udp
wait             = yes
user             = root
server           = /usr/sbin/in.tftpd
server_args      = -s /tftpboot
}
		</programlisting>

		S'assurer que le paramètre <command>disable</command> a BIEN 
		la valeur <command>no</command>.
	</para>
	</sect2>

	<sect2>
	<title>Le noyau ne se trouve pas là où tftpd le cherche</title>
	<para>
		Le noyau Linux pour les clients légers doit être stocké dans un répertoire
		auquel le daemon tftpd peut accéder. Si l'option '-s' est utilisée
		pour lancer le daemon <command>tftpd</command>, le chemin d'accès
		au noyau demandé par le client léger doit être relatif à 
		<filename class="directory">/tftpboot</filename>. 
		Donc, si le paramètre <command>filename</command> du fichier
		<filename>/etc/dhcpd.conf</filename> a pour valeur
		<filename>/lts/vmlinuz-2.4.24-ltsp-4</filename>, le véritable chemin
		d'accès au noyau doit être <filename>/tftpboot/lts/vmlinuz-2.4.24-ltsp-4</filename>
	</para>
	</sect2>
</sect1>

<sect1>
	<title>Montage du système de fichiers via NFS</title>
	<para>
		Plusieurs motifs peuvent empêcher le montage de la racine (<filename class="directory">/</filename>) 
		du système de fichier d'un client léger, et notamment:
	</para>
	<sect2>
	<title>No init found</title>
	<para>
		Après le chargement du noyau, si l'écran du client léger affiche
		un message du type:
		<screen>
Kernel panic: No init found.  Try passing init= option to kernel.  </screen>
		il est fort probable que le répertoire monté à la racine ne soit pas
		le bon, ou que le répertoire <filename>/opt/ltsp/i386</filename>
		soit vide.
	</para>
	</sect2>

	<sect2>
	<title>Server returned error -13</title>
	<para>
		Si l'erreur suivante apparaît:
		<screen>
Root-NFS: Server returned error -13 while mounting /opt/ltsp/i386 </screen>
		ceci indique que le répertoire
		<filename class="directory">/opt/ltsp/i386</filename>
		n'est pas référencé dans le fichier <filename>/etc/exports</filename>
		utilisé par NFS.
	</para>
	<para>
		Vérifier également si le journal <filename>/var/log/messages</filename> ne contient pas de messages d'erreurs.
		Une ligne du type:
		<screen>
Jul 20 00:28:39 bigdog rpc.mountd: refused mount request from ws004
		for /opt/ltsp/i386 (/): no export entry </screen>
		confirmera le diagnostic: le contenu du fichier <filename>/etc/exports</filename>
		est incorrect.
	</para>
	</sect2>

	<sect2>
	<title>Problèmes liés au daemon NFS (portmap, nfsd &amp; mountd)</title>
	<para>
		Les problèmes NFS peuvent être complexes à résoudre. Comprendre
		comment il faut le paramétrer, et connaître les outils disponibles
		pour un bon diagnostic sont autant de moyens pour trouver la solution.
		</para>
	<para>
		Trois daemons sont nécessaires pour que NFS fonctionne correctement:
		<command>portmap</command>, <command>nfsd</command> et <command>mountd</command>.
	</para>
	<sect3>
		<title>Le Portmapper (portmap)</title>
		<para>
		Si le client léger affiche des messages du type:
		<screen>
Looking up port of RPC 100003/2 on 192.168.0.254
portmap: server 192.168.0.254 not responding, timed out
Root-NFS: Unable to get nfsd port number from server, using default
Looking up port of RPC 100005/2 on 192.168.0.254
portmap: server 192.168.0.254 not responding, timed out
Root-NFS: Unable to get mountd port number from server, using default
mount: server 192.168.0.254 not responding, timed out
Root-NFS: Server returned error -5 while mounting /opt/ltsp/i386
VFS: unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or 02:00
Please append a correct "root=" boot option
Kernel panic: VFS: Unable to mount root fs on 02:00 </screen>
		il est plus que probable que le daemon <command>portmap</command>
		n'est pas lancé sur le serveur. Vérifiez avec la commande
		<command>ps</command>:
		<screen>
ps -e | grep portmap </screen>
		Si portmap est bien lancé, le résultat doit être du type:
		<screen>
30455 ?        00:00:00 portmap </screen>
		Essayez aussi avec la commande <command>netstat</command>.
		Puisque le daemon portmap utilise les ports TCP et UDP 111, la commande:
		<screen>
netstat -an | grep ":111 " </screen>
		doit renvoyer un résultat du type:
		<screen>
tcp   0   0 0.0.0.0:111       0.0.0.0:*          LISTEN      
udp   0   0 0.0.0.0:111       0.0.0.0:*                           </screen>
		Si ce n'est pas le cas, <command>portmap</command> n'est pas lancé sur le serveur.
		Pour le lancer manuellement, utiliser la commande:
		<screen>
/etc/rc.d/init.d/portmap   start </screen>
			Puis, assurez-vous qu'il est configuré pour se lancer automatiquement
			lorsque le serveur (re)démarre, avec la commande <command>ntsysv</command>
		</para>
	</sect3>

	<sect3>
		<title>Les daemons NFS et MOUNT (nfsd &amp; mountd)</title>
		<para>
		Les deux autres dameons de NFS sont 
		<command>nfsd</command> et <command>mountd</command>.
		Ils sont tous les deux lancés par le script 
		<filename>/etc/rc.d/init.d/nfs</filename>.
		</para>
		<para>
		On verifie qu'ils sont bien lancés avec la commande <command>ps</command>:
		<screen>
ps -e | grep nfs
ps -e | grep mountd </screen>
		Si une de ces deux commandes ne renvoie aucun message, 
		le daemon correspondant ne fonctionne pas, et il faut alors le
		lancer manuellement.
		</para>

		<para>
		En principe, il est possible de les relancer tous les deux
		en utilisant l'argument <command>restart</command> avec le script 
		<filename>/etc/rc.d/init.d/nfs</filename>, mais il semble que ce script
		(selon les versions) ne relance pas correctement le daemon <command>nfsd</command>.
		Il relance seulement <command>mountd</command> (bug?).  Donc, pour être absolument
		sûr de (re)lancer les deux dameons, utilisez les commandes suivantes:
		<screen>
/etc/rc.d/init.d/nfs  stop
/etc/rc.d/init.d/nfs  start </screen>
		La fonction <command>stop</command> peut renvoyer une erreur, mais on peut
		la négliger. Par contre, la fonction <command>start</command> doit absolument
		renvoyer <command>OK</command>.
		</para>

		<para>
		Si les deux daemons sont lancés et que NFS ne fonctionne toujours pas,
		vérifiez qu'ils se sont bien enregistrés auprès du portmapper. Utiliser la commande
		<command>rpcinfo</command>:
		<screen>
rpcinfo -p localhost </screen>
		Le résultat doit au moins contenir les lignes suivantes:
		<screen>
program vers proto   port
100000    2   tcp    111  portmapper
100000    2   udp    111  portmapper
100003    2   udp   2049  nfs
100003    3   udp   2049  nfs
100021    1   udp  32771  nlockmgr
100021    3   udp  32771  nlockmgr
100021    4   udp  32771  nlockmgr
100005    1   udp    648  mountd
100005    1   tcp    651  mountd
100005    2   udp    648  mountd
100005    2   tcp    651  mountd
100005    3   udp    648  mountd
100005    3   tcp    651  mountd
100024    1   udp    750  status
100024    1   tcp    753  status</screen>
                    Ceci indique que les daemons <command>nfs</command> (nfsd) et
                    <command>mountd</command> sont lancés et bien enregistrés auprès du portmapper.
                </para>
            </sect3>
        </sect2>
    </sect1>

    <sect1>
        <title>Serveur X</title>
        <para>
	Les problèmes liés au serveur X d'un client léger LTSP sont sans 
	aucun doute les plus difficiles à corriger.
	Si le client léger est équipé d'une carte vidéo récente, supportée par
	Xorg ou XFree86 v4.1, et que l'écran utilisé supporte une large gamme
	de fréquences et de résolutions, résoudre le problème est assez facile.
	Dans ce cas, l'erreur la plus probable est que le serveur X choisi n'est pas le bon.
	</para>
	<para>
	Lorsqu'un serveur X ne fonctionne pas avec une carte vidéo, les conséquences
	sont visibles: soit le serveur ne démarre pas du tout, soit l'affichage est
	incorrect.
	</para>
	<para>
	Lorsqu'un client léger est prêt à démarrer en mode graphique,
	il appelle le script <filename>startx</filename>, qui lance
	le serveur X avec l'option <command>-query 'nom_de_serveur'</command>, où 'nom_de_serveur'
	correspond au serveur sur lequel un gestionnaire de connexion X <command>XDM</command>,
	<command>GDM</command> ou <command>KDM</command> est en cours d'exécution.
	</para>

	<para>
	Si le serveur X est lancé par le script <command>startx</command>, il ne faut
	pas oublier que ce script est lui même lancé par le programme <command>init</command>.
	En cas d'erreur, <command>init</command> essaye systématiquement
	de relancer le script fautif (<command>startx</command> dans ce cas précis), et ce 10 fois de suite. 
	Après 10 essais infructueux, <command>init</command> abandonne, et on peut voir enfin les messages
	d'erreur du serveur X s'afficher à l'écran.
	</para>

	<para>
	Il est plutôt agaçant d'attendre que le serveur X échoue 10 fois de suite
	afin de savoir pourquoi! Il existe un moyen d'éviter cette attente, en démarrant
	le client léger en runlevel (niveau d'exécution) 3. Dans cette configuration,
	le serveur X n'est PAS lancé automatiquement par <command>init</command>. Le client léger
	ouvre une session shell <command>bash</command> et attend qu'une commande
	soit tapée au clavier. A partir de là, on peut lancer manuellement
	le serveur X en appelant le script suivant:
	<screen>
sh  /tmp/start_ws </screen>
	Le serveur X se lance et lorsqu'il échoue, le contrôle retourne immédiatement
	à l'invite de commande du shell. On peut alors vérifier pourquoi.
	</para>
</sect1>

<sect1>
	<title>Gestionnaire de connexion X</title>
	<para>
	Le gestionnaire de connexion X est un daemon lancé
	sur le serveur. Son rôle est d'attendre qu'un serveur X lui envoie
	une demande de connexion. Une fois le contact établi, il propose
	une fenêtre d'identification (login) sur l'écran, afin que l'utilisateur
	puisse se connecter sur le serveur. 
	</para>

	<para>
	Les trois gestionnaires de connexion les plus courants sont :
	<itemizedlist>
		<listitem>
		<para>
			XDM - C'est "l'ancêtre", disponible depuis l'origine de X Windows.
		</para>
		</listitem>
		<listitem>
		<para>
			GDM - ('Gnome Display Manager').  C'est le gestionnaire de connexion
			qui fait partie du package Gnome.
		</para>
		</listitem>
		<listitem>
		<para>
			KDM - ('KDE Display Manager').  C'est le gestionnaire de connexion
			qui fait partie du package KDE 'K Desktop system'.
		</para>
		</listitem>
	</itemizedlist>
	La plupart des distributions Linux récentes contiennent ces trois
	gestionnaires de connexion X.
	</para>

	<sect2>
	<title>Le syndrome de l'écran gris et curseur en croix</title>
	<para>
	Si cet écran gris s'affiche sur le client léger, cela signifie que le serveur X
	fonctionne bien, mais qu'il n'a pu entrer en contact avec un gestionnaire de connexion.
	Les causes probables de ce symptôme sont :
	<orderedlist>
	<listitem>
		<para>
		Le gestionnaire de connexion n'est pas lancé
		</para>
		<para>
		Sur les serveurs Redhat récents (7.0 et au delà), le gestionnaire
		de connexion est lancé à partir d'<command>init</command>.  
		Dans le fichier <filename>/etc/inittab</filename>, on trouve une
		ligne qui ressemble à celle ci :
		<screen>
		x:5:respawn:/etc/X11/prefdm -nodaemon 
		</screen>
		C'est le script <command>prefdm</command> qui détermine
		quel est le gestionnaire de connexion à lancer.
		</para>

		<para>
		Le gestionnaire de connexion par défaut dépend des
		packages installés sur le serveur. Si Gnome est installé,
		c'est GDM qui est le gestionnaire de connexion par défaut.
		Si Gnome n'est pas installé, le script <command>prefdm</command> vérifie si
		KDE est installé, et dans ce cas, c'est KDM qui sera le
		gestionnaire de connexion par défaut.
		Si KDE n'est pas non plus installé,
		c'est XDM qui sera le gestionnaire de connexion par défaut.
		</para>

		<para>
		En utilisant la commande <command>netstat</command>, il est possible
		de vérifier si un gestionnaire de connexion est lancé:
		<screen>
netstat -ap | grep xdmcp 
		</screen>
		Le résultat doit montrer qu'un processus est à l'écoute
		sur le port XDMCP (177).
		<screen>
udp     0   0 *:xdmcp            *:*               1493/gdm 
	</screen>
		Cet exemple montre que <command>gdm</command> est bien en cours d'exécution, 
		que son PID est 1493, et qu'il est à l'écoute sur le port XDMCP.
		</para>

		<para>
		Si une ligne équivalente à celle ci apparaît, c'est qu'il y a
		un gestionnaire de connexion X lancé. Il faut donc vérifier
		que le client léger envoie bien une requête XDMCP à ce 
		gestionnaire de connexion.
		</para>

		<para>
		Dans le fichier <filename>lts.conf</filename>, il existe un
		paramètre (optionnel) qui permet d'indiquer l'adresse IP du serveur sur lequel
		le gestionnaire de connexion est lancé: 
		<screen>
XDM_SERVER  =  192.168.0.254 </screen>
		Si ce paramètre est présent, sa valeur doit bien sûr
		correspondre à l'adresse IP du serveur concerné.
		</para>

		<para>
		Si le paramètre 'XDM_SERVER' n'est pas défini, c'est la valeur
		du paramètre 'SERVER' qui est utilisée. Et si le paramètre 'SERVER'
		n'est pas non plus défini, la valeur par défaut utilisée est
		<command>192.168.0.254</command>.
		</para>

		<para>
		Quelle que soit la façon de paramétrer l'adresse IP du serveur où
		le gestionnaire de connexion est lancé, il faut s'assurer que
		cette adresse est correcte.
		</para>
		</listitem>
		<listitem>
			<para>
			Le gestionnaire de connexion est peut-être configuré pour
			refuser les connexions de machines distantes.
			</para>

			<para>
			Si les vérifications précédentes ont été faites et que cela
			ne fonctionne toujours pas, il se peut alors que le
			gestionnaire de connexion X soit configuré pour refuser
			les requêtes XDMCP provenant de machines distantes. 
			Il faut donc vérifier les fichiers de configuration
			spécifiques à chaque gestionnaire de connexion.
			</para>

			<itemizedlist>
			<listitem>
				<para><command>XDM</command></para>
				<para>
				Sur les serveurs Redhat, XDM est configuré
				par défaut pour refuser les connexions distantes. Le script
				<command>ltspcfg</command> devrait normalement modifier ce paramétrage,
				mais si cela ne fonctionne pas, il faut mettre à jour le fichier
				<filename>/etc/X11/xdm/xdm-config</filename> manuellement.
				Rechercher si la ligne suivante existe dans le fichier :
				<screen>
DisplayManager.requestPort:     0 </screen>
				Cette ligne DOIT être mise en commentaire
				pour que XDM accepte des requêtes de machines distantes sur
				le port 177.
				Pour ce faire, insérer un '#' en début de ligne.
				</para>
				<para>
				Un autre fichier de configuration important
				pour XDM est <filename>/etc/X11/xdm/Xaccess</filename>.
				Il DOIT contenir une ligne commençant par le caractère
				'*' (astérisque).  Sur les serveurs Redhat,
				cette ligne est mise en commentaire par défaut. 
				Le script <command>ltspcfg</command> doit normalement
				enlever le commentaire, mais si ça ne fonctionne pas,
				il faut le faire manuellement, ou ajouter la ligne
				si elle n'existe pas du tout dans le fichier.
				Une fois modifiée ou rajoutée, cette ligne doit
				ressembler à ce qui suit :
				<screen>
*        #any host can get a login window </screen>
				</para>
			</listitem>

			<listitem>
				<para><command>KDM</command></para>
				<para>
				Les versions récentes de KDM utilisent
				un fichier de configuration appelé <command>kdmrc</command>.
				Selon les distributions Linux, ce fichier
				peut être stocké dans différents endroits. 
				Pour une Redhat 7.2, on le trouve dans
				<filename>/etc/kde/kdm/kdmrc</filename>.
				Pour les autres distributions, utiliser
				la commande <command>locate</command> pour trouver où est 
				stocké ce fichier.
				</para>
				<para>
				Le fichier <command>kdmrc</command> contient
				une section <command>[Xdmcp]</command>. Pour que
				KDM accepte les requêtes distantes XDMCP, la valeur
				du paramètre <command>Enable</command> de cette section doit 
				être <command>true</command> (vrai).
				</para>
				<para>
				Les anciennes versions de KDM utilisent
				plutôt le fichier de configuration de XDM,
				<filename>/etc/X11/xdm</filename>.
				</para>
			</listitem>

			<listitem>
				<para><command>GDM</command></para>
				<para>
				GDM utilise des fichiers de configuration différents. Ils
				sont stockés dans le répertoire <filename class="directory">/etc/X11/gdm</filename>.
				</para>

				<para>
				Le principal fichier à contrôler est <filename>gdm.conf</filename>.
				Dans la section <command>[xdmcp]</command>, le paramètre
				'Enable' doit avoir la valeur '1' ou 'true', selon la version de GDM.
				Exemple:
				<screen>
[xdmcp]
Enable=true
HonorIndirect=0
MaxPending=4
MaxPendingIndirect=4
MaxSessions=16
MaxWait=30
MaxWaitIndirect=30
Port=177 </screen>
				</para>
				<para>
				La valeur de 'Enable' est bien 'true'.
				Dans les versions plus anciennes de GDM,
				on utilise '0' (faux) ou '1' (vrai) pour
				désactiver ou activer les connexions
				distantes. Les versions récentes utilisent
				'false' et 'true'.
				</para>
			</listitem>
			</itemizedlist>
		</listitem>

		<listitem>
			<para>
			Si le problème persiste en dépit de toutes ces vérifications,
			il se peut enfin que le gestionnaire de connexion ne puisse
			pas assigner un nom d'hôte à l'adresse IP du client léger.
			Il faut alors contrôler que le nom du client léger
			est bien spécifié dans le fichier <filename>/etc/hosts</filename>, ou
			qu'il est correctement géré dans les tables DNS (si DNS est utilisé sur le serveur).
			</para>
		</listitem>

		</orderedlist>
	</para>
	</sect2>
</sect1>
</chapter>

<chapter>
<title>Kernels</title>
<para>
	Il y a quelques décisions à prendre concernant le choix du noyau Linux pour un client léger.
	On peut soit decider d'utiliser un des noyaux standard disponibles en téléchargement,
	soit en compiler un soi-même. On peut aussi choisir de faire afficher, pendant le chargement du noyau, 
	un écran graphique avec une barre de progression, ce qui est
	désormais possible avec le patch (modification) <command>Linux Progress Patch (LPP)</command>.
</para>

<sect1>
	<title>Noyaux standards fournis avec LTSP</title>
	<para>
	Selon la version de LTSP, le package des noyaux contient 2 noyaux. Le premier a le patch 'Linux Progress Patch'
	déjà appliqué et configuré, le second ne l'a pas.
	</para>

	<para>
	Les 2 noyaux sont déjà modifiés avec le patch 'NFS Swap patch'.
	</para>
</sect1>

<sect1>
	<title>Compiler son propre noyau</title>
	<para>
	Lorsqu'on décide de compiler un nouveau noyau pour les clients légers, il faut opter pour l'une des
	deux méthodes proposées ci-dessous.
	</para>
	<para>
	La méthode par défaut utilise une solution basée sur un disque virtuel en mémoire, appelé
	"Initial Ram Disk", et plus connu sous l'acronyme <command>initrd</command>. 
	L'image de ce disque virtuel initrd est un petit système de fichier qui est rajouté à la fin
	du noyau. Cette image initrd est chargée en mémoire, et lorsque le noyau démarre, il monte
	ce disque virtuel à la racine de son système de fichier (/).
	Il y a plusieurs avantages à utiliser cette technique.
	Tout d'abord, les drivers de cartes réseau peuvent être compilés sous forme de
	modules et seul le module nécessaire sera chargé et utilisé par le noyau au démarrage.
	Ceci permet donc d'utiliser le même noyau avec n'importe quelle carte réseau.
	L'autre avantage est que le client DHCP chargé par le client léger fonctionne
	dans l'espace utilisateur (user space) plutôt que dans l'espace noyau (kernel space).
	Cela permet de mieux contrôler les paramètres demandés et envoyés par le serveur, et permet enfin 
	de réduire sensiblement la taille du noyau. 
	L'autre méthode consiste à utiliser un noyau sans initrd. Dans ce cas, le noyau doit être 
	compilé avec le driver spécifique à la carte réseau du client léger. Cela nécessite également
	d'activer les options "IP-Autoconfig" (Auto configuration IP) et "Root filesystem on NFS" (racine du système
	de fichier via NFS) pour compiler le noyau. Le fichier contenant le noyau sera plus petit (puisqu'il n'y a pas
	d'initrd rajouté), et le téléchargement depuis le serveur sera légèrement plus rapide.
	Mais une fois que le client léger a démarré et que l'initialisation du noyau est terminé, il n'y aura
	plus aucune différence entre ces deux méthodes quant au fonctionnement du client léger.
	</para>

	<para>
	Le noyau standard LTSP contient une image initrd contenant tout ce qui est nécessaire à la détection
	de la carte réseau et à la gestion des requêtes DHCP dans l'espace utilisateur. L'objectif principal
	était de faire le plus petit initrd possible. Pour ce faire, nous avons choisi la librairie
	uClinux en remplacement de la librairie classique libc, et busybox pour remplacer tous les utilitaires standard
	utilisés pendant la phase de démarrage.
	</para>

	<para>
	Si vous voulez compiler votre propre noyau, vous devrez télécharger le package <filename>ltsp_initrd_kit</filename>. 
	Il contient l'arborescence du système de fichier racine, ainsi que les scripts pour construire l'image initrd.
	</para>

	<sect2>
	<title>Récupérer les sources du noyau Linux</title>

	<para>
	Pour contruire un nouveau noyau, il est recommandé de commencer avec une version originale des sources,
	directement téléchargée depuis le site <command>ftp.kernel.org</command>. 
	En effet, la plupart des distributions utilisent un noyau modifié par de nombreux
	patches (modifications), et dont le code source ne correspond pas à celui des noyaux officiels.
	</para>

	<para>
	Téléchargez le source du noyau de votre choix et sauvegardez-le
	dans le répertoire <filename class="directory">/usr/src</filename> de votre serveur.
	Les noyaux officiels sont dans le répertoire <filename class="directory">/pub/linux/kernel</filename>
	du serveur <command>ftp.kernel.org</command>.  Choisissez un noyau récent de la série 2.4, car
	le support de <command>devfs</command> est requis pour LTSP.
	</para>

	<para>
	Si vous voulez également inclure le support du swap via NFS et le Linux Progress Patch (LPP), 
	il faut se procurer les fichiers de patch (modifications) correspondant exactement
	à la version du noyau choisi. A l'heure où cet article est écrit, le noyau 2.4.9 est
	le dernier à supporter ces fonctionnalités. 
	</para>

	<para>
	Dans l'exemple qui suit, nous utiliserons le noyau 2.4.9. Le fichier contenant les sources est 
<filename>ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.9.tar.bz2</filename>
	</para>

	<para>
	Décompressez les sources du noyau dans le répertoire <filename class="directory">/usr/src</filename>.
	Attention, le répertoire <filename>linux</filename> sera alors créé. Si vous aviez déjà un tel répertoire
	contenant les sources d'un autre noyau, renommez-le avant de décompresser les sources du nouveau noyau.
	</para>

	<para>
	Le package de sources que nous venons de télécharger ayant été compressé avec l'utilitaire
	<command>bzip2</command>, nous devons le décompresser avant de le passer à la commande <command>tar</command>.
	Utilisez la commande suivante pour décompresser :
	<screen>
bunzip2 &#60;linux-2.4.9.tar.bz2 | tar xf - 
</screen>
	Lorsque la décompression est terminée, le répertoire 
	<filename class="directory">/usr/src/linux</filename> contient l'arborescence complète des sources du noyau Linux.
	A ce stade, il est recommandé de renommer ce répertoire plus significativement, en fonction de la version.
	<screen>
mv linux linux-2.4.9 </screen>
	Une fois renommé, rentrez dans ce répertoire :
	<screen>
cd linux-2.4.9 </screen>
	</para>
	<para>
	Avant de configurer le noyau, je modifie le fichier <filename>Makefile</filename>.  
	Dans les premières lignes de ce fichier, on trouve une variable appelée
	<command>EXTRAVERSION</command>.  Je donne la valeur 'ltsp-1' à cette variable. 
	De cette manière, le véritable numéro de version de ce noyau sera 
	'2.4.9-ltsp-1', ce qui facilitera son identification plus tard.
	Après modification, le début du fichier Makefile devrait ressembler à ce qui suit :
		<screen>
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 9
EXTRAVERSION = -ltsp-1

KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) </screen>
	</para>
	</sect2>

	<sect2>
	<title>Les patches Noyau</title>
	<para>
	Après décompression, il se peut que vous deviez appliquer quelques
	patches (modifications) sur le code source, comme par exemple le NFS Swap Patch ou le
	Linux Progress Patch. Ces modifications DOIVENT être faites AVANT la configuration
	du noyau.
	</para>
	<sect3>
	<title>NFS Swap patch</title>
	<para>
	Le NFS Swap patch permet à un client léger d'utiliser un fichier de swap (pagination, fichier d'échange)
	se trouvant sur un serveur NFS distant.  Bien qu'il soit recommandé de disposer
	de suffisament de mémoire RAM pour éviter la pagination, il peut être
	parfois difficile d'en installer en supplément, en particulier sur les vieux ordinateurs
	recyclés en clients légers. Utiliser un fichier de pagination via NFS permet de
	contourner ce problème.
	</para>
	<para>
	Si le répertoire courant est <filename class="directory">/usr/src/linux-2.4.9</filename>, et que le fichier patch
	est dans <filename class="directory">/usr/src</filename>, vous pouvez utiliser la commande suivante pour tester le patch
	sans l'appliquer :
		<screen>
patch -p1 --dry-run &#60;../linux-2.4.9-nfs-swap.diff </screen>
	Ceci va vérifier que le patch peut être appliqué sans problème.
	Si la commande ne provoque pas d'erreur, on peut alors appliquer la modification sur les sources,
	en enlevant l'option <command>--dry-run</command> :
		<screen>
patch -p1 &#60;../linux-2.4.9-nfs-swap.diff </screen>
		</para>
	</sect3>
	<sect3>
	<title>Linux Progress Patch (LPP)</title>
	<para>
	Le Linux Progress Patch (LPP) permet de faire afficher
	un logo graphique pendant que le noyau démarre. Les messages habituels du noyau
	sont redirigés vers un autre écran tty. Ce patch modifie le source des scripts de démarrage,
	qui feront évoluer une barre de progression au fur
	et à mesure de leur exécution.
	</para>
	<para>
	Comme pour le NFS Swap patch, vous pouvez tester le patch avec la commande:
	<screen>
patch -p1 --dry-run &#60;../lpp-2.4.9 </screen>
Si le test est concluant, appliquez le patch:
		<screen>
patch -p1 &#60;../lpp-2.4.9 </screen>
		</para>
	</sect3>
	</sect2>

	<sect2>
	<title>Configuration des options du noyau</title>
	<para>
	Parmi les suivants, vous pouvez utiliser le programme de configuration noyau de votre choix :
	<itemizedlist>
	<listitem>
		<para>make xconfig</para>
		<para>
		Cette commande appelle la version X Windows de l'utilitaire de configuration du noyau.
		</para>
	</listitem>
	<listitem>
		<para>make menuconfig</para>
		<para>
		Cette commande appelle la version 'curses' (menu mode caractère) de l'utilitaire
		de configuration du noyau.
		</para>
	</listitem>
		<listitem>
		<para>make config</para>
		<para>
		Cette commande appelle une version de l'utilitaire de configuration du noyau qui affiche
		les paramètres ligne après ligne.
		</para>
	</listitem>
	</itemizedlist>
	</para>

	<sect3>
		<title>Configuration du noyau pour utilisation avec initrd</title>
		<para>

		Configurer un noyau pour utilisation avec initrd nécessite d'activer les options
		suivantes :
		<itemizedlist>

			<listitem>
			<para>
			File systems -> /dev filesystem support
			</para>
			<para>
			Le support du système de fichiers <filename>/dev</filename> doit être activé.  Cette option
			se trouve dans la section 'File systems'. N'activez PAS l'option
			'Automatically mount at boot', ce montage étant réalisé par le script
			<command>/linuxrc</command>.
			</para>
			</listitem>
			<listitem>
			<para>
			Block devices -> RAM disk support
			</para>
			<para>
			Les clients légers utilisent un disque virtuel. Activez cette option, 
			qui se trouve dans la section 'Block devices'.
			</para>
			</listitem>
			<listitem>
			<para>
			Block devices -> Initial RAM disk (initrd) support
			</para>
			<para>
			Pour initrd, cette option DOIT aussi être activée.
			</para>
			</listitem>
			<listitem>
			<para>
			Processor type and features -> Processor family
			</para>
			<para>
			Assurez vous que le noyau que vous configurez sera 
			bien compilé pour le processeur (CPU) du client léger.
			Choisissez le processeur cible dans la section
			'Processor type and features'. Vous devez aussi
			désactiver le support SMP (multi-processeur), à moins que
			votre client léger en possède plus d'un.
			</para>
			</listitem>
			<listitem>
			<para>
			File systems -> Network file systems -> NFS Client support
			</para>
			<para>
			Le client léger devra monter la racine de son système de fichier
			via NFS. En conséquence, le support (client) de NFS est requis.
			</para>
			</listitem>
		</itemizedlist>
		Ceci termine la liste des options particulières requises par LTSP. Mais vous
		pouvez également désactiver de nombreuses autres options, afin
		de réduire la taille du noyau généré.
		</para>
	</sect3>

	<sect3>
		<title>Configuration d'un noyau sans initrd</title>
		<para>
		Il y a quelques différences de configuration entre un noyau utilisant
		initrd et un autre ne s'en servant pas.
		<itemizedlist>
			<listitem>
			<para>
			Block devices -> RAM disk support
			</para>
			<para>
			Les clients légers utilisent les disques virtuels en RAM. Activez cette option.
			</para>
			</listitem>

			<listitem>
			<para>
			Block devices -> Initial RAM disk (initrd) support
			</para>
			<para>
			Cette option doit être DESactivée.
			</para>
			</listitem>
			<listitem>
			<para>
			Networking options -> IP:kernel level autoconfiguration
			</para>
			<para>
			Cette option doit être activée.  Dès le démarrage,
			le noyau configurera l'interface ethernet eth0 en fonction
			des paramètres passés sur la ligne de commande du noyau..
			</para>
			<para>
			Il n'est pas nécessaire d'activer les options DHCP, BOOTP ou RARP du noyau,
			car c'est le code Etherboot qui effectue ce type de requêtes avant
			que le noyau soit chargé, et qui place les paramètres IP ainsi récupérés sur la ligne
			de commande du noyau, qui n'a donc plus besoin de lancer ces requêtes.
			</para>
			</listitem>
			<listitem>
			<para>
			Network device support -> Ethernet (10 or 100Mbit)
			</para>
			<para>
			Quand initrd n'est PAS utilisé, vous devez choisir et activer
			le driver de la carte réseau du client léger concerné. Ce driver
			DOIT être lié (linké) statiquement au noyau, car l'accès au réseau
			est nécessaire pour monter la racine du système de fichier. C'est
			la principale différence entre un noyau utilisant initrd et un autre sans.
			</para>
			</listitem>
			<listitem>
			<para>
			File systems -> /dev filesystem support
			</para>
			<para>
			A partir de LTSP version 2.09pre2, le support de <command>devfs</command>
			est requis, que le noyau utilise initrd ou non.
			</para>
			</listitem>
			<listitem>
			<para>
			File systems -> Automatically mount at boot
			</para>
			<para>
			Lorsque initrd n'est PAS utilisé, le système de fichier
			<filename>/dev</filename> doit être monté par le noyau pendant sa phase de démarrage. 
			Activez cette option en répondant 'Y'.
			</para>
			</listitem>
			<listitem>
			<para>
			File systems -> Network file systems -> NFS Client support
			</para>
			<para>
			Puisque la racine du système de fichier est montée via NFS,
			le support du client NFS dans le noyau est requis. Activez cette option.
			</para>
			</listitem>
		</itemizedlist>
		</para>
	</sect3>
	</sect2>

	<sect2>
	<title>Compilation du noyau</title>

	<para>
	Pour vous simplifier le travail, le package <filename>ltsp_initrd_kit</filename> contient
	un fichier de configuration <filename>.config</filename> initial.
	Vous pouvez copier ce fichier dans le répertoire <filename class="directory">/usr/src/linux-2.4.9</filename>
	avant de configurer votre noyau.
	</para>

	<para>
	Lorsque le noyau aura été configuré en activant ou désactivant les options disponibles,
	vous pouvez alors compiler et lier le noyau. Pour ce faire, utilisez les commandes suivantes dans l'ordre indiqué :
	<screen>
make dep
make clean
make bzImage
make modules
make modules_install 
	</screen>
	Vous pouvez également lier ces opérations dans une même chaîne de commandes :
	<screen>
make dep &amp;&amp; make clean &amp;&amp; make bzImage &amp;&amp; make modules &amp;&amp; make modules_install </screen>
	Le double symbole &amp; indique au shell de n'exécuter la commande suivante que lorsque
	la précédente s'est correctement terminée, et ainsi de suite.
	</para>
	<para>
	Lorsque la compilation (et l'édition de liens) est terminée, le nouveau noyau
	est disponible dans le répertoire <filename class="directory">/usr/src/linux-2.4.9/arch/i386/boot/bzImage</filename>.
	</para>
	</sect2>

	<sect2>
	<title>Préparation (marquage) nouveau noyau pour Etherboot</title>
	<para>
	Pour qu'Etherboot puisse télécharger le nouveau noyau, ce dernier doit être préparé.
	Cette opération est connue sous le nom de 'Tagging' (marquage). Elle a pour effet
	d'ajouter un code exécutable au début du noyau, qui sera exécuté avant que le
	contrôle soit passé au noyau proprement dit. L'outil pour préparer
	un noyau pour Etherboot se nomme '<command>mknbi-linux</command>'.
	</para>
	<para>
	Le package <filename>tsp_initrd_kit</filename> contient un script shell appelé
	<command>buildk</command> qui effectue toutes les commandes nécessaires
	à la préparation d'un noyau pour son téléchargement par le réseau.
	</para>
	</sect2>
</sect1>
</chapter>


<chapter>
<title>Paramètres du fichier <filename>lts.conf</filename></title>
<para>
	Lorsque nous avons conçu LTSP, nous savions que le principal défi
	consistait à gérer un très grand nombre de configurations matérielles
	pour les clients légers. Sans compter que les combinaisons de processeurs, de cartes réseau
	et de cartes vidéo disponibles aujourd'hui ne seraient peut être plus
	les mêmes quelques mois plus tard, au moment d'ajouter de
	nouveaux clients légers au réseau.
</para>
<para>
	Nous avons donc cherché un moyen de spécifier la configuration de chaque
	client léger.  Ces configurations sont définies dans le fichier <filename>lts.conf</filename>
	qui se trouve dans le répertoire <filename class="directory">/opt/ltsp/i386/etc</filename>.
</para>

<para>
	Le format de <filename>lts.conf</filename> autorise la définition d'options 'par défaut' et d'autres
	spécifiques à des clients légers particuliers. Si tous vos clients légers sont identiques,
	vous n'aurez ainsi à configurer qu'un seul modèle dans la section '[Default]'.
</para>

<sect1>
	<title>Exemple de fichier <filename>lts.conf</filename></title>
	<para>
	Voici un exemple de fichier <filename>lts.conf</filename> :
	<screen>
[Default]
	SERVER             = 192.168.0.254
	X_MOUSE_PROTOCOL   = "PS/2"
	X_MOUSE_DEVICE     = "/dev/psaux"
	X_MOUSE_RESOLUTION = 400
	X_MOUSE_BUTTONS    = 3
	USE_XFS            = N
	SCREEN_01          = startx

[ws001]
	XSERVER            = auto
	X_MOUSE_PROTOCOL   = "Microsoft"
	X_MOUSE_DEVICE     = "/dev/ttyS1"
	X_MOUSE_RESOLUTION = 50
	X_MOUSE_BUTTONS    = 3
	X_MOUSE_BAUD       = 1200

[ws002]
	XSERVER            = XF86_Mach64

[ws003]
	SCREEN_01          = shell </screen>
	</para>
</sect1>

<sect1>
	<title>Liste des paramètres <filename>lts.conf</filename></title>
	<sect2>
	<title>Paramètres généraux</title>
	<variablelist>

		<varlistentry>
		<term><command>Commentaires</command></term>
		<listitem>
			<para>
			Un commentaire commence par le caractère '#' et continue
			jusqu'à la fin de la ligne.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>LTSP_BASEDIR</command></term>
		<listitem>
			<para>
			Indique où se trouve (sur le serveur) la racine des systèmes de fichiers des clients légers.
			La valeur par défaut est <filename class="directory">/opt/ltsp</filename>
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>SERVER</command></term>
		<listitem>
			<para>
			Indique l'adresse du serveur XDM_SERVER,
			TELNET_HOST, XFS_SERVER et SYSLOG_HOST, si aucun de ceux-là n'est
			explicitement spécifié ailleurs.  Si vous avez un serveur
			offrant simultanément tous ces services, indiquez son adresse ici, et vous pouvez omettre
			tous les autres. Par défaut (quand non spécifié), SERVER prend la valeur <command>192.168.0.254</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>SYSLOG_HOST</command></term>
		<listitem>
			<para>
			Si vous souhaitez envoyer les messages de journalisation syslog d'un client léger
			vers une machine qui n'est pas le serveur par défaut, vous pouvez indiquer son adresse ici.
			Si ce paramètre n'est PAS spécifié, il prend la valeur du paramètre 'SERVER' défini ci-dessus.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>NFS_SERVER</command></term>
		<listitem>
			<para>
			Permet de spécifier l'adresse du serveur NFS utilisé pour monter le système de 
			fichier <filename class="directory">/home</filename> d'un client léger (voir aussi: Exécution locale des applications).
			Si ce paramètre n'est PAS spécifié, il prend la valeur du paramètre 'SERVER'.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>USE_NFS_SWAP</command></term>
		<listitem>
			<para>
			Si vous voulez utiliser le swap (pagination, fichier d'échange) via NFS, indiquez la valeur 'Y'.
			Valeur par défaut : <command>N</command>
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>SWAPFILE_SIZE</command></term>
		<listitem>
			<para>
			Taille du fichier de pagination (swap). 
			Valeur par défaut : <command>64m</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>SWAP_SERVER</command></term>
		<listitem>
			<para>
			Le fichier de swap d'un client léger peut être
			créé sur n'importe quel serveur du réseau capable de le
			gérer via NFS. Vous pouvez indiquer ici l'adresse IP de ce serveur. 
			Si ce paramètre n'est PAS spécifié, il prend la valeur du paramètre 'NFS_SERVER' défini ci-dessus.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>NFS_SWAPDIR</command></term>
		<listitem>
			<para>
			Répertoire du serveur exporté via NFS et dans lequel
			le fichier swap d'un client léger sera créé. 
			Valeur par défaut: <filename>/var/opt/ltsp/swapfiles</filename>.
			Assurez vous que le nom de ce répertoire exporté est également
			spécifié dans le fichier <filename>/etc/exports</filename>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>TELNET_HOST</command></term>
		<listitem>
			<para>
			Si un client léger est configuré pour ouvrir une session
			telnet (mode caractère), ce paramètre permet de définir sur
			quel serveur le client léger doit ouvrir cette session.
			Si ce paramètre n'est PAS spécifié, il prend la valeur du paramètre <command>SERVER</command>.
			</para>
			<para>
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>DNS_SERVER</command></term>
		<listitem>
			<para>
			Utilisé pour construire le fichier <filename>resolv.conf</filename>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>SEARCH_DOMAIN</command></term>
		<listitem>
			<para>
			Utilisé pour construire le fichier <filename>resolv.conf</filename>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>SCREEN_01</command> à <command>SCREEN_12</command></term>
		<listitem>
			<para>
			Jusqu'à 12 scripts d'écran peuvent être demandés pour un même client léger.
			Ceci créera jusqu'à à 12 sessions simultanées, auxquelles on accède en
			utilisant les combinaisons de touches Ctrl-Alt-F1 à Ctrl-Alt-F12.
			<screen>
SCREEN_01   = startx
SCREEN_02   = shell</screen>
			</para>

			<para>
			Les scripts d'écran disponibles sont :
			<itemizedlist>
			<listitem><para>startx</para></listitem>
			<listitem><para>telnet</para></listitem>
			<listitem><para>rdesktop</para></listitem>
			<listitem><para>shell</para></listitem>
			</itemizedlist>
			Voir aussi dans le répertoire <filename class="directory">/opt/ltsp/i386/etc/screen.d</filename>
			pour d'éventuels scripts supplémentaires. Vous pouvez d'ailleurs écrire vos propres scripts et les
			placer dans ce répertoire.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>MODULE_01</command> à <command>MODULE_10</command></term>
		<listitem>
			<para>
			Ces paramètres permettent de demander le chargement
			de 1 à 10 modules noyaux optionnels sur un client léger.
			Pour chacun de ces paramètres, vous pouvez indiquer n'importe quelle
			option reconnue par la commande 'insmod', comme par exemple :
			<screen>
MODULE_01   = uart401.o
MODULE_02   = "sb.o io=0x220 irq=5 dma=1"
MODULE_03   = opl3.o </screen>
			</para>

			<para>
			Si une valeur spécifiée indique un chemin d'accès absolu,
			la commande <command>insmod</command> sera utilisée pour charger
			le module correspondant. Dans le cas contraire, c'est la commande
			<command>modprobe</command> qui sera utilisée.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>RAMDISK_SIZE</command></term>
		<listitem>
			<para>
			Lorsque le client léger démarre, un disque virtuel est créé dans
			sa mémoire, puis monté sur <filename class="directory">/tmp</filename>.  Vous pouvez contrôler
			la taille de ce système de fichier avec ce paramètre.
			L'unité utilisée est le Kilo-octet (1024 octets).
			Pour créer un disque virtuel de 1 Mo, indiquez
			<command>RAMDISK_SIZE = 1024</command>
			</para>
			<para>
			Si vous changez cette valeur ici, vous devrez également la changer
			dans le paramétrage du noyau. Le noyau devra alors être recompilé, ou bien, dans le cas
			où vous utilisez Etherboot ou Netboot, il faudra re-préparer le noyau (tagging)
			avec l'outil <command>mknbi-linux</command> pour spécifier la nouvelle taille du RAMDISK..
			</para>
			<para>
			Valeur par défaut: 1024 (1 Mo)
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>RCFILE_01</command> à <command>RCFILE_10</command></term>
		<listitem>
			<para>
			Vous pouvez spécifier ici jusqu'à 10 scripts RC qui seront
			exécutés par le script <command>rc.local</command> du client léger.  Copiez les
			scripts souhaités dans le répertoire <filename class="directory">/etc/rc.d</filename>, puis indiquez leur nom ici.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>SOUND</command></term>
		<listitem>
			<para>
			Si le package LTSP Sound est installé, indiquez <command>Y</command> ici. Le script
			<command>rc.sound</command> sera alors exécuté pour initialiser la carte son du client
			léger et pour lancer le daemon correspondant.
			Valeur par défaut : <command>N</command>.
			</para>
		</listitem>
		</varlistentry>

	</variablelist>
	</sect2>

	<sect2>
	<title>Paramètres X-Window</title>
	<variablelist>
		<varlistentry>
		<term><command>XDM_SERVER</command></term>
		<listitem>
			<para>
			Si vous souhaitez que les clients légers s'adressent
			à un gestionnaire de connexion XDM se trouvant sur
			un autre serveur que celui par défaut, vous pouvez spécifier
			son adresse IP ici.
			Si ce paramètre n'est PAS spécifié, il prend la valeur du paramètre <command>SERVER</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>XSERVER</command></term>
		<listitem>
			<para>
			Ce paramètre définit le type de serveur X qui sera
			exécuté sur le client léger. Pour les cartes vidéo PCI et AGP, ce paramètre
			ne devrait pas être nécessaire, car le script rc.local doit être
			capable de détecter automatiquement la carte vidéo du client léger.
			Vous pouvez aussi indiquer la valeur <command>auto</command> pour demander
			la détection automatique de la carte (valeur par défaut).
			</para>

			<para>
			Pour les cartes vidéo ISA, ou pour forcer le chargement
			d'un serveur X particulier, vous pouvez spécifier ici un nom de driver vidéo ou le
			nom d'un serveur X.
			</para>
			<para>
			Si la valeur commence par <command>XF86_</command>, le serveur
			XFree86 3.3.6 sera utilisé. Dans le cas contraire, c'est le serveur Xorg qui 
			sera utilisé.
			Valeur par défaut : <command>auto</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>X_MODE_0</command> à <command>X_MODE_2</command></term>
		<listitem>
			<para>
			Il est possible de définir jusqu'à 3 modes vidéo pour un client léger.
			La valeur de ces paramètres peut utiliser 2 syntaxes différentes : soit une résolution d'écran,
			soit une ligne 'modeline' complète.
			<programlisting width=80>
X_MODE_0 = 800x600

ou

X_MODE_0 = 800x600 60.75 800 864 928 1088 600 616 621 657 -HSync -VSync
			</programlisting>
			</para>
			<para>
			Si aucun paramètre X_MODE_x entries n'est spécifié, le serveur
			X utilisera des lignes 'modeline' standard, et les résolutions d'écran
			1024x768, 800x600 et 640x480.
			</para>
			<para>
			Si un ou plusieurs X_MODE_x sont définis, ils écrasent et remplacent
			les valeurs standard.
			</para>
			
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>X_MOUSE_PROTOCOL</command></term>
		<listitem>
			<para>
			N'importe quel mot-clé compatible avec la syntaxe
			de XFree86 pour les protocoles souris peut être utilisé ici, comme
			"Microsoft" ou "PS/2".  
			Valeur par défaut : <command>"PS/2"</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>X_MOUSE_DEVICE</command></term>
		<listitem>
			<para>
			Indique le nom du périphérique (device) sur lequel
			la souris est connectée. Pour une souris série, c'est en général
			un port série comme <filename>/dev/ttyS0</filename> ou
			<filename>/dev/ttyS1</filename>.  S'il s'agit d'une souris PS/2,
			il s'agit alors de <filename>/dev/psaux</filename>. 
			Valeur par défaut : <filename>/dev/psaux</filename>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>X_MOUSE_RESOLUTION</command></term>
		<listitem>
			<para>
			On peut indiquer ici une valeur pour le paramètre 'Resolution'
			du fichier <filename>XF86Config</filename>. Pour une souris série,
			la valeur habituelle est <command>50</command> et <command>400</command> pour une souris
			PS/2. Valeur par défaut : <command>400</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>X_BUTTONS</command></term>
		<listitem>
			<para>
			Indique le nombre de boutons de la souris, en général
			<command>2</command> ou <command>3</command>.
			Valeur par défaut : <command>3</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>X_MOUSE_EMULATE3BTN</command></term>
		<listitem>
			<para>
			Indique au serveur X d'émuler une souris 3 boutons avec une souris à
			2 boutons, en acceptant le clic simultané sur les boutons gauche et droit.
			Valeur par défaut : <command>N</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>X_MOUSE_BAUD</command></term>
		<listitem>
			<para>
			Définition de la vitesse de communication pour une souris série.
			Exprimée en bauds. Valeur par défaut : <command>1200</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>X_COLOR_DEPTH</command></term>
		<listitem>
			<para>
			Bits utilisés pour le nombre de couleurs.
			Valeurs possibles : <command>8</command>,
			<command>15</command>, <command>16</command>,
			<command>24</command> et <command>32</command>. 
			8 bits permettent la gestion de 256 couleurs, 16 bits 65536
			couleurs, 24 bits 16 millions de couleurs et 32 bits
			donneront 4.2 milliards de couleurs!  Certains serveurs X
			n'acceptent pas toutes ces valeurs.
			Valeur par défaut : <command>16</command> (65536 couleurs)
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>USE_XFS</command></term>
		<listitem>
			<para>
			Pour que le client léger récupère ses polices de caractères
			il y a deux possibilités : soit les demander à un serveur de polices XFS (X Font Server)
			du réseau, soit les lire directement sur son système de fichier monté par NFS.
			Un serveur de polices permet de gérer simplement toutes les polices sur
			une seule machine du réseau, mais quelques problèmes peuvent surgir lorsque
			le nombre de clients légers dépasse les 40.  
			Les 2 valeurs autorisées pour ce paramètres sont <command>Y</command> et <command>N</command>.
			Valeur par défaut : <command>N</command>. 
			Si vous voulez vraiment utiliser un serveur de polices, indiquez 'Y' ici, et donnez l'adresse
			IP de ce serveur dans le paramètre <command>XFS_SERVER</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>XFS_SERVER</command></term>
		<listitem>
			<para>
			Lorsqu'un serveur de polices XFS est utilisé, ce paramètre permet d'en spécifier l'adresse IP.
			Si ce paramètre n'est PAS spécifié, il prend la valeur du paramètre <command>SERVER</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>X_HORZSYNC</command></term>
		<listitem>
			<para>
			Indique la valeur du paramètre XFree86/Xorg <command>HorizSync</command>.
			Valeur par défaut : <command>"31-62"</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>X_VERTREFRESH</command></term>
		<listitem>
			<para>
			Indique la valeur du paramètre XFree86/Xorg <command>VertRefresh</command>
			Valeur par défaut : <command>"55-90"</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>XF86CONFIG_FILE</command></term>
		<listitem>
			<para>
			Si vous souhaitez utiliser un fichier de configuration X 'XF86Config' complet,
			copiez le dans le répertoire <filename class="directory">/opt/ltsp/i386/etc</filename>. Quel que soit
			son nom, il doit être indiqué ici. Par exemple :
			<screen>
XF86CONFIG_FILE = XF86Config.ws004 </screen>
			</para>
		</listitem>
		</varlistentry>
	</variablelist>
	</sect2>

	<sect2>
	<title>Paramètres pour écrans tactiles</title>
	<variablelist>
		<varlistentry>
		<term><command>USE_TOUCH</command></term>
		<listitem>
			<para>
			Si vous connectez un écran tactile sur un client léger,
			il faut alors l'activer en indiquant <command>Y</command> ici.
			Dans ce cas, les autres options spécifiques aux écrans tactiles
			seront prises en compte.
			Valeur par défaut : <command>N</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>X_TOUCH_DEVICE</command></term>
		<listitem>
			<para>
			Un écran tactile fonctionne comme une souris. Il est généralement connecté
			au client léger par un port série, dont vous préciserez le numéro ici, par exemple, 
			<filename>/dev/ttyS0</filename>.  Ce paramètre n'a pas de valeur par défaut.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>X_TOUCH_MINX</command></term>
		<listitem>
			<para>
			Etalonnage des écrans tactiles EloTouch.
			Valeur par défaut : <command>433</command>.
			</para>
		</listitem>
		</varlistentry>
	
		<varlistentry>
		<term><command>X_TOUCH_MAXX</command></term>
		<listitem>
			<para>
			Etalonnage des écrans tactiles EloTouch.
			Valeur par défaut :  <command>3588</command>.
			</para>
		</listitem>
		</varlistentry>
	
		<varlistentry>
		<term><command>X_TOUCH_MINY</command></term>
		<listitem>
			<para>
			Etalonnage des écrans tactiles EloTouch.
			Valeur par défaut :  <command>569</command>.
			</para>
		</listitem>
		</varlistentry>
	
		<varlistentry>
		<term><command>X_TOUCH_MAXY</command></term>
		<listitem>
			<para>
			Etalonnage des écrans tactiles EloTouch.
			Valeur par défaut :  <command>3526</command>.
			</para>
		</listitem>
		</varlistentry>
	
		<varlistentry>
		<term><command>X_TOUCH_UNDELAY</command></term>
		<listitem>
			<para>
			Etalonnage des écrans tactiles EloTouch.
			Valeur par défaut : <command>10</command>.
			</para>
		</listitem>
		</varlistentry>
	
		<varlistentry>
		<term><command>X_TOUCH_RPTDELAY</command></term>
		<listitem>
			<para>
			Etalonnage des écrans tactiles EloTouch.
			Valeur par défaut : <command>10</command>.
			</para>
		</listitem>
		</varlistentry>
	</variablelist>
	</sect2>

	<sect2>
	<title>Paramètres pour support des applications locales</title>
	<variablelist>
		<varlistentry>
		<term><command>LOCAL_APPS</command></term>
		<listitem>
			<para>
			Si vous souhaitez exécuter des applications sur les clients légers plutôt que 
			sur le serveur, indiquez ici la valeur <command>Y</command>.  
			D'autres opérations doivent être effectuées avant que le support
			d'applications locales soit opérationnel. Reportez vous à la section
			'Applications locales' de ce manuel LTSP pour plus d'informations.
			Valeur par défaut : <command>N</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>NIS_DOMAIN</command></term>
		<listitem>
			<para>
			Si vous avez activé le support des applications locales avec le 
			paramètre LOCAL_APPS, un serveur NIS doit être présent et actif
			sur le réseau. Le paramètre NIS_DOMAIN permet de spécifier le
			nom du domaine NIS géré par ce serveur.  Notez qu'un domaine NIS
			n'a RIEN de commun avec un domaine DNS - Internet.
			Valeur par défaut : <command>ltsp</command>.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>NIS_SERVER</command></term>
		<listitem>
			<para>
			Si vous voulez éviter que vos clients légers envoient des broadcasts
			afin de rechercher un serveur NIS, indiquez ici son adresse IP.
			</para>
		</listitem>
		</varlistentry>
	</variablelist>
	</sect2>

	<sect2>
	<title>Paramètres pour gestion du clavier</title>
	<para>
		Tous les fichiers nécessaires à la gestion des claviers des clients légers
		sont désormais stockés dans l'arborescence <filename class="directory">/opt/ltsp/i386</filename>. Configurer
		le clavier d'un client léger LTSP consiste en fait à configurer ce clavier
		pour XFree86. Plusieurs paramètres sont disponibles.
	</para>
	<para>
		Les valeurs autorisées pour les paramètres ci-dessous proviennent
		de la documentation XFree86. Toute valeur acceptée par XFree86 peut
		être spécifiée pour ces paramètres.
	</para>
	<para>
		Nous souhaiterions pouvoir ajouter ici plus d'information concernant
		la gestion des différents claviers nationaux. Si vous avez l'habitude
		de configurer de tels claviers, merci de faire part de votre expérience
		au groupe de développement de LTSP.
	</para>
	<variablelist>
		<varlistentry>
		<term><command>XkbTypes</command></term>
		<listitem>
			<para>
			La valeur par défaut est le mot '<command>default</command>'.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>XkbCompat</command></term>
		<listitem>
			<para>
			La valeur par défaut est le mot '<command>default</command>'.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>XkbSymbols</command></term>
		<listitem>
			<para>
			La valeur par défaut est le mot '<command>default</command>'.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>XkbModel</command></term>
		<listitem>
			<para>
			La valeur par défaut est le mot '<command>pc101</command>'. (ndt : pour un clavier français il faut <command>pc105</command>)
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>XkbLayout</command></term>
		<listitem>
			<para>
			La valeur par défaut est le mot '<command>us</command>'. (ndt : pour clavier français il faut  <command>fr</command>)
			</para>
		</listitem>
		</varlistentry>
	</variablelist>
	</sect2>

	<sect2>
	<title>Paramètres de configuration des imprimantes</title>
	<para>
		De une à trois imprimantes peuvent être connectées à un client léger,
		sur un port série ou parallèle. Les paramètres suivants du fichier <filename>lts.conf</filename>
		permettent de les configurer.
	</para>

	<variablelist>
		<varlistentry>
		<term><command>PRINTER_0_DEVICE</command></term>
		<listitem>
			<para>
			Nom du périphérique (device) pour la première imprimante.
			Des noms comme <filename>/dev/lp0</filename>,
			<filename>/dev/ttyS0</filename> ou
			<filename>/dev/ttyS1</filename> sont autorisés.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_0_TYPE</command></term>
		<listitem>
			<para>
			Type de la première imprimante. Valeurs autorisées : 
			 '<command>P</command>' pour Parallèle, et '<command>S</command>' pour Série.
			</para>
		</listitem>
		</varlistentry>
	
		<varlistentry>
		<term><command>PRINTER_0_PORT</command></term>
		<listitem>
			<para>
			Numéro du port TCP/IP utilisé pour la première imprimante.
			Valeur par défaut : '<command>9100</command>'.
			</para>
		</listitem>
		</varlistentry>
		
		<varlistentry>
		<term><command>PRINTER_0_SPEED</command></term>
		<listitem>
			<para>
			Si la première imprimante est connectée en série, ce paramètre
			précise la vitesse de transmission, en bauds.
			Valeur par défaut : '<command>9600</command>'.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_0_FLOWCTRL</command></term>
		<listitem>
			<para>
			Si la première imprimante est connectée en série, ce paramètre
			précise le type de gestion de flux (flow control). 
			Valeurs autorisées : '<command>S</command>' pour gestion 'Software' (XON/XOFF)
			ou '<command>H</command>' pour gestion 'Hardware' (CTS/RTS).
			Valeur par défaut : '<command>S</command>'.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_0_PARITY</command></term>
		<listitem>
			<para>
			Si la première imprimante est connectée en série, ce paramètre
			précise la parité utilisée.
			Valeurs autorisées : '<command>E</command>' (Parité Paire),
			'<command>O</command>' (Impaire) ou
			'<command>N</command>' (Pas de parité).  
			Valeur par défaut : '<command>N</command>'.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_0_DATABITS</command></term>
		<listitem>
			<para>
			Si la première imprimante est connectée en série, ce paramètre
			précise le nombre de bits de données.
			Valeurs autorisées : '<command>5</command>', '<command>6</command>',
			'<command>7</command>' et '<command>8</command>'. 
			Valeur par défaut : '<command>8</command>'.
			</para>
		</listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_1_DEVICE</command></term>
		<listitem><para>Périphérique de la deuxième imprimante</para></listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_1_TYPE</command></term>
		<listitem><para>Type de la deuxième imprimante</para></listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_1_PORT</command></term>
		<listitem><para>Numéro de port TCP/IP de la deuxième imprimante</para></listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_1_SPEED</command></term>
		<listitem><para>Vitesse de la deuxième imprimante (si série)</para></listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_1_FLOWCTRL</command></term>
		<listitem><para>Gestion de flux de la deuxième imprimante (si série)</para></listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_1_PARITY</command></term>
		<listitem><para>Parité de la deuxième imprimante (si série)</para></listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_1_DATABITS</command></term>
		<listitem><para>Bits de données de la deuxième imprimante (si série)</para></listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_2_DEVICE</command></term>
		<listitem><para>Périphérique de la troisième imprimante</para></listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_2_TYPE</command></term>
		<listitem><para>Type de la troisième imprimante</para></listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_2_PORT</command></term>
		<listitem><para>Numéro de port TCP/IP de la troisième imprimante</para></listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_2_SPEED</command></term>
		<listitem><para>Vitesse de la troisième imprimante (si série)</para></listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_2_FLOWCTRL</command></term>
		<listitem><para>Gestion de flux de la troisième imprimante (si série)</para></listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_2_PARITY</command></term>
		<listitem><para>Parité de la troisième imprimante (si série)</para></listitem>
		</varlistentry>

		<varlistentry>
		<term><command>PRINTER_2_DATABITS</command></term>
		<listitem><para>Bits de donénes de la troisième imprimante (si série)</para></listitem>
		</varlistentry>
	</variablelist>
	</sect2>
</sect1>
</chapter>


<chapter>
<title>Applications locales</title>
<para>
	Dans un environnement LTSP, il est possible de faire exécuter les applications
	soit sur le serveur, soit sur le client léger.
</para>

<para>
	La méthode la plus simple, et de loin, est de configurer LTSP pour que toutes les
	applications s'exécutent sur le serveur. C'est d'ailleurs la configuration par défaut.
	Dans cette configuration, une application lancée par un client léger est exécutée sur le
	serveur, en utilisant le processeur et la mémoire de ce dernier, alors que l'affichage est
	 déporté sur le client léger, et que les entrées clavier/souris utilisées sont également
	 celles du client léger.
</para>

<para>
	C'est une fonctionnalité fondamentale du système X Window. Le client léger fonctionne
	simplement comme un terminal X Window standard.
</para>

<para>
	Mais lorsqu'on souhaite exécuter une application sur le client léger (on parle alors d'application 'locale'),
	ce dernier doit d'abord obtenir des informations sur l'utilisateur, comme :
	<itemizedlist>
	<listitem>
		<para>
		son numéro d'identifiant Linux (User id).
		</para>
	</listitem>
	<listitem>
		<para>
		Le groupe principal (primary group) auquel l'utilisateur appartient.
		</para>
	</listitem>
	<listitem>
		<para>
		Le répertoire personnel (home directory) de l'utilisateur.
		</para>
	</listitem>
	</itemizedlist>
	LTSP se base sur le service NIS (Network Information Service, anciennement nommé 
	'<emphasis role="strong">Pages Jaunes</emphasis>') pour récupérer ces informations utilisateur et les
	communiquer au client léger.
</para>

<sect1>
	<title>Avantages de l'exécution locale d'applications</title>
	<para>
	Il y a quelques avantages à exécuter localement les applications sur les clients légers.
	</para>
	<para>
	<itemizedlist>
		<listitem>
		<para>
			Cela réduit la charge du serveur. Sur des réseaux importants,
			lorsque des applications gourmandes en mémoire sont utilisées, comme Netscape,
			l'exécution locale sur un client léger peut améliorer les performances, du moins
			si le client léger est capable de gérer la surcharge correspondante.
		</para>
		</listitem>
		<listitem>	
		<para>
			Une application qui plante sur un client léger n'affectera pas les autres utilisateurs.
		</para>
		</listitem>
		<listitem>
		<para>
			La gestion du son est bien plus facile à configurer lorsque l'application
			qui génère le son s'exécute sur le client léger.
		</para>
		</listitem>
	</itemizedlist>
	</para>
</sect1>

<sect1>
	<title>Problèmes lors de l'exécution locale d'applications</title>
	<para>
	Le support des applications locales nécessite en revanche des pré-requis majeurs.
	<itemizedlist>
		<listitem>
		<para>
			La charge sera plus importante sur le client léger.
			Il faudra plus de mémoire RAM et un processeur plus puissant.
			On peut considérer qu'il faut au minimum 64 Mo de mémoire pour envisager
			l'exécution d'une application sur un client léger.
		</para>
		</listitem>
		<listitem>
		<para>
			Utilisation du service NIS. Pour exécuter localement une application,
			l'utilisateur doit d'abord s'identifier vis à vis
			du client léger. En d'autres termes, le système d'exploitation du client
			léger (Linux) a besoin de savoir qui se connecte, et pour cela, une forme
			d'authentification par mot de passe est nécessaire. NIS a été choisi
			pour permettre cette authentification à travers le réseau.
		</para>
		</listitem>
		<listitem>
		<para>
			Des répertoires supplémentaires doivent être exportés via NFS depuis le serveur
			vers les clients légers.
		</para>
		</listitem>
		<listitem>
		<para>
			Les applications seront plus lentes à démarrer, car elles seront téléchargées
			sur le client léger depuis le serveur via NFS, causant par la même occasion
			un trafic réseau plus important.
			D'autre part, puisque chaque instance d'une même application
			s'exécutera sur son propre processeur (client léger), vous ne bénéficierez pas
			de la possibilité offerte par Unix-Linux de partager en mémoire le même code entre
			plusieurs instances d'une application, ce qui permet d'accélerer son démarrage dès qu'elle
			est invoquée une deuxième fois.
		</para>
		</listitem>
	</itemizedlist>
	</para>
</sect1>

<sect1>
	<title>Configuration du serveur LTSP pour l'exécution locale des applications</title>
	<sect2>
	<title>Paramètres de <filename>lts.conf</filename></title>
	<para>
		Quelques paramètres de <filename>lts.conf</filename> doivent être (re)configurés pour le support
		des applications locales :
		<variablelist>
		<varlistentry>
		<term><command>LOCAL_APPS</command></term>
		<listitem>
		<para>
			Ce paramètre doit être initialisé à <command>Y</command>.  
			Durant la phase de démarrage d'un client léger, les opérations suivantes vont se déclencher :
			<orderedlist>
			<listitem>
			<para>
			le répertoire <filename class="directory">/home</filename> du serveur
			sera exporté via NFS et monté sur l'arborescence du client léger.
			</para>
			</listitem>
			<listitem>
			<para>
			Le fichier <filename>/var/yp/nicknames</filename>
			sera créé sur le client léger.
			</para>
			</listitem>
			<listitem>
			<para>
			Le service <command>portmapper</command>
			sera lancé sur le client léger.
			</para>
			</listitem>
			<listitem>
			<para>
			Le gestionnaire de daemon <command>xinetd</command> sera
			lancé sur le client léger.
			</para>
			</listitem>
			<listitem>
			<para>
			Le fichier <filename>/etc/yp.conf</filename>
			sera créé sur le client léger.
			</para>
			</listitem>
			<listitem>
			<para>
			La commande <command>domainname</command> sera lancée,
			avec pour argument la valeur du paramètre <command>NIS_DOMAIN</command> spécifiée
			dans <filename>lts.conf</filename>.
			</para>
			</listitem>
			<listitem>
			<para>
			Le programme <command>ypbind</command>
			sera exécuté sur le client léger.
			</para>
			</listitem>
			</orderedlist>
		</para>
		</listitem>
		</varlistentry>
		<varlistentry>
		<term><command>NIS_DOMAIN</command></term>
		<listitem>
		<para>
			Avec NIS, tous les noeuds d'un réseau souhaitant faire
			partie d'un même domaine NIS doivent s'enregistrer sur
			ce domaine (qui n'a rien à voir avec un domaine DNS).
			Utilisez ce paramètre NIS_DOMAIN pour indiquer le nom du domaine NIS
			dans lequel les clients légers seront enregistrés.
		</para>
		</listitem>
		</varlistentry>
		<varlistentry>
		<term><command>NIS_SERVER</command></term>
		<listitem>
		<para>
			Pour accéder à un serveur de domaine NIS, on peut soit
			envoyer un broadcast sur le réseau et attendre une réponse,
			soit envoyer une requête à un serveur précis.
			Si vous avez choisi un serveur NIS particulier, 
			vous pouvez préciser ici son adresse IP.
		</para>
		</listitem>
		</varlistentry>
		</variablelist>
	</para>
	</sect2>

	<sect2>
	<title>Network Information Service - NIS</title>
	<para>
		NIS est un service de type Client-Serveur.
		Sur le serveur, un daemon (programme de service) attend
		les requêtes de ses clients (les clients légers dans notre cas).
		Ce daemon fonctionnant sur le serveur s'appelle <command>ypserv</command>.
	</para>
	<para>
		Sur le client léger un processus appelé <command>ypbind</command>
		est lancé. Lorsque le client léger souhaite contrôler une information
		relative à un utilisateur, comme vérifier son mot de passe ou trouver
		son répertoire personnel, il va utiliser <command>ypbind</command> pour établir une connexion
		avec le daemon <command>ypserv</command> du serveur.
	</para>
	<para>
		Si votre réseau utilise déjà NIS, il n'est pas nécessaire
		de lancer <command>ypserv</command> sur le serveur LTSP. Il suffit seulement
		de donner les valeurs correctes aux paramètres NIS_DOMAINNAME
		et NIS_SERVER dans le fichier <filename>lts.conf</filename>.
	</para>
	<para>
		Mais si vous n'utilisez PAS encore NIS, vous devrez alors configurer le serveur
		LTSP pour qu'il lance le daemon <command>ypserv</command>.
	</para>
	<para>
		Pour obtenir plus d'informations sur comment installer et configurer un serveur
		NIS, reportez vous à la documentation 'HOWTO' intitulée 
		<emphasis role="strong">The Linux NIS(YP)/NYS/NIS+ HOWTO</emphasis>
		que vous trouverez sur le serveur web www.tldp.org (The Linux Documentation Project).
		D'autres sources d'informations vous sont données à la fin de ce
		document.
	</para>
	</sect2>
</sect1>

<sect1>
	<title>Configuration des applications</title>
	<para>
	Pour qu'une application puisse être exécutée localement sur un client
	léger, vous devrez installer tous les composants qu'elle utilise dans
	un espace accessible par le client léger.
	</para>

	<para>
	Dans les versions précédentes de LTSP (2.08 et inférieures), un grand nombre
	de répertoires du serveur étaient exportés via NFS et montés sur les clients légers.
	Les répertoires du serveur comme <filename class="directory">/bin</filename>,
	<filename class="directory">/usr/bin</filename>, <filename class="directory">/lib</filename> et
	<filename class="directory">/usr</filename> étaient accessibles depuis les 
	clients légers.
	</para>

	<para>
	L'inconvénient de cette méthode est qu'elle ne fonctionne correctement
	que lorsque le serveur et le(s) client(s) légers(s) ont la même architecture.
	Et même dans ce cas, si le serveur est par exemple un Pentium II (i686), et
	le client léger un Pentium classique (i586), quelques problèmes pourraient apparaître,
	car le serveur disposera sans doute des librairies pour i686, mais pas forcément
	pour i386, i486 ou i586.
	</para>

	<para>
	Le meilleur moyen de gérer ce problème est de disposer d'une
	arborescence fichier complète et spécifique au(x) client(s) léger(s), 
	complètement distincte de l'arborescence
	du serveur, et contenant tous les programmes exécutables et les librairies
	utilisés localement par ce(s) client(s) léger(s).
	</para>

	<para>
	Configurer une application pour son exécution locale sur
	un client léger consiste donc à installer tous les composants
	nécessaires dans cette arborescence.
	Par exemple, vous trouverez sur le site LTSP le package 'local netscape'.
	Lorsqu'il est installé sur le serveur, ce package copie tous ses composants
	dans <filename  class="directory">/opt/ltsp/i386/usr/local/netscape</filename>. Des éléments comme
	les classes java, les fichiers d'aide, les scripts et les programmes exécutables (binaires)
	sont stockés là pour utilisation par les clients légers.
	</para>

	<para>
	Netscape n'a pas besoin de librairies système supplémentaires, et il n'y a donc
	rien à rajouter dans <filename  class="directory">/opt/ltsp/i386/lib</filename>. 
	Mais de nombreuses applications ont besoin d'autres librairies.
	</para>

	<para>
	Mais comment identifier les librairies nécessaires à une application ?
	C'est ici que l'utilitaire <command>ldd</command> s'avère très utile.
	</para>
	<para>
	A titre d'exemple, imaginons que vous souhaitiez exécuter localement l'application
	 <command>gaim</command>. <command>gaim</command> est un client de 
	 messagerie en ligne d'AOL, qui vous permet de communiquer
	 avec d'autres personnes connectées aux forums AOL.
	</para>
	<para>
	La première chose à faire est de trouver le programme exécutable <command>gaim</command>.
	Sur un serveur Redhat 7.2, ce programme est dans le répertoire <filename  class="directory">/usr/bin</filename>.
	</para>
	<para>
	Une fois <command>gaim</command> trouvé, vous pouvez alors lancer l'utilitaire <command>ldd</command>:
	<programlisting>
[jam@server /]$ ldd /usr/bin/gaim
	libaudiofile.so.0    => /usr/lib/libaudiofile.so.0 (0x40033000)
	libm.so.6            => /lib/i686/libm.so.6 (0x40051000)
	libnsl.so.1          => /lib/libnsl.so.1 (0x40074000)
	libgnomeui.so.32     => /usr/lib/libgnomeui.so.32 (0x4008a000)
	libart_lgpl.so.2     => /usr/lib/libart_lgpl.so.2 (0x4015d000)
	libgdk_imlib.so.1    => /usr/lib/libgdk_imlib.so.1 (0x4016c000)
	libSM.so.6           => /usr/X11R6/lib/libSM.so.6 (0x40191000)
	libICE.so.6          => /usr/X11R6/lib/libICE.so.6 (0x4019a000)
	libgtk-1.2.so.0      => /usr/lib/libgtk-1.2.so.0 (0x401b1000)
	libdl.so.2           => /lib/libdl.so.2 (0x402df000)
	libgdk-1.2.so.0      => /usr/lib/libgdk-1.2.so.0 (0x402e3000)
	libgmodule-1.2.so.0  => /usr/lib/libgmodule-1.2.so.0 (0x40319000)
	libXi.so.6           => /usr/X11R6/lib/libXi.so.6 (0x4031d000)
	libXext.so.6         => /usr/X11R6/lib/libXext.so.6 (0x40325000)
	libX11.so.6          => /usr/X11R6/lib/libX11.so.6 (0x40333000)
	libgnome.so.32       => /usr/lib/libgnome.so.32 (0x40411000)
	libgnomesupport.so.0 => /usr/lib/libgnomesupport.so.0 (0x40429000)
	libesd.so.0          => /usr/lib/libesd.so.0 (0x4042e000)
	libdb.so.2           => /usr/lib/libdb.so.2 (0x40436000)
	libglib-1.2.so.0     => /usr/lib/libglib-1.2.so.0 (0x40444000)
	libcrypt.so.1        => /lib/libcrypt.so.1 (0x40468000)
	libc.so.6            => /lib/i686/libc.so.6 (0x40495000)
	libz.so.1            => /usr/lib/libz.so.1 (0x405d1000)
	/lib/ld-linux.so.2   => /lib/ld-linux.so.2 (0x40000000) </programlisting>
	</para>
	<para>
	La liste générée par ldd contient le nom de toutes les librairies 
	avec lesquelles <command>gaim</command> est dynamiquement lié.
	</para>
	<para>
	La plupart des applications qui utilisent des librairies partagées se servent
	du chargeur dynamique <command>ld-linux</command> pour trouver et charger
	ces librairies. En revanche, d'autres applications les chargent 'manuellement'
	par l'intermédiaire de l'appel système <command>dlopen()</command>.
	Pour ces applications, <command>ldd</command> n'affichera rien. Dans ce cas,
	vous devrez utiliser l'utilitaire <command>strace</command> pour tracer
	l'exécution de l'application et rechercher ses appels à la fonction système <command>dlopen()</command>.
	<command>strace</command> vous donnera les arguments passés à chaque appel de cette fonction. L'un d'entre eux
	correspond au nom d'une librairie demandée par l'application.
	</para>
	<para>
	Une fois que vous aurez reconstitué la liste des librairies nécessaires à une application,
	vous devrez copier ces librairies dans les répertoires correspondants de l'arborescence
	<filename  class="directory">/opt/ltsp/i386</filename>.
	</para>
	
</sect1>

<sect1>
	<title>Lancement des applications locales</title>
	<para>
	Dans un environnement X Window, la machine sur laquelle un
	programme s'exécute est déterminée en fonction de celle où le
	gestionnaire graphique a été lancé.
	Si le gestionnaire graphique est lancé sur le serveur avec son affichage
	redirigé vers un client léger, alors toute application lancée sera aussi exécutée
	sur le même serveur et son affichage redirigé vers le même client léger.
	</para>
	<para>
	Pour exécuter un programme sur le client léger alors que le gestionnaire
	graphique fonctionne sur le serveur, il faut donc utiliser une astuce.
	Dans le cas présent, il faut que le serveur demande au client léger de lancer
	le programme à sa place, et pour cela on utilise la commande
	<command>rsh</command>.
	</para>
	<para>
	L'exemple qui suit montre comment utiliser rsh pour lancer <command>gaim</command> 
	sur le client léger:
	<programlisting>
HOST=`echo $DISPLAY | awk -F: '{ print $1 }'`
rsh ${HOST} /usr/bin/gaim -display ${DISPLAY} </programlisting>
	</para>
	<para>
	Ces commandes peuvent être saisies dans une fenêtre <command>xterm</command>,
	ou stockées dans un fichier script lancé à partir d'un icône placé sur
	le bureau.
	</para>
	<para>
	Le lancement local de Netscape est réalisé de façon similaire, mais
	une variable d'environnement supplémentaire est nécessaire.
	<programlisting>
HOST=`echo $DISPLAY | awk -F: '{ print $1 }'`
rsh ${HOST} MOZILLA_HOME=/usr/local/netscape \
/usr/local/netscape/netscape -display ${DISPLAY} </programlisting>
	</para>
</sect1>

</chapter>


<chapter>
<title>Exemples de configuration</title>
<para>
	N'importe quel élément d'un client léger peut être configuré
	à l'aide des paramètres correspondants du fichier  <filename>lts.conf</filename>, qui
	est normalement situé dans le répertoire <filename>/opt/ltsp/i386/etc</filename>.
</para>
<sect1>
	<title>Souris Série</title>
	<para>
	Exemple de <filename>lts.conf</filename> pour la définition d'une
	souris série à 2 boutons :
	<screen>
X_MOUSE_PROTOCOL    = "Microsoft"
X_MOUSE_DEVICE      = "/dev/ttyS0"
X_MOUSE_RESOLUTION  = 400
X_MOUSE_BUTTONS     = 2
X_MOUSE_EMULATE3BTN = Y
</screen>
	</para>
</sect1>

<sect1>
	<title>Souris PS/2 à molette</title>
	<para>
	Exemple de <filename>lts.conf</filename> pour la définition
	d'une souris de type Intellimouse :
	<screen>
X_MOUSE_PROTOCOL    = "IMPS/2"
X_MOUSE_DEVICE      = "/dev/psaux"
X_MOUSE_RESOLUTION  = 400
X_MOUSE_BUTTONS     = 5
X_ZAxisMapping      = "4 5"
</screen>
	</para>
</sect1>

<sect1>
	<title>Imprimante USB sur un client ThinkNic</title>
	<para>
	Les clients légers de type ThinkNIC possèdent un port USB, sur lequel
	on peut brancher une imprimante. Voici un exemple de 
	de <filename>lts.conf</filename> pour une telle configuration :
	<screen>
MODULE_01           = usb-ohci
MODULE_02           = printer
PRINTER_0_DEVICE    = /dev/usb/lp0
PRINTER_0_TYPE      = S
</screen>
	</para>
</sect1>

<sect1>
	<title>Forcer le chargement de XFree86 3.3.6 sur un client léger</title>
	<para>
	Par défaut, les clients légers sont configurés pour XFree86 4.1.0 ou Xorg.
	Si vous souhaitez utiliser une version antérieure (X3.3.6 Xserver) sur un client léger particulier,
	assurez-vous d'abord que le package correspondant soit installé sur le serveur.
	Vous pourrez alors modifier le fichier <filename>lts.conf</filename>. Voici
	un exemple demandant d'utiliser le serveur XFree86 3.3.6 <command>SVGA</command> :
	<screen>
XSERVER             = XF86_SVGA
</screen>
	</para>
</sect1>


</chapter>


<chapter>
<title>Autres sources d'information</title>
<sect1>
	<title>Documentation en ligne</title>
	<para>
	<orderedlist>
		<listitem>
		<para>
			Page d'accueil du site LTSP
		</para>
		<para>
			<ulink url="http://www.LTSP.org">
			<citetitle>www.LTSP.org</citetitle>
			</ulink>
		</para>
		<para>
		</para>
		</listitem>
			
		<listitem>
		<para>
			Documentation sur les stations sans disque 
			'Diskless-Nodes HOW-TO document for Linux'&nbsp;&nbsp;
		</para>
		<para>
			<ulink url="http://www.linuxdoc.org/HOWTO/Diskless-HOWTO.html">
			<citetitle>www.linuxdoc.org/HOWTO/Diskless-HOWTO.html</citetitle>
			</ulink>
		</para>
		<para>
		</para>
		</listitem>

		<listitem>
		<para>
			Page d'accueil du site Etherboot&nbsp;&nbsp;
		</para>
		<para>
			<ulink url="http://etherboot.sourceforge.net">
			<citetitle>etherboot.sourceforge.net</citetitle>
			</ulink>
		</para>
		<para>
		</para>
		</listitem>

		<listitem>
		<para>
			Le site Rom-O-Matic&nbsp;&nbsp;
		</para>
		<para>
			<ulink url="http://www.rom-o-matic.net">
			<citetitle>www.Rom-O-Matic.net</citetitle>
			</ulink>
		</para>
		<para>
		</para>
		</listitem>

		<listitem>
		<para>
			Gestion de la souris sous XFree86&nbsp;&nbsp;
		</para>
		<para>
			<ulink url="http://www.xfree86.org/current/mouse.html">
			<citetitle>www.xfree86.org/current/mouse.html</citetitle>
			</ulink>
		</para>
		<para>
		</para>
		</listitem>

		<listitem>
		<para>
			XFree86-Video-Timings-HOWTO&nbsp;&nbsp;
		</para>
		<para>
			<ulink url="http://www.linuxdoc.org/HOWTO/XFree86-Video-Timings-HOWTO.html">
			<citetitle>www.linuxdoc.org/HOWTO/XFree86-Video-Timings-HOWTO.html</citetitle>
			</ulink>
		</para>
		<para>
		</para>
		</listitem>

		<listitem>
		<para>
			The Linux NIS(YP)/NYS/NIS+ HOWTO&nbsp;&nbsp;
		</para>
		<para>
			<ulink url="http://www.linuxdoc.org/HOWTO/NIS-HOWTO.html">
			<citetitle>www.linuxdoc.org/HOWTO/NIS-HOWTO.html</citetitle>
			</ulink>
		</para>
		<para>
		</para>
		</listitem>


	</orderedlist>
	</para>
</sect1>

<sect1>
	<title>Publications</title>
	<para>
	<orderedlist>
		<listitem>
		<para>
			<literalLayout>
Managing NFS and NIS
Hal Stern
O'Reilly &amp; Associates, Inc.
1991
ISBN 0-937175-75-7
			</literalLayout>
		</para>                        
		</listitem>

		<listitem>
		<para>                        
			<literalLayout>
TCP/IP Illustrated, Volume 1
W. Richard Stevens
Addison-Wesley
1994
ISBN 0-201-63346-9
			</literalLayout>
		</para>                        
		</listitem>

		<listitem>
		<para>                        
			<literalLayout>
X Window System Administrator's Guide
Linda Mui and Eric Pearce
O'Reilly &amp; Associates, Inc.
1993
ISBN 0-937175-83-8
(Volume 8  of the The Definitive Guides to the X Window System)
			</literalLayout>
		</para>                        
		</listitem>
	</orderedlist>
	</para>
</sect1>
</chapter>
</book>
