mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-07 05:34:38 +08:00
added verbose command logs
This commit is contained in:
parent
31ea969e3d
commit
5c3bcbc32a
10 changed files with 68 additions and 136 deletions
2
main.go
2
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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"`
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Add table
Reference in a new issue