375 Eleventh Street
San Francisco, CA 94103


   
Diskless Linux Kiosks

by Jamie Zawinski
Created July 2000
Updated Nov 2007

Scattered around DNA Lounge are a number of flatscreen internet kiosks. Our goal was for these to be usable for web browsing, IRC, AIM, and so on. When most people set up kiosks, they tend to try and lock them down so that you can only run a web browser, but that's a little too limiting, since I want people to be able to run other applications too (telnet, ssh, irc, and so on.) So really, I wanted to give access to a complete desktop system. But do so safely and reliably.

I decided to set them up as Linux systems running the GNOME desktop, preconfigured with all the common applications people might want to run. However, I needed to figure out a way to make the system robust enough that one user couldn't screw it up for another, on purpose or accidentally. The system would need to be locked down enough that it was easy to reset it to a working state. 'l33t warcha1king g1yph0r

(Incidentally, though our kiosks themselves are hardwired, we also provide free wireless network access within the club: 802.11b SSID = "dnalounge", no registration required.)

So, I had the following goals:

  • When the machine boots up, it should automatically log itself in as ``guest'', and go to the desktop without requiring a login dialog.

  • It should be possible to pull the plug on the machine at any time without loss of data: at no time should fsck need to run.

  • Logging out or rebooting should reset the machine to a default state, clearing out any changes a previous user might have made.

  • Small form factor: I wanted flat screens, and I wanted them without spending a fortune.

Originally I was planning on using cheap laptops to do this: In early 2000, one could obtain refurbished P90 laptops with 800x600 displays and PCMCIA ethernet for around $450 each. I got the above goals (booting read-only, logging in, etc) working with laptops; but it turned out to be a a bad idea.

I came to the realization that laptop hardware is just too flaky. Pretty much everything about a laptop is inferior to a desktop machine, in terms of performance, reliability, and expense: their only benefit is that they run off batteries, and that's not a concern in this application. They're also hellaciously difficult to service: if something goes wrong, you throw the whole thing away and get a new one.

So, we decided to spend a bit more money on the kiosks to get something more reliable: diskless desktop computers for the kiosks, plus external flatscreens. The benefits here are that: the machine itself can be serviced; and if the machine gets toasted, I don't have to buy a new screen too. The screens can be secured such that they are fairly indestructible, and they also have a warranty. Plus, commodity hardware is both cheaper and more reliable than laptop hardware.

Currently, the hardware we're using for the kiosks is:

From late 2000 through 2006, these machines ran as "fat client" computers: the machines each ran all of their applications locally, but had no local disks. Everything was mounted via NFS from a remote file server. Users would auto-login as a "guest" user on the client machine, which would run X11, a web browser, a basic GNOME desktop, etc.

As much was mounted shared and read-only as possible; and when the machine rebooted, everything was reset to a default state.

That worked reasonably well for six years, but it was hellaciously complicated. We wasted a lot of time fighting with stupid hardware compatibility problems (e.g., the kernel not liking the onboard NIC, crap like that) and they often ran out of RAM and crashed, especially if someone tried to run a Java applet.

So, these days, they are "thin clients" instead of "fat clients". The back-room server machine (which had been merely the file server for the fat clients) is now a much beefier machine which runs all of the applications for the kiosks. Each kiosk is, essentially, an X terminal. All that the kiosks run locally is an X11 server; the window managers and web browsers are all running on the same remote host. That machine has a 1GHz processor and 1.2GB RAM, which (it turns out) is plenty to run six copies of GNOME and Firefox under the kind of light usage they get in our environment.

_______________________________________________

Here are the steps I followed in creating this system:


Configure a server machine.


Install and configure LTSP.


Customize the kiosk startup sequence.


Configure auto-login.


Configure auto-reset.


Other usability tweaks.

_______________________________________________

If you have any suggestions of a better way to go about this, or if you see any problems with the above, I'd love to hear them. It seems far more complicated than it ought to be.

_______________________________________________