Thin Clients Pay More

Thin clients make cost-effective diskless clients for education and the workplace.

before removing the drive from the machine.

Configuring Old Hard Drives

When we first started configuring old hard disks to imitate boot-ROMs, we followed a procedure similar to the one we used for the Flash drive. We had to learn this might mean changing the jumper on the hard disk before connecting it to the machine. (The term jumper refers to a tiny connector located in a set of pins on the side of the hard drive.) It is very easy to change the jumper. Most hard drives have little diagrams on their casing explaining how to set the jumper for the different options. Usually there are three: Master, Slave and Chain Select. Chain Select allows the machine's BIOS to decide what status to assign the hard drive.

Most commonly used PC machines have just one IDE hard drive, which is usually the master drive. Linux identifies that drive as /dev/hda. If the old machine has enough memory and a fast enough CPU, it makes sense to connect a CD-ROM drive with its jumper set to Chain Select or Slave and configure the machine's hard drive directly. However, to save time on installation, we ended up deciding to use a much faster new machine with a newish CD-ROM to configure our old hard drives. That meant simply disconnecting the existing hard disk on the faster machine and connecting our old hard drive with the jumpers set to Master. So once we finish the configuration and we connect it to the motherboard of the diskless client, it will be recognised straight away as the primary master drive.

Whatever method we use to prepare the old hard drive for configuration, we install either Ubuntu's Breezy Badger directly from the CD or else SUSE 10 over our local network. In either case, we do a minimum text-based installation and choose LILO as our bootloader. Once the installation is done, we can edit the /etc/lilo.conf configuration file to add the images exactly as they appear in the lilo.conf file described above for the Flash drive. Finally, we run the line:

# lilo -C /etc/lilo.conf

to update LILO with our new image options.

In relation to the GRUB bootloader, we had an old slow machine already running Linux that we wanted to turn into a client. We found we could get it to boot off a boot-ROM image simply by adding this entry to GRUB's menu.lst file (substituting the name of the appropriate boot-ROM image file):

title Via-Rhine Boot-ROM
    root (hd0,0)
    kernel /boot/via-rhine.zlilo

Before we rebooted, we set the hard drive as the first boot option. In this case, the machine on which we did the configuration has the same kind of network card as a couple of the older machines we want to use as diskless clients, so it was a handy control to make sure the hard drive is doing its job imitating boot-ROM. Once satisfied that everything works, we can transfer the drive we just configured to the machine it will be booting. Alternatively, if we configure an old machine by connecting a CD-ROM drive to it, when done we just disconnect the CD-ROM drive and reboot. We have found this simple configuration procedure also works well on old laptops, so long as they have a built-in CD-ROM and network card.

Configuring the Server for Its Clients

Our system in Esteli now serves nine clients, some that have boot-ROM PXE and the rest with various drives imitating boot-ROM. In the case of the Flash drive we configured to imitate boot-ROM, we just put it in a USB drive on the client machine before starting up. The BIOS needs to be set correctly for each client so that the first boot device corresponds to the relevant disk on that client. To access the BIOS, search the monitor screen when you start the computer.

There should be a line that says something like “Press DEL to enter Set-up”. Whatever the key or combination of keys indicated, this will enable access to the machine's BIOS menus. The configuration of the order of boot devices is usually in the second menu, which should be called something like “Advanced BIOS options”. In that menu, you should find the option to set the first boot device. In the case of the Flash drive, we found that setting the first boot device to USBHDD works fine.

The clients need to get a kernel image from the server. A kernel image is another way of describing the files that make up the operating system software that makes it possible to work with different applications. To get their kernel image, the clients have to provide the network server with their identity and establish a network address. Each client identifies itself by offering the unique code on its network card called the MAC address. In response, the server provides each client with a network address called the IP (Internet Protocol) address.

The clients get this information from the server via a networking standard called the Dynamic Host Configuration Protocol (DHCP). Clients booting with PXE get assigned a dynamic address automatically from a general section of the DHCP configuration file dhcpd.conf. Clients without PXE get a fixed IP address through a specific configuration in dhcpd.conf to ensure they are recognised and can get an appropriate Linux kernel image. We have found older machines like to work with kernel images called vmlinuz rather than bzImage.

In our configuration for each non-PXE client, we told the server's /etc/dhcpd.conf file their Mac address, a fixed-IP address and the kernel image they would like. It may sometimes be necessary to configure the Linux Terminal Server Project (LTSP) package that provides the filesystem architecture for our network. The LTSP lts.conf configuration file can be adjusted when a client is using a mouse or monitor or keyboard layout not recognised automatically by LTSP.

Here is some of our server's dhcpd.conf file:

ddns-update-style ad-hoc;
allow booting;
allow bootp;
subnet netmask {
range dynamic-bootp;
default-lease-time 21600;
max-lease-time 43200;
filename "pxelinux.0";
option root-path "";

host ws001 {
hardware ethernet    00:11:5B:86:46:B5;
filename             "/lts/vmlinuz-2.6.9-ltsp-3";

host ws002 {
hardware ethernet    00:60:08:C6:2B:43;
filename             "/lts/vmlinuz-2.6.9-ltsp-3";

And here is the main part of our server's LTSP lts.conf file:

        SERVER             =
        XSERVER            = auto
        X_MOUSE_PROTOCOL   = "PS/2"
        X_MOUSE_DEVICE     = "/dev/psaux"
        X_MOUSE_RESOLUTION = 400
        X_MOUSE_BUTTONS    = 3
        XkbLayout          = es
        USE_XFS            = N
        SCREEN_01          = startx

LTSP's package permits a wide range of sophisticated configuration options for multimedia and other applications run off individual client workstations that can be configured in lts.conf similarly to individual workstations in dhcpd.conf. We keep our system simple because we are working mainly with Internet and office applications. In our case, LTSP's default configuration recognised all our various clients' hardware except the keyboard layout, so we added a line configuring a Spanish keyboard.

This technology is incredibly accessible and flexible. For us in Nicaragua, it enables us to offer computer skills training to a large number students on low incomes using old equipment to deliver the latest software. The widely available tools and information mean that even relative beginners in Linux can readily implement such diskless client systems for a broad range of educational, commercial and administrative purposes. Rarely can a bottom line show such a large beneficial return for so modest an investment of resources.

Resources for this article: /article/8699.

Stephen Sefton is an Irish citizen who has worked for nearly 20 years as a community development worker in Central America on a broad range of community concerns including housing, human rights, health care, education and sustainable agriculture. On visits home to Wexford, he watches the progressive embayment of Rosslare Strand with his uncle Christy and wonders how long before the family home slides down the cliff into the sea. He remembers happy walks around the southern shore of Lake Nicaragua and the beach at Curraghcloe.