From b8b9c52a05f77b72a9ecfcf7d7759b61fa27bf80 Mon Sep 17 00:00:00 2001
From: Cem Keylan <cem@ckyln.com>
Date: Sat, 16 May 2020 11:53:02 +0300
Subject: init: multiple changes

- kill runit services only if sv is available on the system
- add run_hook function
- add early-boot hook
---
 rc.boot     | 10 +++-------
 rc.lib      |  9 +++++++++
 rc.shutdown | 14 ++++++--------
 3 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/rc.boot b/rc.boot
index b9e7e14..c02d4c2 100755
--- a/rc.boot
+++ b/rc.boot
@@ -71,7 +71,8 @@ out "Mounting all local filesystems..."; {
     mount -at nosysfs,nonfs,nonfs4,nosmbfs,nocifs -O no_netdev ||
         shell
 }
-}
+
+run_hook early-boot
 
 out "Enabling swap..."; {
     swapon -a || shell
@@ -126,12 +127,7 @@ command -v udevd >/dev/null &&
     udevadm control --exit
 
 
-out "Running boot hooks..."
-set +f
-for file in /etc/init/*.boot ; do
-	[ -f "$file" ] && \
-		out "Running $file" && . "$file"
-done
+run_hook boot
 
 out "Running rc.local..."; {
 	[ -r "/etc/init/rc.local" ] && \
diff --git a/rc.lib b/rc.lib
index 919883e..412f98b 100644
--- a/rc.lib
+++ b/rc.lib
@@ -8,3 +8,12 @@ shell() {
     error "Dropping to shell, type 'exit' to continue the boot process."
     sh -l
 }
+
+run_hook() {
+    out "Running '$1' hooks..."
+    for hook in "/etc/init/"*".$1"; do
+        [ -f "$hook" ] || continue
+        out "Running '$hook'..."
+        . "$hook"
+    done
+}
diff --git a/rc.shutdown b/rc.shutdown
index 0b977f2..2266f21 100755
--- a/rc.shutdown
+++ b/rc.shutdown
@@ -5,16 +5,14 @@
 
 PATH=/sbin:/bin:/usr/sbin:/usr/bin
 
-out "Waiting for services to stop..."; {
-    sv -w196 force-stop /var/service/* >/dev/null 2>&1
-    sv exit /var/service/* >/dev/null 2>&1
+run_hook pre.shutdown
+
+command -v sv >/dev/null &&
+    out "Waiting for runit services to stop..."; {
+    sv -w196 force-stop /var/service/* >/dev/null
+    sv exit /var/service/* >/dev/null
 }
 
-out "Running pre shutdown hooks..."
-for file in /etc/init/*.pre.shutdown ; do
-	[ -f "$file" ] && \
-		out "Running $file" && . "$file"
-done
 
 out "Saving random seed..."; {
     dd count=1 bs=512 if=/dev/random of=/var/random.seed
-- 
cgit v1.2.3