#!/bin/sh

rl="$1"
shift

### argv now contains the arguments of the kernel command line that are
### not of the form key=value. (The key=value arguments were stored by
### s6-linux-init into an envdir, if instructed so via the -s option.)
### Normally this argv remains unused because programs that need the
### kernel command line usually read it later on from /proc/cmdline -
### but just in case, it's available here.


### 1. Early preparation
### This is done only once at boot time.
### Ideally, this phase should just initialize the service manager.

mount -t proc none /proc
mount -t sysfs none /sys
mount -t tmpfs none /tmp
# s6-linux-init mounts /dev before this script is called
mkdir /dev/pts
mount -t devpts none /dev/pts

if test -c /dev/pmsg0 ; then
    mount -t pstore none /sys/fs/pstore
    (cat /sys/fs/pstore/* && rm  /sys/fs/pstore/*) > /run/log/previous-boot
fi

mkdir -m 0751 -p /run/services/outputs
chgrp system /run/services/outputs

if test -d /persist; then
    mkdir -m 0751  -p /persist/services/state
    (cd /run/services && ln -s ../../persist/services/state .)
else
    mkdir -m 0751 -p /run/services/state
fi

### If your services are managed by s6-rc:
### (replace /run/service with your scandir)
s6-rc-init -d -c /etc/s6-rc/compiled /run/service


### 2. Starting the wanted set of services
### This is also called every time you change runlevels with telinit.
### (edit the location to suit your installation)
### By default, $rl is the string "default", unless you changed it
### via the -D option to s6-linux-init-maker.
### Numeric arguments from 1 to 5 on the kernel command line will
### override the default.

exec /etc/s6-linux-init/current/scripts/runlevel "$rl"


### If this script is run in a container, then 1. and 2. above do not
### apply and you should just call your CMD, if any, or let your
### services run.
### Something like this:

# if test -z "$*" ; then return 0 ; fi
# $@
# echo $? > /run/s6-linux-init-container-results/exitcode
# halt