added verbose command logs

This commit is contained in:
afeiszli 2021-09-17 13:28:32 -04:00
parent 31ea969e3d
commit 5c3bcbc32a
10 changed files with 68 additions and 136 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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 netclient@.service")
if err != nil {
log.Println("Error enabling netclient@.service. 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 netclient@.service", 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 netclient@.service")
if err != nil {
log.Println("Error disabling netclient@.service. Please investigate.")
log.Println(err)
}
_, err = RunCmd("systemctl disable netclient@.service", 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/netclient@.service") {
@ -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)
}
}
}

View file

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

View file

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

View file

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

View file

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