Browse Source

added verbose command logs

afeiszli 3 years ago
parent
commit
5c3bcbc32a

+ 1 - 1
main.go

@@ -38,7 +38,7 @@ func initialize() { // Client Mode Prereq Check
 	}
 	log.Println("database successfully connected.")
 	if servercfg.IsClientMode() {
-		output, err := local.RunCmd("id -u")
+		output, err := local.RunCmd("id -u", true)
 		if err != nil {
 			log.Println("Error running 'id -u' for prereq check. Please investigate or disable client mode.")
 			log.Fatal(output, err)

+ 1 - 1
netclient/command/commands.go

@@ -26,7 +26,7 @@ func Join(cfg config.ClientConfig, privateKey string) error {
 
 	err := functions.JoinNetwork(cfg, privateKey)
 
-	if err != nil {
+	if err != nil && !cfg.DebugJoin {
 		if !strings.Contains(err.Error(), "ALREADY_INSTALLED") {
 			log.Println("Error installing: ", err)
 			err = functions.LeaveNetwork(cfg.Network)

+ 1 - 1
netclient/config/config.go

@@ -8,7 +8,6 @@ import (
 	"fmt"
 	"log"
 	"os"
-
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/netclient/netclientutils"
 	"github.com/urfave/cli/v2"
@@ -26,6 +25,7 @@ type ClientConfig struct {
 	Network         string       `yaml:"network"`
 	Daemon          string       `yaml:"daemon"`
 	OperatingSystem string       `yaml:"operatingsystem"`
+	DebugJoin		bool		 `yaml:"debugjoin"`
 }
 type ServerConfig struct {
 	CoreDNSAddr   string `yaml:"corednsaddr"`

+ 4 - 9
netclient/functions/common.go

@@ -178,20 +178,15 @@ func DeleteInterface(ifacename string, postdown string) error {
 	if netclientutils.IsWindows() {
 		err = local.RemoveWindowsConf(ifacename)
 	} else {
-		ipExec, err := exec.LookPath("ip")
+		ipExec, errN := exec.LookPath("ip")
+		err = errN
 		if err != nil {
 			log.Println(err)
 		}
-		out, err := local.RunCmd(ipExec + " link del " + ifacename)
-		if err != nil {
-			log.Println(out, err)
-		}
+		_, err = local.RunCmd(ipExec + " link del " + ifacename, false)
 		if postdown != "" {
 			runcmds := strings.Split(postdown, "; ")
-			err = local.RunCmds(runcmds)
-			if err != nil {
-				log.Println("Error encountered running PostDown: " + err.Error())
-			}
+			err = local.RunCmds(runcmds, true)
 		}
 	}
 	return err

+ 3 - 6
netclient/local/dns.go

@@ -42,20 +42,17 @@ func UpdateDNS(ifacename string, network string, nameserver string) error {
 		log.Println(err)
 		log.Println("WARNING: resolvectl not present. Unable to set dns. Install resolvectl or run manually.")
 	} else {
-		_, err = RunCmd("resolvectl domain " + ifacename + " ~" + network)
+		_, err = RunCmd("resolvectl domain " + ifacename + " ~" + network, true)
 		if err != nil {
-			log.Println(err)
 			log.Println("WARNING: Error encountered setting domain on dns. Aborted setting dns.")
 		} else {
-			_, err = RunCmd("resolvectl default-route " + ifacename + " false")
+			_, err = RunCmd("resolvectl default-route " + ifacename + " false", true)
 			if err != nil {
-				log.Println(err)
 				log.Println("WARNING: Error encountered setting default-route on dns. Aborted setting dns.")
 			} else {
-				_, err = RunCmd("resolvectl dns " + ifacename + " " + nameserver)
+				_, err = RunCmd("resolvectl dns " + ifacename + " " + nameserver, true)
 				if err != nil {
 					log.Println("WARNING: Error encountered running resolvectl dns " + ifacename + " " + nameserver)
-					log.Println(err)
 				}
 			}
 		}

+ 30 - 65
netclient/local/local.go

@@ -29,17 +29,15 @@ func SetIPForwarding() error {
 }
 
 func SetIPForwardingLinux() error {
-	out, err := RunCmd("sysctl net.ipv4.ip_forward")
+	out, err := RunCmd("sysctl net.ipv4.ip_forward", true)
 	if err != nil {
-		log.Println(err)
 		log.Println("WARNING: Error encountered setting ip forwarding. This can break functionality.")
 		return err
 	} else {
 		s := strings.Fields(string(out))
 		if s[2] != "1" {
-			_, err = RunCmd("sysctl -w net.ipv4.ip_forward=1")
+			_, err = RunCmd("sysctl -w net.ipv4.ip_forward=1", true)
 			if err != nil {
-				log.Println(err)
 				log.Println("WARNING: Error encountered setting ip forwarding. You may want to investigate this.")
 				return err
 			}
@@ -48,23 +46,25 @@ func SetIPForwardingLinux() error {
 	return nil
 }
 
-func RunCmd(command string) (string, error) {
+func RunCmd(command string, printerr bool) (string, error) {
 	args := strings.Fields(command)
-	out, err := exec.Command(args[0], args[1:]...).Output()
+	out, err := exec.Command(args[0], args[1:]...).CombinedOutput()
+	if err != nil && printerr {
+		log.Println("error running command:",command)
+		log.Println(string(out))
+	}
 	return string(out), err
 }
 
-func RunCmds(commands []string) error {
+func RunCmds(commands []string, printerr bool) error {
 	var err error
 	for _, command := range commands {
 		args := strings.Fields(command)
-		out, err := exec.Command(args[0], args[1:]...).Output()
-		if string(out) != "" {
+		out, err := exec.Command(args[0], args[1:]...).CombinedOutput()
+		if err != nil && printerr {
+			log.Println("error running command:",command)
 			log.Println(string(out))
 		}
-		if err != nil {
-			return err
-		}
 	}
 	return err
 }
@@ -175,26 +175,10 @@ WantedBy=timers.target
 		}
 	}
 
-	_, err = RunCmd("systemctl enable [email protected]")
-	if err != nil {
-		log.Println("Error enabling [email protected]. Please investigate.")
-		log.Println(err)
-	}
-	_, err = RunCmd("systemctl daemon-reload")
-	if err != nil {
-		log.Println("Error reloading system daemons. Please investigate.")
-		log.Println(err)
-	}
-	_, err = RunCmd("systemctl enable netclient-" + network + ".timer")
-	if err != nil {
-		log.Println("Error enabling netclient.timer. Please investigate.")
-		log.Println(err)
-	}
-	_, err = RunCmd("systemctl start netclient-" + network + ".timer")
-	if err != nil {
-		log.Println("Error starting netclient-" + network + ".timer. Please investigate.")
-		log.Println(err)
-	}
+	_, _ = RunCmd("systemctl enable [email protected]", true)
+	_, _ = RunCmd("systemctl daemon-reload", true)
+	_, _ = RunCmd("systemctl enable netclient-" + network + ".timer", true)
+	_, _ = RunCmd("systemctl start netclient-" + network + ".timer", true)
 	return nil
 }
 
@@ -221,21 +205,12 @@ func RemoveSystemDServices(network string) error {
 		}
 
 		if fullremove {
-			_, err = RunCmd("systemctl disable [email protected]")
-			if err != nil {
-				log.Println("Error disabling [email protected]. Please investigate.")
-				log.Println(err)
-			}
+			_, err = RunCmd("systemctl disable [email protected]", true)
 		}
-		_, err = RunCmd("systemctl daemon-reload")
-		if err != nil {
-			log.Println("Error stopping netclient-" + network + ".timer. Please investigate.")
-			log.Println(err)
-		}
-		_, err = RunCmd("systemctl disable netclient-" + network + ".timer")
-		if err != nil {
-			log.Println("Error disabling netclient-" + network + ".timer. Please investigate.")
-			log.Println(err)
+		_, _ = RunCmd("systemctl daemon-reload", true)
+
+		if FileExists("/etc/systemd/system/netclient-" + network + ".timer") {
+			_, _ = RunCmd("systemctl disable netclient-" + network + ".timer", true)
 		}
 		if fullremove {
 			if FileExists("/etc/systemd/system/[email protected]") {
@@ -249,17 +224,8 @@ func RemoveSystemDServices(network string) error {
 			log.Println("Error removing file. Please investigate.")
 			log.Println(err)
 		}
-		_, err = RunCmd("systemctl daemon-reload")
-		if err != nil {
-			log.Println("Error reloading system daemons. Please investigate.")
-			log.Println(err)
-		}
-		_, err = RunCmd("systemctl reset-failed")
-		if err != nil {
-			log.Println("Error reseting failed system services. Please investigate.")
-			log.Println(err)
-		}
-		return err
+		_, _ = RunCmd("systemctl daemon-reload", true)
+		_, _ = RunCmd("systemctl reset-failed", true)
 	}
 	return nil
 }
@@ -291,7 +257,7 @@ func WipeLocal(network string) error {
 
 	if ifacename != "" {
 		if netclientutils.IsWindows() {
-			if err := RemoveWindowsConf(ifacename); err == nil {
+			if err = RemoveWindowsConf(ifacename); err == nil {
 				log.Println("removed Windows interface", ifacename)
 			}
 		} else {
@@ -299,16 +265,15 @@ func WipeLocal(network string) error {
 			if err != nil {
 				return err
 			}
-			out, err := RunCmd(ipExec + " link del " + ifacename)
-			if err != nil {
-				log.Println(out, err)
+			out, err := RunCmd(ipExec + " link del " + ifacename, false)
+			dontprint := strings.Contains(out, "does not exist") || strings.Contains(out, "Cannot find device")
+			if err != nil && !dontprint {
+				log.Println("error running command:",ipExec + " link del " + ifacename)
+				log.Println(out)
 			}
 			if nodecfg.PostDown != "" {
 				runcmds := strings.Split(nodecfg.PostDown, "; ")
-				err = RunCmds(runcmds)
-				if err != nil {
-					log.Println("Error encountered running PostDown: " + err.Error())
-				}
+				_ = RunCmds(runcmds, false)
 			}
 		}
 	}

+ 7 - 7
netclient/local/windows.go

@@ -13,7 +13,7 @@ import (
 )
 
 func IsWindowsWGInstalled() bool {
-	out, err := RunCmd("wg help")
+	out, err := RunCmd("wg help", true)
 	if err != nil {
 		return false
 	}
@@ -21,14 +21,14 @@ func IsWindowsWGInstalled() bool {
 }
 
 func ApplyWindowsConf(confPath string) error {
-	if _, err := RunCmd("wireguard.exe /installtunnelservice " + confPath); err != nil {
+	if _, err := RunCmd("wireguard.exe /installtunnelservice " + confPath, true); err != nil {
 		return err
 	}
 	return nil
 }
 
 func RemoveWindowsConf(ifacename string) error {
-	if _, err := RunCmd("wireguard.exe /uninstalltunnelservice " + ifacename); err != nil {
+	if _, err := RunCmd("wireguard.exe /uninstalltunnelservice " + ifacename, true); err != nil {
 		return err
 	}
 	return nil
@@ -58,12 +58,12 @@ func writeServiceConfig() error {
 func StopWindowsDaemon() {
 	netclientutils.Log("no networks detected, stopping Windows, Netclient daemon")
 	// stop daemon, will not overwrite
-	RunCmd(strings.Replace(netclientutils.GetNetclientPathSpecific(), `\\`, `\`, -1) + `winsw.exe stop`)
+	RunCmd(strings.Replace(netclientutils.GetNetclientPathSpecific(), `\\`, `\`, -1) + `winsw.exe stop`, true)
 }
 
 func RemoveWindowsDaemon() {
 	// uninstall daemon, will not restart or start another
-	RunCmd(strings.Replace(netclientutils.GetNetclientPathSpecific(), `\\`, `\`, -1) + `winsw.exe uninstall`)
+	RunCmd(strings.Replace(netclientutils.GetNetclientPathSpecific(), `\\`, `\`, -1) + `winsw.exe uninstall`, true)
 	netclientutils.Log("uninstalled Windows, Netclient daemon")
 }
 
@@ -144,9 +144,9 @@ func CreateAndRunWindowsDaemon() error {
 		netclientutils.Log("finished daemon setup")
 	}
 	// install daemon, will not overwrite
-	RunCmd(strings.Replace(netclientutils.GetNetclientPathSpecific(), `\\`, `\`, -1) + `winsw.exe install`)
+	RunCmd(strings.Replace(netclientutils.GetNetclientPathSpecific(), `\\`, `\`, -1) + `winsw.exe install`, true)
 	// start daemon, will not restart or start another
-	RunCmd(strings.Replace(netclientutils.GetNetclientPathSpecific(), `\\`, `\`, -1) + `winsw.exe start`)
+	RunCmd(strings.Replace(netclientutils.GetNetclientPathSpecific(), `\\`, `\`, -1) + `winsw.exe start`, true)
 	netclientutils.Log(strings.Replace(netclientutils.GetNetclientPathSpecific(), `\\`, `\`, -1) + `winsw.exe start`)
 	return nil
 }

+ 1 - 1
netclient/main.go

@@ -324,7 +324,7 @@ func main() {
 		ncwindows.InitWindows()
 	} else {
 		// start our application
-		out, err := local.RunCmd("id -u")
+		out, err := local.RunCmd("id -u", true)
 
 		if err != nil {
 			log.Fatal(out, err)

+ 18 - 45
netclient/wireguard/kernel.go

@@ -68,19 +68,9 @@ func InitWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig
 			return err
 		}
 
-		_, delErr := local.RunCmd("ip link delete dev " + ifacename)
-		addLinkOut, addLinkErr := local.RunCmd(ipExec + " link add dev " + ifacename + " type wireguard")
-		addOut, addErr := local.RunCmd(ipExec + " address add dev " + ifacename + " " + node.Address + "/24")
-		if delErr != nil {
-			// not displaying error
-			// log.Println(delOut, delErr)
-		}
-		if addLinkErr != nil {
-			log.Println(addLinkOut, addLinkErr)
-		}
-		if addErr != nil {
-			log.Println(addOut, addErr)
-		}
+		_, _ = local.RunCmd("ip link delete dev " + ifacename, false)
+		_, _ = local.RunCmd(ipExec + " link add dev " + ifacename + " type wireguard", true)
+		_, _ = local.RunCmd(ipExec + " address add dev " + ifacename + " " + node.Address + "/24", true)
 	}
 	var nodeport int
 	nodeport = int(node.ListenPort)
@@ -151,47 +141,33 @@ func InitWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig
 			_ = local.UpdateDNS(ifacename, network, nameserver)
 		}
 		//=========End DNS Setup=======\\
-		if _, err := local.RunCmd(ipExec + " link set down dev " + ifacename); err != nil {
+		if _, err := local.RunCmd(ipExec + " link set down dev " + ifacename, false); err != nil {
 			netclientutils.Log("attempted to remove interface before editing")
 			return err
 		}
 
 		if nodecfg.PostDown != "" {
 			runcmds := strings.Split(nodecfg.PostDown, "; ")
-			err = local.RunCmds(runcmds)
-			if err != nil {
-				fmt.Println("Error encountered running PostDown: " + err.Error())
-			}
+			err = local.RunCmds(runcmds, true)
 		}
 		// set MTU of node interface
-		if _, err := local.RunCmd(ipExec + " link set mtu " + strconv.Itoa(int(nodecfg.MTU)) + " up dev " + ifacename); err != nil {
+		if _, err := local.RunCmd(ipExec + " link set mtu " + strconv.Itoa(int(nodecfg.MTU)) + " up dev " + ifacename, true); err != nil {
 			netclientutils.Log("failed to create interface with mtu " + ifacename)
 			return err
 		}
 
 		if nodecfg.PostUp != "" {
 			runcmds := strings.Split(nodecfg.PostUp, "; ")
-			err = local.RunCmds(runcmds)
-			if err != nil {
-				fmt.Println("Error encountered running PostUp: " + err.Error())
-			}
+			err = local.RunCmds(runcmds, true)
 		}
 		if hasGateway {
 			for _, gateway := range gateways {
-				out, err := local.RunCmd(ipExec + " -4 route add " + gateway + " dev " + ifacename)
-				fmt.Println(string(out))
-				if err != nil {
-					fmt.Println("error encountered adding gateway: " + err.Error())
-				}
+				_, _ = local.RunCmd(ipExec + " -4 route add " + gateway + " dev " + ifacename, true)
 			}
 		}
 		if node.Address6 != "" && node.IsDualStack == "yes" {
-			fmt.Println("adding address: " + node.Address6)
-			out, err := local.RunCmd(ipExec + " address add dev " + ifacename + " " + node.Address6 + "/64")
-			if err != nil {
-				fmt.Println(out)
-				fmt.Println("error encountered adding ipv6: " + err.Error())
-			}
+			log.Println("[netclient] adding address: " + node.Address6, 1)
+			_, _ = local.RunCmd(ipExec + " address add dev " + ifacename + " " + node.Address6 + "/64", true)
 		}
 	}
 	return err
@@ -287,9 +263,9 @@ func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) error {
 		for _, currentPeer := range devicePeers {
 			if currentPeer.AllowedIPs[0].String() == peer.AllowedIPs[0].String() &&
 				currentPeer.PublicKey.String() != peer.PublicKey.String() {
-				output, err := local.RunCmd("wg set " + iface + " peer " + currentPeer.PublicKey.String() + " remove")
+				_, err := local.RunCmd("wg set " + iface + " peer " + currentPeer.PublicKey.String() + " remove", true)
 				if err != nil {
-					log.Println(output, "error removing peer", peer.Endpoint.String())
+					log.Println("error removing peer", peer.Endpoint.String())
 				}
 			}
 		}
@@ -304,19 +280,18 @@ func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) error {
 		if keepAliveString == "0" {
 			keepAliveString = "5"
 		}
-		var output string
 		if peer.Endpoint != nil {
-			output, err = local.RunCmd("wg set " + iface + " peer " + peer.PublicKey.String() +
+			_, err = local.RunCmd("wg set " + iface + " peer " + peer.PublicKey.String() +
 				" endpoint " + udpendpoint +
 				" persistent-keepalive " + keepAliveString +
-				" allowed-ips " + allowedips)
+				" allowed-ips " + allowedips, true)
 		} else {
-			output, err = local.RunCmd("wg set " + iface + " peer " + peer.PublicKey.String() +
+			_, err = local.RunCmd("wg set " + iface + " peer " + peer.PublicKey.String() +
 				" persistent-keepalive " + keepAliveString +
-				" allowed-ips " + allowedips)
+				" allowed-ips " + allowedips, true)
 		}
 		if err != nil {
-			log.Println(output, "error setting peer", peer.PublicKey.String(), err)
+			log.Println("error setting peer", peer.PublicKey.String())
 		}
 	}
 
@@ -328,11 +303,9 @@ func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) error {
 			}
 		}
 		if shouldDelete {
-			output, err := local.RunCmd("wg set " + iface + " peer " + currentPeer.PublicKey.String() + " remove")
+			output, err := local.RunCmd("wg set " + iface + " peer " + currentPeer.PublicKey.String() + " remove", true)
 			if err != nil {
 				log.Println(output, "error removing peer", currentPeer.PublicKey.String())
-			} else {
-				log.Println("removed peer " + currentPeer.PublicKey.String())
 			}
 		}
 	}

+ 2 - 0
serverctl/serverctl.go

@@ -138,6 +138,8 @@ func AddNetwork(network string) (bool, error) {
 	functions.PrintUserLog(models.NODE_SERVER_NAME, "executing network join: "+netclientPath+"netclient "+"join "+"-t "+token+" -name "+models.NODE_SERVER_NAME+" -endpoint "+pubip, 0)
 
 	joinCMD := exec.Command(netclientPath+"netclient", "join", "-t", token, "-name", models.NODE_SERVER_NAME, "-endpoint", pubip)
+	joinCMD.Stdout = os.Stdout
+	joinCMD.Stderr = os.Stderr
 	err = joinCMD.Start()
 
 	if err != nil {