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:
Alex 2021-03-26 10:39:32 -04:00 committed by GitHub
commit ba808517e5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 147 additions and 46 deletions

View file

@ -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"`

View file

@ -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
}

View file

@ -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
}

View file

@ -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)
}