Thin clients setup at home for kids

It’s been a long time since I wanted to move to a thin client infrastructure at home.
Up to now, kids are using some very old laptops, with a minimal Linux distribution. I setup a central Edubuntu server (on a Virtual Machine), with their accounts, and the kids laptops are using remote X (through NX/FreeNX for better reactivity).

Problem: I don’t want to maintain those minimal Linux OS, and I would like to replace those old laptops (broken keyboards, damaged screens,…) with simpler, cheap and low consuming hardware (Wyse,…).

So my first step was to setup the infrastructure to support those thin clients.

And this is what I did, taking advantage of Edubuntu distribution… and LTSP !
The main steps:

  • install LTSP server
  • construct thin client images
  • setup DHCP server
  • tune specific configuration for each thin client if needed

Install LTSP

LTSP : Linux Terminal Server Project is a simple solution to answer my need. Opensource, used in education, and available as packages in my Edubuntu distribution… Perfect !

So we need to install the LTSP server binaries, as well as an SSH server (thin client are using SSH to communicate with the server).
Note that installing LTSP will install a TFTP server and a DHCP server.

sudo apt-get install ltsp-server-standalone openssh-server 

Construct thin clients boot images

You can have different hardware categories (i386,…), but in my case, I will continue running i386 🙂
So the default command is:

sudo ltsp-build-client 

(if you need another architecture, just add it as a parameter : --arch i386

This command can last for quite a long time. Be patient…

Setup DHCP server

We need to update DHCP configuration

  • edit file:
    sudo vi /etc/ltsp/dhcpd.conf
  • adjust network and server IP addresses, as well as the gateway IP and nameservers IP
  • set any fix lease if necessary

Here is my configuration file:

#
# Default LTSP dhcpd.conf config file.
#

authoritative;

subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.50 192.168.0.60;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.0.255;
    option domain-name-servers 212.27.40.240, 212.27.40.241;

    option routers 192.168.0.250;

    option root-path "/opt/ltsp/i386";
    if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" {
        filename "/ltsp/i386/pxelinux.0";
    } else {
        filename "/ltsp/i386/nbi.img";
    }

    host Raistlin4 {
	hardware ethernet 00:26:55:ce:1d:67;
	fixed-address 192.168.0.22;
    }

    host daisy {
	hardware ethernet 00:d0:b7:70:98:1d;
	fixed-address 192.168.0.21;
    }

}

Some explanations:

  • authoritative: this one is very important, as I have an Internet box which is also DHCP server, and I don’t want to remove this feature, in case my internal DHCP server is down….
  • option domain-name-servers 212.27.40.240, 212.27.40.241;: that’s my ISP DNS servers. I don’t have an internal DNS server, so I need to properly setup those ones for my Intranet computers to work properly
  • fixed-address...: for DHCP pre-defined addresses, I had to setup those sections (using their MAC addresses)

Remember to activate the server:

sudo /etc/init.d/dhcp3-server start (or restart)

Activation and configuration tuning

Note that any change on the LTSP server IP, should be followed by:

sudo ltsp-update-sshkeys

update client packages

I just added “telnet” package which was missing, but the same commands are valid for any new software installation

sudo chroot /opt/ltsp/i386
mount -t proc proc /proc
apt-get update
'apt-get upgrade' or 'apt-get install telnet'
...
exit
sudo ltsp-update-kernels
sudo umount /opt/ltsp/i386/proc
sudo ltsp-update-image -a i386
  • chroot is needed, but you also need to mount /proc, as apt-get commands need it.

How to debug thin clients

Create a root access on thin client consoles:

chroot /opt/ltsp/i386/
passwd

To debug, I wanted to install an openssh-server on the thin client (easier to connect from my laptop):

sudo mount --bind /dev /opt/ltsp/i386/dev
sudo mount -t proc none /opt/ltsp/i386/proc
export LTSP_HANDLE_DAEMONS=false
sudo chroot /opt/ltsp/i386 apt-get install openssh-server
sudo ltsp-update-image
sudo umount /opt/ltsp/i386/dev
sudo umount /opt/ltsp/i386/proc

Adjust LTSP configuration

The configuration file is located here: /var/lib/tftpboot/ltsp/i386/lts.conf
Here is my configuration file:

[Default]
	SCREEN_02 = shell
	SCREEN_03 = shell
	SCREEN_04 = telnet
	SCREEN_07 = ldm
	LOCALDEV = True
	LDM_DIRECTX = True
	SYSLOG_HOST = 192.168.0.11
[00:17:08:3d:0a:37]
	X_COLOR_DEPTH = 24
	X_MODE_0 = 1400x1050
	X_MODE_1 = 1280x1024
	X_MODE_2 = 1024x768
	XKBLAYOUT = fr

Some explanations:

  • SCREEN: this configures the Ctrl-F1, Ctrl-F2,… actions on the thin clients. I setup shell access for F2 & F3. I also added “telnet” access to the Server
  • LOCALDEV: authorize thin clients local USB access
  • LDM_DIRECTX: no need to encrypt X11 connection between my thin clients and the server (all of them are on my Intranet)
  • Then I added a specific section for one thin client, in order to give specific X11 configuration.

Conclusion

Currently, my kids laptops are configured to boot PXE and they get serverd properly by the LTSP server.

Next step: I’m going to order the Wyse devices… 🙂

Additional documentation

Mostly in French, but equivalents should be available via Google…

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.