Browse Source

Merge pull request #429 from gravitl/hotfix_v0.8.5_multifix

Hotfix v0.8.5 multifix
Alex 3 years ago
parent
commit
b950818d0d

+ 61 - 0
compose/docker-compose.contained.yml

@@ -0,0 +1,61 @@
+version: "3.4"
+
+services:
+  netmaker:
+    container_name: netmaker
+    image: gravitl/netmaker:v0.8.5
+    volumes:
+      - dnsconfig:/root/config/dnsconfig
+      - /usr/bin/wg:/usr/bin/wg
+      - sqldata:/root/data
+    cap_add: 
+      - NET_ADMIN
+    restart: always
+    privileged: true
+    environment:
+      SERVER_HOST: "SERVER_PUBLIC_IP"
+      SERVER_API_CONN_STRING: "api.NETMAKER_BASE_DOMAIN:443"
+      SERVER_GRPC_CONN_STRING: "grpc.NETMAKER_BASE_DOMAIN:443"
+      COREDNS_ADDR: "SERVER_PUBLIC_IP"
+      GRPC_SSL: "on"
+      DNS_MODE: "on"
+      SERVER_HTTP_HOST: "api.NETMAKER_BASE_DOMAIN"
+      SERVER_GRPC_HOST: "grpc.NETMAKER_BASE_DOMAIN"
+      API_PORT: "8081"
+      GRPC_PORT: "50051"
+      CLIENT_MODE: "on"
+      MASTER_KEY: "REPLACE_MASTER_KEY"
+      SERVER_GRPC_WIREGUARD: "off"
+      CORS_ALLOWED_ORIGIN: "*"
+      DATABASE: "sqlite"
+    ports:
+      - "51821-51830:51821-51830/udp"
+      - "8081:8081"
+      - "50051:50051"
+  netmaker-ui:
+    container_name: netmaker-ui
+    depends_on:
+      - netmaker
+    image: gravitl/netmaker-ui:v0.8.5
+    links:
+      - "netmaker:api"
+    ports:
+      - "8082:80"
+    environment:
+      BACKEND_URL: "https://api.NETMAKER_BASE_DOMAIN"
+    restart: always
+  coredns:
+    depends_on:
+      - netmaker 
+    image: coredns/coredns
+    command: -conf /root/dnsconfig/Corefile
+    container_name: coredns
+    restart: always
+    ports:
+      - "COREDNS_IP:53:53/udp"
+      - "COREDNS_IP:53:53/tcp"
+    volumes:
+      - dnsconfig:/root/dnsconfig
+volumes:
+  sqldata: {}
+  dnsconfig: {}

+ 8 - 5
compose/docker-compose.yml

@@ -5,12 +5,18 @@ services:
     container_name: netmaker
     container_name: netmaker
     image: gravitl/netmaker:v0.8.5
     image: gravitl/netmaker:v0.8.5
     volumes:
     volumes:
-      - dnsconfig:/root/config/dnsconfig
+      - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket
+      - /run/systemd/system:/run/systemd/system
+      - /etc/systemd/system:/etc/systemd/system
+      - /sys/fs/cgroup:/sys/fs/cgroup
       - /usr/bin/wg:/usr/bin/wg
       - /usr/bin/wg:/usr/bin/wg
+      - dnsconfig:/root/config/dnsconfig
       - sqldata:/root/data
       - sqldata:/root/data
     cap_add: 
     cap_add: 
       - NET_ADMIN
       - NET_ADMIN
+      - SYS_ADMIN
     restart: always
     restart: always
+    network_mode: host
     privileged: true
     privileged: true
     environment:
     environment:
       SERVER_HOST: "SERVER_PUBLIC_IP"
       SERVER_HOST: "SERVER_PUBLIC_IP"
@@ -28,10 +34,7 @@ services:
       SERVER_GRPC_WIREGUARD: "off"
       SERVER_GRPC_WIREGUARD: "off"
       CORS_ALLOWED_ORIGIN: "*"
       CORS_ALLOWED_ORIGIN: "*"
       DATABASE: "sqlite"
       DATABASE: "sqlite"
-    ports:
-      - "51821-51830:51821-51830/udp"
-      - "8081:8081"
-      - "50051:50051"
+      NODE_ID: "netmaker-server-1"
   netmaker-ui:
   netmaker-ui:
     container_name: netmaker-ui
     container_name: netmaker-ui
     depends_on:
     depends_on:

+ 46 - 1
netclient/config/config.go

@@ -6,6 +6,7 @@ import (
 	"encoding/json"
 	"encoding/json"
 	"errors"
 	"errors"
 	"fmt"
 	"fmt"
+	"io/ioutil"
 	"log"
 	"log"
 	"os"
 	"os"
 
 
@@ -208,6 +209,44 @@ func ModConfig(node *models.Node) error {
 	return err
 	return err
 }
 }
 
 
+// ModConfig - overwrites the node inside client config on disk
+func SaveBackup(network string) error {
+
+	var configPath = ncutils.GetNetclientPathSpecific() + "netconfig-" + network
+	var backupPath = ncutils.GetNetclientPathSpecific() + "backup.netconfig-" + network
+	if FileExists(configPath) {
+		input, err := ioutil.ReadFile(configPath)
+		if err != nil {
+			ncutils.Log("failed to read " + configPath + " to make a backup")
+			return err
+		}
+		if err = ioutil.WriteFile(backupPath, input, 0644); err != nil {
+			ncutils.Log("failed to copy backup to " + backupPath)
+			return err
+		}
+	}
+	return nil
+}
+
+// ReplaceWithBackup - replaces netconfig file with backup
+func ReplaceWithBackup(network string) error {
+	var backupPath = ncutils.GetNetclientPathSpecific() + "backup.netconfig-" + network
+	var configPath = ncutils.GetNetclientPathSpecific() + "netconfig-" + network
+	if FileExists(backupPath) {
+		input, err := ioutil.ReadFile(backupPath)
+		if err != nil {
+			ncutils.Log("failed to read file " + backupPath + " to backup network: " + network)
+			return err
+		}
+		if err = ioutil.WriteFile(configPath, input, 0644); err != nil {
+			ncutils.Log("failed backup " + backupPath + " to " + configPath)
+			return err
+		}
+	}
+	ncutils.Log("used backup file for network: " + network)
+	return nil
+}
+
 // GetCLIConfig - gets the cli flags as a config
 // GetCLIConfig - gets the cli flags as a config
 func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
 func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
 	var cfg ClientConfig
 	var cfg ClientConfig
@@ -332,7 +371,13 @@ func ReadConfig(network string) (*ClientConfig, error) {
 	f, err := os.Open(file)
 	f, err := os.Open(file)
 
 
 	if err != nil {
 	if err != nil {
-		nofile = true
+		if err = ReplaceWithBackup(network); err != nil {
+			nofile = true
+		}
+		f, err = os.Open(file)
+		if err != nil {
+			nofile = true
+		}
 	}
 	}
 	defer f.Close()
 	defer f.Close()
 
 

+ 6 - 1
netclient/functions/checkin.go

@@ -151,10 +151,11 @@ func CheckConfig(cliconf config.ClientConfig) error {
 // Pull - pulls the latest config from the server, if manual it will overwrite
 // Pull - pulls the latest config from the server, if manual it will overwrite
 func Pull(network string, manual bool) (*models.Node, error) {
 func Pull(network string, manual bool) (*models.Node, error) {
 	cfg, err := config.ReadConfig(network)
 	cfg, err := config.ReadConfig(network)
-	node := cfg.Node
 	if err != nil {
 	if err != nil {
 		return nil, err
 		return nil, err
 	}
 	}
+
+	node := cfg.Node
 	servercfg := cfg.Server
 	servercfg := cfg.Server
 
 
 	if cfg.Node.IPForwarding == "yes" && !ncutils.IsWindows() {
 	if cfg.Node.IPForwarding == "yes" && !ncutils.IsWindows() {
@@ -243,6 +244,10 @@ func Pull(network string, manual bool) (*models.Node, error) {
 	if ncutils.IsLinux() {
 	if ncutils.IsLinux() {
 		setDNS(&resNode, servercfg, &cfg.Node)
 		setDNS(&resNode, servercfg, &cfg.Node)
 	}
 	}
+	var bkupErr = config.SaveBackup(network)
+	if bkupErr != nil {
+		ncutils.Log("unable to update backup file")
+	}
 
 
 	return &resNode, err
 	return &resNode, err
 }
 }

+ 7 - 2
netclient/functions/join.go

@@ -5,6 +5,9 @@ import (
 	"encoding/json"
 	"encoding/json"
 	"errors"
 	"errors"
 	"fmt"
 	"fmt"
+	"log"
+	"os/exec"
+
 	nodepb "github.com/gravitl/netmaker/grpc"
 	nodepb "github.com/gravitl/netmaker/grpc"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/netclient/auth"
 	"github.com/gravitl/netmaker/netclient/auth"
@@ -16,8 +19,6 @@ import (
 	"github.com/gravitl/netmaker/netclient/wireguard"
 	"github.com/gravitl/netmaker/netclient/wireguard"
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc"
-	"log"
-	"os/exec"
 )
 )
 
 
 // JoinNetwork - helps a client join a network
 // JoinNetwork - helps a client join a network
@@ -185,6 +186,10 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
 		if err != nil {
 		if err != nil {
 			return err
 			return err
 		}
 		}
+		// attempt to make backup
+		if err = config.SaveBackup(node.Network); err != nil {
+			ncutils.Log("failed to make backup, node will not auto restore if config is corrupted")
+		}
 	}
 	}
 
 
 	ncutils.Log("retrieving peers")
 	ncutils.Log("retrieving peers")

+ 0 - 0
netclient/netclient.syso → netclient/windowsdata/netclient.syso