mirror of
				https://github.com/gravitl/netmaker.git
				synced 2025-10-31 20:22:44 +08:00 
			
		
		
		
	cleaned up uninstall and reinstall. Added a 'roaming' option to check for addresses
This commit is contained in:
		| @@ -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"` | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -28,6 +28,11 @@ func ConfigureSystemD() error { | ||||
|                 return err | ||||
|         } | ||||
|  | ||||
| 	_, 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) | ||||
| @@ -35,6 +40,7 @@ func ConfigureSystemD() error { | ||||
|         } | ||||
|  | ||||
|  | ||||
|  | ||||
| 	systemservice := `[Unit] | ||||
| Description=Regularly checks for updates in peers and local config | ||||
| Wants=netclient.timer | ||||
| @@ -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 | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
|                         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 afeiszli
					afeiszli