You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Eddie Thieda 4d4bb53e1e
Removed mailing list link
5 years ago
misc install-crux: copy core pkg, add more info 9 years ago
mkbuild@75a44c1318 Add mkbuild and ports submodules 10 years ago
ports@37ff31a8aa Add mkbuild and ports submodules 10 years ago
stuff Refuse to run create-bootable if $ROOT is not set 10 years ago
.gitignore Complete rewrite of the build system 10 years ago
.gitmodules Use 2f30 mkbuild repo 10 years ago
LICENSE Add Hiltjo Posthuma to LICENSE 10 years ago
README Removed mailing list link 5 years ago
TODO Remove tic from the TODO 10 years ago
config.def.mk Revert "We link with -s, we do not use STRIP" 9 years ago
mkfile We can now do mk TARG=wtv package 10 years ago

README

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#1.22.1.pkg.tgz
  curl#7.36.0.pkg.tgz
  e2fsprogs#1.42.9.pkg.tgz
  extlinux#6.02.pkg.tgz
  file#5.17.pkg.tgz
  fs.pkg.tgz
  hbase.pkg.tgz
  ii.pkg.tgz
  libarchive#3.1.2.pkg.tgz
  linux#3.10.32.pkg.tgz
  mksh#R47.pkg.tgz
  pkgtools.pkg.tgz
  sbase.pkg.tgz
  sdhcp.pkg.tgz
  sinit.pkg.tgz
  smdev.pkg.tgz
  tmux#1.9a.pkg.tgz
  ubase.pkg.tgz
  vim#7.4.pkg.tgz

There are precompiled versions at http://morpheus.2f30.org/0.0 for the
x86_64   architecture.   Use   the  misc/install-morpheus   script  to
bootstrap your system.

We  suggest using  a  stripped-down CRUX  rootfs  for building  ports.

http://morpheus.2f30.org/0.0/packages/x86_64/emul.pkg.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!