]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
Daemonize with environment variable
authorJason A. Donenfeld <Jason@zx2c4.com>
Thu, 3 May 2018 12:50:57 +0000 (14:50 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Thu, 3 May 2018 12:55:10 +0000 (14:55 +0200)
daemon.go [deleted file]
main.go

diff --git a/daemon.go b/daemon.go
deleted file mode 100644 (file)
index e2ded87..0000000
--- a/daemon.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package main
-
-import (
-       "os"
-)
-
-func Daemonize(attr *os.ProcAttr) error {
-       path, err := os.Executable()
-       if err != nil {
-               return err
-       }
-
-       argv := []string{os.Args[0], "--foreground"}
-       argv = append(argv, os.Args[1:]...)
-       process, err := os.StartProcess(
-               path,
-               argv,
-               attr,
-       )
-       if err != nil {
-               return err
-       }
-       process.Release()
-       return nil
-}
diff --git a/main.go b/main.go
index 3358469888a1c16c253cd060314540a7cfb8310e..f0705c8ab5798f8fceae220c9dae233a793effdf 100644 (file)
--- a/main.go
+++ b/main.go
@@ -4,7 +4,6 @@ import (
        "fmt"
        "os"
        "os/signal"
-       "runtime"
        "strconv"
 )
 
@@ -16,6 +15,7 @@ const (
 const (
        ENV_WG_TUN_FD  = "WG_TUN_FD"
        ENV_WG_UAPI_FD = "WG_UAPI_FD"
+       ENV_WG_PROCESS_FOREGROUND = "WG_PROCESS_FOREGROUND"
 )
 
 func printUsage() {
@@ -55,6 +55,10 @@ func main() {
                interfaceName = os.Args[1]
        }
 
+       if !foreground {
+               foreground = os.Getenv(ENV_WG_PROCESS_FOREGROUND) == "1"
+       }
+
        // get log level (default: info)
 
        logLevel := func() int {
@@ -129,6 +133,7 @@ func main() {
                env := os.Environ()
                env = append(env, fmt.Sprintf("%s=3", ENV_WG_TUN_FD))
                env = append(env, fmt.Sprintf("%s=4", ENV_WG_UAPI_FD))
+               env = append(env, fmt.Sprintf("%s=1", ENV_WG_PROCESS_FOREGROUND))
                attr := &os.ProcAttr{
                        Files: []*os.File{
                                nil, // stdin
@@ -140,18 +145,26 @@ func main() {
                        Dir: ".",
                        Env: env,
                }
-               err = Daemonize(attr)
+
+               path, err := os.Executable()
+               if err != nil {
+                       logger.Error.Println("Failed to determine executable:", err)
+                       os.Exit(ExitSetupFailed)
+               }
+
+               process, err := os.StartProcess(
+                       path,
+                       os.Args,
+                       attr,
+               )
                if err != nil {
                        logger.Error.Println("Failed to daemonize:", err)
                        os.Exit(ExitSetupFailed)
                }
+               process.Release()
                return
        }
 
-       // increase number of go workers (for Go <1.5)
-
-       runtime.GOMAXPROCS(runtime.NumCPU())
-
        // create wireguard device
 
        device := NewDevice(tun, logger)