freebsd.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package daemon
  2. import (
  3. "log"
  4. "os"
  5. "github.com/gravitl/netmaker/logger"
  6. "github.com/gravitl/netmaker/netclient/ncutils"
  7. )
  8. // SetupFreebsdDaemon -- sets up daemon for freebsd
  9. func SetupFreebsdDaemon() error {
  10. binarypath, err := os.Executable()
  11. if err != nil {
  12. return err
  13. }
  14. _, err = os.Stat("/etc/netclient/config")
  15. if os.IsNotExist(err) {
  16. os.MkdirAll("/etc/netclient/config", 0744)
  17. } else if err != nil {
  18. log.Println("couldnt find or create /etc/netclient")
  19. return err
  20. }
  21. //install binary
  22. if ncutils.FileExists(EXEC_DIR + "netclient") {
  23. logger.Log(0, "updating netclient binary in ", EXEC_DIR)
  24. }
  25. err = ncutils.Copy(binarypath, EXEC_DIR+"netclient")
  26. if err != nil {
  27. log.Println(err)
  28. return err
  29. }
  30. rcFile := `#!/bin/sh
  31. #
  32. # PROVIDE: netclient
  33. # REQUIRE: LOGIN
  34. # KEYWORD: shutdown
  35. # Description:
  36. # This script runs netclient as a service as root on boot
  37. # How to use:
  38. # Place this file in /usr/local/etc/rc.d/
  39. # Add netclient="YES" to /etc/rc.config.d/netclient
  40. # To pass args, add netclient_args="daemon" to /etc/rc.config.d/netclient
  41. # Freebsd rc library
  42. . /etc/rc.subr
  43. # General Info
  44. name="netclient" # Safe name of program
  45. program_name="netclient" # Name of exec
  46. title="netclient" # Title to display in top/htop
  47. # RC.config vars
  48. load_rc_config $name # Loading rc config vars
  49. : ${netclient_enable="YES"} # Default: enable netclient
  50. : ${netclient_runAs="root"} # Default: Run Node-RED as root
  51. # Freebsd Setup
  52. rcvar=netclient_enable # Enables the rc.conf YES/NO flag
  53. pidfile="/var/run/${program_name}.pid" # File that allows the system to keep track of node-red status
  54. # Env Setup
  55. #export HOME=$( getent passwd "$netclient_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user
  56. # Command Setup
  57. exec_path="/sbin/${program_name}" # Path to the netclient exec
  58. output_file="/var/log/${program_name}.log" # Path to netclient logs
  59. # Command
  60. command="/usr/sbin/daemon"
  61. command_args="-r -t ${title} -u ${netclient_runAs} -o ${output_file} -P ${pidfile} ${exec_path} ${netclient_args}"
  62. # Loading Config
  63. load_rc_config ${name}
  64. run_rc_command "$1"
  65. `
  66. rcConfig := `netclient="YES"
  67. netclient_args="daemon"`
  68. rcbytes := []byte(rcFile)
  69. if !ncutils.FileExists("/etc/rc.d/netclient") {
  70. err := os.WriteFile("/etc/rc.d/netclient", rcbytes, 0744)
  71. if err != nil {
  72. return err
  73. }
  74. rcConfigbytes := []byte(rcConfig)
  75. if !ncutils.FileExists("/etc/rc.conf.d/netclient") {
  76. err := os.WriteFile("/etc/rc.conf.d/netclient", rcConfigbytes, 0644)
  77. if err != nil {
  78. return err
  79. }
  80. FreebsdDaemon("start")
  81. return nil
  82. }
  83. }
  84. return nil
  85. }
  86. // FreebsdDaemon - accepts args to service netclient and applies
  87. func FreebsdDaemon(command string) {
  88. _, _ = ncutils.RunCmdFormatted("service netclient "+command, true)
  89. }
  90. // CleanupFreebsd - removes config files and netclient binary
  91. func CleanupFreebsd() {
  92. RemoveFreebsdDaemon()
  93. if err := os.RemoveAll(ncutils.GetNetclientPath()); err != nil {
  94. logger.Log(1, "Removing netclient configs: ", err.Error())
  95. }
  96. if err := os.Remove(EXEC_DIR + "netclient"); err != nil {
  97. logger.Log(1, "Removing netclient binary: ", err.Error())
  98. }
  99. }
  100. // RemoveFreebsdDaemon - remove freebsd daemon
  101. func RemoveFreebsdDaemon() {
  102. if ncutils.FileExists("/etc/rc.d/netclient") {
  103. err := os.Remove("/etc/rc.d/netclient")
  104. if err != nil {
  105. logger.Log(0, "Error removing /etc/rc.d/netclient. Please investigate.")
  106. }
  107. }
  108. if ncutils.FileExists("/etc/rc.conf.d/netclient") {
  109. err := os.Remove("/etc/rc.conf.d/netclient")
  110. if err != nil {
  111. logger.Log(0, "Error removing /etc/rc.conf.d/netclient. Please investigate.")
  112. }
  113. }
  114. }