adguardhome: wait for interfaces to be up at boot
authorHiếu Lê <leorize+oss@disroot.org>
Fri, 29 Sep 2023 19:45:14 +0000 (19:45 +0000)
committerTianling Shen <cnsztl@gmail.com>
Sat, 13 Jul 2024 09:58:21 +0000 (17:58 +0800)
This should allow the service to be activated even earlier during
the boot process and also avoids race condition against network.

Signed-off-by: Hiếu Lê <leorize+oss@disroot.org>
(cherry picked from commit d00131e2a0c8e846b42df22eda6c8356d4fce4a9)

net/adguardhome/files/adguardhome.init

index 802dcdae3a7cb87fcd4669630e239f20c174d8d9..6a29c4e4a368b53c3c83ce1e9cdab9cb91b0b5c7 100644 (file)
@@ -4,12 +4,22 @@ PROG=/usr/bin/AdGuardHome
 
 USE_PROCD=1
 
-# starts just after network starts to avoid some network race conditions
-START=25
+# matches dnsmasq
+START=19
 # stops before networking stops
 STOP=89
 
+boot() {
+  adguardhome_boot=1
+  start "$@"
+}
+
 start_service() {
+  if [ -n "$adguardhome_boot" ]; then
+    # Do not start yet, wait for triggers
+    return 0
+  fi
+
   config_load adguardhome
   config_get WORK_DIR config workdir
 
@@ -21,3 +31,11 @@ start_service() {
   procd_set_param stderr 1
   procd_close_instance
 }
+
+service_triggers() {
+  if [ -n "$adguardhome_boot" ]; then
+    # Wait for interfaces to be up before starting AdGuard Home for real.
+    # Prevents issues like https://github.com/openwrt/packages/issues/21868.
+    procd_add_raw_trigger "interface.*.up" 5000 /etc/init.d/adguardhome restart
+  fi
+}