From efee4ebf43e376a7cd8b8abcef0c70aa90427bb4 Mon Sep 17 00:00:00 2001 From: davidovski Date: Tue, 1 Mar 2022 22:01:26 +0000 Subject: initial commit --- s6/base/scripts/rc.init | 49 +++++++++++++++++++++++++++++++++++++++ s6/base/scripts/rc.shutdown | 30 ++++++++++++++++++++++++ s6/base/scripts/rc.shutdown.final | 18 ++++++++++++++ s6/base/scripts/runlevel | 18 ++++++++++++++ 4 files changed, 115 insertions(+) create mode 100755 s6/base/scripts/rc.init create mode 100755 s6/base/scripts/rc.shutdown create mode 100755 s6/base/scripts/rc.shutdown.final create mode 100755 s6/base/scripts/runlevel (limited to 's6/base/scripts') diff --git a/s6/base/scripts/rc.init b/s6/base/scripts/rc.init new file mode 100755 index 0000000..56c3e7b --- /dev/null +++ b/s6/base/scripts/rc.init @@ -0,0 +1,49 @@ +#!/bin/sh -e + +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. + +### If your services are managed by sysv-rc: +# /etc/init.d/rcS + +### If your services are managed by OpenRC: +# /sbin/openrc sysinit +# /sbin/openrc boot + +### If your services are managed by s6-rc: +### (replace /run/service with your scandir) +s6-rc-init -c /etc/s6/db/current /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/base/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 diff --git a/s6/base/scripts/rc.shutdown b/s6/base/scripts/rc.shutdown new file mode 100755 index 0000000..f759ba7 --- /dev/null +++ b/s6/base/scripts/rc.shutdown @@ -0,0 +1,30 @@ +#!/bin/sh -e + +### Things to do before hardware halt/reboot/poweroff. +### Ideally, it should be a single call to the service manager, +### telling it to bring all the services down. + +### If your s6-linux-init-maker invocation was made with the -1 +### option, messages from rc.shutdown will appear on /dev/console +### as well as be logged by the catch-all logger. +### If your s6-linux-init-maker invocation did NOT include the -1 +### option, messages from rc.shutdown will only be logged by the +### catch-all logger and will NOT appear on /dev/console. In order +### to print them to /dev/console instead, you may want to +### uncomment the following line: +exec >/dev/console 2>&1 + +### If your services are managed by sysv-rc: +### also remove the K11reboot link from /etc/rc6.d to prevent +### sysv-rc from rebooting prematurely - because sysvinit does +### not properly separate state changes from system init/shutdown. +# exec /etc/init.d/rc 6 + +### If your services are managed by OpenRC: +### also remove the "killprocs" and "mount-ro" symlinks from +### /etc/runlevels/shutdown - because OpenRC does not properly +### separate the service manager from the shutdown manager either. +# exec /sbin/openrc shutdown + +### If your services are managed by s6-rc: +exec s6-rc -v2 -bda change diff --git a/s6/base/scripts/rc.shutdown.final b/s6/base/scripts/rc.shutdown.final new file mode 100755 index 0000000..3f46b87 --- /dev/null +++ b/s6/base/scripts/rc.shutdown.final @@ -0,0 +1,18 @@ +#!/bin/sh -e + +### Things to do *right before* the machine gets rebooted or +### powered off, at the very end of the shutdown sequence, +### when all the filesystems are unmounted. + +### This is a last resort hook; normally nothing should be +### done here (your rc.shutdown script should have taken care +### of everything) and you should leave this script empty. + +### Some distributions, however, may need to perform some +### actions after unmounting the filesystems: typically if +### an additional teardown action is required on a filesystem +### after unmounting it, or if the system needs to be +### pivot_rooted before it can be shut down, etc. + +### Those are all exceptional cases. If you don't know for +### certain that you need to do something here, you don't. diff --git a/s6/base/scripts/runlevel b/s6/base/scripts/runlevel new file mode 100755 index 0000000..d266171 --- /dev/null +++ b/s6/base/scripts/runlevel @@ -0,0 +1,18 @@ +#!/bin/sh -e + +### This script is called once at boot time by rc.init, and is +### also called by the runleveld service every time the user +### requests a machine state change via telinit. +### Ideally, it should just be a call to the service manager. + +test "$#" -gt 0 || { echo 'runlevel: fatal: too few arguments' 1>&2 ; exit 100 ; } + + +### If your services are managed by sysv-rc: +# exec /etc/init.d/rc "$1" + +### If your services are managed by OpenRC: +# exec /sbin/openrc "$1" + +### If your services are managed by s6-rc: +exec s6-rc -v2 -up change "$1" -- cgit v1.2.1