tl;dr: Run:
qemu-system-i386 -vga std -m 512 -cdrom http://toaruos.org/netboot.iso -M accel=kvm:tcg \
-soundhw ac97 -net user -net nic,model=rtl8139 -serial stdio
ToaruOS has a reasonably stable network stack under VirtualBox's and QEMU's user network modes, and we already run ramdisk-based systems on CDs, so why not write an application that gets that ramdisk from the network and have that be the only thing we ship?
Some much-needed changes to the kernel were made to support this situation. First off, we assumed we had a working root filesystem mounted in order to try to start init
. Second, we always run /bin/init
as our init binary. Some new kernel arguments were added to change the init
binary, and the requirement for a mounted root filesystem was changed. Also, you can now change the filesystem type for the root filesystem, but that change is aimed at a different project.
Our netboot init
is based on a combination of our original init
, fetch
, and ungz
. It enable serial output, downloads the payload file, decompresses it, mounts it, and then runs /bin/init live-welcome
.
The payload is a normal ext2-formatted ramdisk image just like normal CDs use.
To make sure the CD is extra small, everything on it is compressed with xz
. Unfortunately, GRUB still takes up about 2MB of space - our own files are under 500KB.