| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | package daemonimport (	"errors"	"fmt"	"os"	"runtime"	"syscall"	"time"	"github.com/gravitl/netmaker/netclient/ncutils")// InstallDaemon - Calls the correct function to install the netclient as a daemon service on the given operating system.func InstallDaemon() error {	runtimeOS := runtime.GOOS	var err error	switch runtimeOS {	case "windows":		err = SetupWindowsDaemon()	case "darwin":		err = SetupMacDaemon()	case "linux":		err = SetupSystemDDaemon()	case "freebsd":		err = SetupFreebsdDaemon()	default:		err = errors.New("this os is not yet supported for daemon mode. Run join cmd with flag '--daemon off'")	}	return err}// Restart - restarts a system daemonfunc Restart() error {	if ncutils.IsWindows() {		RestartWindowsDaemon()		return nil	}	pid, err := ncutils.ReadPID()	if err != nil {		return fmt.Errorf("failed to find pid %w", err)	}	p, err := os.FindProcess(pid)	if err != nil {		return fmt.Errorf("failed to find running process for pid %d -- %w", pid, err)	}	if err := p.Signal(syscall.SIGHUP); err != nil {		return fmt.Errorf("SIGHUP failed -- %w", err)	}	return nil}// Start - starts system daemonfunc Start() error {	runtimeOS := runtime.GOOS	var err error	switch runtimeOS {	case "windows":		RestartWindowsDaemon()	case "darwin":		RestartLaunchD()	case "linux":		RestartSystemD()	case "freebsd":		FreebsdDaemon("restart")	default:		err = errors.New("this os is not yet supported for daemon mode. Run join cmd with flag '--daemon off'")	}	return err}// Stop - stops a system daemonfunc Stop() error {	runtimeOS := runtime.GOOS	var err error	time.Sleep(time.Second)	switch runtimeOS {	case "windows":		RunWinSWCMD("stop")	case "darwin":		StopLaunchD()	case "linux":		StopSystemD()	case "freebsd":		FreebsdDaemon("stop")	default:		err = errors.New("no OS daemon to stop")	}	return err}
 |