morpheus - a statically linked musl based Linux distro ====================================================== Building -------- *** HIGHLY EXPERIMENTAL SOFTWARE - READ THE CODE FIRST! *** To build morpheus you currently need an x86_64/x86 host. You will need to have mk(1) from 9base or plan9port. Please review config.mk prior to building and adjust any parameters. Setting up the environment: export mkbuild=$(pwd)/mkbuild export configmk=$(pwd)/config.mk export PATH=/path/to/musl/toolchain/bin:$PATH Clone the git submodules, either via git commands or: mk init To build everything (though this isn't recommended): mk To build specific ports: mk TARG="port1 port2 ..." or: cd ports/port1; mk To force build ports: mk -a To clean the build system's cache: mk clean To clean source dirs completely: mk distclean To fetch all ports without building anything: mk fetch To generate a package tarball: mk TARG="port1 port2 ..." package You can then install the package using installpkg(1) from http://git.2f30.org/pkgtools. To install a port to the rootfs: mk TARG="port1 port2 ..." ROOT=$(pwd)/root install Note that this however will *not* create the /var/log/packages entries. For a bootable system you need at least the following packages: busybox e2fsprogs extlinux file fs hbase linux mksh sbase sdhcp sinit smdev ubase There are precompiled versions at http://morpheus.2f30.org/0.0 for the x86_64 architecture. We suggest using a stripped-down CRUX rootfs for building ports. There is one prepackaged rootfs at http://morpheus.2f30.org/0.0/emul-x86_64.tgz. Rebuilding the kernel --------------------- There is a default config for the kernel in ports/linux. The default config is copied over .config in the kernel source directory every time you do a build via mk(1). You can adjust your local .config and copy it over the relevant config in ports/linux or you can just manually compile the kernel and copy System.map and bzImage to $ROOT/boot. Installing ---------- There is currently no installer. There is a script that creates a 2GB image file that is suitable to dd to a usb stick. To create a bootable image: sudo modprobe -r loop sudo modprobe loop max_part=15 # to be done only once sudo mk ROOT=$(pwd)/root bootable # set ROOT to point to your rootfs Make sure to change the kernel command line to point it to your root device. You can do this at the boot prompt: bzImage root=/dev/sd[X]1 rootwait ro Otherwise modify ports/extlinux/extlinux.conf and rebuild the extlinux port or directly modify $ROOT/boot/extlinux.conf. You will also want to modify the fstab file. Testing ------- To experiment with the x86_64 image in qemu: qemu-system-x86_64 -hda morpheus-x86_64-0.0.img -enable-kvm -vga cirrus Login with root and an empty password. Debugging --------- In some cases you may want to set nprocs to 1 in order to get sane build output. You can then use something like the following: mk 2>&1 | tee -a output.log Props ----- I'd like to thank the people behind the sabotage-linux project. Their work has been really helpful to us. Contact ------- You can find us on #morpheus at irc.oftc.net. Enjoy!