macos.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package daemon
  2. import (
  3. "io/ioutil"
  4. "log"
  5. "os"
  6. "github.com/gravitl/netmaker/netclient/ncutils"
  7. )
  8. const MAC_SERVICE_NAME = "com.gravitl.netclient"
  9. func SetupMacDaemon() error {
  10. _, errN := os.Stat("~/Library/LaunchAgents")
  11. if os.IsNotExist(errN) {
  12. os.Mkdir("~/Library/LaunchAgents", 0755)
  13. }
  14. err := CreateMacService(MAC_SERVICE_NAME)
  15. if err != nil {
  16. return err
  17. }
  18. _, err = ncutils.RunCmd("launchctl load /Library/LaunchDaemons/"+MAC_SERVICE_NAME+".plist", true)
  19. return err
  20. }
  21. func CleanupMac() {
  22. _, err := ncutils.RunCmd("launchctl unload /Library/LaunchDaemons/"+MAC_SERVICE_NAME+".plist", true)
  23. if ncutils.FileExists("/Library/LaunchDaemons/" + MAC_SERVICE_NAME + ".plist") {
  24. err = os.Remove("/Library/LaunchDaemons/" + MAC_SERVICE_NAME + ".plist")
  25. }
  26. if err != nil {
  27. ncutils.PrintLog(err.Error(), 1)
  28. }
  29. os.RemoveAll(ncutils.GetNetclientPath())
  30. }
  31. func CreateMacService(servicename string) error {
  32. _, err := os.Stat("/Library/LaunchDaemons")
  33. if os.IsNotExist(err) {
  34. os.Mkdir("/Library/LaunchDaemons", 0755)
  35. } else if err != nil {
  36. log.Println("couldnt find or create /Library/LaunchDaemons")
  37. return err
  38. }
  39. daemonstring := MacDaemonString()
  40. daemonbytes := []byte(daemonstring)
  41. if !ncutils.FileExists("/Library/LaunchDaemons/com.gravitl.netclient.plist") {
  42. err = ioutil.WriteFile("/Library/LaunchDaemons/com.gravitl.netclient.plist", daemonbytes, 0644)
  43. }
  44. return err
  45. }
  46. func MacDaemonString() string {
  47. return `<?xml version='1.0' encoding='UTF-8'?>
  48. <!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\" >
  49. <plist version='1.0'>
  50. <dict>
  51. <key>Label</key><string>com.gravitl.netclient</string>
  52. <key>ProgramArguments</key>
  53. <array>
  54. <string>/etc/netclient/netclient</string>
  55. <string>checkin</string>
  56. <string>-n</string>
  57. <string>all</string>
  58. </array>
  59. <key>StandardOutPath</key><string>/etc/netclient/com.gravitl.netclient.log</string>
  60. <key>StandardErrorPath</key><string>/etc/netclient/com.gravitl.netclient.log</string>
  61. <key>AbandonProcessGroup</key><true/>
  62. <key>StartInterval</key>
  63. <integer>15</integer>
  64. <key>EnvironmentVariables</key>
  65. <dict>
  66. <key>PATH</key>
  67. <string>/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  68. </dict>
  69. </dict>
  70. </plist>
  71. `
  72. }
  73. type MacTemplateData struct {
  74. Label string
  75. Interval string
  76. }