summaryrefslogtreecommitdiff
path: root/updater-ng/files/cleanup_rc_d.sh
diff options
context:
space:
mode:
Diffstat (limited to 'updater-ng/files/cleanup_rc_d.sh')
-rwxr-xr-xupdater-ng/files/cleanup_rc_d.sh27
1 files changed, 27 insertions, 0 deletions
diff --git a/updater-ng/files/cleanup_rc_d.sh b/updater-ng/files/cleanup_rc_d.sh
new file mode 100755
index 0000000..9df8015
--- /dev/null
+++ b/updater-ng/files/cleanup_rc_d.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+set -eu
+
+cd "$ROOT_DIR/etc/rc.d"
+
+# Remove any dangling links
+for rc in *; do
+ [ -L "$rc" ] || continue
+ [ -f "$rc" ] || {
+ echo "Removing enable for non-existent service: $rc" >&2
+ rm -f "$rc"
+ }
+done
+
+# Fix multiple links for same service
+# We list here all links and do two passes. First we just remove number and filter
+# out only duplicates. This way we have problematic services but to get name only
+# once we have to remove leading 'S' or 'K' and do second pass. This way we have
+# just list of all problematic services.
+find -maxdepth 1 -type l \
+ | sed 's|\./\([SK]\)..|\1|' | sort | uniq -d \
+ | sed 's|[SK]||' | sort | uniq \
+ | while read -r service; do
+ echo "Fixing multiple startup/shutdown links for service: $service" >&2
+ rm -f [SK]??"$service"
+ /bin/sh "$ROOT_DIR/etc/rc.common" "$ROOT_DIR/etc/init.d/$service" enable
+done