-
Notifications
You must be signed in to change notification settings - Fork 85
Install
To build oasis, you need a POSIX system with following tools:
- C toolchain for both host and target system
- target toolchain must support
#include_next
- target toolchain must support
- curl
- git
- gzip (or compatible tool)
- lua
- ninja
- zic
On a Debian-based system, you'll need to install a few packages.
sudo apt install bison curl git ninja-build lua5.2 pax
If you plan to build desktop and multimedia components as well, you'll need a few more.
sudo apt install libwayland-dev libpng-dev nasm
You'll also need a toolchain targeting musl libc. I recommend musl-cross-make if you want to build your own. If not, you can grab one from musl.cc.
curl -O http://musl.cc/x86_64-linux-musl-cross.tgz
zcat x86_64-linux-musl-cross.tgz | pax -r
PATH=$PATH:$PWD/x86_64-linux-musl-cross/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
These instructions use some references to environment variables. You are meant to replace those with appropriate values for your system.
-
EDITOR
: Your text editor (e.g.vim
). -
DRIVE
: Your target disk device (e.g.sda
). -
ROOTPART
: Your / partition device (e.g.sda2
). -
BOOTPART
: Your /boot partition device (e.g.sda1
). -
TIMEZONE
: Your timezone (e.g.US/Pacific
). -
ROOT
: Mounted root filesystem for target.
First, prepare a root directory for oasis at $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/oasislinux/oasis.git src/oasis
git init --template src/oasis/template
cd src/oasis
Next, configure config.lua
to your liking.
cp config.def.lua config.lua
$EDITOR config.lua
A typical install involves writing filesystem objects to your /
repository, so
make sure to update the repo
table in config.lua
accordingly.
repo={
path='../..',
flags='',
tag='tree',
branch='oasis',
}
Generate the ninja build files.
lua setup.lua
Build oasis.
ninja commit
Merge built system into root repository.
cd $ROOT
git config branch.master.remote .
git config branch.master.merge oasis
git merge
./libexec/applyperms
You may want to include a toolchain.
git remote add toolchain https://github.com/oasislinux/toolchain.git
git fetch toolchain '--depth=1'
git config --add branch.master.merge toolchain/master
git merge --allow-unrelated-histories
Prepare your /etc
directory.
(cd /tmp && curl -LO https://github.com/oasislinux/etc/archive/master.tar.gz)
zcat /tmp/master.tar.gz | pax -r -s ',^etc-[^/]*,etc,'
./libexec/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
.
Build/obtain a kernel. By convention, install it at /boot/linux
.
For an oasis-specific kernel build procedure, see Kernel.
Feel free to install any bootloader you want.
syslinux is one option that is easy and convenient. On Debian-based
systems, you can install extlinux
.
sudo apt install extlinux
For a BIOS system:
mkdir $ROOT/boot/syslinux
extlinux --install $ROOT/boot/syslinux
dd if=/usr/lib/EXTLINUX/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
On an oasis system, if installed, mbr.bin
can be found at
/lib/syslinux/bios/mbr.bin
.
Don't forget to make sure your boot partition is marked bootable!
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/$ROOTPART init=/bin/sinit ro"
You might also want to enable efibootmgr
in your config.lua
.
Some common administration tasks are described in Administration.