Browse Source

cleaned up uninstall and reinstall. Added a 'roaming' option to check for addresses

afeiszli 4 years ago
parent
commit
2637e0ee79
4 changed files with 147 additions and 46 deletions
  1. 1 0
      netclient/config/config.go
  2. 98 22
      netclient/functions/common.go
  3. 40 24
      netclient/functions/local.go
  4. 8 0
      netclient/main.go

+ 1 - 0
netclient/config/config.go

@@ -29,6 +29,7 @@ type NodeConfig struct {
         MacAddress string `yaml:"macaddress"`
         LocalAddress string `yaml:"localaddress"`
         WGAddress string `yaml:"wgaddress"`
+        RoamingOff bool `yaml:"roamingoff"`
         PostUp string `yaml:"postup"`
         PreUp string `yaml:"preup"`
         Port int32 `yaml:"port"`

+ 98 - 22
netclient/functions/common.go

@@ -4,6 +4,7 @@ import (
 	//"github.com/davecgh/go-spew/spew"
 	"fmt"
 	"time"
+	"errors"
 	"context"
         "net/http"
         "io/ioutil"
@@ -449,8 +450,6 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
 	match := false
 	addrs, _ := currentiface.Addrs()
 	for _, a := range addrs {
-		fmt.Println("Current address: " + a.String())
-		fmt.Println("node.Address: " + node.Address)
 		if strings.Contains(a.String(), node.Address){
 			match = true
 		}
@@ -515,24 +514,6 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
         }
 	return err
 }
-/*
-func reconfigureWireguardSelf(node  nodepb.Node) error {
-
-}
-
-func reconfigureWireguardPeers(peers []nodepb.PeersResponse) error {
-
-}
-
-
-func update(node nodepb.Node) error {
-
-}
-
-func updateLocal() error {
-
-}
-*/
 
 func setWGConfig() error {
         servercfg := config.Config.Server
@@ -568,6 +549,66 @@ func retrievePrivKey() (string, error) {
 }
 
 
+func getPublicAddr() (string, error) {
+       resp, err := http.Get("https://ifconfig.me")
+       if err != nil {
+                return "", err
+       }
+       defer resp.Body.Close()
+		endpoint := ""
+		if resp.StatusCode == http.StatusOK {
+                        bodyBytes, err := ioutil.ReadAll(resp.Body)
+			if err != nil {
+				return "", err
+			}
+			endpoint = string(bodyBytes)
+		}
+                return endpoint, err
+}
+func getPrivateAddr() (string, error) {
+                ifaces, err := net.Interfaces()
+                if err != nil {
+                        return "", err
+                }
+                var local string
+                found := false
+                for _, i := range ifaces {
+                        if i.Flags&net.FlagUp == 0 {
+                                continue // interface down
+                        }
+                        if i.Flags&net.FlagLoopback != 0 {
+                                continue // loopback interface
+                        }
+                        addrs, err := i.Addrs()
+                        if err != nil {
+                                return "", err
+                        }
+                        for _, addr := range addrs {
+                                var ip net.IP
+                                switch v := addr.(type) {
+                                case *net.IPNet:
+                                        if !found {
+                                                ip = v.IP
+                                                local = ip.String()
+                                                found = true
+                                        }
+                                case *net.IPAddr:
+                                        if  !found {
+                                                ip = v.IP
+                                                local = ip.String()
+                                                found = true
+                                        }
+                                }
+                        }
+                }
+		if !found {
+			err := errors.New("Local Address Not Found.")
+			return "", err
+		}
+		return local, err
+}
+
+
 func CheckIn() error {
 	node := getNode()
         nodecfg := config.Config.Node
@@ -576,6 +617,39 @@ func CheckIn() error {
 
 	setupcheck := true
 
+	if !nodecfg.RoamingOff {
+		fmt.Println("Checking to see if addresses have changed")
+		extIP, err := getPublicAddr()
+		if err != nil {
+			fmt.Printf("Error encountered checking ip addresses: %v", err)
+		}
+		if nodecfg.Endpoint != extIP  && extIP != "" {
+	                fmt.Println("Endpoint has changed from " +
+			nodecfg.Endpoint + " to " + extIP)
+			fmt.Println("Updating address")
+			nodecfg.Endpoint = extIP
+			nodecfg.PostChanges = "true"
+			node.Endpoint = extIP
+			node.Postchanges = "true"
+		}
+		intIP, err := getPrivateAddr()
+                if err != nil {
+                        fmt.Printf("Error encountered checking ip addresses: %v", err)
+                }
+                if nodecfg.LocalAddress != intIP  && intIP != "" {
+                        fmt.Println("Local Address has changed from " +
+			nodecfg.LocalAddress + " to " + intIP)
+			fmt.Println("Updating address")
+			nodecfg.LocalAddress = intIP
+			nodecfg.PostChanges = "true"
+			node.Localaddress = intIP
+			node.Postchanges = "true"
+                }
+		if node.Postchanges != "true" {
+			fmt.Println("Addresses have not changed.")
+		}
+	}
+
         var wcclient nodepb.NodeServiceClient
         var requestOpts grpc.DialOption
         requestOpts = grpc.WithInsecure()
@@ -807,8 +881,8 @@ func Remove() error {
 
 	err = WipeLocal()
 	if err != nil {
-                return err
-                log.Fatalf("Unable to wipe local config: %v", err)
+                //return err
+                log.Printf("Unable to wipe local config: %v", err)
 	}
 	err =  RemoveSystemDServices()
         if err != nil {
@@ -835,6 +909,7 @@ func WipeLocal() error{
         }
         ipExec, err := exec.LookPath("ip")
 
+	if ifacename != "" {
         cmdIPLinkDel := &exec.Cmd {
                 Path: ipExec,
                 Args: []string{ ipExec, "link", "del", ifacename },
@@ -845,6 +920,7 @@ func WipeLocal() error{
         if  err  !=  nil {
                 fmt.Println(err)
         }
+	}
 	return err
 
 }

+ 40 - 24
netclient/functions/local.go

@@ -28,11 +28,17 @@ func ConfigureSystemD() error {
                 return err
         }
 
-	_, err = copy(binarypath, "/etc/netclient/netclient")
+	_, err = copy(binarypath, "/usr/local/bin/netclient")
 	if err != nil {
 		log.Println(err)
 		return err
 	}
+        _, err = copy(binarypath, "/etc/netclient/netclient")
+        if err != nil {
+                log.Println(err)
+                return err
+        }
+
 
 
 	systemservice := `[Unit]
@@ -49,10 +55,10 @@ WantedBy=multi-user.target
 
 	systemtimer := `[Unit]
 Description=Calls the Netmaker Mesh Client Service
-Requires=netmaker.service
+Requires=netclient.service
 
 [Timer]
-Unit=netmaker.service
+Unit=netclient.service
 OnCalendar=*:*:0/30
 
 [Install]
@@ -62,13 +68,13 @@ WantedBy=timers.target
 	servicebytes := []byte(systemservice)
 	timerbytes := []byte(systemtimer)
 
-	err = ioutil.WriteFile("/etc/systemd/system/netmaker.service", servicebytes, 0644)
+	err = ioutil.WriteFile("/etc/systemd/system/netclient.service", servicebytes, 0644)
         if err != nil {
                 log.Println(err)
                 return err
         }
 
-        err = ioutil.WriteFile("/etc/systemd/system/netmaker.timer", timerbytes, 0644)
+        err = ioutil.WriteFile("/etc/systemd/system/netclient.timer", timerbytes, 0644)
         if err != nil {
                 log.Println(err)
                 return err
@@ -78,13 +84,13 @@ WantedBy=timers.target
 
         cmdSysEnableService := &exec.Cmd {
                 Path: sysExec,
-                Args: []string{ sysExec, "enable", "netmaker.service" },
+                Args: []string{ sysExec, "enable", "netclient.service" },
                 Stdout: os.Stdout,
                 Stderr: os.Stdout,
         }
         cmdSysStartService := &exec.Cmd {
                 Path: sysExec,
-                Args: []string{ sysExec, "start", "netmaker.service"},
+                Args: []string{ sysExec, "start", "netclient.service"},
                 Stdout: os.Stdout,
                 Stderr: os.Stdout,
         }
@@ -96,25 +102,25 @@ WantedBy=timers.target
         }
         cmdSysEnableTimer := &exec.Cmd {
                 Path: sysExec,
-                Args: []string{ sysExec, "enable", "netmaker.timer" },
+                Args: []string{ sysExec, "enable", "netclient.timer" },
                 Stdout: os.Stdout,
                 Stderr: os.Stdout,
         }
         cmdSysStartTimer := &exec.Cmd {
                 Path: sysExec,
-		Args: []string{ sysExec, "start", "netmaker.timer"},
+		Args: []string{ sysExec, "start", "netclient.timer"},
                 Stdout: os.Stdout,
                 Stderr: os.Stdout,
         }
 
         err = cmdSysEnableService.Run()
         if  err  !=  nil {
-                fmt.Println("Error enabling netmaker.service. Please investigate.")
+                fmt.Println("Error enabling netclient.service. Please investigate.")
                 fmt.Println(err)
         }
         err = cmdSysStartService.Run()
         if  err  !=  nil {
-                fmt.Println("Error starting netmaker.service. Please investigate.")
+                fmt.Println("Error starting netclient.service. Please investigate.")
                 fmt.Println(err)
         }
         err = cmdSysDaemonReload.Run()
@@ -124,12 +130,12 @@ WantedBy=timers.target
         }
         err = cmdSysEnableTimer.Run()
         if  err  !=  nil {
-                fmt.Println("Error enabling netmaker.timer. Please investigate.")
+                fmt.Println("Error enabling netclient.timer. Please investigate.")
                 fmt.Println(err)
         }
         err = cmdSysStartTimer.Run()
         if  err  !=  nil {
-                fmt.Println("Error starting netmaker.timer. Please investigate.")
+                fmt.Println("Error starting netclient.timer. Please investigate.")
                 fmt.Println(err)
         }
 	return nil
@@ -140,13 +146,13 @@ func RemoveSystemDServices() error {
 
         cmdSysStopService := &exec.Cmd {
                 Path: sysExec,
-                Args: []string{ sysExec, "stop", "netmaker.service" },
+                Args: []string{ sysExec, "stop", "netclient.service" },
                 Stdout: os.Stdout,
                 Stderr: os.Stdout,
         }
         cmdSysDisableService := &exec.Cmd {
                 Path: sysExec,
-                Args: []string{ sysExec, "disable", "netmaker.service"},
+                Args: []string{ sysExec, "disable", "netclient.service"},
                 Stdout: os.Stdout,
                 Stderr: os.Stdout,
         }
@@ -156,42 +162,48 @@ func RemoveSystemDServices() error {
                 Stdout: os.Stdout,
                 Stderr: os.Stdout,
         }
+        cmdSysResetFailed := &exec.Cmd {
+                Path: sysExec,
+                Args: []string{ sysExec, "reset-failed"},
+                Stdout: os.Stdout,
+                Stderr: os.Stdout,
+        }
         cmdSysStopTimer := &exec.Cmd {
                 Path: sysExec,
-                Args: []string{ sysExec, "stop", "netmaker.timer" },
+                Args: []string{ sysExec, "stop", "netclient.timer" },
                 Stdout: os.Stdout,
                 Stderr: os.Stdout,
         }
         cmdSysDisableTimer := &exec.Cmd {
                 Path: sysExec,
-                Args: []string{ sysExec, "disable", "netmaker.timer"},
+                Args: []string{ sysExec, "disable", "netclient.timer"},
                 Stdout: os.Stdout,
                 Stderr: os.Stdout,
         }
 
         err = cmdSysStopService.Run()
         if  err  !=  nil {
-                fmt.Println("Error stopping netmaker.service. Please investigate.")
+                fmt.Println("Error stopping netclient.service. Please investigate.")
                 fmt.Println(err)
         }
         err = cmdSysDisableService.Run()
         if  err  !=  nil {
-                fmt.Println("Error disabling netmaker.service. Please investigate.")
+                fmt.Println("Error disabling netclient.service. Please investigate.")
                 fmt.Println(err)
         }
         err = cmdSysStopTimer.Run()
         if  err  !=  nil {
-                fmt.Println("Error stopping netmaker.timer. Please investigate.")
+                fmt.Println("Error stopping netclient.timer. Please investigate.")
                 fmt.Println(err)
         }
         err = cmdSysDisableTimer.Run()
         if  err  !=  nil {
-                fmt.Println("Error disabling netmaker.timer. Please investigate.")
+                fmt.Println("Error disabling netclient.timer. Please investigate.")
                 fmt.Println(err)
         }
 
-	err = os.Remove("/etc/systemd/system/netmaker.service")
-	err = os.Remove("/etc/systemd/system/netmaker.timer")
+	err = os.Remove("/etc/systemd/system/netclient.service")
+	err = os.Remove("/etc/systemd/system/netclient.timer")
 	if err != nil {
                 fmt.Println("Error removing file. Please investigate.")
                 fmt.Println(err)
@@ -201,7 +213,11 @@ func RemoveSystemDServices() error {
                 fmt.Println("Error reloading system daemons. Please investigate.")
                 fmt.Println(err)
         }
-
+        err = cmdSysResetFailed.Run()
+        if  err  !=  nil {
+                fmt.Println("Error reseting failed system services. Please investigate.")
+                fmt.Println(err)
+        }
 	return err
 
 }

+ 8 - 0
netclient/main.go

@@ -60,6 +60,10 @@ func main() {
 					if err != nil {
 						fmt.Println("Error removing artifacts: ", err)
 					}
+                                        err = functions.RemoveSystemDServices()
+                                        if err != nil {
+                                                fmt.Println("Error removing services: ", err)
+                                        }
 				}
 				os.Exit(1)
 			}
@@ -94,6 +98,10 @@ func main() {
                                         if err != nil {
                                                 fmt.Println("Error removing artifacts: ", err)
                                         }
+                                        err = functions.RemoveSystemDServices()
+                                        if err != nil {
+                                                fmt.Println("Error removing services: ", err)
+                                        }
                                 fmt.Println("Error deleting node: ", err)
                                 os.Exit(1)
                         }