123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- package daemon
- import (
- //"github.com/davecgh/go-spew/spew"
- "io/ioutil"
- "log"
- "os"
- "path/filepath"
- "github.com/gravitl/netmaker/netclient/ncutils"
- )
- func SetupSystemDDaemon(network string) error {
- if ncutils.IsWindows() {
- return nil
- }
- dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
- if err != nil {
- return err
- }
- binarypath := dir + "/netclient"
- _, err = os.Stat("/etc/netclient")
- if os.IsNotExist(err) {
- os.Mkdir("/etc/netclient", 744)
- } else if err != nil {
- log.Println("couldnt find or create /etc/netclient")
- return err
- }
- if !ncutils.FileExists("/usr/local/bin/netclient") {
- os.Symlink("/etc/netclient/netclient", "/usr/local/bin/netclient")
- }
- if !ncutils.FileExists("/etc/netclient/netclient") {
- _, err = ncutils.Copy(binarypath, "/etc/netclient/netclient")
- if err != nil {
- log.Println(err)
- return err
- }
- }
- systemservice := `[Unit]
- Description=Network Check
- Wants=netclient.timer
- [Service]
- Type=simple
- ExecStart=/etc/netclient/netclient checkin -n %i
- [Install]
- WantedBy=multi-user.target
- `
- systemtimer := `[Unit]
- Description=Calls the Netmaker Mesh Client Service
- `
- systemtimer = systemtimer + "Requires=netclient@" + network + ".service"
- systemtimer = systemtimer +
- `
- [Timer]
- `
- systemtimer = systemtimer + "Unit=netclient@" + network + ".service"
- systemtimer = systemtimer +
- `
- OnCalendar=*:*:0/30
- [Install]
- WantedBy=timers.target
- `
- servicebytes := []byte(systemservice)
- timerbytes := []byte(systemtimer)
- if !ncutils.FileExists("/etc/systemd/system/[email protected]") {
- err = ioutil.WriteFile("/etc/systemd/system/[email protected]", servicebytes, 0644)
- if err != nil {
- log.Println(err)
- return err
- }
- }
- if !ncutils.FileExists("/etc/systemd/system/netclient-" + network + ".timer") {
- err = ioutil.WriteFile("/etc/systemd/system/netclient-"+network+".timer", timerbytes, 0644)
- if err != nil {
- log.Println(err)
- return err
- }
- }
- _, _ = ncutils.RunCmd("systemctl enable [email protected]", true)
- _, _ = ncutils.RunCmd("systemctl daemon-reload", true)
- _, _ = ncutils.RunCmd("systemctl enable netclient-"+network+".timer", true)
- _, _ = ncutils.RunCmd("systemctl start netclient-"+network+".timer", true)
- return nil
- }
- func RemoveSystemDServices(network string) error {
- //sysExec, err := exec.LookPath("systemctl")
- if !ncutils.IsWindows() {
- fullremove, err := isOnlyService(network)
- if err != nil {
- log.Println(err)
- }
- if fullremove {
- _, err = ncutils.RunCmd("systemctl disable [email protected]", true)
- }
- _, _ = ncutils.RunCmd("systemctl daemon-reload", true)
- if ncutils.FileExists("/etc/systemd/system/netclient-" + network + ".timer") {
- _, _ = ncutils.RunCmd("systemctl disable netclient-"+network+".timer", true)
- }
- if fullremove {
- if ncutils.FileExists("/etc/systemd/system/[email protected]") {
- err = os.Remove("/etc/systemd/system/[email protected]")
- }
- }
- if ncutils.FileExists("/etc/systemd/system/netclient-" + network + ".timer") {
- err = os.Remove("/etc/systemd/system/netclient-" + network + ".timer")
- }
- if err != nil {
- log.Println("Error removing file. Please investigate.")
- log.Println(err)
- }
- _, _ = ncutils.RunCmd("systemctl daemon-reload", true)
- _, _ = ncutils.RunCmd("systemctl reset-failed", true)
- }
- return nil
- }
- func isOnlyService(network string) (bool, error) {
- isonly := false
- files, err := filepath.Glob("/etc/netclient/netconfig-*")
- if err != nil {
- return isonly, err
- }
- count := len(files)
- if count == 0 {
- isonly = true
- }
- return isonly, err
- }
|