mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-11 15:44:52 +08:00
Merge pull request #10 from gravitl/roaming_hotfix_v0.1
cleaned up uninstall and reinstall. Added a 'roaming' option to check…
This commit is contained in:
commit
ba808517e5
4 changed files with 147 additions and 46 deletions
|
@ -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,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
|
||||
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue