|
@@ -11,34 +11,44 @@ import (
|
|
|
|
|
|
const MAC_SERVICE_NAME = "com.gravitl.netclient"
|
|
const MAC_SERVICE_NAME = "com.gravitl.netclient"
|
|
|
|
|
|
-func CreateAndRunMacDaemon() error {
|
|
|
|
- _, err := os.Stat("~/Library/LaunchAgents")
|
|
|
|
- if os.IsNotExist(err) {
|
|
|
|
- os.Mkdir("~/Library/LaunchAgents", 0744)
|
|
|
|
|
|
+func SetupMacDaemon() error {
|
|
|
|
+ _, errN := os.Stat("~/Library/LaunchAgents")
|
|
|
|
+ if os.IsNotExist(errN) {
|
|
|
|
+ os.Mkdir("~/Library/LaunchAgents", 0755)
|
|
}
|
|
}
|
|
- err = CreateMacService(MAC_SERVICE_NAME)
|
|
|
|
|
|
+ err := CreateMacService(MAC_SERVICE_NAME)
|
|
if err != nil {
|
|
if err != nil {
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
- _, err = ncutils.RunCmd("launchctl load ~/Library/LaunchAgents/"+MAC_SERVICE_NAME+".plist", true)
|
|
|
|
|
|
+ _, err = ncutils.RunCmd("launchctl load /Library/LaunchDaemons/"+MAC_SERVICE_NAME+".plist", true)
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
|
|
|
|
func CleanupMac() {
|
|
func CleanupMac() {
|
|
- //StopWindowsDaemon()
|
|
|
|
- //RemoveWindowsDaemon()
|
|
|
|
- //os.RemoveAll(ncutils.GetNetclientPath())
|
|
|
|
- log.Println("TODO: Not implemented yet")
|
|
|
|
|
|
+ _, 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 {
|
|
func CreateMacService(servicename string) error {
|
|
tdata := MacTemplateData{
|
|
tdata := MacTemplateData{
|
|
- Label: servicename,
|
|
|
|
- Program: "/etc/netclient/netclient",
|
|
|
|
- KeepAlive: true,
|
|
|
|
- RunAtLoad: true,
|
|
|
|
|
|
+ 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("%s/Library/LaunchAgents/%s.plist", os.Getenv("HOME"), tdata.Label)
|
|
|
|
|
|
+ fileLoc := fmt.Sprintf("/Library/LaunchDaemons/%s.plist", tdata.Label)
|
|
launchdFile, err := os.Open(fileLoc)
|
|
launchdFile, err := os.Open(fileLoc)
|
|
if err != nil {
|
|
if err != nil {
|
|
return err
|
|
return err
|
|
@@ -49,28 +59,35 @@ func CreateMacService(servicename string) error {
|
|
|
|
|
|
func MacTemplate() string {
|
|
func MacTemplate() string {
|
|
return `
|
|
return `
|
|
-<?xml version='1.0' encoding='UTF-8'?>
|
|
|
|
- <!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\" >
|
|
|
|
- <plist version='1.0'>
|
|
|
|
- <dict>
|
|
|
|
- <key>Label</key><string>{{.Label}}</string>
|
|
|
|
- <key>Program</key><string>{{.Program}}</string>
|
|
|
|
- <key>StandardOutPath</key><string>/tmp/{{.Label}}.out.log</string>
|
|
|
|
- <key>StandardErrorPath</key><string>/tmp/{{.Label}}.err.log</string>
|
|
|
|
- <key>KeepAlive</key><{{.KeepAlive}}/>
|
|
|
|
- <key>RunAtLoad</key><{{.RunAtLoad}}/>
|
|
|
|
- <key>StartCalendarInterval</key>
|
|
|
|
- <dict>
|
|
|
|
- <key>Minute</key>
|
|
|
|
- <value>*/1</value>
|
|
|
|
- </dict>
|
|
|
|
|
|
+ <?xml version='1.0' encoding='UTF-8'?>
|
|
|
|
+ <!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\" >
|
|
|
|
+ <plist version='1.0'>
|
|
|
|
+ <dict>
|
|
|
|
+ <key>Label</key><string>{{.Label}}</string>
|
|
|
|
+ <key>ProgramArguments</key>
|
|
|
|
+ <array>
|
|
|
|
+ <string>/etc/netclient/netclient</string>
|
|
|
|
+ <string>checkin</string>
|
|
|
|
+ <string>-n</string>
|
|
|
|
+ <string>all</string>
|
|
|
|
+ </array>
|
|
|
|
+ <key>StandardOutPath</key><string>/etc/netclient/{{.Label}}.log</string>
|
|
|
|
+ <key>StandardErrorPath</key><string>/etc/netclient/{{.Label}}.log</string>
|
|
|
|
+ <key>AbandonProcessGroup</key><true/>
|
|
|
|
+ <key>StartInterval</key>
|
|
|
|
+ <integer>{{.Interval}}</integer>
|
|
|
|
+ <key>EnvironmentVariables</key>
|
|
|
|
+ <dict>
|
|
|
|
+ <key>PATH</key>
|
|
|
|
+ <string>/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
|
|
|
|
+ </dict>
|
|
|
|
+ </dict>
|
|
|
|
+ </plist>
|
|
</plist>
|
|
</plist>
|
|
`
|
|
`
|
|
}
|
|
}
|
|
|
|
|
|
type MacTemplateData struct {
|
|
type MacTemplateData struct {
|
|
- Label string
|
|
|
|
- Program string
|
|
|
|
- KeepAlive bool
|
|
|
|
- RunAtLoad bool
|
|
|
|
|
|
+ Label string
|
|
|
|
+ Interval string
|
|
}
|
|
}
|