In response to a post on the Ubuntu UK Loco mailing list today, I thought the perfect way to produce a cross-platform, stable web server… would be to create a QEMU bootable image of Tiny Core.
So, the first thing I did was to download a Tiny Core image. This I obtained from the Tiny Core Download Page. I then created a 512MB disk image to store my packages on.
qemu-img create tinycore-tce.img 512M
After a bit of experimenting, I ended up with this command to boot TinyCore. At the moment, it’s relatively cross-platform, but will need some tweaking to get to the point where I can do anything with it…
qemu -hda tinycore-tce.img -m 512 -cdrom tinycore-current.iso -boot d -net nic -net user,hostfwd=tcp:127.0.0.1:8008-:80 -vnc 127.0.0.1:0 -daemonize
So, let’s explain some of those options.
-hda tinycore-tce.img
This means, use the image we created before, and install it in /dev/hda on the visualised machine.
-cdrom tinycore-current.iso -boot d
Create a virtual CD using the ISO file we downloaded. Boot from the CD rather than any other media.
-m 512
Allocate the virtual machine 512Mb RAM.
-net nic -net user,hostfwd=tcp:127.0.0.1:8008-:80
Create a virtual network interface in “UserMode”, and port forward from port 80 on the dynamically allocated IP address on the virtual machine to port 127.0.0.1:8008 (which means it’s only accessible from the host machine, not from any other machine on the network)
-vnc 127.0.0.1:0 -daemonize
This makes the service “headless” – basically meaning it won’t show itself, or need a terminal window open to keep it running. If you want to interact with the system, you need to VNC to localhost. If you’ve already got a VNC service running on the machine (for example, if you’re using Vino under Ubuntu), increment the :0 to something else – I used :2, but you could use anything.
At the moment, because I’ve not had much opportunity to tweak TinyCore’s boot process, it won’t start running automatically (you have to tell it what to start when it boots), nor will it start any of the services I want from it, I’ve had to use VNC to connect to it. I’ll be trying out more things with this over the next few days, and I’ll update this as I go.
Also, I’ve not tried using the Windows qemu packages to make sure the same options all work with that system, and I’ll probably be looking into using the smb switch for the -net user
option, so that as much of the data is clearly accessible without needing to drop in to the qemu session just to upload a few photos into the system. I guess we’ll see :)
Nice post Jon. I still haven’t tried Tiny Core really but I heard good things. This is a great way to set up a small testing server in a VM and take it wherever you want. I like how you broke down the command and explained each bit as well. :)
It was partially because you’ve mentioned it so much, Dan, is why I thought I’d give it a go. I’d package up what I’ve done so far, but it’s just a basic script at the moment :)
Interesting stuff, I run a small VPN VM with Debian and a simple SSH server on it, TinyCore could take its place quite easily and for a 100th of the disk usage.