From a55b601f3747392947cdd9894c2e63f609d0bb4f Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Wed, 10 Apr 2024 17:23:06 +0200 Subject: [PATCH] luci-base: use json for ucitrack instead of uci The 'ucitrack' configuration under '/etc/config' defines which service must be restarted on a LuCI change. This uci file defines how all this works together. Additionally there are 'uci-defaults' scripts in the various applications that add additional configurations parameters to this ucitrack file if a service must be reloaded/restarted on a LuCI change. There are some problems with the current implementation: * The uci should be used to configure the system and not for this kind of reload/restart dependency handling on LuCI changes. * On a system update with configuration restore of the 'ucitrack' file the new behavior on LuCI reload/restart could not take into account because the new file is *not* used. This commit converts the handling from uci to json. Signed-off-by: Florian Eckert --- modules/luci-base/Makefile | 1 - modules/luci-base/root/etc/config/ucitrack | 56 ------------------- modules/luci-base/root/etc/init.d/ucitrack | 41 +++++++++++--- .../root/usr/share/ucitrack/dhcp.json | 7 +++ .../root/usr/share/ucitrack/dropbear.json | 4 ++ .../root/usr/share/ucitrack/firewall.json | 9 +++ .../root/usr/share/ucitrack/fstab.json | 4 ++ .../root/usr/share/ucitrack/httpd.json | 4 ++ .../root/usr/share/ucitrack/luci_splash.json | 4 ++ .../root/usr/share/ucitrack/network.json | 7 +++ .../root/usr/share/ucitrack/ntpclient.json | 4 ++ .../root/usr/share/ucitrack/odhcpd.json | 4 ++ .../root/usr/share/ucitrack/olsr.json | 4 ++ .../root/usr/share/ucitrack/qos.json | 4 ++ .../root/usr/share/ucitrack/samba.json | 4 ++ .../root/usr/share/ucitrack/system.json | 9 +++ .../root/usr/share/ucitrack/tinyproxy.json | 4 ++ .../root/usr/share/ucitrack/upnpd.json | 4 ++ .../root/usr/share/ucitrack/wireless.json | 6 ++ 19 files changed, 114 insertions(+), 66 deletions(-) delete mode 100644 modules/luci-base/root/etc/config/ucitrack create mode 100644 modules/luci-base/root/usr/share/ucitrack/dhcp.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/dropbear.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/firewall.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/fstab.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/httpd.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/luci_splash.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/network.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/ntpclient.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/odhcpd.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/olsr.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/qos.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/samba.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/system.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/tinyproxy.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/upnpd.json create mode 100644 modules/luci-base/root/usr/share/ucitrack/wireless.json diff --git a/modules/luci-base/Makefile b/modules/luci-base/Makefile index 6913568948..789e6a4bf6 100644 --- a/modules/luci-base/Makefile +++ b/modules/luci-base/Makefile @@ -36,7 +36,6 @@ include $(INCLUDE_DIR)/host-build.mk define Package/luci-base/conffiles /etc/luci-uploads /etc/config/luci -/etc/config/ucitrack endef define Package/luci-base/postinst diff --git a/modules/luci-base/root/etc/config/ucitrack b/modules/luci-base/root/etc/config/ucitrack deleted file mode 100644 index bb4cdbc3c4..0000000000 --- a/modules/luci-base/root/etc/config/ucitrack +++ /dev/null @@ -1,56 +0,0 @@ -config network - option init network - list affects dhcp - -config wireless - list affects network - -config firewall - option init firewall - list affects luci-splash - list affects qos - list affects miniupnpd - -config olsr - option init olsrd - -config dhcp - option init dnsmasq - list affects odhcpd - -config odhcpd - option init odhcpd - -config dropbear - option init dropbear - -config httpd - option init httpd - -config fstab - option exec '/sbin/block mount' - -config qos - option init qos - -config system - option init led - option exec '/etc/init.d/log reload' - list affects luci_statistics - list affects dhcp - -config luci_splash - option init luci_splash - -config upnpd - option init miniupnpd - -config ntpclient - option init ntpclient - -config samba - option init samba - -config tinyproxy - option init tinyproxy - diff --git a/modules/luci-base/root/etc/init.d/ucitrack b/modules/luci-base/root/etc/init.d/ucitrack index 57ac11857f..495949f64f 100755 --- a/modules/luci-base/root/etc/init.d/ucitrack +++ b/modules/luci-base/root/etc/init.d/ucitrack @@ -3,6 +3,8 @@ START=80 USE_PROCD=1 +. "$IPKG_INSTROOT/usr/share/libubox/jshn.sh" + register_init() { local config="$1" local init="$2" @@ -15,13 +17,25 @@ register_init() { } register_trigger() { - local sid="$1" + local uci="$1" + local file="$2" + local config init exec affects affected + local prev - config_get config "$sid" TYPE - config_get init "$sid" init - config_get exec "$sid" exec - config_get affects "$sid" affects + json_set_namespace config prev + json_init + json_load_file "${file}" >/dev/null 2>&1 + json_get_var config 'config' + [ "$config" = "$uci" ] || { + json_set_namespace "$prev" + return + } + json_get_var init 'init' + json_get_var exec 'exec' + json_get_values affects 'affects' + json_cleanup + json_set_namespace "$prev" if [ -n "$init" ]; then register_init "$config" "/etc/init.d/$init" "reload" @@ -48,10 +62,19 @@ register_trigger() { done } -service_triggers() { - config_foreach register_trigger +check_trigger() { + local config="$1" + + local file + + for file in /usr/share/ucitrack/*.json; do + [ -f "$file" ] || continue + register_trigger "$config" "$file" + done } -start_service() { - config_load ucitrack +service_triggers() { + for config in /etc/config/*; do + check_trigger "${config##*/}" + done } diff --git a/modules/luci-base/root/usr/share/ucitrack/dhcp.json b/modules/luci-base/root/usr/share/ucitrack/dhcp.json new file mode 100644 index 0000000000..260ee3dd3b --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/dhcp.json @@ -0,0 +1,7 @@ +{ + "config": "dhcp", + "init": "dnsmasq", + "affects": [ + "odhcpd" + ] +} diff --git a/modules/luci-base/root/usr/share/ucitrack/dropbear.json b/modules/luci-base/root/usr/share/ucitrack/dropbear.json new file mode 100644 index 0000000000..fc24cd9978 --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/dropbear.json @@ -0,0 +1,4 @@ +{ + "config": "dropbear", + "init": "dropbear" +} diff --git a/modules/luci-base/root/usr/share/ucitrack/firewall.json b/modules/luci-base/root/usr/share/ucitrack/firewall.json new file mode 100644 index 0000000000..4d1d9f919f --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/firewall.json @@ -0,0 +1,9 @@ +{ + "config": "firewall", + "init": "firewall", + "affects": [ + "luci-splash", + "qos", + "miniupnpd" + ] +} diff --git a/modules/luci-base/root/usr/share/ucitrack/fstab.json b/modules/luci-base/root/usr/share/ucitrack/fstab.json new file mode 100644 index 0000000000..95b071167c --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/fstab.json @@ -0,0 +1,4 @@ +{ + "config": "fstab", + "exec": "/sbin/block mount" +} diff --git a/modules/luci-base/root/usr/share/ucitrack/httpd.json b/modules/luci-base/root/usr/share/ucitrack/httpd.json new file mode 100644 index 0000000000..ae549b6884 --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/httpd.json @@ -0,0 +1,4 @@ +{ + "config": "httpd", + "init": "httpd" +} diff --git a/modules/luci-base/root/usr/share/ucitrack/luci_splash.json b/modules/luci-base/root/usr/share/ucitrack/luci_splash.json new file mode 100644 index 0000000000..0d1ffe16bb --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/luci_splash.json @@ -0,0 +1,4 @@ +{ + "config": "luci_splash", + "init": "luci_splash" +} diff --git a/modules/luci-base/root/usr/share/ucitrack/network.json b/modules/luci-base/root/usr/share/ucitrack/network.json new file mode 100644 index 0000000000..99d31fc61e --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/network.json @@ -0,0 +1,7 @@ +{ + "config": "network", + "init": "network", + "affects": [ + "dhcp" + ] +} diff --git a/modules/luci-base/root/usr/share/ucitrack/ntpclient.json b/modules/luci-base/root/usr/share/ucitrack/ntpclient.json new file mode 100644 index 0000000000..629d321f02 --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/ntpclient.json @@ -0,0 +1,4 @@ +{ + "config": "ntpclient", + "init": "ntpclient" +} diff --git a/modules/luci-base/root/usr/share/ucitrack/odhcpd.json b/modules/luci-base/root/usr/share/ucitrack/odhcpd.json new file mode 100644 index 0000000000..2c78e1e349 --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/odhcpd.json @@ -0,0 +1,4 @@ +{ + "config": "odhcpd", + "init": "odhcpd" +} diff --git a/modules/luci-base/root/usr/share/ucitrack/olsr.json b/modules/luci-base/root/usr/share/ucitrack/olsr.json new file mode 100644 index 0000000000..54f792a012 --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/olsr.json @@ -0,0 +1,4 @@ +{ + "config": "olsr", + "init": "olsrd" +} diff --git a/modules/luci-base/root/usr/share/ucitrack/qos.json b/modules/luci-base/root/usr/share/ucitrack/qos.json new file mode 100644 index 0000000000..27b50d59d8 --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/qos.json @@ -0,0 +1,4 @@ +{ + "config": "qos", + "init": "qos" +} diff --git a/modules/luci-base/root/usr/share/ucitrack/samba.json b/modules/luci-base/root/usr/share/ucitrack/samba.json new file mode 100644 index 0000000000..b50a8ddc54 --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/samba.json @@ -0,0 +1,4 @@ +{ + "config": "samba", + "init": "samba" +} diff --git a/modules/luci-base/root/usr/share/ucitrack/system.json b/modules/luci-base/root/usr/share/ucitrack/system.json new file mode 100644 index 0000000000..f3da5ce8c4 --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/system.json @@ -0,0 +1,9 @@ +{ + "config": "system", + "init": "led", + "exec": "/etc/init.d/log reload", + "affects": [ + "luci_statistics", + "dhcp" + ] +} diff --git a/modules/luci-base/root/usr/share/ucitrack/tinyproxy.json b/modules/luci-base/root/usr/share/ucitrack/tinyproxy.json new file mode 100644 index 0000000000..252144ffee --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/tinyproxy.json @@ -0,0 +1,4 @@ +{ + "config": "tinyproxy", + "init": "tinyproxy" +} diff --git a/modules/luci-base/root/usr/share/ucitrack/upnpd.json b/modules/luci-base/root/usr/share/ucitrack/upnpd.json new file mode 100644 index 0000000000..a9e190261c --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/upnpd.json @@ -0,0 +1,4 @@ +{ + "config": "upnpd", + "init": "miniupnpd" +} diff --git a/modules/luci-base/root/usr/share/ucitrack/wireless.json b/modules/luci-base/root/usr/share/ucitrack/wireless.json new file mode 100644 index 0000000000..edbaee704b --- /dev/null +++ b/modules/luci-base/root/usr/share/ucitrack/wireless.json @@ -0,0 +1,6 @@ +{ + "config": "wireless", + "affects": [ + "network" + ] +} -- 2.30.2