Skip to content

Install

Michael Forney edited this page Feb 11, 2017 · 38 revisions

Prerequisites

To build oasis, you need a POSIX system with following tools:

  • C toolchain for both host and target system
  • curl
  • git
  • gzip (or compatible tool)
  • ninja
  • rc (plan9-compatible)
  • zic

On a Debian-based system, you'll need to install a few packages.

sudo apt install 9base bison curl git ninja-build pax
PATH=$PATH:/usr/lib/plan9/bin

If you plan to build desktop components as well, you'll need a few more.

sudo apt install libwayland-dev libpng-dev

You'll also need a toolchain targeting musl libc. I recommend musl-cross-make if you want to build your own. If not, feel free to use my pre-built toolchain.

git clone '--depth=1' https://github.com/michaelforney/oasis-toolchain
PATH=$PATH:$PWD/oasis-toolchain/bin

You should make sure that your git config has a set user and email (for applying patches).

git config --global user.name $MYNAME
git config --global user.email $MYEMAIL

Installation

These instructions use some references to environment variables. You are meant to replace those with appropriate values for your system.

  • EDITOR: Your text editor.
  • DRIVE: Your target disk device.
  • ROOTPART: Your / partition device.
  • BOOTPART: Your /boot partition device.
  • TIMEZONE: Your timezone.

First, prepare a root directory for oasis. We'll call it $ROOT. You should mount any sub-filesystems you want at this time (for example, /boot).

cd $ROOT
git clone -c 'core.sharedRepository=group' https://github.com/michaelforney/oasis src/oasis
cd src/oasis

Next, configure config.rc to your liking.

cp config.def.rc config.rc
$EDITOR config.rc

Generate the ninja build files.

rc ./setup.rc

Build oasis.

ninja commit

Prepare root repository.

cd $ROOT
git init --template src/oasis/template
git remote add local src/oasis/out/root.git
git fetch local
git checkout master

You may want to include a toolchain.

git remote add toolchain https://github.com/michaelforney/oasis-toolchain
git fetch toolchain '--depth=1'
git branch -t toolchain toolchain/master
git merge --allow-unrelated-histories toolchain

Prepare your /etc directory.

curl -L https://github.com/michaelforney/oasis-etc/archive/master.tar.gz | zcat | pax -r -s ',^oasis-etc-[^/]*,etc,'
./libexec/oasis/applyperms -d etc
rm etc/.perms

It is possible to maintain your /etc directory with git just as / (set oasis.root=..), but this is not recommended since perp uses the VTX bit to keep track of active services, and merge conflicts or permission errors could have disastrous side-effects.

Set up your system configuration.

ln -s ../share/zoneinfo/$TIMEZONE etc/localtime
cat >>etc/fstab <<EOF
/dev/$ROOTPART / ext4 rw,relatime 0 1
/dev/$BOOTPART /boot ext2 rw,relatime,noauto 0 0
EOF
touch var/log/lastlog

Configure /etc/rc.local to do any necessary initialization for your system (e.g. keymap, networking). This script runs during boot before starting perp. You may also want to make changes to /etc/profile.

$EDITOR etc/rc.local
$EDITOR etc/profile

The default root password is oasis. If you would like to choose something else before booting into the system, you should chroot into the new filesystem and run passwd.

Kernel

Build/obtain a kernel. By convention, install it at /boot/linux.

For a oasis-specific kernel build procedure, see Kernel.

Bootloader

Feel free to install any bootloader you want.

syslinux

syslinux is one option that is easy and convenient. You'll need a 32-bit libc in order to run the pre-built binaries. On Debian-based systems, this is in libc6-i386.

sudo apt install libc6-i386

For a BIOS system:

cd /tmp
curl -O https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz
zcat syslinux-6.03.tar.gz | pax -r
mkdir $ROOT/boot/syslinux
find syslinux-6.03/bios -name '*.c32' -exec cp {} $ROOT/boot/syslinux ';'
syslinux-6.03/bios/extlinux/extlinux --install $ROOT/boot/syslinux
dd if=syslinux-6.03/bios/mbr/mbr.bin of=/dev/$DRIVE bs=440
cat >$ROOT/boot/syslinux/syslinux.cfg <<EOF
PROMPT 1
TIMEOUT 50
DEFAULT oasis

LABEL oasis
	LINUX ../linux
	APPEND root=/dev/$ROOTPART init=/bin/sinit ro
EOF

efibootmgr

If your system uses UEFI and you built your kernel with CONFIG_EFI_STUB=y, you can use efibootmgr to set up a new boot entry.

efibootmgr -c -d /dev/$DRIVE -p $BOOTPARTNUM -l /linux -L oasis "root=/dev/$BOOTPART init=/bin/sinit ro"

You might also want to enable efibootmgr in your config.rc.

Initial setup

Some common administration tasks are described in Administration.

Clone this wiki locally