aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--event.d/rc18
-rw-r--r--event.d/rcS7
-rw-r--r--event.d/rcS-sulogin11
3 files changed, 18 insertions, 8 deletions
diff --git a/event.d/rc1 b/event.d/rc1
index 35de4d3e..5153c8c2 100644
--- a/event.d/rc1
+++ b/event.d/rc1
@@ -1,6 +1,9 @@
# rc1 - runlevel 1 compatibility
#
# This task runs the old sysv-rc runlevel 1 ("single-user") scripts.
+# /etc/rc.d/rc 1 will run the /etc/rc.d/rc1.d scripts.
+# telinit S will run whichever task has "start on runlevel S",
+# normally /etc/event.d/rcS-sulogin
start on runlevel 1
@@ -17,3 +20,8 @@ script
exec /etc/rc.d/rc 1
end script
+post-stop script
+ clear
+ echo "Telling INIT to go to single user mode."
+ exec telinit S
+end script
diff --git a/event.d/rcS b/event.d/rcS
index 728ae396..619e1e6d 100644
--- a/event.d/rcS
+++ b/event.d/rcS
@@ -15,14 +15,15 @@ script
/etc/rc.d/rc.sysinit
runlevel --reboot || true
-
+end script
+post-stop script
runlevel=$(/bin/awk -F ':' '$3 == "initdefault" { print $2 }' /etc/inittab)
[ -z "$runlevel" ] && runlevel="3"
for t in $(cat /proc/cmdline); do
case $t in
- -s|single|S) runlevel="S" ;;
+ -s|single|S|s) runlevel="S" ;;
[1-9]) runlevel="$t" ;;
esac
done
- telinit $runlevel
+ exec telinit $runlevel
end script
diff --git a/event.d/rcS-sulogin b/event.d/rcS-sulogin
index 1a2f49e2..d74620db 100644
--- a/event.d/rcS-sulogin
+++ b/event.d/rcS-sulogin
@@ -1,18 +1,19 @@
# rcS-sulogin - "single-user" runlevel compatibility
#
-# This task runs the sulogin binary during "single-user" mode.
+# This task runs /bin/bash during "single-user" mode,
+# then continues to the default runlevel.
start on runlevel S
stop on runlevel
console owner
-
script
runlevel --set S >/dev/null || true
- /bin/bash
-
+ /bin/bash || true
+end script
+post-stop script
runlevel=$(/bin/awk -F ':' '$3 == "initdefault" { print $2 }' /etc/inittab)
[ -z "$runlevel" ] && runlevel="3"
- telinit $runlevel
+ exec telinit $runlevel
end script