package daemon import ( "fmt" "github.com/gravitl/netmaker/netclient/ncutils" "io/ioutil" "log" "os" "path/filepath" ) const MAC_SERVICE_NAME = "com.gravitl.netclient" func SetupMacDaemon(interval string) error { dir, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { return err } binarypath := dir + "/netclient" if !ncutils.FileExists("/etc/netclient/netclient") { _, err = ncutils.Copy(binarypath, "/etc/netclient/netclient") if err != nil { log.Println(err) return err } } _, errN := os.Stat("~/Library/LaunchAgents") if os.IsNotExist(errN) { os.Mkdir("~/Library/LaunchAgents", 0755) } err = CreateMacService(MAC_SERVICE_NAME, interval) if err != nil { return err } _, err = ncutils.RunCmd("launchctl load /Library/LaunchDaemons/"+MAC_SERVICE_NAME+".plist", true) return err } func CleanupMac() { _, err := ncutils.RunCmd("launchctl unload /Library/LaunchDaemons/"+MAC_SERVICE_NAME+".plist", true) if ncutils.FileExists("/Library/LaunchDaemons/" + MAC_SERVICE_NAME + ".plist") { err = os.Remove("/Library/LaunchDaemons/" + MAC_SERVICE_NAME + ".plist") } if err != nil { ncutils.PrintLog(err.Error(), 1) } os.RemoveAll(ncutils.GetNetclientPath()) } func CreateMacService(servicename string, interval string) error { _, err := os.Stat("/Library/LaunchDaemons") if os.IsNotExist(err) { os.Mkdir("/Library/LaunchDaemons", 0755) } else if err != nil { log.Println("couldnt find or create /Library/LaunchDaemons") return err } daemonstring := MacDaemonString(interval) daemonbytes := []byte(daemonstring) if !ncutils.FileExists("/Library/LaunchDaemons/com.gravitl.netclient.plist") { err = ioutil.WriteFile("/Library/LaunchDaemons/com.gravitl.netclient.plist", daemonbytes, 0644) } return err } func MacDaemonString(interval string) string { return fmt.Sprintf(` Labelcom.gravitl.netclient ProgramArguments /etc/netclient/netclient checkin -n all StandardOutPath/etc/netclient/com.gravitl.netclient.log StandardErrorPath/etc/netclient/com.gravitl.netclient.log AbandonProcessGroup StartInterval %s EnvironmentVariables PATH /usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin `, interval) } type MacTemplateData struct { Label string Interval string }