In my spare room I have what I grandiously like to call a library. (By library I mean approx 112ft of bookshelf space, on 3 of the 4 walls). What does any library need? A computer! Internet access, ability to print, access files etc. I have a random vision of the future of having my eBooks managed “somehow” (plug the eBook reader in, download the book(s) I want…).
Nothing high powered; possibly playing youtube videos would be the hardest thing this computer would need to do. However I would like this machine to be able to print to a locally connected (USB) printer and also scan from it (it’s a HP printer/scanner). I could live without printouts (especially since that’s an inkjet printer so the ink’ll probably dry out before I use it again!) but the scanner is one of the reasons I want the machine there (eg to scan the covers of my books for my online index).
But first I need a computer. Most of the time this machine is going to be turned off (or, if power drain is sufficiently small, in standby mode) so a quick boot is required. Optimally no moving parts (no hard disk, no fans). It doesn’t need to be Windows (indeed, probably better off not being Windows, given the headache of keeping patches and antivirus software up to date!). So this sounded like a perfect job for a diskless X terminal. Netboot, NFS mount root, etc etc.
My first attempt at this was an iOpener; Panix used to use these when doing “internet rooms” at conventions; they’d hacked them so they had a NetBSD kernel and then would NFS mount everything else. Just needed the one server for the con room. These iOpeners didn’t have ethernet, but a USB dongle worked adequately for 10baseT. I’ve previously done a minor consulting favour for Panix and in lieu of any recompense I took two of these devices off their hands. I played around with them a little, but never felt the “love” or desire to actually get them working. It might be the small RAM (its been a while since I powered them up; maybe 64M?) or the small flash disk that replaces the hard disk (16M) or the small screen (800x600). Whatever the reason, I never really got these machines doing much more than booting into a command prompt. They’re still sitting in my basement gathering dust. One day I’ll revisit this project!
My second attempt was to just use a laptop. Unfortunately Linux (at the time) didn’t do very well for sleep modes and these older machines (the newest laptop I have is a Celeron 2.4Ghz Dell Inspiron 1100) take a fair time to boot. Windows… well, see the above comments! Also didn’t help that this machine only had 256Mb of RAM, so Windows was pig slow (even now I’ve upgraded it to 1Gb of RAM it’s still slow! Very slow hard disk, it seems).
My third attempt was to use a netbook. I originally got an Eee700. This suffers from a small 7” screen, small keyboard etc but in most respects it could be hacked into doing what I wanted… worst case I’d put on a different Linux distribution (Ubuntu netbook?). The problem was actually that this machine better filled the niche of “guest PC” for the living room; if someone wanted to check on email or surf the net or look up IMDB during the Oscars or whatever then this was a perfect machine! It was too useful to be relegated to library use :-) In fact I ended buying a 2nd (refurbished) Eee (an Eee900 this time) which I have at work connected to the guest wireless network so I can access personal email etc from work. I like these EeePCs!
So now attempt 4. I managed to get hold of a HP t5720. These actually come in two variations; the t5720 which runs Microsoft Windows XPembedded, and the t5725 which runs a Linux variant (based on Debian Etch). The hardware seems identical, it’s just the OS that they boot into that distinguishes them. These can be obtained for around $100 from eBay. Now these machines were designed as thin clients.
Inside they have a 1Ghz AMD Geode 1500 processor with 256Mb RAM and 512Mb of flash disk (instead of a hard disk). The memory can be upgraded using SODIMM memory. There’s a plethora of USB ports, built in audio, PS/2 keyboard/mouse ports… in other words it looks pretty much like a bog standard (underpowered) PC. Interesting there’s no moving parts at all; it’s all passively cooled with a couple of massive heat sinks on each end of the case.
I plugged in a USB-DVD drive and booted (“rescue mode”) from a CentOS DVD I had around and confirmed this could read the hardware normally. Given the small amount of memory and disk I don’t think I’ll install CentOS on this machine,but this is powerful enough that I should be able to run a real OS without much problem. I just need a quick boot time!
Looking around at the different Linux thin-client builds it seems there’s quite a few options to chose from. Firstly we have the standard HP build, which can be downloaded from their website. This is based on Debian Etch. It’s pretty old, now. Installation was simple enough; make a bootable USB drive, let it boot, and it completely overwrites the internal flash drive with the new image. It’s slow, but it works. Remove the USB device, reboot… and we have a Linux install. From POST completion to the OS being ready for use takes around 30 seconds.
By default the machine drops straight into a local X configuration; from here you can run firefox (sorry, iceweasel) - but it’s an old version. Now, it looks like HP have added some of their own APT repositories, and also left references to a main etch respository so I thought I’d try to update the machine. Here the limits of the small hard disk show up. “apt update” worked just fine. “apt upgrade” complained about the Debian official packages not being properly signed (I guess HP didn’t put the right public key in the image) but otherwise worked… until the disk filled up. Attempting to recover from this ended up with an unbootable system. Umm. Perhaps someone more versed in Debian recovery than me could have got it working again, but I didn’t need to; I just reflashed it again from the HP image. This time round I just updated iceweasel. However this still only took me to 22.214.171.124, which is very old in firefox terms. Hmm.
The HP image can also work as a more general “X terminal”, where you connect to a remote XDMCP server, authenticate and then run the X session on the remote machine. The desktop macune just runs the X server. In this mode it doesn’t really matter than the provided software is old because you don’t really run it. I’ve not tested this option yet; I need to work out how to configure the display manager on my server to accept requests from remote machines but not run X on my local console (‘cos I prefer a text terminal on my server consoles, thank you very much). I think that if I’m going to use the HP image then I’ll have to investigate this mode more. I’ll also have to determine how well audio works, and how quickly (slowly?) the system starts up.
Another way of doing terminal services is the Linux Terminal Server Project. This is pretty much designed to control and manage diskless workstations. Unfortunately I started to get a headache just reading the site. It seems that the codebase is currently being redesigned (from LTSP4 to LTSP5) and the documentation isn’t always clear in what it’s describing. It also looks like it might be a lot of work to get it running on my existing CentOS server and needs network reconfiguration of the server. Umm. I’m not sure I want to go to all that hassle! So I’m currently giving LTSP a skip.
Previously I’ve used Damn Small Linux on tiny PCs (eg a laptop with 16Mb RAM). It’s amazing that it works so well, but it also looks like it’s stuck in the past (a 2.4 based kernel. I’d be surprised if modern software (firefox 3.5 for example) would run on it. There was a more modern version (DNS-N) but this also looks like there’s been no update for years.
Then there’s ThinStation. This looks interesting. Currently I’m testing this via PXEboot (network boot) so I can switch between this and the HP image just by rebooting. This took 50 seconds to boot but some of that delay may be due to needing to download the image. Of course booting from the network with this image gives a fresh start each time, so there’s no history. It runs a very basic setup using iceWM, has firefox 3.0.x and has many forms of connectivity (eg rdesktop, ssh, Citrix ICA, NoMachine NX, VMware view etc etc etc). I need to see what power-saving functionality is available on this build, or whether I need to shutdown/reboot each time, and whether the local printer/scanner functionality will work.
Next up is xPUD. This is almost a web-based OS. It comes as a kernel image with a 44Mb initrd image attached (so it takes a little while to netboot because there’s a bit of data to transfer!) but once it’s got the data into RAM it boots fast; under 10 seconds from kernel startup to running system. It’s a different look’n’feel, but it seems to work. The main downside is that the ethernet controller on this HP (a via-rhine) doesn’t have a driver in the base OS image so if I netboot then it won’t find the ethernet controller so I can’t actually see the internet! If I boot from a USB flash drive then I can put the optional drivers package on the drive as well, and this has the via-rhine driver needed. Firefox is 3.5.5, which is prety new. Attempts to update to the latest, though, don’t appear to work. And is probably pointless given that a reboot would just rollback to the downloaded image. This is something I need to be aware of with xPUD; if I want newer application versions I may end up having to roll my own. But it’s interesting and something to look at.
And this is where I am at the moment; playing with the HP/Debain build, ThinStation and xPUD.
Of course I don’t have ethernet in the library, so I need to go wireless. This adds a new dimension… some USB wireless cards are only supported under newer kernels and these images (eg the HP one) may not have the required drivers. So do I go with a wireless USB card, or do I get a WRT54GL (or compatible) running a firmware such as Tomato in “access point” mode so it acts like a bridge, effectively providing ethernet to that room?
At the moment I’ve got my laptop in there running Windows (sigh) I think I’ve got a way to go on this project, yet!