8MB and 10 minutes – proof of a very nerdy concept

I like the idea of booting from a webserver. I’ve always thought this was a cool thing. So I made a new leeeeeetle teeny tiny version of Braydix that actually boots from The Internet. The idea sounds easy, but it’s actually really hard – and it takes forever before it finally finishes booting. I timed it by looking at the server logs and it took 10 minutes before I had a working web browser.

I guess I can go over my decisions backwards – from the end to the start of Boot. I used the latest ISO of Braydix and threw it on a Server to boot from. I used ‘httpfs’ to mount that ISO somewhere, and then mounted that file using a ‘loopback’ option. I had to build a completely custom initrd to do all this with, I started from the CentOS default one and ended up completely scrapping it and building my own from scratch, using Busybox. I grabbed all of the Networking drivers (only!) from /lib/modules and and put them into my new initrd, and I also needed ‘fuse’ (for httpfs) and a filesystem loop module. I made Busybox do the few, measly little things that I needed to get done to be able to mount an ISO – modprobe a network connection, modprobe fuse, a mini-dhcp client, a little teeny shell – it’s great. I have no idea why RedHat bothers with their Nash shell – busybox crushes it. And I used Grub for making my CD bootable – I’m still having problems having it run through the grub.conf automatically, it keeps making me specify stuff. But maybe I’ll fix it and make the ISO URL a boot-time parameter that the user has to put in? That could be interesting.

Anyways, I’ve been poking at this for a week or so, and I just booted for the first time, so I wanted to mention it.