Background ---------- This single-floppy version of Linux came about as a result of a tech-support job that came up in march 2001. A client who had been connecting to the internet via dialup modem was wanting to increase their bandwidth - they were starting to do some web design and authoring work and they were finding that a modem just wasn't fast enough for them any more. At that time the only broadband service available in their area (Canberra) was ADSL, offered by the national telco Telstra. So, an appointment to have an ADSL cable modem installed was made, and the Telstra guy (eventually) had everything hooked up and running at his end. Then it was my turn - I had to convert their existing PPP dialup server (a Linux box sitting quietly in the corner) over to ADSL. I had already decided to use the Roaring Penguin pppoe client, and I thought the job would be a simple one. Imagine my surprise when I looked more closely and discovered that this Linux box (eddie) had no hard disk. It was running a single-floppy linux system - something I had not had to deal with before. This happened on a Friday, so I offered to take the box away over the weekend and return it first thing Monday morning. I spent most of the weekend on a voyage of discovery as I learned all there is to know about the care and feeding of single-floppy Linux systems... My first discovery was that this was a "LRP" (Linux Router Project) based floppy. After looking around on the LRP site for a while it became clear that there wasn't a version of pppoe already built for the cutdown glibc-2.0.7 that the floppy was running, so I had to build my own. My first attempt at compiling binaries to run on this system failed dismally. I was compiling against libc.so.6 (glibc-2.1.1) and then copying the binaries onto the floppy which was running libc.so.6 (glibc-2.0.7). Nothing worked. Every program I compiled and copied over just crashed with "segmentation fault". I was a bit surprised - even though the glibc versions were not the same, they _both_ advertised themselves as "libc.so.6", so I had hoped that they were compatible. Not a chance. Stuck with the inability to compile working binaries, and only a day or so left to build a working system, I switched track and decided to fit an IDE drive into "eddie" and then install a standard Linux system. So I pull out my trusty RedHat 7.0 cdrom and try to install... "eddie" is a 486 dx2/66 with 8Mb of RAM. RedHat 7.0 does not want to install. It grinds away for a while, and then just crashes - no doubt due to the severe RAM constraints. Over the next little while I work my way back through time as I try RedHat 6.2, 6.1, 6.0, etc until finally Redhat 5.1 succeeds. Obviously back then they took the idea of installing onto "small memory" systems seriously. Then came the main breakthrough. On a whim, I checked on the glibc version supplied on RedHat 5.1 - yep, it was glibc-2.0.7, exactly what was running on the floppy. Now when I tried to compile against the RedHat 5.1 libs, I was able to create binaries that ran just fine on the floppy. So it was time to switch track again, and go back to the idea of running everything off the floppy - a much nicer solution if it was possible. The LRP disk that I started with was running kernel 2.2.5 statically compiled to support only SMC ISA network cards. I remember that 2.2.5 had some problems, and I was really wanting to run a recent kernel + ipchains and various other network cards, so I replaced the original kernel with kernel version 2.2.18 and compiled in support for most network cards. I was still a bit constrained by space - after all it has to fit into a time 500kb filesystem - but I got most things in there. Next on the list was replacing the existing PPP (2.3.5) with a recent version (2.3.11), replacing the named and dhcpd with similar recent versions, and adding in the Roaring Penguin pppoe ADSL client. I cut back the pppoe config scripts to the bare minimum, and then shoehorned it all into the tiny space available. I was even able to add in a couple of extra utils - "ps" and "netstat" which I found useful to have on hand while I was testing. So now the client is happy, "eddie" is back in its accustomed position in the corner, and I am a lot wiser about building single-floppy systems. After going through this I thought it might be a good idea to write up my experience and put the disk image up onto my website in case anyone else wants to do something similar. I have removed passwords etc from the disk image, but otherwise it is "raw" - i.e. I haven't really cleaned it up at all.