package daemon import ( "fmt" "log" "os" "text/template" "github.com/gravitl/netmaker/netclient/ncutils" ) const MAC_SERVICE_NAME = "com.gravitl.netclient" func SetupMacDaemon() error { _, errN := os.Stat("~/Library/LaunchAgents") if os.IsNotExist(errN) { os.Mkdir("~/Library/LaunchAgents", 0755) } err := CreateMacService(MAC_SERVICE_NAME) 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) error { tdata := MacTemplateData{ Label: servicename, Interval: "15", } _, 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 } fileLoc := fmt.Sprintf("/Library/LaunchDaemons/%s.plist", tdata.Label) launchdFile, err := os.Open(fileLoc) if err != nil { return err } launchdTemplate := template.Must(template.New("launchdTemplate").Parse(MacTemplate())) return launchdTemplate.Execute(launchdFile, tdata) } func MacTemplate() string { return ` Label{{.Label}} ProgramArguments /etc/netclient/netclient checkin -n all StandardOutPath/etc/netclient/{{.Label}}.log StandardErrorPath/etc/netclient/{{.Label}}.log AbandonProcessGroup StartInterval {{.Interval}} EnvironmentVariables PATH /usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin ` } type MacTemplateData struct { Label string Interval string }