main.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gravitl/netmaker/netclient/functions"
  5. "golang.zx2c4.com/wireguard/wgctrl"
  6. nodepb "github.com/gravitl/netmaker/grpc"
  7. "flag"
  8. "os"
  9. "os/exec"
  10. "strconv"
  11. "log"
  12. )
  13. const (
  14. // name of the service
  15. name = "wcdaemon"
  16. description = "Wirecat Daemon Service"
  17. )
  18. var password string
  19. var group string
  20. var server string
  21. var accesskey string
  22. var (
  23. wgclient *wgctrl.Client
  24. )
  25. var (
  26. wcclient nodepb.NodeServiceClient
  27. )
  28. func main() {
  29. tpassword := flag.String("p", "changeme", "This node's password for accessing the server regularly")
  30. taccesskey := flag.String("k", "badkey", "an access key generated by the server and used for one-time access (install only)")
  31. tserver := flag.String("s", "localhost:50051", "The location (including port) of the remote gRPC server.")
  32. tgroup := flag.String("g", "badgroup", "The node group you are attempting to join.")
  33. tnoauto := flag.Bool("na", false, "No auto mode. If true, netmaker will not be installed as a system service and you will have to retrieve updates manually via checkin command.")
  34. command := flag.String("c", "required", "The command to run")
  35. flag.Parse()
  36. getID := exec.Command("id", "-u")
  37. out, err := getID.Output()
  38. if err != nil {
  39. log.Fatal(err)
  40. }
  41. id, err := strconv.Atoi(string(out[:len(out)-1]))
  42. if err != nil {
  43. log.Fatal(err)
  44. }
  45. if id != 0 {
  46. log.Fatal("This program must be run with elevated privileges (sudo). This program installs a SystemD service and configures WireGuard and networking rules. Please re-run with sudo/root.")
  47. }
  48. switch *command {
  49. case "required":
  50. fmt.Println("command flag 'c' is required. Pick one of |install|checkin|update|remove|")
  51. os.Exit(1)
  52. log.Fatal("Exiting")
  53. case "install":
  54. fmt.Println("Beginning agent installation.")
  55. err := functions.Install(*taccesskey, *tpassword, *tserver, *tgroup, *tnoauto)
  56. if err != nil {
  57. fmt.Println("Error installing: ", err)
  58. fmt.Println("Cleaning up (uninstall)")
  59. err = functions.Remove()
  60. if err != nil {
  61. fmt.Println("Error uninstalling: ", err)
  62. fmt.Println("Wiping local.")
  63. err = functions.WipeLocal()
  64. if err != nil {
  65. fmt.Println("Error removing artifacts: ", err)
  66. }
  67. err = functions.RemoveSystemDServices()
  68. if err != nil {
  69. fmt.Println("Error removing services: ", err)
  70. }
  71. }
  72. os.Exit(1)
  73. }
  74. case "service-install":
  75. fmt.Println("Beginning service installation.")
  76. err := functions.ConfigureSystemD()
  77. if err != nil {
  78. fmt.Println("Error installing service: ", err)
  79. os.Exit(1)
  80. }
  81. case "service-uninstall":
  82. fmt.Println("Beginning service uninstall.")
  83. err := functions.RemoveSystemDServices()
  84. if err != nil {
  85. fmt.Println("Error installing service: ", err)
  86. os.Exit(1)
  87. }
  88. case "checkin":
  89. fmt.Println("Beginning node check in.")
  90. err := functions.CheckIn()
  91. if err != nil {
  92. fmt.Println("Error checking in: ", err)
  93. os.Exit(1)
  94. }
  95. case "remove":
  96. fmt.Println("Beginning node cleanup.")
  97. err := functions.Remove()
  98. if err != nil {
  99. /*
  100. fmt.Println("Error uninstalling: ", err)
  101. fmt.Println("Wiping local.")
  102. err = functions.WipeLocal()
  103. if err != nil {
  104. fmt.Println("Error removing artifacts: ", err)
  105. }
  106. err = functions.RemoveSystemDServices()
  107. if err != nil {
  108. fmt.Println("Error removing services: ", err)
  109. }
  110. */
  111. fmt.Println("Error deleting node: ", err)
  112. os.Exit(1)
  113. }
  114. }
  115. fmt.Println("Command " + *command + " Executed Successfully")
  116. }