Add arg -D to start procd in daemon mode. This allows running procd
directly, not only via /init. Useful for CI environments to start
services like ubus and netifd without needing the whole init process.

To make this work procd also spawns services when running on a different
pid than 1, normal when started via terminal. Before it would only try
to connect to an existing ubus instance.

The -D arg handling was kindly created (with < 60 seconds RTT) by John,
I just created the patch and removed pid checking.

CC: John Crispin <j...@phrozen.org>
Signed-off-by: Paul Spooren <m...@aparcar.org>
---
v2: added usage/help message

 procd.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/procd.c b/procd.c
index 3de6208..aaef4fe 100644
--- a/procd.c
+++ b/procd.c
@@ -35,6 +35,7 @@ static int usage(const char *prog)
                "       -h <path>       run as hotplug daemon\n"
                "       -d <level>      Enable debug messages\n"
                "       -S              Print messages to stdout\n"
+               "       -D              Run procd as daemon process\n"
                "\n", prog);
        return 1;
 }
@@ -50,7 +51,7 @@ int main(int argc, char **argv)
                unsetenv("DBGLVL");
        }
 
-       while ((ch = getopt(argc, argv, "d:s:h:S")) != -1) {
+       while ((ch = getopt(argc, argv, "d:s:h:SD")) != -1) {
                switch (ch) {
                case 'h':
                        return hotplug_run(optarg);
@@ -63,6 +64,9 @@ int main(int argc, char **argv)
                case 'S':
                        ulog_channels = ULOG_STDIO;
                        break;
+               case 'D':
+                       daemon(1, 1);
+                       break;
                default:
                        return usage(argv[0]);
                }
@@ -74,10 +78,7 @@ int main(int argc, char **argv)
        setsid();
        uloop_init();
        procd_signal();
-       if (getpid() != 1)
-               procd_connect_ubus();
-       else
-               procd_state_next();
+       procd_state_next();
        uloop_run();
        uloop_done();
 
-- 
2.20.1


_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to