From 1bfc80a0a201f2594e48dd1f7ff722f5b6519477 Mon Sep 17 00:00:00 2001 From: Jacob McSwain Date: Fri, 12 Apr 2024 10:10:20 -0500 Subject: [PATCH] run vtun with s6 --- cmd/server.go | 18 ------------ internal/vtun/reload.go | 37 ++++++++++++++++++++++++ internal/vtun/run.go | 62 ----------------------------------------- 3 files changed, 37 insertions(+), 80 deletions(-) delete mode 100644 internal/vtun/run.go diff --git a/cmd/server.go b/cmd/server.go index b2a35f63..eb180821 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -52,11 +52,6 @@ func runServer(cmd *cobra.Command, _ []string) error { olsrdExitedChan := olsrd.Run(ctx) - vtunExitedChan := make(chan struct{}) - if !config.DisableVTun { - vtunExitedChan = vtun.Run(ctx) - } - // Start the metrics server go metrics.CreateMetricsServer(config, cmd.Root().Version) log.Printf("Metrics server started") @@ -147,19 +142,6 @@ func runServer(cmd *cobra.Command, _ []string) error { } }) - if !config.DisableVTun { - errGrp.Go(func() error { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - select { - case <-ctx.Done(): - return fmt.Errorf("vtund did not exit in time") - case <-vtunExitedChan: - return nil - } - }) - } - errGrp.Go(func() error { return wireguardManager.Stop() }) diff --git a/internal/vtun/reload.go b/internal/vtun/reload.go index bbe633ea..47ce8855 100644 --- a/internal/vtun/reload.go +++ b/internal/vtun/reload.go @@ -1,10 +1,33 @@ package vtun import ( + "os" + "strconv" + "syscall" + "github.com/USA-RedDragon/aredn-manager/internal/db/models" "gorm.io/gorm" ) +// This file will run vtund +const ( + pidFile = "/usr/var/run/vtund.pid" +) + +func Reload() error { + // Read the PID file + pidBytes, err := os.ReadFile(pidFile) + if err != nil { + return err + } + pidStr := string(pidBytes) + pid, err := strconv.ParseInt(pidStr, 10, 64) + if err != nil { + return err + } + return syscall.Kill(int(pid), syscall.SIGHUP) +} + func ReloadAllClients(db *gorm.DB, watcher *ClientWatcher) error { tunnels, err := models.ListClientTunnels(db) if err != nil { @@ -16,3 +39,17 @@ func ReloadAllClients(db *gorm.DB, watcher *ClientWatcher) error { } return nil } + +func IsRunning() bool { + pidBytes, err := os.ReadFile(pidFile) + if err != nil { + return false + } + pidStr := string(pidBytes) + pid, err := strconv.ParseInt(pidStr, 10, 64) + if err != nil { + return false + } + err = syscall.Kill(int(pid), 0) + return err == nil +} diff --git a/internal/vtun/run.go b/internal/vtun/run.go deleted file mode 100644 index 9025c731..00000000 --- a/internal/vtun/run.go +++ /dev/null @@ -1,62 +0,0 @@ -package vtun - -import ( - "context" - "fmt" - "log" - "os" - "os/exec" - "syscall" - - "github.com/USA-RedDragon/aredn-manager/internal/runner" -) - -//nolint:golint,gochecknoglobals -var ( - vtunCmd *exec.Cmd -) - -func Run(ctx context.Context) chan struct{} { - stopChan := make(chan struct{}) - defer close(stopChan) - go run(ctx, stopChan) - return stopChan -} - -func run(ctx context.Context, stopChan chan struct{}) { - vtunCmd = exec.CommandContext(ctx, "vtund", "-s", "-f", "/etc/vtundsrv.conf", "-n") - processResults, err := runner.Run(vtunCmd) - defer close(processResults) - if err != nil { - fmt.Println("vtund failed to start:", err) - return - } - fmt.Println("VTun started") - - select { - case err := <-processResults: - if err != nil { - fmt.Printf("VTun process exited with error: %v, restarting it\n", err) - } else { - fmt.Println("VTun process exited, restarting it") - } - err = vtunCmd.Process.Signal(os.Signal(syscall.SIGKILL)) - if err != nil { - log.Printf("failed to kill process: %v\n", err) - } - go run(ctx, stopChan) - case <-ctx.Done(): - err = <-processResults - if err != nil { - log.Printf("vtund process exited with error: %v", err) - } - } -} - -func IsRunning() bool { - return vtunCmd != nil && vtunCmd.Process != nil -} - -func Reload() error { - return vtunCmd.Process.Signal(os.Signal(syscall.SIGHUP)) -}