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

<!-- TOCTITLE="Inhoudsopgave" -->

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

  <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>Tom</firstname>
	<surname>Welter</surname>
	<affiliation>
	  <jobtitle>Nederlandse vertaling</jobtitle>
	  <address>ltsp@startstop.nl</address>
	</affiliation>
     </othercredit>
     </authorgroup>

    <revhistory>
       <revision>
         <revnumber>4.1.3&nbsp;</revnumber>
         <date>2004-06-20</date>
         <authorinitials>jam</authorinitials>
       </revision>
 	<revision>
         <revnumber>4.1.3-1-nl&nbsp;</revnumber>
         <date>2005-03-02</date>
         <authorinitials>tgw</authorinitials>
       </revision>
    </revhistory>

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

    <abstract>
       <para>
           GNU/Linux is een uitermate geschikt platform voor het gebruik
	   van schijfloze zogenaamde 'thin clients' of werkstations. Het belangrijkste doel van
	   dit document is duidelijk te maken hoe zulke werkstations
           met behulp van LTSP kunnen worden geïnstalleerd. Daarnaast
	   behandelt dit document onderwerpen over thin clients in het algemeen.
       </para>
    </abstract>
  </bookinfo>

<preface>
    <title>Inleiding</title>

    <para>
        LTSP biedt een simpele manier voor het gebruik van goedkope
        werkstations als grafische of tekstterminals van een GNU/Linux server.
    </para>

    <para>
        In traditionele kantooromgevingen staan vaak relatief zware PC's met een
	Intel processor op ieder bureau. Elke computer beschikt over een eigen
	harde schijf met een capaciteit van meerdere Gigabytes.
	Gebruikers bewaren hun data op de lokale harde schijf en backups worden
	zelden (of nooit) gemaakt.
    </para>

    <para>
        Heeft het echt zin om zo'n zware computer op ieder bureau te hebben?
    </para>

    <para>
        Wij vinden van niet.
    </para>

    <para>
        Gelukkig is er een andere manier. Met LTSP is het mogelijk een eenvoudige
	computer te gebruiken, zonder harde schijf, floppy of cdrom. Alles wat nodig is, is een
	geïnstalleerde 'bootable' netwerkkaart.
	Veel netwerkkaarten hebben een voorziening voor het plaatsen van een
	bootrom, klaar voor gebruik.
    </para>

    <para>
        Tijdens de opstartfase haalt het schijfloze werkstation zijn IP
	informatie en een kernel op van de server, en koppelt zijn root
	bestandssysteem via NFS aan de server.
    </para>

    <para>
        Het werkstation kan op drie manieren worden geconfigureerd:
        <itemizedlist>
            <listitem>
                <para><command>Graphisch X Window
Systeem interface</command></para>
                <para>
                    Met X Windows kan het werkstation gebruik maken van alle
		    toepassingen op de server of op andere servers van het
		    netwerk.
                </para>
            </listitem>
        </itemizedlist>

        <itemizedlist>
            <listitem>
                <para><command>Tekst georiënteerde
telnet-sessies</command></para>
                <para>
                    Het werkstation kan meerdere telnet-sessies met de server
		    opstarten. Iedere telnet-sessie heeft zijn eigen
		    virtuele scherm. Met Alt-F1 tot en met Alt-F9 kan tussen de
                    verschillende sessies gewisseld worden.
                </para>
            </listitem>
        </itemizedlist>

        <itemizedlist>
            <listitem>
                <para><command>Shell prompt</command></para>
                <para>
                    Het werkstation kan zodanig worden geconfigureerd dat een
		    lokale 'bash shell' wordt opgestart.
		    Dit is handig bij het oplossen van problemen met X
		    Windows of NFS.
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        Het mooie is dat meerdere werkstations door een GNU/Linux server kunnen
	worden bediend. Hoeveel werkstations? Dat hangt af van de eigenschappen
	van de server en de soort toepassingen die gebruikt worden.
    </para>

    <para>
        Het is niet ongebruikelijk om met 50 werkstations Mozilla en OpenOffice te
	laten draaien op een Dual P4-2.4 server met 4GB ram. Wij weten dat dit
	werkt. De gemiddelde belasting van de server komt zelden boven 1.0!
    </para>

    <sect1>
        <title>Aansprakelijkheid</title>
        <para>
            Noch de auteur, noch de distributeur, noch enige andere
	    medewerker aan dit document zijn op enigerlei wijze
	    verantwoordelijk voor de fysieke, financiële, morele of andere vorm van
	    schade als gevolg van het opvolgen van de suggesties in deze tekst.
        </para>
    </sect1>

    <sect1 id="copyright">
        <title>Auteursrechten en licentie</title>
        <para>
            Het auteursrecht (2004) berust bij James McQuillan. De tekst
	    is te gebruiken onder de voorwaarden van de 'GNU Free Documentation
	    License' welke bij deze middels verwijzing is opgenomen in deze tekst.
        </para>
    </sect1>
</preface>

<chapter>
    <title>Hoe werkt het?</title>
    <para>
        Het opstarten van een schijfloos werkstation omvat verschillende
	stappen. Begrip voor wat er gedurende dit proces gebeurt maakt
	het een stuk makkelijker eventuele problemen op te lossen.
    </para>
    <para>
        Er zijn vier essentiële services nodig voor het opstarten
	van een LTSP werkstation, te weten:
        <itemizedlist>
            <listitem>
                <para>DHCP</para>
            </listitem>
            <listitem>
                <para>TFTP</para>
            </listitem>
            <listitem>
                <para>NFS</para>
            </listitem>
            <listitem>
                <para>XDMCP</para>
            </listitem>
        </itemizedlist>

    </para>

    <para>
        LTPS is erg flexibel. Elk van de bovengenoemde services kan door
	een of door meerdere servers worden geleverd. Als voorbeeld beschrijven
	we een setup waarbij alle genoemde services door een server worden geleverd.
    </para>

  <sect1>
    <title>De stappen die een werkstation doorloopt</title>

    <orderedlist spacing="normal">

        <listitem>
            <para>
                Laadt de Linux kernel in het werkstation geheugen. Dit kan op
		ver schillende manieren, waaronder:
                <orderedlist>
                  <listitem>
                    <para>
                      Bootrom (Etherboot,PXE,MBA,Netboot)
                    </para>
                  </listitem>
                  <listitem>
                    <para>
                      Floppy
                    </para>
                  </listitem>
                  <listitem>
                    <para>
                      Harde schijf
                    </para>
                  </listitem>
                  <listitem>
                    <para>
                      cdrom
                    </para>
                  </listitem>
                  <listitem>
                    <para>
                      usb-geheugen
                    </para>
                  </listitem>
                </orderedlist>
            </para>
            <para>
             Elk van bovengenoemde opstartmethodes zal later in dit hoofdstuk
	     worden uitgelegd.
            </para>
        </listitem>

        <listitem>
            <para>
                Nadat de kernel in het geheugen is geladen wordt
		hij opgestart.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                De kernel initialiseert het hele systeem en alle randapparatuur
		die herkend wordt.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Op dit moment wordt het echt leuk. Tijdens het laden van de
		kernel wordt ook een ramdisk 'image' geladen.
		De kernel commanderegel <command>root=/dev/ram0</command>
		zorgt ervoor dat die image als root map wordt aangekoppeld.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Normaalgesproken zal de kernel als hij klaar is met opstarten
		het programma <command>init</command> aanroepen. In dit geval
		echter, instrueren we de kernel in plaats daarvan een klein shell
		script te draaien. Dit gebeurt door op de kernel commandoregel de optie
		<command>init=/linuxrc</command> mee te geven.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
		Het <command>/linuxrc</command> script begint met het scannen van de
		PCI bus op zoek naar een netwerkkaart. Voor ieder gevonden PCI apparaat
		wordt een overeenkomstige vermelding gezocht in het bestand /etc/niclist.
		Wanneer die gevonden wordt, wordt de naam van de driver module teruggegeven
		en de betreffende netwerk kaart module wordt geladen. Voor ISA kaarten
		MOET de driver module op de kernel commando regel wordt
		gespecificeerd samen met eventueel benodigde IRQ of IO-adres parameters.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
		Vervolgens wordt een kleine dhcp-client genaamd <command>dhclient</command>
		opgestart om nogmaals een dhcp-verzoek uit te voeren. Dit
		aparte dhcp-verzoek als gewone gebruiker (in 'user-space') is nodig omdat
		meer informatie benodigd is dan dat de bootrom opgehaald had in het eerste DHCP
		verzoek.
	    </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Nadat <command>dhclient</command> een antwoord heeft ontvangen
		van de server zal deze het script <command>/etc/dhclient-script</command>
		uitvoeren, dat de opgehaalde informatie gebruikt om de eth0 interface
		te configureren.
            </para>
            <para></para>
        </listitem>


        <listitem>
            <para>
                Tot op dit moment is het root bestandssysteem een ram disk
		geweest. Nu zal het /linuxrc script een nieuw root
		bestandssysteem gaan aankoppelen via NFS. De map die
		hiervoor gebruikelijkerwijs wordt geexporteerd door de server is
		<command>/opt/ltsp/i386</command>.
		Het nieuwe bestandssysteem kan niet zomaar als /. aangekoppeld
		worden. Het moet eerst als /mnt worden aangekoppeld. Vervolgens
		wordt <command>pivot_root</command> uitgevoerd. pivot_root
		verwisseld het huidigde bestandssysteem voor een nieuw. Als dat
		klaar is, is het NFS bestandssysteem aangekoppeld aan /, en het
		oude root bestandssysteem aan /oldroot.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Nadat het aankoppelen en pivoteren van het nieuwe root
		bestandssyteem uitgevoerd is, is het /linuxrc shell script
		klaar en is het tijd het echte <command>/sbin/init</command>
		programma uit te voeren.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Init leest <filename>/etc/inittab</filename> en begint
		met het opzetten van de werkstation werkomgeving.
		('environment')
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Een van de eerste items in het inittab bestand is het
		<command>rc.sysinit</command> commando dat wordt uitgevoerd
		terwijl het werkstation in de '<emphasis role="strong">sysinit</emphasis>'
		fase is.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Het rc.sysinit script maakt een 1 Mb ramdisk aan waarop
		dingen kunnen worden weggeschreven of gewijzigd.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
	        De ramdisk wordt aangekoppeld als de map
		<filename class="directory">/tmp</filename>.
		Alle bestanden die beschreven moeten kunnen worden
		staan in werkelijkheid in de map
		<filename class="directory">/tmp</filename>. Uiteindelijk
		verwijzen 'symbolic links' naar deze bestanden.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Het <filename class="directory">/proc</filename> bestandssystem
                wordt aangekoppeld.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Het bestand <filename>lts.conf</filename> en de daarin
		vermelde parameters voor het betreffende werkstation 
		worden als omgevingsvariabelen geïnitialiseerd voor
		gebruik door het script rc.sysinit.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Indien het werkstation geconfigureerd is om over NFS
		te swappen zal de map
		<command>/var/opt/ltsp/swapfiles</command>
		gekoppeld worden als /tmp/swapfiles. Vervolgens zal indien dat
		nog niet gebeurd is, automatisch een swapfile worden
		aangemaakt. De grootte van de swapfile wordt geconfigureerd
		in <filename>lts.conf</filename>.
            </para>
            <para>
                De swapfile wordt geactiveerd met het commando
		<command>swapon</command>.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Het <emphasis role="strong">loopback</emphasis>
		netwerk interface wordt geconfigureerd met 
		<emphasis>127.0.0.1</emphasis>
		als ip-adres.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Indien 'Local apps' aangezet is wordt de
		map <command>/home</command>
		aangekoppeld zodat de toepassingen toegang hebben
		tot de map /home van de gebruikers.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Verschillende mappen worden aangemaakt in het
		<filename class="directory">/tmp</filename>
		bestandssysteem ten behoeve tijdelijke bestanden
		die nodig zijn zolang het werkstation aan staat.
		Mappen zoals
                <orderedlist>
                    <listitem>
                        <para>
                            <filename>/tmp/compiled</filename>
                        </para>
                        <para></para>
                    </listitem>
                    <listitem>
                        <para>
                            <filename>/tmp/var</filename>
                        </para>
                        <para></para>
                    </listitem>
                    <listitem>
                        <para>
                            <filename>/tmp/var/run</filename>
                        </para>
                        <para></para>
                    </listitem>
                    <listitem>
                        <para>
                            <filename>/tmp/var/log</filename>
                        </para>
                        <para></para>
                    </listitem>
                    <listitem>
                        <para>
                            <filename>/tmp/var/lock</filename>
                        </para>
                        <para></para>
                    </listitem>
                    <listitem>
                        <para>
                            <filename>/tmp/var/lock/subsys</filename>
                        </para>
                        <para></para>
                    </listitem>
                </orderedlist>
            </para>
            <para></para>

            <para>
                worden aangemaakt.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Het bestand <filename>/tmp/syslog.conf</filename>
		wordt aangemaakt.
		Dit bestand vertelt <command>syslogd</command>
		naar welke server op het netwerk de log-informatie
		gestuurd moet worden. De server voor het systeemlog wordt gespecificeerd
		in het bestand <filename>lts.conf</filename>.
		Een symbolische koppeling
		<filename>/etc/syslog.conf</filename>
		verwijst naar het bestand
		<filename>/tmp/syslog.conf</filename>.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                De <command>syslogd</command> daemon wordt opgestart,
		gebruikmakend van de instelling uit de vorige stap.
            </para>
            <para></para>
        </listitem>

        <listitem>
          <para>
               Als het rc.sysinit script klaar is wordt de controle
	       overgegeven aan het programma /sbin/init, dat het
	       runlevel verandert van <emphasis role="strong">sysinit</emphasis>
	       naar <emphasis role="strong">5</emphasis>.
          </para>
          <para>
               Hierdoor worden de in /etc/inittab geconfigureerde
	       items en scripts uitgevoerd.
          </para>
          <para></para>
        </listitem>

        <listitem>
          <para>
               Standaard is inittab ingesteld om het
	       <command>/etc/screen_session</command> script
	       uit te voeren op tt1, tty2 en tty3. Dit betekend dat
	       3 sessies tegelijkertijd worden opgestart. Het type sessie wordt
	       bepaald door de <emphasis role="strong">SCREEN_01</emphasis>,
               <emphasis role="strong">SCREEN_02</emphasis> and
               <emphasis role="strong">SCREEN_03</emphasis>
	       instellingen in <filename>lts.conf</filename>.
          </para>
          <para>
               Er kunnen indien gewenst meer regels aan
	       <filename>inittab</filename>
	       worden toegevoegd om meer sessies op te starten.
          </para>
          <para></para>
        </listitem>

        <listitem>
            <para>
		Indien <emphasis role="strong">SCREEN_01</emphasis>
		is ingesteld op de waarde
		<emphasis role="strong">startx</emphasis>
		dan wordt het script <command>/etc/screen.d/startx</command>
		uitgevoerd dat de grafische interface van
		het X Windows systeem opstart.
            </para>
            <para>
                In het bestand <command>lts.conf</command> staat een
		parameter <command>XSERVER</command>. Indien deze
		parameter ontbreekt zal het systeem proberen automatisch
		de videokaart te detecteren. Als er een PCI of AGP
		videokaart aanwezig is zullen de gevonden PCI Vendor Id en Device Id
		worden gebruikt om een overeenkomstige vermelding te vinden
		in het bestand <command>/etc/vidlist</command>.
            </para>
            <para>
                Indien de kaart ondersteund wordt door Xorg 6.7 zal
		de pci_scan routine de naam van de driver module teruggeven.
		Indien de kaart alleen ondersteund wordt door  XFree86 3.3.6,
		dan zal pci_scan de naam van de te gebruiken Xserver teruggeven.
		Het startx script kan deze twee onderscheiden doordat de
		oudere 3.3.6 servernamen beginnen met 'XF86_', terwijl de nieuwere
		Xorg Xserver modules beginnen met kleine letters, bv.
		<emphasis>ati</emphasis>
                of <emphasis>trident</emphasis>.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Indien Xorg wordt gebruikt, dan wordt het script
		<command>/etc/build_x3_cfg</command>
		aangeroepen om een XF86Config bestand te maken.
		Indien XFree86 3.3.6 wordt gebruikt, dan wordt het
		script <command>/etc/build_x3_cfg</command> aangeroepen
		om het XF86Config te maken. Deze bestanden staan in
		de map <filename>/tmp</filename>, die zoals
		gezegd, een ramdisk is die alleen voor het werkstation
		zichtbaar is.
            </para>
            <para>
                Het XF86Config bestand wordt gebaseerd op de
		instellingen in het bestand <command>/etc/lts.conf</command>.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Nadat het XF86Config bestand aangemaakt is
		start het script <command>startx</command> de X server
		op met het nieuwe configuratiebestand.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                De X server stuurt een <emphasis role="strong">XDMCP</emphasis>
		verzoek aan de LTSP server, die vervolgens een aanmeldscherm aanbiedt.
            </para>
            <para></para>
        </listitem>

        <listitem>
            <para>
                Op dit punt aangekomen kunnen de gebruikers inloggen. Zij
		krijgen dan een sessie op de server.
            </para>
            <para>
                Dit leidt bij veel mensen in eerste instantie tot verwarring.
		Men zit aan een werkstation, maar de sessie draait op de
		server. Alle commando's worden op de server uitgevoerd maar de uitvoer
		wordt weergegeven op het werkstation.
	    </para>
            <para></para>
        </listitem>

    </orderedlist>
  </sect1>

  <sect1>
    <title>Laden van de kernel in het geheugen</title>
    <para>
      Het laden van de Linux kernel in het geheugen kan op verschillende
      manieren gebeuren.
    </para>
    <itemizedlist>
      <listitem>
        <para>Boot ROM</para>
      </listitem>
      <listitem>
        <para>Lokale media</para>
      </listitem>
    </itemizedlist>
    <para></para>

    <sect2>
      <title>Boot ROM</title>
      <itemizedlist>
         <listitem>
           <para>Etherboot</para>
           <para>
             Etherboot is een populair open-source bootrom project.
	     Het bevat drivers voor diverse populaire netwerkkaarten en werkt
	     erg goed samen met LTSP.
           </para>
           <para>
	     Linux kernels moeten worden 'gemerkt' met het commando
	     <command>mknbi-linux</command>. Hiermee wordt de kernel
	     aangepast voor opstarten vanaf het netwerk door voor aan de
	     kernel wat code toe te voegen en aan het einde de initrd
	     er aan vast te plakken.
           </para>
           <para>
             De met LTSP meegeleverde kernels zijn al gemerkt en
	     gebruiksklaar voor Etherboot.
           </para>
           <para>
             Etherboot kan ook op een floppy worden geschreven,
	     handig om te testen.
           </para>
         </listitem>
         <listitem>
           <para>PXE</para>
           <para>
              Onderdeel van de 'Wired for Management' specificatie
	      van eind jaren '90 was een specificatie voor een bootrom
	      technologie bekend onder de naam
	      <emphasis>Pre-boot Execution Environment</emphasis>,
	      meestal afgekort als <emphasis role="strong">PXE</emphasis>
           </para>

           <para>
              Een PXE bootrom is in staat maximaal 32 kilo-byte te laden.
	      De Linux kernel is aanzienlijk groter. Daarom configureren
	      we PXE om een zogenaamde '2nd stage boot-loader'
	      genaamd <emphasis role="strong">pxelinux</emphasis> te laden.
	      pxelinux is klein genoeg, en kan
	      vervolgens veel grotere bestanden laden zoals de Linux kernel.
           </para>
         </listitem>
         <listitem>
           <para>MBA</para>
           <para>
              Managed Boot Agent (MBA) is een bootrom van het bedrijf
	      <emphasis role="strong">emBoot</emphasis>.
	      Dit was vroeger de afdeling Lanworks van 3Com. MBA is
	      eigenlijk een combinatie van 4 bootroms in een. Het kan
	      overweg met PXE, TCP/IP, RPL en Netware.
           </para>
           <para>
              De implementatie van PXE door MBA werkt erg goed. Hij kan
	      met pxelinux gebruikt worden om een Linux kernel op te starten.
           </para>
           <para>
	      <emphasis role="strong">TCP/IP</emphasis> kan ook gebruikt
	      worden, maar de kernel moet dan wel eerst aangepast worden
	      met een hulpprogramma genaamd <command>imggen</command>.
           </para>
         </listitem>
         <listitem>
           <para>Netboot</para>
           <para>
             Netboot is net als Etherboot open-source software voor het maken
	     van boot ROM images. Het verschil is dat het in feite een schil vormt om
	     de NDIS drivers of de packetdrivers die worden meegeleverd met
	     netwerkkaarten.
           </para>
         </listitem>
      </itemizedlist>
    </sect2>

    <sect2>
      <title>Lokale media</title>
      <itemizedlist>
         <listitem>
           <para>Floppy disk</para>
           <para>
             Er zijn twee manieren om een LTSP werkstation met een floppy
	     op te starten.
	     De eerste manier is door Etherboot weg te schrijven in de
	     bootsector van een floppy. De bootcode wordt dan uitgevoerd, de
	     netwerkkaart wordt geïnitialiseerd en de kernel wordt geladen van de
	     netwerkserver.
           </para>
           <para>
             Het is ook mogelijk de kernel samen met initrd op een floppy te
	     zetten en op die manier op te starten.
	     Het is echter sneller om de kernel over het netwerk te laden.
           </para>
         </listitem>
         <listitem>
           <para>Harde schijf</para>
           <para>
              De harde schijf kan in combinatie met LILO of GRUB worden gebruikt
              om de Linux kernel en initrd te laden. Ook kan de Etherboot
	      bootrom van de harde schijf worden geladen, zodat die
	      dus werkt als bootrom.
           </para>
         </listitem>
         <listitem>
           <para>cdrom</para>
           <para>

	      Een bootable cdrom met een Linux
	      kernel of een Etherboot image kan worden gebruikt.
	   </para>
         </listitem>
         <listitem>
           <para>USB-geheugen</para>
           <para>
              Net als bij een CD-ROM, floppy of harde schijf kan ook USB 
	      geheugen gebruikt worden om een etherboot module
	      of een complete Linux kernel met initrd image te laden.
           </para>
         </listitem>
      </itemizedlist>
    </sect2>

  </sect1>

</chapter>


<chapter>
    <title>Installeren van LTSP op de server</title>
    <para>
      LTSP kan het beste worden gezien als een complete distributie van Linux.
      Het is een distributie boven op een andere distributie. Deze 'andere'
      distributie kan iedere gewenste distributie zijn. In feite is het zelfs
      geen voorwaarde dat de server Linux draait.
      De enige voorwaarde is dat de server het NFS (Network File System)
      protocol ondersteund.
      Vrijwel alle Unix systemen kunnen dat. Er zijn zelfs Windows servers
      die als LTSP server kunnen worden geconfigureerd.
    </para>

    <para>
      Er zijn drie stappen voor het installeren van een LTSP server
      <itemizedlist>

        <listitem>
          <para>Installeren van de LTSP hulpprogramma's</para>
        </listitem>

        <listitem>
          <para>Installeren van de LTSP client pakketten</para>
        </listitem>

        <listitem>
          <para>Configureren van de services ten behoeve van LTSP</para>
        </listitem>

      </itemizedlist>
    </para>

    <sect1>
        <title>Installeren van de LTSP hulpprogramma's</title>
      <para>
        Sinds versie 4.1 heeft LTSP een hulpprogramma-pakket voor het installeren
	en onderhouden van LTSP client pakketten (de programma's die op het
	werkstation draaien), en voor de configuratie van de services op de
	server.
      </para>

      <para>
        Het administratie hulpprogramma (in het engels 'utility') heet <command>ltspadmin</command> en het
	configuratie hulpprogramma heet <command>ltspcfg</command>. Beide
	zijn onderdeel van het <command>ltsp-utils</command>
        pakket.
      </para>

      <para>
        Het <emphasis role="strong">ltsp-utils</emphasis> pakket is 
	beschikbaar in zowel
        <emphasis role="strong">RPM</emphasis> als
        <emphasis role="strong">TGZ</emphasis> formaat.
	Kies een bestandsformaat en volg de betreffende instructies op.
      </para>

      <sect2>
        <title>Installatie van het RPM pakket</title>
        <para>
            Download de laatste versie van het ltsp-pakket en installeer dat
	    met het volgende commando:
            <programlisting>
	    rpm -ivh ltsp-utils-0.1-0.noarch.rpm</programlisting>
	    Het bovenstaande commando installeert de hulpprogramma's op de server.
         </para>
      </sect2>

      <sect2>
        <title>Installeren van het TGZ pakket</title>
        <para>
            Download de laatste versie van het ltsp-utils TGZ pakket en
	    installeer dat met de volgende commando's:
            <programlisting>
	    tar xzf ltsp-utils-0.1-0.noarch.tgz
	    cd ltsp_utils
	    ./install.sh
	    cd ..</programlisting>
	    De bovenstaande commando's installeren de hulpprogramma's op de server.
	    Gebruik deze op niet-RPM systemen.
        </para>
      </sect2>
    </sect1>

    <sect1>
        <title>Installeren van de LTSP client pakketten</title>
        <para>
	Als de ltsp-hulprogramma's geïnstallleerd zijn kan het programma
	<command>ltspadmin</command> worden uitgevoerd. Dit hulpprogramma
	dient voor het beheren van de LTSP client pakketten. Het maakt
	contact met de LTSP downloadpagina en haalt de lijst met beschikbare
	pakketten op. Opstarten van <command>ltspadmin</command> levert
	het volgende scherm op:
        </para>
        <para>
          <figure>
            <title>LTSP installer - hoofdscherm</title>
            <GRAPHIC FILEREF="pics/installer_main_window.jpg"
                     FORMAT="JPG"
                     SRCCREDIT="James McQuillan, 2004" >
          </figure>

        </para>

        <para>
	  In dit scherm kan gekozen worden voor "Install/Update". Als het hulpprgramma voor de
	  eerste keer wordt gebruikt dan wordt het
	  'Installer Configuration' scherm getoond:
        </para>
        <para>
          <figure>
            <title>LTSP installer - Configuration scherm</title>
            <GRAPHIC FILEREF="pics/installer_config_window.jpg"
                     FORMAT="JPG"
                     SRCCREDIT="James McQuillan, 2004" >
          </figure>
        </para>

        <para>
	In het <emphasis role="strong">configuration</emphasis>scherm kunnen
	verschillende waarden worden
	opgegeven voor het downloaden en installeren van LTSP pakketten:
          <variablelist>

            <varlistentry>
              <term><command>Where to retrieve packages from?</command></term>
              <listitem>
                <para>
                  (Vanaf waar moeten de pakketten worden opgehaald?) Dit is een URL
		  die wijst naar de plaats van de pakketten. Gewoonlijk is dit
		  <filename>http://www.ltsp.org/ltsp-4.1</filename>, maar als de pakketten
		  vanaf een lokaal bestandssysteem moeten worden geïnstalleerd kan ook
		  <filename>file:</filename> worden gebruikt. Als de pakketten
		  bijvoorbeeld op een cd staan die aangekoppeld is als <filename>/mnt/cdrom</filename>
		  dan zou <filename>file:///mnt/cdrom</filename> (let op: 3 slashes) moeten worden
		  opgegeven.
                </para>
                <para></para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term><command>In which directory would you like to place the LTSP
	      client tree?</command></term>
              <listitem>
                <para>
                  (In welke map moeten de LTSP mappen worden geïnstalleerd?)
		   Dit is de map waar de mapstructuur van LTSP moet worden
		   geïnstalleerd. Gewoonlijk is dit <filename>/opt/ltsp</filename>.
		   De map wordt aangemaakt als hij nog niet bestaat.
                </para>
                <para>
                  In deze map worden de root mappen voor iedere architectuur aangemaakt.
		  Op dit moment worden alleen x86 werkstations officieel ondersteund,
		  maar er zijn verschillende mensen bezig met 'ports' naar andere
		  architecturen zoals PPC en Sparc.
                </para>
                <para></para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term><command>HTTP Proxy</command></term>
              <listitem>
                <para>
                  Als de server achter een firewall staat en al het webverkeer door een proxy
		  heen moet, kan hier de installer worden geconfigureerd om de
		  proxy te gebruiken.
		  Er moet een URL worden ingevuld inclusief het gebruikte protocol en poortnummer.
		  Bijvoorbeeld:
                  <filename>http://firewall.yourdomain.com:3128</filename>.
                </para>
                <para>
                  Als geen proxy nodig is kan worden volstaan met
		  "<filename>none</filename>".
                </para>
                <para></para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term><command>FTP Proxy</command></term>
              <listitem>
                <para>
                  Als de pakketten op een FTP server staan of als een
		  een FTP proxy gepasseerd moet worden dan kan dat hier worden opgegeven.
		  De syntax is identiek
		  aan de die van de HTTP proxy hierboven.
                </para>
                <para>
                  Als een proxy niet nodig is kan worden volstaan met
		  "<filename>none</filename>".
                </para>
                <para></para>
              </listitem>
            </varlistentry>
          </variablelist>
        </para>

        <para>
          Als het configuratiescherm wordt afgesloten gaat de installer
	  bij de opgegeven URL informatie ophalen over de lijst van op
	  dat moment aanwezige installeerbare componenten.
        </para>

        <para>
          <figure>
            <title>LTSP installer - Componentenlijst</title>
            <GRAPHIC FILEREF="pics/installer_comp_list_window.jpg"
                     FORMAT="JPG"
                     SRCCREDIT="James McQuillan, 2004" >
          </figure>
          Selecteer de componenten die geïnstalleerd moeten worden.
	  Verplaats de oplichtende lijn naar de gewenste component en druk
	  op '<command>I</command>'
	  Het is ook mogelijk '<command>A</command>' in te toetsen waarmee
	  alle componenten geselecteerd worden. Dit is meestal het geval. Op
	  deze manier kan de grootste range van mogelijk hardware in werkstations worden
	  ondersteund.
        </para>

        <para>
          Er zijn verschillende sneltoetsen voor dit scherm. Hulp is beschikbaar
	  door '<command>H</command>' in te drukken.
          <figure>
            <title>LTSP installer - Help scherm</title>
            <GRAPHIC FILEREF="pics/installer_help_window.jpg"
                     FORMAT="JPG"
                     SRCCREDIT="James McQuillan, 2004" >
          </figure>
        </para>

        <para>
          Voor het weergeven van de lijst met pakketten van een bepaalde component
	  moet '<command>S</command>' worden ingetoetst. De op dit moment geïnstalleerde versies 
	  worden getoond samen met de meest recente beschikbare versies.
          <figure>
            <title>LTSP installer - Package list</title>
            <GRAPHIC FILEREF="pics/installer_pkg_list_window.jpg"
                     FORMAT="JPG"
                     SRCCREDIT="James McQuillan, 2004" >
          </figure>
        </para>

        <para>
          Nadat de gewenste componenten zijn geselecteerd kan het
	  'component selection' scherm worden afgesloten. De installer vraagt dan of
	  de geselecteerde pakketten echt moeten worden geïnstalleerd of bijgewerkt.
	  Als '<command>Y</command>' wordt ingetoetst worden de pakketten
	  opgehaald en geïnstalleerd.
        </para>

    </sect1>

    <sect1>
        <title>Configureren van de benodigde services voor LTSP</title>
        <para>
          Er zijn vier essentiële services nodig voor de ondersteuning van opstartende 
	  LTSP werkstations, te weten:
          <itemizedlist>
            <listitem><para>DHCP</para></listitem>
            <listitem><para>TFTP</para></listitem>
            <listitem><para>NFS</para></listitem>
            <listitem><para>XDMCP</para></listitem>
          </itemizedlist>
        </para>

        <para>
          Het <command>ltspcfg</command> hulpprogramma wordt gebruikt voor het
	  configureren van deze services en tevens voor een aantal andere aan LTSP gerelateerde
	  zaken.
        </para>
        <para>
	  <command>ltspcfg</command> kan worden opgestart vanuit
	  <command>ltspadmin</command>, of vanaf de commandoregel door middel van het
	  commando <command>ltspcfg</command>.
        </para>

        <para>
          Wanneer ltscfg wordt opgestart onderzoekt het de server om te zien wat
	  op dat moment geïnstallleerd is en draait.
	   Het onderstaande scherm verschijnt:
          <figure>
            <title>ltspcfg - Initieel Scherm</title>
            <GRAPHIC FILEREF="pics/ltspcfg_initial_screen.jpg"
                     FORMAT="JPG"
                     SRCCREDIT="James McQuillan, 2004" >
          </figure>
          Dit laat zien waar het hulpprogramma naar zoekt.
        </para>

        <para>
	Druk '<command>C</command>' om het configuratiemenu te zien.
          Ieder item uit het configuratiemenu moet worden bekeken om er zeker
	  van te zijn dat alles goed is ingesteld om LTSP werkstations te kunnen bedienen.
          <figure>
            <title>ltspcfg - Initial screen</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>
                  Het commando <command>Runlevel</command> wordt gebruikt door
		  het programma <command>init</command>. In Linux en Unix wordt het systeem
		  verondersteld in een zeker "Runlevel" te zijn. Runlevel 2 of 3 worden
		  gewoonlijk gebruikt om aan te geven dat het systeem in tekstmodus werkt.
		  Runlevel 5 geeft aan dat het systeem in grafische modus werkt, al of niet op
		  een netwerk.
                </para>
                <para>
                  Voor een LTSP server wordt traditioneel Runlevel 5 gebruikt. De meeste
		  systemen zijn standaard al geconfigureerd om in runlevel 5 NFS en XDMCP 
		  services te leveren. Dit hulppgrogramma configureert de systemen waarvoor dat niet het geval is.
                </para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term><command>2 - Interface selectie</command></term>
              <listitem>
                <para>
                  Voor systemen met meerdere netwerkkaarten kan hier worden opgegeven
		  via welke netwerk interface de werkstations verbonden zijn.
                </para>
                <para>
                  Door de juiste interface op te geven kan configuratie hulpprogramma
		  op correcte wijze ander configuratiebestanden zoals
		  <filename>dhcpd.conf</filename> en
                  <filename>/etc/exports</filename> aanmaken.
                </para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term><command>3 - DHCP configuratie</command></term>
              <listitem>
                <para>
                  DHCP moet worden geconfigureerd om de juiste velden aan de werkstations te kunnen
		  doorgeven. Het gaat om onder andere de volgende velden:
                  <command>fixed-address</command>, <command>filename</command>,
                  <command>subnet-mask</command>,
                  <command>broadcast-address</command> en
                  <command>root-path</command>.
                </para>
                <para>
                  Door dit menu te selecteren kan het bestand <filename>dhcpd.conf</filename> 
		  worden aangemaakt en kan <command>dhcpd</command> worden ingesteld
		  op te starten als het systeem wordt aangezet.
                </para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term><command>4 - TFTP configuratie</command></term>
              <listitem>
                <para>
                  TFTP wordt gebruikt door het werkstation om de Linux
		  kernel te downloaden. Daarvoor moet de <command>tftpd</command>
		  daemon op de server worden geactiveerd.
                </para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term><command>5 - Portmapper configuratie</command></term>
              <listitem>
                <para>
                  De <command>Portmapper</command> wordt gebruikt door RPC services
		  zoals NFS
                </para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term><command>6 - NFS configuratie</command></term>
              <listitem>
                <para>
                  NFS is de service die er voor zorgt dat lokale mappen kunnen worden aangekoppeld door
		  externe computers. Dit is nodig voor LTSP omdat de werkstations hun
		  root bestandssysteem op de server hebben staan.
                </para>
                <para>
                  Dit menu item zorgt er voor dat NFS gelijktijdig met het systeem opstart.
		  Het aanmaken van het betrokken configuratie bestand
		  <filename>/etc/exports</filename> wordt verderop in deze sectie
		  beschreven.
                </para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term><command>7 - XDMCP configuratie</command></term>
              <listitem>
                <para>
                  XDMCP is het "X Display Manager Protocol". Om een aanmeldscherm te krijgen stuurt
		  de X server een XDMCP verzoek naar de displaymanager op de server.
                </para>
                <para>
                  Veel gebruikte displaymanagers zijn <command>XDM</command>,
                  <command>GDM</command> en <command>KDM</command>.
		  Dit menu item toont alle gevonden displaymanagers en geeft aan welke
		  op dit moment geconfigureerd voor gebruik.
                </para>

                <para>
                  Uit veiligheidsoverwegingen wordt het de displaymanager standaard NIET
		  toegestaan om externe werkstations te bedienen. Dit is meestal de oorzaak van het
		  beruchte <emphasis role="strong">Grijze scherm met grote X cursor</emphasis>.
		  ltspcfg is meestal in staat de displaymanager zo te configureren dat externe
		  werkstations wel een verbinding kunnen krijgen.
                </para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term><command>8 - Aanpassen van /etc/hosts </command></term>
              <listitem>
                <para>
		  Verschillende services moeten voor hun werking het ip-adres van het werkstation
		  kunnen vertalen in een hostnaam. Het is mogelijk dit voor elkaar
		  te krijgen met de Berkeley Internet Naming Daemon (BIND) maar dan moeten
		  de <emphasis role="strong">reverses</emphasis> goed worden ingesteld.
		  Eigenlijk is dat ook de manier waarop het hoort, maar de configuratie van
		  BIND gaat voor dit document en voor ltspcfg iets te ver.
                </para>

                <para>
		Een veel eenvoudiger methode is om de ip-adressen en hostnamen op te nemen in
                  het bestand <filename>/etc/hosts</filename>.
                </para>

              </listitem>
            </varlistentry>

            <varlistentry>
              <term>
                     <command>9 - Aanpassen van /etc/hosts.allow </command>
              </term>
              <listitem>
                <para>
                  Een aantal services maakt gebruik van een veiligheidslaag bekend onder
		  de naam <emphasis role="strong">tcpwrappers</emphasis>.
		  Deze wordt geconfigureerd met het bestand
		  <filename>/etc/hosts.allow</filename>.
		  Dat bestand wordt door dit menu item configureerd.
                </para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term>
                     <command>10 - Aanpassen van /etc/exports</command>
              </term>
              <listitem>
                <para>
                  Dit is het bestand dat NFS gebruikt om vast te stellen welke mappen
		  mogen worden aangekoppeld door externe machines. Het bestand wordt met
		  dit menu-item aangemaakt danwel aangepast.
                </para>
              </listitem>
            </varlistentry>

            <varlistentry>
              <term>
                     <command>11 - Aanmaken van lts.conf</command>
              </term>
              <listitem>
                <para>
                  De configuratie van ieder werkstation wordt bepaald door
		  de items in het bestand <filename>lts.conf</filename>.
		  Voor min of meer moderne werkstations met een PCI bus
		  zijn eigenlijk geen aanpassingen in dit bestand nodig, maar het moet
		  wel bestaan. Dit menu-item maakt een standaard lts.conf aan.
                </para>
              </listitem>
            </varlistentry>

          </variablelist>
        </para>

    </sect1>

    <sect1>
        <title>Werkstationspecifieke configuratie</title>
        <para>
            Nu is het moment aangebroken om de LTSP server in te lichten
	    over uw specifieke werkstation. Er zijn drie bestanden die informatie
	    bevatten over het werkstation:
            <orderedlist>

                <listitem>
                    <para>/etc/dhcpd.conf</para>
                </listitem>

                <listitem>
                    <para>/etc/hosts</para>
                </listitem>

                <listitem>
                    <para>/opt/ltsp/i386/etc/lts.conf</para>
                </listitem>

            </orderedlist>

        </para>

        <sect2>
            <title>/etc/dhcpd.conf</title>
            <para>
	    Het werkstation heeft een ip-adres en andere informatie nodig.
	    Het volgende kan van de server worden verkregen:
                <itemizedlist>
                    <listitem> <para>ip-adres</para> </listitem>
                    <listitem> <para>hostnaam</para> </listitem>
                    <listitem> <para>Server ip-adres</para> </listitem>
                    <listitem> <para>Default gateway</para> </listitem>
                    <listitem> <para>Padnaam van de te laden kernel</para>
</listitem>
                    <listitem> <para>Server and map voor root bestandssysteem
                               </para> </listitem>
                </itemizedlist>
            </para>
            <para>
                Voor dit voorbeeld hebben we DHCP gekozen om
		ip-adressen uit te delen aan de werkstations.
            </para>
            <para>
	        Tijdens het draaien van het ltsp_initialize script wordt een
		voorbeeld dhcpd.conf bestand geïnstalleerd. Dat bestand heet
		<filename>/etc/dhcpd.conf.example</filename>.
		U kunt dat bestand kopiëren naar <filename>/etc/dhcpd.conf</filename>
		als het gebruikt moet worden voor de DHCP configuratie.
		Het is wel nodig de delen aan te passen die betrekking hebben op uw werkstation en
		serverinstallatie.
                <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>
                Vanaf LTSP versie 2.09pre2 is het niet langer nodig een specifieke
		kernel op te geven. De standaard kernel ondersteund nu alle netwerkkaarten die 
		Linux kent. Er worden twee kernel bestanden meegeleverd in het LTSP pakket.
		Een is bijgewerkt met de Linux Progress Patch (LPP)  en de ander niet.
		De bestandsnamen zijn:
                <programlisting>
vmlinuz-2.4.9-ltsp-5
vmlinuz-2.4.9-ltsp-lpp-5 </programlisting>
            </para>
            <para>
                Het is u misschien opgevallen dat de kernel in
		<filename class="directory">/tftpboot/lts</filename>
		staat, maar dat in de "filename" parameter in
		<filename>/etc/dhcpd.conf</filename>
		de inleidende
		<filename class="directory">/tftpboot</filename>
		ontbreekt. De reden is dat in Redhat 7.1 en later, TFTP wordt
		opgestart met de '-s' optie. Daardoor draait de tftpd in
		<emphasis role="strong">secure</emphasis> mode, veilige modus.
		Dat betekend dat tftpd bij het opstarten een <command>chroot</command>
		uitvoert naar de map
		<filename class="directory">/tftpboot</filename>. Daarna zijn
		alle bestandsnamen voor tftpd relatief ten opzichte van die map.
            </para>
            <para>
                In andere Linux distributies is deze '-s' optie misschien niet standaard ingeschakeld voor tftp.
		In dat geval zal de voorlooptekst
		'<filename class="directory">/tftpboot</filename>' moeten worden toegevoegd.
            </para>
        </sect2>

        <sect2>
            <title>/etc/hosts</title>
            <para>IP addres vertalen naar hostnaam</para>
            <para>
                Computers kunnen prima met elkaar communiceren via ip-adressen.
		Pas als mensen zich er mee gaan bemoeien moeten er opeens
		namen gegeven worden want wij kunnen geen nummers onthouden.
		Daarom is er DNS, of het bestand <filename>/etc/hosts</filename>.
		In het algemeen is de vertaling van ip-adres naar hostnaam niet noodzakelijk.
		Voor LTSP omgevingen is het echter wel noodzakelijk. Dat is omdat anders NFS
		sputtert over toegangsrechten als het werkstation zijn
		root bestandssysteem wil aankoppelen.
            </para>
            <para>
                Daarnaast zijn er, als het werkstation niet opgenomen is in
		<filename>/etc/hosts</filename>,
		problemen te verwachten met de
		<emphasis role="strong">GDM</emphasis> of
                <emphasis role="strong">KDM</emphasis> displaymanagers.
            </para>
        </sect2>

        <sect2>
            <title>/opt/ltsp/i386/etc/lts.conf</title>
            <para>
	        Er zijn een aantal configuratie-items die kunnen
		worden ingesteld in het bestand lts.conf.
            </para>

            <para>
                Het bestand <filename>lts.conf</filename> heeft een eenvoudige
		syntax, bestaande uit meerdere secties.
		Er is een standaard sectie genaamd <command>[default]</command>, en
		er zijn secties voor individuele werkstations.
		De werkstation kunnen worden aangeduid met hostnaam,
		ip-adres of MAC adres (hardware adres).
            </para>

            <para>
                Een gebruikelijke <filename>lts.conf</filename> ziet er als 
		volgt uit:
                <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>
                Hieronder volgt een lijst van enkele van deze items:
                <variablelist>
                    <varlistentry>
                        <term><command>XSERVER</command></term>
                        <listitem>
                            <para>
                                Indien de videokaart een PCI kaart is die ook
				ondersteund wordt door X.org 6.7.0 dan is alleen
				het lts_x_core pakket nodig. Dit bevat alle driver
				modules voor X4.
                            </para>
                            <para>
                                Voor LTSP zijn diverse XFree86 3.3.6 pakketten beschikbaar
				voor het geval de videokaart niet door X.org 6.7.0
				wordt ondersteund.
                            </para>
                            <para>
                               Men kan in <filename>lts.conf</filename>
				voor ieder werkstation apart items instellen, of men kan
				standaardwaarden instellen voor items die door alle werkstations
				worden gebruikt.
                            </para>
                            <para>
			       Ons werkstation heeft een Intel i810 video chipset die automatisch
			       kan worden gedetecteerd. Er is dus geen
			       XSERVER item nodig in het lts.conf bestand.
			       Het item XSERVER mag echter wel, indien gewenst, worden ingesteld.
			       Het is ook mogelijk de waarde 'auto' op te geven, om aan te geven dat
			       hij automatisch gedetecteerd zal worden.
                            </para>
                        </listitem>
                    </varlistentry>

                    <varlistentry>
                        <term><command>RUNLEVEL</command></term>
                        <listitem>
                            <para>
                                We willen dat het werkstation in grafische modus draait
				dus het runlevel moet op '5' worden gezet.
				Dit gebeurt door weer een ander item in het bestand <filename>lts.conf</filename>.
                            </para>
                        </listitem>
                    </varlistentry>
                </variablelist>
            </para>
        </sect2>

    </sect1>

    <sect1>
        <title>Huidige configuratie weergeven</title>
        <para>
            Met <command>ltspcfg</command> is het ook mogelijk een overzicht van 
	    de huidige status van alle services te krijgen. Druk in het hoofdmenu van ltspcfg
	    op '<command>S</command>' en het overzicht wordt getoond.
            <figure>
              <title>ltspcfg - Huidige Status</title>
              <GRAPHIC FILEREF="pics/ltspcfg_status.jpg"
                       FORMAT="JPG"
                       SRCCREDIT="James McQuillan, 2004" >
            </figure>
        </para>

    </sect1>

</chapter>


<chapter>
    <title>Installeren van het werkstation</title>
    <para>
        Als de server geïnstalleerd is wordt het tijd om ons te richten op
	het installeren van het werkstation
    </para>
    <para>
        In het LTSP project gaat het om wat er gebeurt als de kernel in het
	geheugen geladen is. Er zijn verschillende manieren om de kernel
	in het geheugen te krijgen, zoals Etherboot, Netboot, PXE en floppy.
    </para>

    <sect1>
      <title>Opstarten met PXE</title>
      <para>
        Als er PXE in de netwerkkaart of PC zit dan kan dat gebruikt worden om de kernel te laden.
	PXE is een bootrom technologie vergelijkbaar met Etherboot en Netboot.
      </para>

      <para>
        Mogelijk moet PXE eerst geactiveerd worden op de netwerkkaart.
	Ook kan het zijn dat opstartvolgorde in het BIOS moet
	worden aangepast, zodat "Boot from Lan" op de eerste plaats staat in plaats van bv floppy of
	harde schijf.
      </para>

      <para>
        PXE heeft de beperking dat alleen bestanden kleiner dan 32 kb geladen
	kunnen worden. De Linux kernel is aanzienlijk groter dus die
	kan niet direct worden geladen met PXE. Daarom moet eerst een zogenaamd
	'Network Bootstrap Program', kortweg NBP, geladen worden.
      </para>

      <para>
        Er is een NBP voor Linux beschikbaar met de naam
	<command>pxelinux.0</command>.
	Het is onderdeel van het
	<command>syslinux</command> pakket van
	kernel ontwikkelaar H. Peter Anvin.
      </para>

      <para>
        Het LTSP kernel pakket bevat het pxelinux.0 NBP, de
	benodigde configuratiebestanden voor het laden van een
	Linux kernel, plus een ramdisk image voor het opstarten.
      </para>
      <para>
        Het werk op de volgende manier:
        <itemizedlist>
          <listitem>
            <para>
              Het PXE bootrom initialiseert de netwerkkaart en zend een dhcp-verzoek.
            </para>
          </listitem>
          <listitem>
            <para>
              De dhcp-server antwoordt met een ip-adres en de naam van het NBP
	      dat geladen moet worden.
            </para>
          </listitem>
          <listitem>
            <para>
              De PXE bootrom haalt het NBP op, zet het in het geheugen, en
	      voert het uit.
            </para>
          </listitem>
          <listitem>
            <para>
              Het NBP gebruikt tftp om het configuratie bestand van de server op te
	      halen.
            </para>
          </listitem>
          <listitem>
            <para>
              Het configuratiebestand bevat de naam van de kernel, de naam van de opstart
	      ramdisk, en de opties die aan de kernel moeten worden doorgegeven als die is geladen.
            </para>

            <para>
            Hier is een voorbeeld van een pxe configuratiebestand:
              <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>
             Het NBP gebruikt daarna tftp om de kernel en de opstart ramdisk op
	     te halen.
            </para>
          </listitem>
          <listitem>
            <para>
              Vervolgens wordt de controle overgedragen aan de Linux-kernel die opstart,
	      initrd aankoppelt (mount), en doorgaat met het verder opstarten van het werkstation.
            </para>
          </listitem>
        </itemizedlist>
      </para>

    </sect1>

    <sect1>
      <title>Opstarten met Etherboot</title>
      <blockquote><attribution>Ken Yap</attribution>
        <para>
          Etherboot is een software pakket voor het maken van ROM images
	  die programmacode voor x86 computers downloaden over een Ethernet netwerk.
	  Veel netwerkkaarten hebben een voorziening voor het plaatsen van een ROM chip.
	  Etherboot is code die in zo'n chip gezet kan worden.
        </para>
      </blockquote>

      <para>
          Etherboot is ook Open Source, vrijgegeven onder de GNU General
	  Public License, versie 2 (GPL2)
      </para>

      <para>
          Als men Etherboot wil gebruiken en over een netwerkkaart met bootrom beschikt,
	  dan kan het nodig zijn dat de BIOS-configuratie moet worden ingesteld
	  om op te starten van het netwerk ('Boot from LAN') in plaats van de harde schijf
	  of de floppy.
      </para>

      <para>
          Als er nog geen Etherboot bootrom is kan men ofwel een een bootrom maken, ofwel
	  een floppy maken met een Etherboot image in de bootsector.
      </para>
      <para>
          Etherboot ondersteund meer dan 200 typen netwerkkaarten, en regelmatig worden 
	  er typen toegevoegd.
	  Of er nu een bootrom gemaakt wordt of dat er een floppy wordt gebruikt, het is in ieder geval nodig het juiste
	  type netwerkkaart vast te stellen.
      </para>

      <sect2>
        <title>Het kiezen van een Etherboot driver voor een ISA netwerkkaart</title>
        <para>
            Voor oudere ISA kaarten is het niet zo belangrijk om het type exact vast
	    te stellen. Meestal gaat het om ne2000 of 3Com 3c509 kaarten. Men hoeft dan
	    alleen maar de goede Etherboot driver uit te kiezen die overeenkomt met
	    het type kabel dwz 10 base-2 (Coax) of 10 base-T (Twisted pair)
        </para>
      </sect2>

      <sect2>
        <title>Het kiezen van een Etherboot driver voor een PCI netwerkkaart</title>
        <para>
            Voor PCI is het belangrijk dat de goed driver gekozen wordt
	    met het juiste PCI Vendor en Device ID.
        </para>

        <para>
          Met wat geluk is het model kaart bekend. Bijvoorbeeld
	  omdat het modelnummer dat op de kaart geprint staat overeenkomt met
	  de beschrijving van de Etherboot modules. Meestal echter moet het PCI ID nummer
	  opgezocht worden.
        </para>

        <para>
          Als het werkstation een floppy station heeft kan worden opgestart met
	  tomsrtbt (Tom's Root Boot) floppy. Als het werkstation een cdrom station heeft
	  kan met een Knoppix cd worden opgestart.
	  Als op geen enkele manier Linux opgestart kan worden zit er niets anders op
	  dan de kaart over te brengen naar een computer die wel Linux kan booten.
        </para>


        <para>
          Wanneer eenmaal Linux opgestart is kan het commando
           <command>lspci</command> gebruikt worden met de optie -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>
	  In het bovenstaande voorbeeld is voor iedere PCI kaart een informatieregel
	  zichtbaar. Alleen de <emphasis role="strong">Class 0200</emphasis>
	  regels zijn van belang. Nogmaals het commando intypen maar nu met alleen weergave
	  van  de Ethernet kaarten maakt de lijst wat overzichtelijker:
          <programlisting>
[root@jamlap root]# lspci -n | grep "Class 0200"
0000:06:00.0 Class 0200: 8086:1229 (rev 09)
          </programlisting>
          De PCI ID nummers zijn hier:
	  <command>8086:1229</command>. Het eerste veld
	  <command>8086</command> is het PCI Vendor ID, in dit geval de
	  Intel Corporation. Het tweede veld
	  <command>1229</command> is het PCI device ID. Dit vertelt ons het
	  model van de netwerkkaart, in dit geval een EtherExress 100.
        </para>

      </sect2>

      <sect2>
          <title>Het maken van een opstartfloppy</title>

          <para>
          </para>

          <para>
              Men kan ervoor kiezen het Etherboot pakket te downloaden en te configureren voor
	      een specifiek type kaart, en vervolgens de broncode te compileren voor het benodigde type
	      bootrom. Dit levert dan de gewenste bootrom image op die
	      uiteindelijk in een EPROM of op een floppy geschreven
	      kan worden.
          </para>

          <para>
              Een veel eenvoudigere manier is om naar Marty Connor's
              <ulink
url="http://www.rom-o-matic.net"><citetitle>www.Rom-O-Matic.net</citetitle></ulink>
              website te gaan.
          </para>

          <para>
              Marty heeft prima werk verricht met het maken van een
	      webpagina die het configuratie en compilatie  proces van
	      bootrom images voor zijn rekening neemt. Op de pagina kan
	      aangegeven worden om welk type netwerkkaart het gaat,
	      en welk soort image gemaakt moet worden. Ook is er nog een mogelijkheid
	      om eventuele verdere opties te configureren. Na een druk op de
	      knop 'Get ROM' wordt er vervolgens in een paar seconden een bootrom image
	      gemaakt.
          </para>

          <para>
              Kies bij de optie 'ROM output' voor 'Floppy Bootable ROM Image'.
	      Dit plakt een 512 bytes lang opstart programma vooraan het image. Als het resultaat
	      in de bootsector van een floppy wordt geschreven dan wordt tijdens het opstarten de
	      etherboot image in het geheugen geladen waar het kan worden uitgevoerd.
          </para>

          <para>
              Druk op 'Get ROM' en na een paar seconden verschijnt in de browser een
	      pop-up venster met de vraag waar het bestand in de computer opgeslagen moet worden.
          </para>

        <para>
            Als het image op de harde schijf staat moet hij nog naar een floppy worden gekopiëerd.
	    Doe een floppy in het station en typ het volgende commando in
	    om de floppy te beschrijven:
            <programlisting>
dd if=<emphasis>Etherboot_Image</emphasis> of=/dev/fd0 </programlisting>
        </para>
      </sect2>

      <sect2>
        <title>Het maken van een bootrom</title>
        <para>
           Om het Etherboot image in een EPROM weg te schrijven is een 
	   programmeer apparaat nodig. De prijs van dit soort apparatuur
	   varieert van enige honderden tot duizenden dollars, afhankelijk
	   van de mogelijkheden van het apparaat.
        </para>
        <para>
           Het proces van het programmeren van een EPROM is volledig
	   afhankelijk van de gebruikte apparatuur. Een beschrijving valt
	   daarom buiten de doelstelling van dit document.
        </para>
      </sect2>

    </sect1>

</chapter>


<chapter>
    <title>Opstarten van het werkstation</title>
    <para>
        Als de server en het werkstation goed zijn geconfigureerd is het gewoon een 
	kwestie van floppy in het station en de computer aanzetten.
    </para>

    <para>
        De Etherbootcode wordt van de floppy in het geheugen geladen, de 
	netwerkkaart wordt gevonden en geïnitialiseerd, het dhcp-verzoek wordt verzonden
	en een antwoord komt terug waarna de kernel van de server wordt opgehaald.
	Als het werkstation door de kernel is geïinitialiseerd start X windows op en
	verschijnt een aanmeldvenster op het scherm vergelijkbaar met het voorbeeld hieronder:
    </para>

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

    <para>
        Op dit moment kan de gebruiker zich aanmelden. Het is belangrijk te onthouden
	dat men zich bij een server aanmeldt. Alle commando's worden op die server
	uitgevoerd en de uitvoer wordt op het werkstation weergegeven. Dit is
	de kracht van X windows.
    </para>

    <para>
        Alle programma's die op de server staan kunnen worden gebruikt.
    </para>

</chapter>


<chapter>
    <title>Afdrukken</title>
    <para>
        Los van de rol van GUI of tekstterminal kan het werkstation ook als
	printserver dienen. In totaal 3 printers kunnen worden verbonden met de parallelle
	of seriële poorten.
    </para>

    <para>
        Dit gebeurt allemaal onmerkbaar voor de gebruikers van het werkstation.
	Zij zullen niet in de gaten hebben dat er dataverkeer door het werkstation 
	naar de printers toe gaat.
    </para>

    <sect1>
        <title>Installeren gebruikerszijde</title>

        <para>
            LTSP gebruikt het <command>lp_server</command> programma
	    op het werkstation om de binnenkomende printopdrachten
	    van de server door te sturen naar een printer aan een van de poorten van
	    het werkstation.
        </para>

        <para>
            Een printer op het werkstation kan worden aangesloten door
	    een aantal configuratie items in het bestand <command>lts.conf</command>
	    van een waarde te voorzien.
            <programlisting>
[ws001]
    PRINTER_0_DEVICE = /dev/lp0
    PRINTER_0_TYPE   = P </programlisting>
            Bovenstaande items zorgen ervoor dat het lp_server programma op de
	    achtergrond gedraaid wordt, wachtend op een printopdracht via poort
	    9100. De printdata  worden doorgestuurd naar de parallelle poort /dev/lp0.
        </para>

        <para>
            Er zijn meer opties. Kijk in de sectie over lts.conf voor meer informatie
	    over het configureren van printers.
        </para>
    </sect1>

    <sect1>
        <title>Installeren serverzijde</title>

        <para>
            Het opzetten van een printer op de server is een kwestie van het
	    definiëren van een printer wachtrij. Dit kan met het printerconfiguratie-programma
	    op de server.
        </para>

        <para>
            Op redhat 7.2 is zowel een GUI als een tekstgebaseerd programma
	    aanwezig voor de printerconfiguratie.
	    De GUI heet <command>printconf-gui</command>, de tekstversie heet
	    <command>printconf-tui</command>. Oudere versies van Redhat
	    hebben het programma <command>printtool</command>.
	    Printtool bestaat ook in Redhat 7.2, maar dan roept het alsnog
	    <command>printconf-gui</command> aan.
	    Andere Linux distributies hebben hun eigen printer configuratie programma's.
        </para>

        <figure>
            <title>Printconf-gui Toevoegen van een nieuwe printer</title>
            <GRAPHIC FILEREF="pics/printconf-gui-add.gif"
                     FORMAT="GIF"
                     SRCCREDIT="James McQuillan, 2001" >
        </figure>

        <para>
            Indien het printer configuratieprogramma wordt opgestart moet eerst een
	    nieuwe printer worden toegevoegd. Het lp-server programma op het werkstation
	    emuleert een HP JetDirect print server. Het is nodig een <command>JetDirect</command> printer
	    toe te voegen.
        </para>

        <para>
            De printer heeft een naam voor de printer wachtrij nodig. De naam kan van alles zijn maar maak
	    er een betekenisvolle naam van, met uitsluitend de onderstaande tekens:
            <itemizedlist>
                <listitem>
                    <para>
                        <computeroutput>
                            "a-z"  kleine letters
                        </computeroutput>
                    </para></listitem>
                <listitem>
                    <para>
                        <computeroutput>
                            "A-Z"  hoofdletters
                        </computeroutput>
                    </para></listitem>
                <listitem>
                    <para>
                        <computeroutput>
                            "0-9"  getallen
                        </computeroutput>
                    </para></listitem>
                <listitem>
                    <para>
                        <computeroutput>
                            "-"    &nbsp;&nbsp;minteken
                        </computeroutput>
                    </para></listitem>
                <listitem>
                    <para>
                        <computeroutput>
                            "_"    &nbsp;&nbsp;underscore
                        </computeroutput>
                    </para></listitem>
            </itemizedlist>
        </para>
        <para>
            De gekozen naam in het bovenstaande voorbeeld is
            <command>ws001_lp</command>.
	    Door deze naam is het makkelijk te zien dat de printer is verbonden met 
	    <command>ws001</command>.
        </para>

        <figure>
            <title>Printconf-gui Detail informatie</title>
            <GRAPHIC FILEREF="pics/printconf-gui-detail.gif"
                     FORMAT="GIF"
                     SRCCREDIT="James McQuillan, 2001" >
        </figure>
        <para>
            Twee velden zijn noodzakelijk voor communicatie met de printer:
            <orderedlist>
                <listitem>
                    <para>
                        Het ip-adres of de hostnaam van het werkstation waarmee
			de printer verbonden is.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        De tcp-poort waarop de <command>lp_server</command>
			daemon luistert.
                    </para>
                    <para>
                        De eerste printer die aan een werkstation vast zit krijgt tcp-poort
			<command>9100</command>. De tweede printer zit op poort
			<command>9101</command>, en de derde printer op 
			<command>9102</command>.
                    </para>
                </listitem>
            </orderedlist>
        </para>
    </sect1>

</chapter>


<chapter>
    <title>Schermscripts</title>
    <para>
        Een van de faciliteiten die sinds versie 4.0 aan LTSP zijn toegevoegd  zijn de
	zg '<command>Schermscripts</command>'. Deze scripts dienen voor het opstarten van
	de verschillende type sessies.
    </para>

    <para>
        Er kunnen meerdere schermen voor een werkstation worden gedefinieerd.
	Hierdoor kunnen meerdere sessies tegelijkertijd actief zijn. Het kunnen verschillende
	type sessies zijn of allemaal dezelfde. Men kan bijvoorbeeld
	het volgende opgeven:
        <programlisting>
   SCREEN_01 = startx
   SCREEN_02 = shell</programlisting>
        Dit start een X server op het eerstescherm en een shell op het tweede
	scherm. Wisselen tussen schermen kan met Ctrl-Alt-F1, om naar het eerste scherm te gaan,
	en Ctrl-Alt-F2, voor het tweede scherm.
    </para>

    <para>
	Op deze manier kunnen 12 'schermscripts' worden opgegeven, maar de meeste mensen
	hebben aan 1 genoeg.
    </para>

    <para>
        Beschikbare typen schermscripts:
        <variablelist>
          <varlistentry>
              <term><command>startx</command></term>
              <listitem>
                  <para>
                      Dit script start de X server op met de optie -query, waardoor
		      een XDMCP verzoek naar een displaymanager gestuurd wordt om een
		      aanmeldvenster op het scherm te krijgen.
                  </para>
              </listitem>
          </varlistentry>

          <varlistentry>
              <term><command>shell</command></term>
              <listitem>
                  <para>
                      Dit script start een shell op het werkstation.
		      Eigenlijk is dit script speciaal voor het oplossen van problemen op het
		      werkstation. Omdat de sessie op het werkstation plaats vindt, en niet op
		      de server, is hij niet erg handig voor het draaien
		      van programma's.
                  </para>
              </listitem>
          </varlistentry>

          <varlistentry>
              <term><command>telnet</command></term>
              <listitem>
                  <para>
                      Dit script start een telnet-sessie die verbonden is met de server.
		      Het is een tekstsessie.
                  </para>
                  <para>
                      Standaard wordt de telnet-sessie met de LTSP server verbonden maar als
		      men een verbinding met een andere server wil kan dat op de dezelfde regel aangegeven worden.
		      Bijvoorbeeld:
                      <programlisting>
    SCREEN_01 = telnet server2.mydomain.com</programlisting>
                      Alle opties die het telnet programma kent kunnen op de regel worden
		      opgegeven, maar zodra opties worden opgegeven moet altijd ook de server
		      opgegeven worden waarmee verbonden moet worden.
                  </para>
              </listitem>
          </varlistentry>

          <varlistentry>
              <term><command>rdesktop</command></term>
              <listitem>
                  <para>
			Dit script start het rdesktop programma dat contact maakt met 
			een Microsoft Windows server. Opties voor dit programma
			kunnen op dezelfde regel worden opgegeven, direct na de scriptnaam.
			Als bijvoorbeeld de server moet worden opgegeven kan dat op de volgende manier:
                      <programlisting>
    SCREEN_01 = rdesktop -f w2k.mydomain.com</programlisting>
                      Het bovenstaande voorbeeld start een desktop in volledige scherm.
		      De gebruiker ziet een Windows aanmeldvenster, en hoeft maar een keer
		      in te loggen. Dit is erg handig als alleen een windows aanmeldscherm nodig is,
		      zonder Linux. De gebruikers weten niet eens dat ze in feite Linux gebruiken.
                  </para>
              </listitem>
          </varlistentry>

        </variablelist>

    </para>

    <para>
      De schermscripts staan in de map
      <filename class="directory">/opt/ltsp/i386/etc/screen.d</filename>.
     Men kan eigen schermscripts maken en toevoegen aan deze map. Het
      handigste is om een van de scripts als voorbeeld te gebruiken.
    </para>

</chapter>


<chapter>
    <title>Problemen oplossen</title>
    <para>
        Indien na het volgen van de aanwijzingen in de voorgaande hoofdstukken
	het werkstation niet opstart begint het proces van probleemoplossing.
    </para>

    <para>
        Het eerste dat uitgezocht moet worden is hoever het opstartproces van het
	werkstation gekomen is.
    </para>

    <sect1>
        <title>Problemen oplossen van het Etherboot floppy image</title>
        <para>
            Als van een floppy wordt opgestart zou ongeveer het volgende op het scherm te zien moeten
	    zijn:
        </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>
            Het bovenstaande voorbeeld laat zien wat verwacht kan worden bij het 
	    opstarten vanaf een floppy. Als deze boodschappen, die aangeven dat Etherboot opgestart is,
	    niet te zien zijn kan het zijn dat de floppy defect is, of dat de image niet goed op de floppy
	    weggeschreven is.
        </para>

        <para>
        De volgende boodschap is waarschijnlijk zichtbaar
	het Etherboot image dat gemaakt is niet correct is voor de
	gebruikte netwerkkaart.
        <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>
            Als het opstartproces aankomt op het punt waarop het correcte MAC adres van de
	    kaart wordt weergegeven dan is de floppy waarschijnlijk goed.
        </para>

    </sect1>

    <sect1>
        <title>Problemen oplossen van DHCP</title>
        <para>
            Als de netwerkkaart is geïnitialiseerd zendt hij een dhcp-verzoek over het
	    lokale netwerk, op zoek naar een dhcp-server.
        </para>

        <para>
        Wanneer het werkstation een bruikbaar antwoord heeft gekregen van de dhcp-server
	wordt de netwerkkaart geconfigureerd. Of dit gelukt is valt af te leiden uit de ip-adres
	die in dat geval op het scherm wordt weergegeven. Hier is een voorbeeld hoe dat eruit
	zou moeten zien:
            <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>
            Als de regel zichtbaar is die begint met 'Me:', gevolgd door een
	    ip-adres, dan is duidelijk dat DHCP correct werkt. In dat geval kan worden doorgegaan
	    met controle van TFTP
        </para>

        <para>
            Als in plaats daarvan de volgende boodschap op het scherm verschijnt
	    gevolgd door een heleboel &#60;sleep&#62; meldingen, dan is er iets mis.
	    Het is normaal als er een of twee van deze &#60;sleep&#62; meldingen te zien zijn en pas daarna
	    het antwoord van de dhcp-server.
            <screen>
Searching for server (DHCP)...  </screen>
        </para>

        <para>
            Uitzoeken wat er mis is kan soms moeilijk zijn, maar er zijn een paar zaken om
	    aandacht aan te besteden.
        </para>
            <sect2>
                <title>Controleer de verbindingen</title>
                <para>
                    Is het werkstation fysiek verbonden met hetzelfde netwerk als waar
		    de server aan vast zit?
                </para>
                <para>
                    Kijk, met het werkstation aan, of alle verbindings-indicatorlichtjes op alle verbindingen
		    aanstaan.
                </para>

                <para>
                    Als een directe verbinding (geen hub of switch) gelegd is tussen werkstation en
		    server, wees er dan zeker van dat een cross-over kabel gebruikt wordt.
			Als een hub of switch gebruikt wordt, controleer dan of gewone 'straight-through'
			kabels worden gebruikt tussen zowel het werkstation en de hub, als tussen
			de hub en de server.
                </para>

            </sect2>

            <sect2>
                <title>Draait dhcpd?</title>
                <para>
                    Er dient te worden vastgesteld of <command>dhcpd</command> draait
		    op de server. We kunnen het antwoord op een aantal manieren vinden.
                </para>

                <para>
                    <command>dhcpd</command> draait normaal gesproken op de achtergrond en luistert op
		    poort 67.
		    Probeer het commando <command>netstat</command> om te kijken of er iets luistert
		    op die poort:
                    <programlisting>
netstat -an | grep ":67 " </programlisting>
                    Dit zou ongeveer het volgende moeten opleveren:
                    <programlisting>
udp     0    0   0.0.0.0:67         0.0.0.0:*</programlisting>
                    De vierde kolom bevat het ip-adres en poortnummer, gescheiden door een dubbelepunt
		    (':'). Een adres met allemaal nullen ('0.0.0.0') geeft aan dat er geluisterd wordt op alle
		    interfaces (netwerkkaarten). Dat wil zeggen, er is een <command>eth0</command>
		    en een <command>eth1</command> interface, en <command>dhcpd</command>
		    luistert op beide interfaces.
                </para>

                <para>
                    Dat  netstat laat zien dat er iets luistert op udp poort 67 betekend nog niet dat het ook
		    <command>dhcpd</command> is die luistert. Het zou ook
		    <command>bootpd</command> kunnen zijn, al is dat onwaarschijnlijk omdat
		    <command>bootpd</command> in de meeste Linux distributies niet meer meegeleverd
		    wordt.
                </para>

                <para>
                    Om er zeker van te zijn dat inderdaad <command>dhcpd</command>
		    draait kunnen we het commando <command>ps</command> gebruiken.
                    <programlisting>
ps aux | grep dhcpd </programlisting>

                    Dit zou ongeveer het volgende moeten opleveren:

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

                    De eerste regel laat zien dat <command>dhcpd</command> draait.
		    De tweede regel laat alleen maar ons <command>grep</command> commando
		    zien.
                </para>

                <para>
                    Als er helemaal geen regels zijn die aangeven dat dhcpd draait, controleer
		    dan of <command>dhcpd</command> geconfigureerd is om onder runlevel 5 te draaien.
		    Op Redhat systemen kan het commando <command>ntsysv</command> ingetypt worden.
		    Naar beneden scrollend kan dan gecontroleerd worden of <command>dhcpd</command>
		    geconfigureerd is om op te starten.
                </para>

                <para>
                    De <command>dhcpd</command> daemon kan worden opgestart met het commando:
                    <programlisting>
service dhcpd start</programlisting>

                    Let goed op de schermuitvoer, er kunnen foutmeldingen in staan.
                </para>

            </sect2>

            <sect2>
                <title>Dubbele controle van de dhcpd-configuratie</title>
                <para>
                    Heeft het bestand <filename>/etc/dhcpd.conf</filename> wel voor ieder werkstation
		    aparte instellingen?
                </para>
                <para>
                    Controleer nogmaals de 'fixed-address' instelling in het configuratiebestand om er
		    zeker van te zijn dat die exact overeenkomt met die van de kaart in het werkstation.
                </para>
            </sect2>

            <sect2>
                <title>Blokkeert ipchains of iptables het verzoek?</title>
                <sect3>
                    <title>Onderzoeken van ipchains</title>
                    <para>
                        Draai het volgende command en kijk naar de uitvoer:
                        <programlisting>
ipchains -L -v </programlisting>
                        Als dit ongeveer het volgende oplevert:
                        <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>
                        Dan is het niet ipchains dat in de weg zit.
                    </para>
                </sect3>
                <sect3>
                    <title>Onderzoeken van iptables</title>
                    <para>
                        Draai het volgende command en kijk wat het zegt:
                        <programlisting>
iptables -L -v </programlisting>
                        Als dit ongeveer het volgende oplevert:
                        <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>
                        Dan is het niet iptables dat in de weg zit.
                    </para>
                </sect3>
            </sect2>

            <sect2>
                <title>Stuurt het werkstation dhcp-verzoeken?</title>
                <para>
                    Bekijk <filename>/var/log/messages</filename>
                    terwijl het werkstation opstart. Dat kan met het volgende commando:
                    <programlisting>
tail -f /var/log/messages </programlisting>
                    Dit 'volgt' het logbestand terwijl er nieuwe regels worden bijgeschreven.
                    <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>
                    Als dit meldingen zoals hierboven oplevert, met 'no free leases',
		    dan betekend dat dat <command>dhcpd</command> wel draait maar
		    dat het niks weet over het
		    werkstation dat het ip-adres verzoek doet.
                </para>
            </sect2>

    </sect1>

    <sect1>
        <title>Problemen oplossen van TFTP</title>
        <para>
            Etherboot gebruikt TFTP om een Linux kernel op te halen van de server.
	    Het is een vrij eenvoudig protocol maar toch zijn er soms problemen om het
	    aan de praat te krijgen.
        </para>

        <para>
            Als een melding zoals hieronder zichtbaar is:
        <screen>
Loading 192.168.0.254:/lts/vmlinuz-2.4.24-ltsp-4......... </screen>
          met puntjes die snel het scherm vullen, dan is dat een indicatie dat TFTP
	  goed werkt en de kernel wordt opgehaald.
        </para>

        <para>
          Als daarentegen geen puntjes verschijnen is er een probleem. Mogelijke
	  problemen kunnen zijn:
        </para>

        <sect2>
            <title><command>tftpd</command> draait niet</title>
            <para>
                Als <command>tftpd</command> niet geconfigureerd is om op te starten
		dan zal het zeker geen verzoeken van het werkstation kunnen beantwoorden.
		Om te zien of het draait kan het commando <command>netstat</command>
		worden gebruikt:
                <programlisting>
[root@bigdog]# netstat -anp | grep ":69 "

udp     0   0 0.0.0.0:69         0.0.0.0:*                 453/inetd
                </programlisting>
                Als er geen uitvoer van dat commando verschijnt is tftp waarschijnlijk niet actief.
              </para>
            <para>
                Er zijn twee gebruikelijke methoden voor het opstarten van tftpd.
		Dat zijn <command>inetd</command> en het nieuwere
		<command>xinetd</command>
              </para>
            <para>
                <command>inetd</command> gebruikt een configuratie bestand genaamd
                <filename>/etc/inetd.conf</filename>.  Zorg er voor dat in dat bestand
		tftpd NIET uitgeschakeld is met het commentaarteken '#'.
		De regel zou er zo uit moeten zien:
                <programlisting>
tftp dgram udp wait nobody /usr/sbin/tcpd  /usr/sbin/in.tftpd -s /tftpboot
                </programlisting>
            </para>
            <para>
		<command>xinetd</command> gebruikt een map met aparte configuratiebestanden.
		Een bestand voor iedere service. Als de server xinetd gebruikt dan is er een bestand
		<filename>/etc/xinetd.d/tftp</filename>.
		Hieronder staat een voorbeeld:
                <programlisting>
service tftp
{
  disable          = no
  socket_type      = dgram
  protocol         = udp
  wait             = yes
  user             = root
  server           = /usr/sbin/in.tftpd
  server_args      = -s /tftpboot
}
                </programlisting>

                Wees er zeker van dat op de <command>disable</command> regel geen 'yes'
		staat.
            </para>
        </sect2>

        <sect2>
            <title>Kernel staat niet op de plaats waar tftp hem verwacht</title>
            <para>
                De kernel moet in een map staan waar de tftp daemon toegang heeft. Indien de 
		optie '-s' wordt meegegeven aan de <command>tftpd</command> daemon
		dan moeten alle bestandspaden die het werkstation noemt relatief zijn ten opzichte van de map
		<filename class="directory">/tftpboot</filename>.
		Dus, als de instelling voor <command>filename</command> in het bestand
		<filename>/etc/dhcpd.conf</filename> ingesteld is op
		<filename>/lts/vmlinuz-2.4.24-ltsp-4</filename>
		, dan moet de kernelnaam zijn: <filename>/tftpboot/lts/vmlinuz-2.4.24-ltsp-4</filename>
            </para>
        </sect2>
    </sect1>

    <sect1>
        <title>Problemen oplossen van het NFS root bestandssysteem</title>
        <para>
            Er zijn verschillende oorzaken waardoor het root bestandssysteem niet geladen kan worden,
	    zoals:
        </para>
        <sect2>
            <title>Geen init gevonden</title>
            <para>
                Als de volgende foutmelding verschijnt:
                <screen>
Kernel panic: No init found.  Try passing init= option to kernel.  </screen>
                wordt waarschijnlijk de foute map als root bestandssysteem opgegeven, of
		de map <filename>/opt/ltsp/i386</filename> is leeg.
            </para>
        </sect2>

        <sect2>
            <title>Server meldt error -13</title>
            <para>
                Als de volgende foutmelding verschijnt:
                <screen>
Root-NFS: Server returned error -13 while mounting /opt/ltsp/i386 </screen>
                betekent dat dat de map
		<filename class="directory">/opt/ltsp/i386</filename>
		niet vermeld staat in het bestand
		<filename>/etc/exports</filename>.
            </para>
            <para>
                Bekijk het bestand <filename>/var/log/messages</filename>
		om te zien of aanwijzingen in staan. Een melding als:
                <screen>
Jul 20 00:28:39 bigdog rpc.mountd: refused mount request from ws004
                  for /opt/ltsp/i386 (/): no export entry </screen>
                bevestigt ons vermoeden dat  de instelling in
		<filename>/etc/exports</filename>
		niet goed is.
            </para>
        </sect2>

        <sect2>
            <title>NFS Daemon problemen (portmap, nfsd &amp; mountd)</title>
            <para>
                Voor het oplossen van problemen kan NFS kan een complexe en 
		moeilijke service zijn. Begrip van wat moet worden ingesteld en welke 
		gereedschappen daarvoor nodig zijn, kan de diagnose aanzienlijk 
		vereenvoudigen.
            </para>
            <para>
                Er zijn drie daemons die op de server moeten draaien wil NFS goed werken:
		 <command>portmap</command>,
                <command>nfsd</command> en <command>mountd</command>.
            </para>
            <sect3>
                <title>De Portmapper (portmap)</title>
                <para>
                    Als de volgende foutmelding verschijnt:
                    <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>
                    wordt dat waarschijnlijk veroorzaakt doordat de
		    <command>portmap</command> daemon niet draait. Controleren
		    of <command>portmap</command> draait kan met het commando
		    <command>ps</command>:
                    <screen>
ps -e | grep portmap </screen>
                    Als de portmapper draait is de uitvoer:
                    <screen>
30455 ?        00:00:00 portmap </screen>
                    Een ander controle is met het commando <command>netstat</command>.
		    De portmapper gebruikt tcp- en udp-poort 111. Probeer:
                    <screen>
netstat -an | grep ":111 " </screen>
                    Dit zou als uitvoer moeten geven:
                    <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>
                    Als de uitvoer hier niet op lijkt dan draait de portmapper niet.
		    De portmapper kan worden opgestart met:
                    <screen>
/etc/rc.d/init.d/portmap   start </screen>
                    Daarna moet er voor worden gezorgd worden dat de portmapper gestart wordt
		    bij het opstarten van de server. Gebruik <command>ntsysv</command>
		    om daarvoor te zorgen dat zo is.
                </para>
            </sect3>

            <sect3>
                <title>De NFS en MOUNT daemons (nfsd &amp; mountd)</title>
                <para>
                    NFS heeft 2 daemons die moeten draaien.
                    <command>nfsd</command> en <command>mountd</command>.
                    Beide worden gestart met het script
                    <filename>/etc/rc.d/init.d/nfs</filename>.
                </para>
                <para>
                    Met het commando <command>ps</command> kan gecontroleerd worden
		    of ze draaien.
                    <screen>
ps -e | grep nfs
ps -e | grep mountd </screen>
                    Als dit aangeeft dat een van de twee of beide niet draaien moeten ze
		    worden opgestart.
                </para>

                <para>
                    Normaal gesproken zou in dat geval het opstartscript moeten worden gedraaid
		    met als argument <command>restart</command>. Echter, om een of andere
		    reden herstart het script <filename>/etc/rc.d/init.d/nfs</filename>
		    niet <command>nfsd</command> op die manier. Alleen 
		    <command>mountd</command> wordt herstart (bug?). Geef daarom 
		    de volgende commando's:
                    <screen>
/etc/rc.d/init.d/nfs  stop
/etc/rc.d/init.d/nfs  start </screen>
                    Eventuele fouten in het commando <command>stop</command> zijn niet erg.
		    Het commando <command>start</command> moet wel 
		    <command>OK</command> als uitvoer terug geven.
                </para>

                <para>
                    Als de daemons draaien maar NFS nog steeds niet werkt, dan moet gecontroleerd worden
		    of zij zich hebben geregistreerd bij portmapper. Dit kan met het comando
		    <command>rpcinfo</command>.
                    <screen>
rpcinfo -p localhost </screen>
                    Zou ongeveer het volgende resultaat moeten opleveren:
		    <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>
                    Dit geeft aan dat <command>nfs</command> (nfsd) en
                    <command>mountd</command> beide draaien en zich hebben geregistreerd bij de
		    portmapper.
                </para>
            </sect3>
        </sect2>
    </sect1>

    <sect1>
        <title>Problemen oplossen met de Xserver</title>
        <para>
            Oh Jee!  Waarschijnlijk is het goed configureren van de X server het moeilijkste
	    onderdeel van het installatie van een LTSP werkstation.
	    Als een tamelijk nieuwe videokaart gebruikt wordt, met een
	    relatief nieuwe monitor die een grote range aan frequenties en resoluties aan kan,
	    dan is het vrij makkelijk.
	    Als het dan niet werkt is de oorzaak meestal een verkeerde X server voor de
	    betreffende kaart.
        </para>
        <para>
            Als een X server niet werkt met een kaart is dat meestal wel duidelijk. De X server
	    start niet of de weergave is niet goed.
        </para>
        <para>
            Als een werkstation de X server gaat opstarten, wordt het script
	    <filename>startx</filename> aangeroepen met de optie
	    <command>-query</command>, wijzend naar een server een
	    displaymanager zoals bv <command>XDM</command>,
            <command>GDM</command> or <command>KDM</command>
	    draait
        </para>

        <para>

        </para>


        <para>

	    De X server wordt opgestart door het script <filename>startx</filename>
	    dat op zijn beurt weer wordt opgestart door het programma
	    <command>init</command>. Als het <filename>startx</filename> script
	    faalt dan start <command>init</command> tot 10 keer toe
	    het script opnieuw op. Uiteindelijk geeft <command>init</command>
	    het op en blijft een foutmelding op het scherm achter.
        </para>

        <para>
            Wachten op een X server die 10 keer niet opstart is behoorlijk irritant.
	    Een manier op dat te voorkomen is door het werkstation in runlevel 3 te starten
	    zodat de X sever niet automatisch gestart wordt. In plaats daar van verschijnt een
	    <command>bash</command> prompt.
	    Vanaf de bash prompt kan de X server worden opgestart met het volgende
	    commando:
            <screen>
sh  /tmp/start_ws </screen>
            De X server zal dan proberen op te starten en als dat niet lukt, terugkeren naar de
	    bash prompt met een leesbare foutmelding.
        </para>
    </sect1>

    <sect1>
        <title>Problemen oplossen met de Displaymanager</title>
        <para>
            De displaymanager is een daemon die op de LTSP-server draait en die wacht tot
	    een X server van een werkstation contact met hem zoekt. Als het contact gelegd is 
	    zet de displaymanager
	    een aanmeldvenster op het scherm waarmee de gebruiker in kan loggen bij
	    de server.
        </para>

        <para>
            De drie meest voorkomende displaymanagers zijn:
            <itemizedlist>
                <listitem>
                    <para>
                        XDM - Is er altijd al geweest. Zit standaard bij het X windowssysteem.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        GDM - De 'Gnome Display Manager'. Onderdeel van het Gnome-pakket.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        KDM - De 'KDE Display Manager'.  Onderdeel can het KDE-pakket
                    </para>
                </listitem>
            </itemizedlist>
            In de meeste GNU/Linux distributies zitten alle drie de displaymanagers.
        </para>

        <sect2>
            <title>Grijs scherm met grote X cursor</title>
            <para>
                Dit betekent dat de X server draait maar dat geen contact gelegd kon worden met
		de displaymanager. Mogelijke oorzaken zijn:
                <orderedlist>
                    <listitem>
                        <para>
                            De displaymanager draait niet
                        </para>
                        <para>
                            Op recente versies van Redhat (7.0 en hoger) wordt de displaymanager gestart
			    vanuit
                            <command>init</command>.  In het bestand
                            <filename>/etc/inittab</filename> staat een regel die er als volgt uit ziet:
                            <screen>
x:5:respawn:/etc/X11/prefdm -nodaemon </screen>
				Het script  <command>prefdm</command> stelt vast
				welke displaymanager gedraaid moet worden.
                        </para>

                        <para>
                            Wat de standaard displaymanager is hangt af van
			    welke pakketten geïnstalleerd zijn. Als Gnome is geïnstalleerd
			    is GDM de standaard displaymanager. Als Gnome niet is geïnstalleerd gaat
			    prefdm kijken of KDE geïnstalleerd is. Is dat het geval dan
			    is KDM de standaard displaymanager. Als KDE ook niet geïnstalleerd is
			    wordt XDM de standaard displaymanager.
                        </para>

                        <para>
			Met het commando <command>netstat</command> kan worden
			gecontroleerd of er een displaymanager draait. Typ op de server
			het volgende commando in:
                            <screen>
netstat -ap | grep xdmcp </screen>
                            Dit zou als resultaat moeten geven dat er een proces luistert
			    op de xdmcp poort (177).
                            <screen>
udp     0   0 *:xdmcp            *:*               1493/gdm </screen>
                            Dit laat duidelijk zien dat <command>gdm</command> draait
			    met een PID van 1493, en luistert op de de xdmcp poort.
                        </para>

                        <para>
                            Als je, zoals hierboven, een regel ziet die aangeeft dat er zeker een
			    displaymanager luistert moet gecontroleerd worden of het 
			    werkstation wel zijn XDMCP verzoek naar de juiste server stuurt.
                        </para>

                        <para>
                            In het bestand <filename>lts.conf</filename> kan met een item worden opgegeven
			    wat het ip-adres is van de server waar de displaymanager draait.
			    Het item hoeft niet aanwezig te zijn maar als het er is moet het er
			    als volgt uit zien:
                            <screen>
XDM_SERVER  =  192.168.0.254 </screen>
                            Uiteraard zal het ip-adres per netwerk verschillen.
                      </para>

                        <para>
                            Als het item 'XDM_SERVER' niet aanwezig is wordt de waarde van
			    'SERVER' gebruikt. Als ook die ontbreekt
			    wordt <command>192.168.0.254</command> gebruikt.
                        </para>

                        <para>
                            Hoe het ook wordt aangegeven, zorg er in ieder geval voor dat het
			    opgegeven ip-adres echt van een server is waarop de displaymanager
			    draait.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
                            De displaymanager is ingesteld om externe verzoeken te negeren.
                        </para>

                        <para>
			    Als vastgesteld is dat de displaymanager draait, kan het zijn dat hij ingesteld is om
			    XDMCP verzoeken van buiten te negeren. Dat kan in de configuratie
			    bestanden van de betreffende displaymanager worden
			    gecontroleerd.
                        </para>

                        <itemizedlist>
                            <listitem>
                                <para><command>XDM</command></para>
                                <para>
				In Redhat wordt standaard de mogelijk voor extern
				aanmelden uitgeschakeld. Het commando <command>ltsp_initialize</command>
				zou dit moeten inschakelen maar als dat niet werkt
				kan het bestand
				<filename>/etc/X11/xdm/xdm-config</filename>
				handmatig worden aangepast. Zoek naar een regel die
				er ongeveer als volgt uit ziet:
                                    <screen>
DisplayManager.requestPort:     0 </screen>
                                    Deze regel MOET uitgekommenteerd (met een kommentaarteken
				    aan het begin van de regel uitgeschakeld) zijn om XDM
				    te laten luisteren op poort 177.
                                </para>
                                <para>
                                    Er is nog een belangrijk configuratiebestand dat nodig is om
				    XDM te laten luisteren naar externe aanmeldingsverzoeken.
				    In het bestand  <filename>/etc/X11/xdm/Xaccess</filename>
				    MOET een regel staan die start met het '*' teken.
				    De regel staat normaal al in het bestand maar Redhat
				    kommenteerd hem uit.
				    Het script <command>ltsp_initialize</command>
				    schakelt de regel weer in maar als XDM toch niet werkt
				    moet dit bestand worden gecontroleerd. Een geldige
				    regel ziet er als volgt uit:
                                    <screen>
*        #any host can get a login window </screen>
                                 .</para>

                            </listitem>

                            <listitem>
                                <para><command>KDM</command></para>
                                <para>
                                    Nieuwe versies van KDM kennen het configuratiebestand
				    <command>kdmrc</command>.
				    Verschillende Linux distributies plaatsen het bestand op verschillende
				    locaties. In redhat 7.2 is de bestandsnaam
				    <command>/etc/kde/kdm/kdmrc</command>.
				    In ander distributies kan met het commando
				    <command>locate</command> het bestand worden getraceerd.
                                </para>
                                <para>
                                    Het gedeelte waar extern aanmelden voor werkstations kan worden ingesteld is
				    de sectie <command>[Xdmcp]</command>.
				    Zorg ervoor dat <command>Enable</command> = <command>true</command>.
                                </para>
                                <para>
                                    Oudere versies van KDM gebruiken de configuratiebestanden van XDM in
				    /etc/X11/xdm.
                                </para>
                            </listitem>

                            <listitem>
                                <para><command>GDM</command></para>
                                <para>
                                    GDM gebruikt een andere groep configuratiebestanden. Ze staan in de
				    map:
                                    <filename
class="directory">/etc/X11/gdm</filename>
                                </para>

                                <para>
                                    Het belangrijkste bestand is
                                    <filename>gdm.conf</filename>. Localiseer de sectie:
                                    <command>[xdmcp]</command>. 
				     Daar staat een instelling met de naam
				     'Enable' die op '1' of 'true' moet staan afhankelijk van de 
				     GDM versie. Hier is een voorbeeld:
                                    <screen>
[xdmcp]
Enable=true
HonorIndirect=0
MaxPending=4
MaxPendingIndirect=4
MaxSessions=16
MaxWait=30
MaxWaitIndirect=30
Port=177 </screen>
                                </para>
                                <para>
                                    Let op de regel 'Enable=true'. Ouder GDM versies 
				    gebruiken '0' of '1' voor Disable en Enable. Nieuwere versies
				    gebruiken 'False' en 'True'.
                                </para>
                            </listitem>
                        </itemizedlist>
                    </listitem>

                    <listitem>
                        <para>
                            Als het zeker is dat de displaymanager draait en luistert
			    naar verzoeken van externe werkstations, kan het ook nog zijn dat
			    de displaymanager eenvoudigweg het ip-adres en de hostnaam
			    niet aan elkaar kan koppelen. Het werkstation moet genoemd worden in
			    het bestand <filename>/etc/hosts</filename>, of de DNS tabellen
			    moeten worden aangepast.
                        </para>
                    </listitem>

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


<chapter>
    <title>Kernels</title>
    <para>
        Ten aanzien van de kernel versie die op een werkstation draait kunnen een aantal
	keuzes gemaakt worden. Er kan gekozen worden tussen de standaard kernels die voor download
	beschikbaar zijn, of voor het zelf compileren van de kernel.
	Bovendien kan gekozen worden voor het weergeven van een grafisch scherm met voortgangsbalk
	tijdens het opstarten door middel van de
	<command>Linux Progress Patch (LPP)</command>.
    </para>

    <sect1>
        <title>Beschikbare standaard LTSP kernels</title>
        <para>
            Het kernel pakket van LTSP bevat twee kernels. Een met, en een zonder
	    'Linux Progress Patch'.
        </para>

        <para>
            Voor beide kernels is de NFS swap patch al toegepast.
        </para>
    </sect1>

    <sect1>
        <title>Zelf een Kernel maken</title>
        <para>
            De LTSP kernel kan op twee manier worden geconfigureerd.
            De standaardmethode is met een zogenaamde 'Initial Ram Disk' (in het kort:
	    <command>initrd</command>), een RAM opstartschijf. Het initrd is een klein
	    bestandssysteem image dat in de kernel ingebouwd wordt. Als de kernel opstart
	    wordt dit bestandssysteem als root bestandssysteem in het RAM geheugen geladen.
	    Er zijn een aantal voordelen aan het gebruik van dit rdinit bestandssysteem. De eerste is dat netwerkdrivers
	    als modules kunnen worden geladen tijdens het opstarten. Hierdoor kan met  een
	    standaard kernel een onbeperkt assortiment aan netwerkkaarten ondersteund worden.
	    Een ander voordeel is dat de dhcp-client als gewone gebruiker ('in user space') in plaats van als root
	    gedraaid kan worden. Hierdoor is er meer controle over de DHCP-instellingen door de server.
	    Bijkomend voordeel is dat kernel iets kleiner wordt.
	    De andere methode waarmee de kernel kan worden geconfigureerd is zonder 
	    <command>initrd</command>.
	    In dat geval moet de specifieke driver voor de netwerkkaart statisch worden meegelinkt
	    in de kernel. Ook moeten de opties 'IP-autoconfig' en
	    'Root filesystem on NFS' worden ingeschakeld voordat de kernel wordt
	    gecompileerd. Het voordeel van het weglaten van initrd is een iets kleinere kernel en
	    een iets versnelde opstartprocedure. Als het werkstation eenmaal draait is er vrijwel geen
	    verschil meer tussen de twee methodes.
        </para>

        <para>
	     De standaard LTSP kernel bevat een Initial Ramdisk (initrd) die zorgt voor het detecteren van de
	     netwerkkaart en voor het uitvoeren van het eerste dhcp-verzoek.
	     Het doel was deze kernel zo klein mogelijk te maken. Daarom werd
	     uClinux gebruikt als bibliotheek voor libc, en werd busybox gekozen voor de
	     hulpprogramma's die voor het opstarten nodig zijn.
        </para>

        <para>
            Voor het zelf maken van kernels kan het pakket 'ltsp-initrd-package' opgehaald worden.
	    Dit pakket bevat de hiërarchie van het root bestandssysteem alsmede een script
	    voor het aanmaken van het image.
        </para>

        <sect2>
            <title>Verkrijgen van de broncode voor de kernel</title>

            <para>
                Als u een aangepaste kernel wilt maken dan is het meestal een goed idee om
		met een 'schone' versie van de broncode van <command>ftp.kernel.org</command>
		te beginnen.
		In de meeste distributies zijn namelijk patches toepast op de broncode die  voor download
		beschikbaar is, waardoor de broncode niet meer exact gelijk is aan de
		officiële distributie.
            </para>

            <para>
                Kies een broncodepakket en bewaar deze in
		de map <filename class="directory">/usr/src</filename>.
		De kernels worden opgeslagen in de map
		<filename class="directory">/pub/linux/kernel</filename> van
		de FTP-server ftp.kernel.org. U moet beslist een kernel uit de recente 2.4.x serie
		nemen in verband met de ondersteuning voor <command>devfs</command>.
            </para>

            <para>
                Als u ook nog ondersteuning voor NFS swap en de Linux Progress Patch (LPP)
		wilt geven moet u er voor zorgen dat de benodigde patches bij de kernel
		broncode passen. Om het moment van dit schrijven is de nieuwste kernel versie die u kunt
		gebruiken versie 2.4.9.
            </para>

            <para>
                Voor dit voorbeeld wordt kernel versie 2.4.9 gebruikt. De volledige padnaam voor
		deze kernel is:
<filename>ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.9.tar.bz2</filename>
            </para>

            <para>
                Plaats de broncode van de kernel in de map
                <filename class="directory">/usr/src</filename>.
		Let op! Als het bestand met untar wordt uitgepakt wordt de broncode in de map
		<filename>linux</filename> geplaatst. Als deze map al bestaat wordt de eventuele
		inhoud overschreven! Hernoem de map voordat het bestand wordt uitgepakt.
            </para>

            <para>
                Het broncodepakket is gecomprimeerd met het commando
		<command>bzip2</command>. Het moet daarom eerst worden ge-
		decomprimeerd voordat het wordt uitgepakt met het commando <command>tar</command>.
		Het de-comprimeren en uitpakken kan met het volgende commando:
                <screen>
bunzip2 &#60;linux-2.4.9.tar.bz2 | tar xf - </screen>
                Na het uitpakken resulteert een map genaamd <filename>linux</filename>.
		Meestal hernoem ik nu de map naar iets met meer betekenis zoals:
                <screen>
mv linux linux-2.4.9 </screen>
                Ga naar de nieuwe map zodra deze hernoemd is:
                <screen>
cd linux-2.4.9 </screen>
            </para>
            <para>
                Meestal verander ik nog wat aan de <filename>Makefile</filename>
		voordat ik verder ga met het configureren van de nieuwe kernel. Aan het begin van
		het bestand staat een variabele genaamd <command>EXTRAVERSION</command>.
		Deze zet ik op  'ltsp-1', zodat het versienummer van de kernel wordt: '2.4.9-ltsp-1'.
		Dit is handig om de kernel later makkelijk te kunnen identificeren.
		Het begin van de Makefile zou er ongeveer als volgt uit moeten zien:
                <screen>
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 9
EXTRAVERSION = -ltsp-1

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

        <sect2>
            <title>Kernel Patches</title>
            <para>
                Na het uitpakken van de kernel is het tijd om de verschillende patches
		toe te passen. Voorbeelden hiervan zijn de NFS swap patch en de
		Linux Progress Patch. Deze Patches MOETEN worden uitgevoerd voordat de kernel verder
		wordt geconfigureerd.
            </para>
            <sect3>
                <title>NFS Swap patch</title>
                <para>
                    De NFS Swap patch maakt het mogelijk dat het werkstation een swap
		    bestand gebruikt dat op een NFS server staat. Ofschoon het aangeraden wordt om
		    een werkstation met voldoende geheugen uit te rusten, zodat een swapbestand helemaal
		    niet nodig is, kan het met name in oudere machines moeilijk zijn
		    het geheugen uit te breiden. Met behulp van een swapbestand op een
		    NFS server kan een anders onbruikbare machine toch nog van dienst zijn.
                </para>
                <para>
                    Als de huidige map gelijk is aan /usr/src/linux-2.4.9, en de patch staat in
		    /usr/src, dan kan de patch met volgende commando worden
		    getest:
                    <screen>
patch -p1 --dry-run &#60;../linux-2.4.9-nfs-swap.diff </screen>
                    Hiermee wordt gekeken of de patch probleemloos
		     kan worden uitgevoerd. Als er geen foutmeldingen zijn kan de patch
		     worden toegepast zonder de optie <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>
                    De Linux Progress Patch maakt het mogelijk een grafisch logo
		    weer te geven tijdens het opstarten van het werkstation. De opstartmeldingen
		    die gewoonlijk over het scherm heen lopen worden naar een
		    ander tty scherm omgeleid. Speciale instructies in het opstartscript
		    zorgen ervoor dat de voortgangsbalk aangeeft hoe ver het opstarten gevorderd is.
		</para>
                <para>
                    Net als de NFS swap patch kan de LPP patch worden getest
		    met het commando:
                    <screen>
patch -p1 --dry-run &#60;../lpp-2.4.9 </screen>
                    Als de test zonder problemen verloopt kan de patch worden
		    toegepast met:
                    <screen>
patch -p1 &#60;../lpp-2.4.9 </screen>
                </para>
            </sect3>
        </sect2>

        <sect2>
            <title>Het configureren van kernel opties</title>
            <para>
                Het configureren van de opties voor een nieuwe kernel kan op verschillende manieren:
                <itemizedlist>
                    <listitem>
                        <para>make xconfig</para>
                        <para>
                            Dit start het X-Windows programma voor het configureren
			    van kernelopties.
			</para>
                    </listitem>
                    <listitem>
                        <para>make menuconfig</para>
                        <para>
                            Dit start het tekstscherm gebaseerde programma
			    voor het configureren van de kernelopties.
                        </para>
                    </listitem>
                    <listitem>
                        <para>make config</para>
                        <para>
                            Dit start het meest eenvoudige programma voor het instellen van kernelopties.
			    De opties worden regel voor regel gepresenteerd.
                        </para>
                    </listitem>
                </itemizedlist>
            </para>

            <sect3>
                <title>Kernel configuratie met initrd</title>
                <para>

                    Voor het configureren van een kernel met initrd moeten de 
		    volgende opties worden ingesteld:
                    <itemizedlist>

                        <listitem>
                            <para>
                                File systems -> /dev filesystem support
                            </para>
                            <para>
                                /dev file system support moet worden ingeschakeld.
				  Dit gebeurt in de sectie 'File systems'.
				  'Autmatically mount at boot' moet NIET worden ingeschakeld!
				  Het aankoppelen van het bestandssysteem wordt verzorgd 
				  door het script /linuxrc.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                Block devices -> RAM disk support
                            </para>
                            <para>
                                De kernel van een werkstation moet het gebruik van een RAM disk
				ondersteunen. Dit kan worden ingeschakeld in de sectie 'Block devices'.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                Block devices -> Initial RAM disk (initrd)
                                support
                            </para>
                            <para>
                            	Dit moet worden ingeschakeld.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                Processor type and features -> Processor family
                            </para>
                            <para>
                                U moet er zeker van zijn dat de nieuwe kernel kan 
				draaien op de CPU van het werkstation. Dit kan worden ingesteld 
				in de sectie 'Processor type and features'.
				Meestal moet ook de ondersteuning voor SMP worden uitgeschakeld,
				tenzij er meerdere CPU's in het werkstation zitten.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                File systems -> Network file systems -> NFS
                                Client support
                            </para>
                            <para>
                                Het werkstation koppelt zijn root bestandssysteem via NFS, dus 'NFS client support'
				moet worden ingeschakeld.
                            </para>
                        </listitem>
                    </itemizedlist>
                    Dit zijn de minimaal benodigde opties. Om de kernel zo klein mogelijk te maken
		    is het raadzaam zoveel mogelijk ongebruikte opties in de kernel uit te schakelen.
                </para>
            </sect3>

            <sect3>
                <title>Kernel configuratie zonder initrd</title>
                <para>
                    De configuratie van een kernel zonder initrd verschilt in een aantal opzichten
		    van de configuratie van een kernel met initrd:
                    <itemizedlist>
                        <listitem>
                            <para>
                                Block devices -> RAM disk support
                            </para>
                            <para>
                                De kernel van een LTSP werkstation moet het gebruik van een RAM disk
				ondersteunen.
                            </para>
                        </listitem>

                        <listitem>
                            <para>
                                Block devices -> Initial RAM disk (initrd)
                                support
                            </para>
                            <para>
                                Dit moet worden uitgeschakeld.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                Networking options -> IP:kernel level
                                autoconfiguration
                            </para>
                            <para>
                                Dit moet worden ingeschakeld.
				Hierdoor zal de kernel automatisch de eth0 interface
				configureren met behulp van parameters die zijn meegegeven
				op de commando regel voor het opstarten van de kernel.
                            </para>
                            <para>
                                Het is niet nodig DHCP, BOOTP of RARP opties op te geven.
				De Etherboot bootrom heeft namelijk al een DHCP, BOOTP of RARP
				verzoek gedaan en de daarmee verkregen IP parameters worden via de commandoregel
				aan de kernel meegegeven. Dit zorgt ervoor dat de kernel niet zelf nog
				op ontdekkingstocht moet.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                Network device support -> Ethernet (10 or
                                100Mbit)
                            </para>
                            <para>
                                Als geen initrd gebruikt wordt moet de netwerkkaart
				statisch worden meegelinkt in de kernel. Dit MOET echt omdat
				de netwerkkaart nodig is voor het root bestandssysteem wordt
				aangekoppeld. Dit is een van de belangrijkste verschillen tussen
				een kernel met en zonder initrd.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                File systems -> /dev filesystem support
                            </para>
                            <para>
                                Vanaf LTSP versie 2.09pre2 is ondersteuning
				voor <command>devfs</command> nodig.
				Dit geldt zowel voor kernels met, als voor kernels zonder initrd.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                File systems -> Automatically mount at boot
                            </para>
                            <para>
                                Als initrd niet wordt gebruikt moet het /dev bestandssysteem
				door de kernel zelf worden aangekoppeld. Zet deze optie daarom op 'Y'.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
                                File systems -> Network file systems -> NFS
                                Client support
                            </para>
                            <para>
                                Het root bestandssysteem wordt door het werkstation via NFS
				aangekoppeld dus moet 'NFS client support' worden ingeschakeld.
                            </para>
                        </listitem>
                    </itemizedlist>
                </para>
            </sect3>
        </sect2>

        <sect2>
            <title>Het compileren van de kernel</title>

            <para>
                Om een en ander te vergemakkelijken is een kopie van het
		bestand <filename>.config</filename> opgenomen in het
		ltsp_initrd_kit pakket. Dit bestand kan worden gekopiëerd naar de map
		<filename>/usr/src/linux-2.4.9</filename>.
            </para>

            <para>
                Wanneer het instellen van de kernel opties klaar is kan worden begonnen
		met compileren. De volgende commando's moeten daarvoor worden uitgevoerd:
                <screen>
make dep
make clean
make bzImage
make modules
make modules_install </screen>
                Deze commando's kunnen ook allemaal in dezelfde regel worden opgegeven:
                <screen>
make dep &amp;&amp; make clean &amp;&amp; make bzImage &amp;&amp; make modules
&amp;&amp; make modules_install </screen>
                Met de dubbele ampersand (&amp;) wordt aangegeven dat het volgende commando alleen 
		wordt uitgevoerd als het voorgaande commando succesvol is afgerond. Het tweede commando 
		wordt dus pas uitgevoerd na het eerste, het derde commando wordt uitgevoerd na het tweede, enz.
              </para>
            <para>
                Als het compileren klaar is de bestandsnaam van de nieuwe kernel
                <filename
class="directory">/usr/src/linux-2.4.9/arch/i386/boot/bzImage</filename>.
            </para>
        </sect2>

        <sect2>
            <title>Het 'merken' van de kernel ten behoeve van Etherboot</title>
            <para>
                Een kernel die door etherboot moet worden gebruikt heeft nog een speciale 
		behandeling nodig. Dit heet het 'merken' (in het Engels 'tagging') van de kernel.
		Hiermee wordt een stukje extra code aan de kernel vastgeplakt die wordt uitgevoerd
		voordat de controle aan de kernel wordt overgedragen.
		Het programma waarmee de kernel kan worden gemerkt heet
		'<command>mknbi-linux</command>'.
              </para>
            <para>
                In het pakket ltsp_initrd_kit is shell script <command>buildk</command>
		opgenomen waar alle commando's in staan die nodig zijn voor het
		prepareren van een kernel ten behoeve van het opstarten van een netwerk.
            </para>
        </sect2>
    </sect1>
</chapter>


<chapter>
    <title>lts.conf items</title>
    <para>
        Toen wij LTSP ontwierpen was een van de dingen waar we rekening
	mee moesten houden de diversiteit in hardware van de werkstations.
	In drie maanden tijd zouden de processor, video- en netwerkkaart
	van de nieuw aan het netwerk toe te voegen werkstations volledig verschillen
	van de eerste werkstations.
    </para>
    <para>
        Daarom ontwierpen we een manier om de configuratie van ieder werkstation
	op te geven. Het configuratiebestand heet
	<filename>lts.conf</filename>, en staat in de map
	<filename class="directory">/opt/ltsp/i386/etc</filename>.
    </para>

    <para>
        De opmaak van lts.conf maakt het mogelijk zowel standaard als
	individuele werkstation instellingen op te geven.
	Als alle werkstations identiek zijn, kan worden volstaan met de
	configuratie-instellingen in de sectie '[Default]'.
    </para>

    <sect1>
        <title>lts.conf voorbeeldbestand</title>
        <para>
            Hier is een voorbeeld van een lts.conf bestand:
            <screen>
[Default]
        SERVER             = 192.168.0.254
        X_MOUSE_PROTOCOL   = "PS/2"
        X_M