luci-base: add transitional /etc/init.d/ucitrack 1769/head
authorJo-Philipp Wich <jo@mein.io>
Wed, 2 May 2018 08:37:02 +0000 (10:37 +0200)
committerJo-Philipp Wich <jo@mein.io>
Sat, 5 May 2018 21:11:23 +0000 (23:11 +0200)
Ship an /etc/init.d/ucitrack for spawning a virtual service with the sole
purpose to track the configurations and dependencies formerly handled by
luci-reload.

Once all LuCI supported services ship with procd compatible init scripts,
the uci track support can be dropped.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/root/etc/init.d/ucitrack [new file with mode: 0755]

diff --git a/modules/luci-base/root/etc/init.d/ucitrack b/modules/luci-base/root/etc/init.d/ucitrack
new file mode 100755 (executable)
index 0000000..27d34fa
--- /dev/null
@@ -0,0 +1,57 @@
+#!/bin/sh /etc/rc.common
+
+START=80
+USE_PROCD=1
+
+register_init() {
+       local config="$1"
+       local init="$2"
+       shift; shift
+
+       if [ -x "$init" ] && "$init" enabled && ! grep -sqE 'USE_PROCD=.' "$init"; then
+               logger -t "ucitrack" "Setting up /etc/config/$config reload trigger for non-procd $init"
+               procd_add_config_trigger "config.change" "$config" "$init" "$@"
+       fi
+}
+
+register_trigger() {
+       local sid="$1"
+       local config init exec affects affected
+
+       config_get config "$sid" TYPE
+       config_get init "$sid" init
+       config_get exec "$sid" exec
+       config_get affects "$sid" affects
+
+       if [ -n "$init" ]; then
+               register_init "$config" "/etc/init.d/$init" "reload"
+       fi
+
+       if [ -n "$exec" ]; then
+               case "$exec" in
+                       /etc/init.d/*)
+                               set -- $exec
+                               register_init "$config" "$@"
+                       ;;
+                       *)
+                               logger -t "ucitrack" "Setting up non-init /etc/config/$config reload handler: $exec"
+                               procd_add_config_trigger "config.change" "$config" "$exec"
+                       ;;
+               esac
+       fi
+
+       for affected in $affects; do
+               logger -t "ucitrack" "Setting up /etc/config/$config reload dependency on /etc/config/$affected"
+               procd_add_config_trigger "config.change" "$affected" \
+                       ubus call service event \
+                       "$(printf '{"type":"config.change","data":{"package":"%s"}}' $config)"
+       done
+}
+
+service_triggers() {
+       config_foreach register_trigger
+}
+
+start_service() {
+       config_load ucitrack
+}