Getting DOS + Linux Running on LTSP thin clients under Mandrake 7.0 (Air)

Philip A. Roa

Intelisoft Microcomputer Systems

Phil@Intelisoft-phils.com

v1.1 2002/01/08

Shows how to run DOS or Linux on LTSP thin clients from a Mandrake 7.0 (Air) base distribution.


Table of Contents
1. Revision History
2. About this document
Introduction
Copyright and Disclaimer
3. Acknowledgments
4. First things
5. Needed Software Tools
Trivial FTP (tftp)
DHCP Daemon
LTSP Package
DOS Utilities in Unix
The mknbi package of Etherboot
6. Configuring the Server
Telling LTSP to run on Mandrake 7.0 (Air)
Configuring LTSP for the first time
Installing the rest of the LTSP package
7. Configuring our LTSP Thin Client
Getting Etherboot ROMs for our thin clients
Checking out our new Etherboot ROM diskette
8. Setting up our boot configuration
Setting up DOS
Setting up Linux
9. Preparing to boot DOS+Linux configurations Remotely via DHCP
Preparing DOS for DHCP
Preparing Linux for DHCP
Configuring our DHCP deamon
Taking care of other configuration options
List of Examples
8-1. Sample CONFIG.SYS file
8-2. Sample AUTOEXEC.BAT file
9-1. Sample mkdostag script
9-2. Sample /opt/ltsp/i386/etc/lts.conf

Chapter 1. Revision History

    01/08/2002, v1.1 - mknbi: Ken Yap , added RPM installation notes. 
                       Corrected typos.   
    12/27/2001, v1.0 - Initial Submission to LTSP
    

Chapter 2. About this document

Introduction

This document describes booting DOS (to access legacy apps for example, off a Novell server etc.) and Linux via Remote thin clients using LTSP package under Mandrake 7.0 (Air) . The selection of which particular OS image to use is done by the user at boot time via Etherboot. The KDE desktop was selected to run X-Windows application for this particular setup.

This document does not intend to describe a more general approach to booting several OS but hopes to document a specific ready-to-use solution. It also aims to give the reader some hints or leads necessary in building his own specific installation especially if his Linux version is not currently supported by LTSP's install scripts.

I'm a newbee to this so expect a newbee orientation to things ;-) .


Copyright and Disclaimer

This document is provided as is and free for use and distribution in whole or in part and is intended to supplement LTSP documentation.

All translations, derivative works, or aggregate works incorporating any this document must be covered under this copyright notice. That is, you may not produce a derivative work and impose additional restrictions on its distribution.

This document should not be placed, hosted, published or archived in sites that charge, bill or toll its clients in exchange for information access which may curtail this document's open access policy.

The author and contributors of this document have, to the best of their abilities, made information contained herein relevant and correct. But, they too are human and commit mistakes. You're on your own whenever you follow instructions and information given here.

Damage to your computer system and or losses, damages incurred from the use of information in this document is hereby waived by the authors, contributors. Nobody is responsible of the damages but you. If you do not feel comfortable taking responsibility for your own actions, you should hire a qualified professional to do the installation tasks for you.

This document is here so it can help you freely, without restrictions and will be available with as many channels as possible. However, the authors wish to retain copyright of this document and would like to be notified of any plans to redistribute it.

This disclaimer is more to protect the authors and contributors rather than curtailing its open access. Suggestions, corrections are welcome.


Chapter 3. Acknowledgments

Thanks to the generous people at the LTSP and Etherboot discussions most especially to the 'big guys' (read: big hearts) who helped me out of my otherwise hopeless 'dead ends'; Jim McQuillan at LTSP and Ken Yap at Etherboot.

And to my wife Marie Jo, who was very patient with me especially at times when my constant 'banging' of the keys extended up to the wee hours of the morning.


Chapter 4. First things

You need 2 sets of computers to do the things described here. The first computer will be used as your LTSP server and the other one will act as the thin client. For testing your setup, your server machine should have at least the following:

Your thin client on the other hand must have at least a floppy drive (which you can later replace with a ROM on your LAN card once you are satisfied with the Etherboot image on your floppy).


Chapter 5. Needed Software Tools

Install Mandrake 7.0 (Air) on your server machine. Unfortunately, Mandrake 7.0 (Air) is currently *not* officially supported by LTSP. However, one can make LTSP to work for this distribution by modifying some LTSP installation scripts as will be shown later.

LTSP needs tftp and dhcp programs to work. These apps are usually found in the first CD of the Mandrake 7.0 (Air) distribution. You can install them anytime using kpackage from the utilities menu if you are using KDE.


Trivial FTP (tftp)

Tftp is *not* normally installed as part of your Linux system. The LTSP package need tftp to work. The installation RPM in the Mandrake 7.0 (Air) is tftp-0.15-1mdk.i586.rpm. You can find it in the first installation CD.

In Mandrake 7.0 (Air), tftp is disabled (for security reasons). To make this service available, edit the INETD TCP/IP super server configuration file /etc/inetd.conf. Look for the section that says

#
# Tftp service is provided primarily for booting.  Most sites
# run this only on machines acting as "boot servers." Do not uncomment
# this unless you *need* it.  
#
#tftp	dgram	udp	wait	root	/usr/sbin/tcpd	in.tftpd
#bootps	dgram	udp	wait	root	/usr/sbin/tcpd	bootpd
#

Uncomment the 'tftp' line, save the configuration file and re-run INETD server to accomodate the changes by typing command shown below on the shell prompt. If you forget to do this, the LTSP installation scripts (specifically ltsp_initialize->inetd.tmpl) will handle the 'uncommenting' for you ;-). We have done this manually here for illustration purposes.

After editing /etc/inetd.conf, reload the configuration file by issuing the following

  
[Bash]# /etc/rc.d/init.d/inet restart

DHCP Daemon

Install dchp on your server machine by extracting its RPM package (also from the first CD of the Mandrake 7.0 (Air) distribution). The RPM file is dhcp-3.0b1pl12-2mdk.i586.rpm. You can use kpackage from the 'tools' menu of KDE to install it.

Register dhcp so it will run the next time you restart your server. To do this, make sure that the command:

   [Bash]# chkconfig --list |grep "dhcpd"

shows the following output:

   dhcpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

If not, type the following on the shell prompt:

  
   [Bash]# chkconfig --level 016 dhcpd off
   [Bash]# chkconfig --level 2345 dhcpd on

At present, dhcp still won't launch because our /etc/dhcpd.conf hasn't been created yet. We will get back to this later when we are ready to configure our server for dhcp services.


LTSP Package

Get the latest LTSP package from http://www.LTSP.org. The package consists of 4 parts; the core, kernel, x-core, and x-fonts. Extract them as *root* and place them in a convenient directory (I installed it in /root). For example, to extract the core package, type:

  
[Bash]# tar -xzvf ltsp_core-3.0.0-i386

Apply the same 'tar' command to the rest of the LTSP package.

ltsp_kernel-3.0.1-i386
ltsp_x_core-3.0.0-i386
ltsp_x_fonts-3.0.0-i386

DOS Utilities in Unix

Install the mtools package from the first CD of Mandrake 7.0 (Air) . This is the mtools-3.9.6-3mdk.i586.rpm archive. We will be using this package to configure our DOS boot image for our thin clients later on.


The mknbi package of Etherboot

Download the latest mknbi tar ball from http://etherboot.sourceforge.net. mknbi-1.2.tar.gz is already available as of this writing. We will be using this package to make a tagged boot images for DOS (and Linux if needed).

Build this package on a directory of your choice by typing

  
[Bash]# tar -xzvf mknbi-1.2.tar.gz

Then, proceed (cd) to ../mknbi-1.2 directory. Compile and install package...

  
[Bash]# make
[Bash]# make install

I have also tried installing the currently available RPM version of mknbi, mknbi-1.2-6.noarch.rpm without any problems. However, please note that RPM packages are version dependent. Some newer packages cannot be extracted by older versions of RPM. There is no guarantee therefore that future releases of mknbi can be extracted by Mandrake 7.0 (Air) (which uses an old version of RPM ,version 3.0.3).

For the moment, you can install mknbi via kpackage (if you are using KDE), or by doing the following...

  
[Bash]# rpm -Uhv mknbi-1.2-6.noarch.rpm

On the side tip: To be able to extract 'newly built' RPM packages you may have to upgrade to a higher version of RPM together with its dependencies (get a higher version also of kpackage if you want to use it with RPM) or better still, upgrade to a higher version of Mandrake so you won't need to worry about dependencies and kpackage compatiblity issues ;-) .

Congratulations! You have just installed the necessary software tooks for our LTSP server.


Chapter 6. Configuring the Server

We shall now configure our LTSP server.


Telling LTSP to run on Mandrake 7.0 (Air)

One of the issues that LTSP settles in order that a linux distribution will be supported is in the way the distro arranges its directory structure. To make LTSP run on our Mandrake 7.0 (Air), we need to setup a couple of things.

Proceed (cd) to the directory named ltsp_core. This is where all the files in ltsp_core-3.0.0-i386 were extracted to. Try running LTSP's install.sh script...

  
[Bash]# sh install.sh

You will get the following response from the script:

  
Sorry, but Mandrake version 7.0 not supported :-(

Don't give up just yet. There is a solution. We now tell the LTSP install script to add support to our distribution. To do this, copy mandrake.sh to a file named mandrake-7.0.sh. This will become our new customized support script for Mandrake 7.0 (Air) . We then edit our new support script to fix the directory structure where most of our startup scripts reside (this is defined by the SOURCE variable). To do this, open mandrake-7.0.sh with your favorite text editor, search / edit the following lines:

In the syslog startup section of the script change the line...

SOURCE=/etc/init.d/syslog  --> SOURCE=/etc/rc.d/init.d/syslog

Next, in the portmapper section, change the line that says...

SOURCE=/etc/rc5.d/S11portmap --> SOURCE=/etc/rc.d/rc5.d/S11portmap

Lastly, in the nfs section, replace the line:

SOURCE=/etc/rc5.d/S60nfs --> SOURCE=/etc/rc.d/rc5.d/S60nfs

That is all there is to it. As you might have noticed, we have appended /rc.d to our SOURCE paths. We're very lucky if the people who make the LTSP package are kind enough to include these changes in their next mandrake.sh release. In the meantime, we have to contend with our customized Mandrake 7.0 (Air) script.


Configuring LTSP for the first time

Before you hit that

sh install.sh
command, we have to tie some loose ends. Doing these now will save us a lot of editing and debugging work later. You will have to decide some 'network stuff' for your setup first. Check the file ../ltsp_core/CONFIG and supply the necessary information relevant to your setup. An example configuration is shown below.

                  :
                  :
#
#-------------------------------------
# Network stuff...
#-------------------------------------
#
IP_NETWORK_BASE=192.168.0
IP_NETWORK=${IP_NETWORK_BASE}.0
IP_SERVER=${IP_NETWORK_BASE}.1
IP_BROADCAST=192.168.255.255
IP_NETMASK=255.255.0.0
                 :
                 :

IP_SERVER is our LTSP server's IP address. We are now ready to run install.sh. On the shell prompt type:

  
[Bash]# sh install.sh

You will then be presented with the following screen (thanks to our customized script).

Good! We have found Mandrake version 7.0
 
About to install LTSP, using the following settings:
 
  LTSP_DIR     = /opt/ltsp
  SWAP_DIR     = /var/opt/ltsp/swapfiles
  TFTP_DIR     = /tftpboot
  IP_NETWORK   = 192.168.0.0
  IP_SERVER    = 192.168.0.1
  IP_NETMASK   = 255.255.0.0
  IP_BROADCAST = 192.168.255.255
 
If you want to install LTSP using the above settings,
enter 'Y' and the installation will proceed.  Any other
response will abort the installation, and you can modify
the CONFIG file and restart the installation.
 
Continue with installation (y/n)?                    

Verify that the information you have entered have been reflected correctly here (especially on the 'network stuff'). If everything is Ok, respond with a 'y'. The following screen appears to confirm the completion of the LTSP configuration.

Take a look in /tmp/ltsp.install.log for a complete log of the installation
 
You now need to change to the /opt/ltsp/templates directory and
run the ltsp_initialize script to complete the installation         

Follow the instructions presented and (cd) to /opt/ltsp/templates. On the shell prompt launch the ltsp_initialize perl script by typing:

  
[Bash]# ./ltsp_initialize

Confirm to initialize by pressing the 'Enter' key. Congratulations! You have just installed the LTSP's core package.


Installing the rest of the LTSP package

The installation of the kernel, x_core, and x_fonts portions of the LTSP package is fairly straighforward. Simply proceed to the directory where the files were expanded (namely: ltsp_kernel, ltsp_x_core, and ltsp_x_fonts. Within each of these directories type the install scripts as follows:

  
[Bash]# sh install.sh

Congratulations! The installation of the LTSP package is now complete!


Chapter 7. Configuring our LTSP Thin Client

Our clients will need to run a particular OS upon boot time. To do this, a special program is needed to 'interactively' fetch an image of the desired OS from our LTSP server. For our setup, we have decided to use Etherboot. Initially, we will put the Etherboot loader on a floppy disk. Once we are satisfied with it we can decide to 'burn' the code in our LAN card's BOOTROM. Placing Etherboot in EEPROM is beyond the scope of this document. However, much is gained if you consult the Etherboot docs.


Getting Etherboot ROMs for our thin clients

The Etherboot loader image can be aquired without the need to get the Etherboot package. ROM images can be downloaded directly from Marty Connor's http://rom-o-matic.net. Before going to the site to retrieve your image, you will first have to know the particular LAN card you are using. If your card is not listed, look at the chip markings within the card. Chances are, you will find a match with the ones that are already available. Some LAN card manufacturers use compatible chip set configurations.

For our test setup, we need an Etherboot image that will be placed on a floppy disk and will be able communicate interactively with our users so a particular OS can be selected for booting (vendor tags). This particular type of image can readily be downloaded from http://rom-o-matic.net without the need to compile.

After downloading the image, transfer it to a floppy disk (that is free from errors). It is suggested that your format your disks first just to make sure they have no bad sectors. To transfer the image to your floppy (in the first floppy drive or A:) type

  
[Bash]# cat {your_etherboot_ROM_image} > /dev/fd0

Substitute {your_etherboot_ROM_image} above with your downloaded ROM image name

However, If you want to compile your own images and want to explore Etherboot, you have to download the whole Etherboot package from http://etherboot.sourceforge.net. This is especially important if you need to set special options to your images to customize it. Please consult the excellent Etherboot documentations for more details.


Checking out our new Etherboot ROM diskette

Before you boot that diskette please make sure that your LAN card has been installed correctly in your thin client machine. If all is ok, boot the diskette. In a few seconds you should get a similar screen as shown below

ROM segment 0x0800 length 0x4000 reloc 0x9400
Etherboot 5.0.4 (GPL) Tagged ELF for [DAVICOM]
Boot from (N)etwork or from (L)ocal? N
Found Davicom 9102 at 0XE800, ROM address 0X0000
Probing...[DAVICOM]Davicom 00:80:AD:71:08:93 at ioaddr 0XE800
Searching for server (DHCP)
.................................

The screen output shows a successful 'probing' of a LAN card with a Davicom 9102 chipset. It also shows the physical (MAC) address of the card (00:80:AD:71:08:93). We will be using this address later on when we configure our DHCP server. If you do not get this address (and the name of the card) your Etherboot image is probalby not working with the card. Get additional information from your LAN card's documentation or markings from its chipsets and aquire another image.

Keep your Etherboot disk in a safe place. We will be needing it later to get our DOS and Linux images from our LTSP server.


Chapter 8. Setting up our boot configuration

Let us first configure and prototype our DOS and Linux systems before shipping them out to our thin clients. Doing this now will ease our remote boot implementation later on. Prototyping will also assure us that the OS we are deploying via our LTSP server have been tried and tested. Solving problems later on will be easier.

You may safely skip this section later on when you begin to 'clone' you images for your other thin clients. However, it is suggested that you do this step if you are installing you first client machine.


Setting up DOS

Preparing our DOS boot configuration can be done by buiding a bootable DOS floppy disk with all the necessary drivers and programs required by our client to access the servers. As a simple illustration, let us make a bootable DOS 5.0 disk so our client will be able to access legacy programs from our Novell 3.12 Server.

Format a bootable floppy disk from your DOS 5.0 machine (assuming your diskette is in A:).

  
C:> format a: /s

Copy all the necessary programs to it. As for our setup, we need the following

  
HIMEM.SYS    --> so we can run DOS in high memory
MEM.EXE      --> we will use this to check if our programs were loaded correctly
NETX.EXE     --> Novell workstation shell
DM9PCIPD.COM --> Packet driver for the Davicom 9102 LAN card
PDIPX.COM    --> IPX/SPX packet driver

We create our config.sys file using your favorite DOS text file editor. We want to load DOS here in high memory using HIMEM.SYS. We also allocate more space for our environment variables.

Example 8-1. Sample CONFIG.SYS file

files=40
buffers=30
device=himem.sys
dos=high
SHELL=a:\command.com  /p /e:3000

We now create our autoexec.bat to automate our DOS booting.

Example 8-2. Sample AUTOEXEC.BAT file

@echo off

echo loading LAN packet driver....
dm9pcipd 0x60

echo loading SPX/IPX support...
pdipx

echo Connecting to our Novell server...
netx

We now copy both config.sys and autoexec.bat files to our boot floppy.

You can now test your DOS boot process and make the necessary adjustments here. Make sure everything is working fine because we will be using this DOS boot disk as a reference DOS image in booting our thin clients later.


Setting up Linux

One of the difficulties I have encountered in setting up Linux clients is configuring X-Windows. If you intend to use a shell prompt on your workstations, you can safely skip this section and proceed to the next chapter on DHCP booting.

To make our X configuration easier, we will install a linux box using Mandrake 7.0 (Air) on our client machine. We will be needing here an extra hard disk which you can safely format and use for this purpose.

Configure X on the client with the desired resolution using its existing video card. Configure also the keyboard and the pointing device. Once finished, set the client machine aside (with the hard disk still attached). We will be using it later on to configure our server.

Congratulations! you have just completed setting up your client machine to boot DOS and Linux.


Chapter 9. Preparing to boot DOS+Linux configurations Remotely via DHCP

With our DOS and Linux boot configurations ready, we will now setup our LTSP server to deliver these images on-demand to our thin clients.


Preparing DOS for DHCP

We will now prepare our DOS boot disk for use by the LTSP server. The first thing to do is to setup a DOS drive in Linux that is mapped to a file. We will be using mtools to achieve this. To make things easier for us let us call our mapped drive 'x:'. Inform mtools that we wish to map drive x: to a file by editing /etc/mtools.conf. A snippet of this file is shown below:

   # Example mtools.conf files.  Uncomment the lines which correspond to
   # your architecture and comment out the "SAMPLE FILE" line below
 
   # map drive to a file
   # drive x: file="/tmp/floppyimage"                      (1)
 
   # # Linux floppy drives
   # drive a: file="/dev/fd0" exclusive
   # drive b: file="/dev/fd1" exclusive      
                :
                :
(1)
Uncomment this line so we will be able to map our drive x: to /tmp/floppyimage

Next, we create a directory to conveniently house our DOS boot files. For purposes of illustration we will call this folder /root/dos50boot. Go (cd) to this directory and insert our DOS boot disk in /dev/fd0

We now extract the boot sector from our disk and place it in a file we will call bootblock...

  
[Bash]# dd if=/dev/fd0 of=bootblock bs=512 count=1

We also need to get the DOS kernel files from our DOS boot disk....

  
[Bash]# mcopy a:io.sys
[Bash]# mcopy a:msdos.sys

io.sys - msdos.sys are the kernel files for DOS 5.0 which we are using here for illustration. Other DOS versions may use other names (like ibmbio.com, - ibmdos.com etc.)

We are now ready to format our drive x:. Do this now....

  
[Bash]# >mformat -C -t 80 -n 18 -h 2 -B bootblock x:

Since we are planning to make a DOS image file here we will use the -C switch. Please refer to the manual pages of mformat for a detailed description of its usage.

We copy our DOS kernel files to x:...

  
[Bash]# mcopy io.sys x:IO.SYS
[Bash]# mcopy msdos.sys x:MSDOS.SYS

Hint: Note the all-caps filespecs used in the destination. You will have to do this because our DOS' bootblock expects all-caps kernel filenames otherwise it will not be able to find it. ;-)

Copy the remaining files in the DOS boot disk to x:. Please preserve the case (especially to the DOS native files) as in our illustration below...

  
[Bash]# mcopy a:COMMAND.COM x:
[Bash]# mcopy a:HIMEM.SYS x:
[Bash]# mcopy a:CONFIG.SYS x:
[Bash]# mcopy a:MEM.EXE x:
[Bash]# mcopy a:AUTOEXEC.BAT x:
[Bash]# mcopy a:netx.exe x:
[Bash]# mcopy a:pdipx.com x:
[Bash]# mcopy a:dm9pcipd.com x:

We are now ready to make a tagged DOS image from x: for our LTSP server...

  
[Bash]# mknbi-dos /tmp/floppyimage > dos50-Thin.1.nb

and make it available to our LTSP server...

  
[Bash]# cp dos50-Thin.01.nb /tftpboot/lts/.

To make it convenient for you to make DOS tagged images, I have made a sample script mkdostag below. Modify to suite your needs so it can create tagged images for all of your thin clients.

Example 9-1. Sample mkdostag script

  mformat -C -t 80 -n 18 -h 2 -B bootblock x:

  mcopy a:IO.SYS x:
  mcopy a:MSDOS.SYS x:
  mcopy a:COMMAND.COM x:
  mcopy a:HIMEM.SYS x:
  mcopy a:CONFIG.SYS x:
  mcopy a:MEM.EXE x:
  mcopy a:AUTOEXEC.BAT x:
  mcopy a:pdipx.com x:
  mcopy a:dm9pcipd.com x:
  mcopy a:netx.exe a:

  #-this is not necessary but will
  # make our bootimage look like a DOS boot disk

  mattrib +h +s x:IO.SYS
  mattrib +h +s x:MSDOS.SYS

  # we now create a tagged image and
  # make it available so tftp will find it

  mknbi-dos /tmp/floppyimage > /tftp/lts/dos50-Thin.1.nb

Preparing Linux for DHCP

There is already a tagged image of a Linux kernel available in the LTSP package. Unless you really have to make your own customized kernel, you would be better of with the ones supplied by LTSP. These kernels have been carefully (and skillfully) been optimized to run in an LTSP environment. You may not need to compile your own.

For our purposes, we will be using the tagged image /tftpboot/lts/vmlinuz-2.4.9-ltsp-5. Please refer to LTSP docs especially ../ltsp_kernel/README for specific issues regarding your version of the ltsp_kernel package.


Configuring our DHCP deamon

With our DOS and Linux images 'tagged and ready', we will now configure our DHCP server to 'interactively' deliver these boot image to a particular thin client. To give our task an easy start, we first get a copy of /etc/dhcpd.conf.example to /etc/dhcpd.conf. We then edit /etc/dhcpd.conf as follows:

If you have followed our procedure correctly in Configuring LTSP for the first time you can safely include the lines shown below. Otherwise you may need to modify it based on information on your 'network stuff'. The /etc/dhcpd.conf shown as illustration reflects an IP address of 192.168.0.1 for our DHCP server, our netmask of 255.255.0.0 and broadcast address 192.168.255.255 . Please comment the rest of the lines up to the end of the file using '#' as line prefix.

# Sample configuration file for ISCD dhcpd
#
# Don't forget to set run_dhcpd=1 in /etc/rc.d/init.d/dhcpd
# once you adjusted this file and copied it to /etc/dhcpd.conf.
#

default-lease-time            21600;
max-lease-time                21600;

option subnet-mask            255.255.0.0;
option broadcast-address      192.168.255.255;
option routers                192.168.0.1;
option domain-name-servers    192.168.0.1;
option domain-name            "ims.com";
option root-path              "192.168.0.1:/opt/ltsp/i386";

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

And now, for the fun part. We will first make entries common to all of our thin clients. Please refer to the comments for further explanation.

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

    #-- Magic number to enable vendor tags usage
    #   pls see vendortags.html of the Etherboot manual for
    #   more info
    option option-128 e4:45:74:68:00:00;

    #-- This is our motd (message of the day)
    #   vendor tags option 184 thru 191
    option option-184 "************************************";
    option option-185 "*           Hello from the         *";
    option option-186 "*   Linux Terminal Server Project  *";
    option option-187 "*                                  *";
    option option-189 "************************************";

    #-- Interactive section
    
    # Time to wait for user input. On time-out defaults
    # to option 193 in the image selection section (i.e Linux)
    # If no default is specified selection defaults to the
    # lowest numbered option (i.e. option 193)
    option option-160 "timeout=15:default=193";

    #-- Image selection section
    option option-192 "DOS:::/tftpboot/lts/dos50-Thin.1.nb";
    option option-193 "Linux (Default):::/tftpboot/lts/vmlinuz-2.4.9-ltsp-5";

We will now identify our first thin client host as 'Thin001' and make specific configuration for it.

    host Thin001 {
        hardware ethernet     00:80:AD:71:08:93;
        fixed-address         192.168.2.3;

        # Continuation of our motd...
	option option-188  "*     W e l c o m e Thin001 !!     *";
	}
    }

The entry hardware ethernet pertains to the MAC address of our LAN card which we got earlier when we tested our Etherboot diskette in Checking out our new Etherboot ROM diskette. And, the entry fixed-address is the IP address we want to assign to our thin client, 'Thin001'.

Congratulations ! You have just completed the DHCP daemon configuration settings. Restart your DHCP daemon to reflect the new changes we have specified...

  
[Bash]# >/etc/rc.d/init.d/dhcpd restart

Make sure that no errors are reported in your console. Now, go to your 'Thin001' remote client and boot it up using our test Etherboot diskette. Follow prompts presented. Test booting your DOS and Linux images. If your thin client did not boot successfully, do not despair. You may need to tweak the LTS config file. Read on.


Taking care of other configuration options

Perhaps the place where you will encounter the most problems is the setting up of your X client. If your client did not make it to booting up X windows, it is more likely that its display, pointing device, and resolution settings was not met in the defaults section of the LTS configuration file. To take out most of the guess work, we have previously installed a test Linux implementation in Setting up Linux. We will be using the X windows information contained here and reflect it in our LTS configuration. In the meantime, check out the [Default] section of the LTS configuration file /opt/ltsp/i386/etc/lts.conf, make sure that the SERVER option has the same IP as our LTSP server. Leave XSERVER, X_MOUSE_PROTOCOL, X_MOUSE_DEVICE, X_MOUSE_PROTOCOL, X_MOUSE_DEVICE, X_MOUSE_RESOLUTION X_MOUSE_BUTTONS3 to its default values. Comment-out the rest of the lines in this configuration file. We will be making a new section specifically for 'Thin001'.

To do this we must first, remove the Etherboot disk in the 'Thin001' client and boot from our test linux hard disk we have prevously built for this workstation in Setting up Linux. Open a terminal session and view the file /etc/X11/XF86Config. Go to the pointer section. A sample is shown below...

     :
     :
# **********************************************************************
# Pointer section
# **********************************************************************

Section "Pointer"
    Protocol    "Microsoft"
    Device      "/dev/ttyS0"

# 'Protocol' is synonimous to X_MOUSE_PROTOCOL
# 'Device' is synonimous to X_MOUSE_DEVICE
     :
     :

Take note of the Protocol and Device names. They correspond to the X_MOUSE_PROTOCOL and X_MOUSE_DEVICE respectively in your server's /opt/ltsp/i386/etc/lts.conf file. If they are different from your [Default]s then make specific declaration in your /opt/ltsp/i386/etc/lts.conf file.

Next, we set our X_MODE_0 parameter. Gather the information regarding your monitor's horizontal and vertical sync frequencies. If you can't find your monitor's user's manual there is an excellent site to get such info is in http://www.monitorworld.com (thanks to Alex Levit who tipped us of this site) try to find if your monitor is listed there. Going back to the /etc/X11/XF86Config in our 'Thin001' client, look for the 'Monitor section'. A sample is shown below:

            :
	    :
# **********************************************************************
# Monitor section
# **********************************************************************

# Any number of monitor sections may be present

Section "Monitor"
    Identifier ""
    VendorName ""
    ModelName  ""
            :
	    :
# This is a set of standard mode timings. Modes that are out of monitor spec
# are automatically deleted by the server (provided the HorizSync and
# VertRefresh lines are correct), so there's no immediate need to
# delete mode timings (unless particular mode timings don't work on your
# monitor). With these modes, the best standard mode that your monitor
# and video card can support for a given resolution is automatically
# used.
           :
	   :
# 640x400 @ 85 Hz, 37.86 kHz hsync
Modeline "640x400"     31.5   640  672 736   832   400  401  404  445 -HSync +VSync
# 640x480 @ 72 Hz, 36.5 kHz hsync
Modeline "640x480"     31.5   640  680  720  864   480  488  491  521
# 640x480 @ 75 Hz, 37.50 kHz hsync
ModeLine  "640x480"    31.5   640  656  720  840   480  481  484  500 -HSync -VSync
# 800x600 @ 60 Hz, 37.8 kHz hsync
Modeline "800x600"     40     800  840  968 1056   600  601  605  628 +hsync +vsync
           :
	   :

Look for the ModeLine entry that closely matches the monitor of 'Thin011'. In my case, I needed an 800x600, @ 60 Hz vsync, 37.8 kHz hsync. Do a 'cut-and-paste' of it to your server's /opt/ltsp/i386/etc/lts.conf. Remove the ModeLine and the quotes surrounding the string after ModeLine option.

Finally, your server's /opt/ltsp/i386/etc/lts.conf file should already look as follows:

Example 9-2. Sample /opt/ltsp/i386/etc/lts.conf

#
# Config file for the Linux Terminal Server Project (www.ltsp.org)
#

[Default]
        SERVER             = 192.168.0.1
        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

#------------------------------------------------------------------------------
#
# Example of specifying X settings for a workstation

[Thin001]
	X_MODE_0 = 800x600  40 800 840 968 1056 600 601 605 628 +hsync +vsync

	X_MOUSE_PROTOCOL   = "Microsoft"
	X_MOUSE_DEVICE     = "/dev/ttyS0"

               :
               :
# Rest of your specific workstation configs are placed here.

This is just a 'crash' setup just to keep you up and running in no time. But, it is recommended that you read /opt/ltsp/i386/etc/lts.conf.readme from our LTSP server to understand fully the rich features and options that you can do with this configuration file ;-). Some important options are: RUNLEVEL, which specifies whether your thin client should be in shell (3), telnet (4), or X window (5) mode. Good for diagnostics; X_MODE_0 through X_MODE_2 as stated in the docs: "This is how you can specify either the screen resolution or a complete modeline for the workstation"; XSERVER, "This defines which X server the workstation will run. Normally, you can leave ommit this field and the Video card will be Automatically detected."

Boot your 'Thin001' again. If you don't succeeed, continue to read on the LTSP docs, there are a wealth of information there. If all things fail, there is a discussion group for LTSP users at www.LTSP.org. Before submitting a problem, make sure to gather important information pertinent to your setup that is relevant to what you are looking for.