mirror of
https://github.com/gravitl/netmaker.git
synced 2024-09-21 15:56:07 +08:00
Merge pull request #662 from gravitl/feature_v0.10.0_installer
Feature v0.10.0 installer
This commit is contained in:
commit
6e270290e9
|
@ -33,9 +33,10 @@ services:
|
||||||
DISPLAY_KEYS: "on"
|
DISPLAY_KEYS: "on"
|
||||||
DATABASE: "sqlite"
|
DATABASE: "sqlite"
|
||||||
NODE_ID: "netmaker-server-1"
|
NODE_ID: "netmaker-server-1"
|
||||||
|
MQ_HOST: "mq"
|
||||||
HOST_NETWORK: "off"
|
HOST_NETWORK: "off"
|
||||||
MANAGE_IPTABLES: "on"
|
MANAGE_IPTABLES: "on"
|
||||||
PORT_FORWARD_SERVICES: "dns"
|
PORT_FORWARD_SERVICES: "mq,dns,ssh"
|
||||||
VERBOSITY: "1"
|
VERBOSITY: "1"
|
||||||
ports:
|
ports:
|
||||||
- "51821-51830:51821-51830/udp"
|
- "51821-51830:51821-51830/udp"
|
||||||
|
@ -72,11 +73,12 @@ services:
|
||||||
# - $PWD/site:/srv # you could also serve a static site in site folder
|
# - $PWD/site:/srv # you could also serve a static site in site folder
|
||||||
- caddy_data:/data
|
- caddy_data:/data
|
||||||
- caddy_conf:/config
|
- caddy_conf:/config
|
||||||
mosquitto:
|
mq:
|
||||||
image: eclipse-mosquitto:2.0.14
|
image: eclipse-mosquitto:2.0.14
|
||||||
container_name: broker
|
container_name: mq
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
network_mode: host
|
ports:
|
||||||
|
- "1883:1883"
|
||||||
volumes:
|
volumes:
|
||||||
- /root/mosquitto.conf:/mosquitto/config/mosquitto.conf
|
- /root/mosquitto.conf:/mosquitto/config/mosquitto.conf
|
||||||
- mosquitto_data:/mosquitto/data
|
- mosquitto_data:/mosquitto/data
|
||||||
|
|
|
@ -72,7 +72,7 @@ func grpcAuthorize(ctx context.Context) error {
|
||||||
|
|
||||||
authToken := authHeader[0]
|
authToken := authHeader[0]
|
||||||
|
|
||||||
nodeID, mac, network, err := logic.VerifyToken(authToken)
|
nodeID, _, network, err := logic.VerifyToken(authToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ func grpcAuthorize(ctx context.Context) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return status.Errorf(codes.Unauthenticated, "Unauthorized. Network does not exist: "+network)
|
return status.Errorf(codes.Unauthenticated, "Unauthorized. Network does not exist: "+network)
|
||||||
}
|
}
|
||||||
node, err := logic.GetNodeByIDorMacAddress(nodeID, mac, network)
|
node, err := logic.GetNodeByID(nodeID)
|
||||||
if database.IsEmptyRecord(err) {
|
if database.IsEmptyRecord(err) {
|
||||||
// == DELETE replace logic after 2 major version updates ==
|
// == DELETE replace logic after 2 major version updates ==
|
||||||
if node, err = logic.GetDeletedNodeByID(node.ID); err == nil {
|
if node, err = logic.GetDeletedNodeByID(node.ID); err == nil {
|
||||||
|
@ -106,7 +106,7 @@ func grpcAuthorize(ctx context.Context) error {
|
||||||
// Login - node authenticates using its password and retrieves a JWT for authorization.
|
// Login - node authenticates using its password and retrieves a JWT for authorization.
|
||||||
func (s *NodeServiceServer) Login(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
|
func (s *NodeServiceServer) Login(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
|
||||||
|
|
||||||
var reqNode, err = getNewOrLegacyNode(req.Data)
|
var reqNode, err = getNodeFromRequestData(req.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -221,7 +221,7 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
|
||||||
var extclient models.ExtClient
|
var extclient models.ExtClient
|
||||||
extclient.Network = networkName
|
extclient.Network = networkName
|
||||||
extclient.IngressGatewayID = nodeid
|
extclient.IngressGatewayID = nodeid
|
||||||
node, err := logic.GetNodeByIDorMacAddress(nodeid, nodeid, networkName)
|
node, err := logic.GetNodeByID(nodeid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
returnErrorResponse(w, r, formatError(err, "internal"))
|
returnErrorResponse(w, r, formatError(err, "internal"))
|
||||||
return
|
return
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"strings"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
nodepb "github.com/gravitl/netmaker/grpc"
|
nodepb "github.com/gravitl/netmaker/grpc"
|
||||||
|
@ -22,7 +21,7 @@ type NodeServiceServer struct {
|
||||||
|
|
||||||
// NodeServiceServer.ReadNode - reads node and responds with gRPC
|
// NodeServiceServer.ReadNode - reads node and responds with gRPC
|
||||||
func (s *NodeServiceServer) ReadNode(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
|
func (s *NodeServiceServer) ReadNode(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
|
||||||
var node, err = getNewOrLegacyNode(req.Data)
|
var node, err = getNodeFromRequestData(req.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -111,7 +110,7 @@ func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.Object)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
node, err := logic.GetNodeByIDorMacAddress(newnode.ID, newnode.MacAddress, newnode.Network)
|
node, err := logic.GetNodeByID(newnode.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -177,7 +176,7 @@ func getServerAddrs(node *models.Node) {
|
||||||
// NodeServiceServer.DeleteNode - deletes a node and responds over gRPC
|
// NodeServiceServer.DeleteNode - deletes a node and responds over gRPC
|
||||||
func (s *NodeServiceServer) DeleteNode(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
|
func (s *NodeServiceServer) DeleteNode(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
|
||||||
|
|
||||||
var node, err = getNewOrLegacyNode(req.Data)
|
var node, err = getNodeFromRequestData(req.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -197,7 +196,7 @@ func (s *NodeServiceServer) DeleteNode(ctx context.Context, req *nodepb.Object)
|
||||||
// NodeServiceServer.GetPeers - fetches peers over gRPC
|
// NodeServiceServer.GetPeers - fetches peers over gRPC
|
||||||
func (s *NodeServiceServer) GetPeers(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
|
func (s *NodeServiceServer) GetPeers(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
|
||||||
|
|
||||||
var node, err = getNewOrLegacyNode(req.Data)
|
var node, err = getNodeFromRequestData(req.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -223,7 +222,7 @@ func (s *NodeServiceServer) GetPeers(ctx context.Context, req *nodepb.Object) (*
|
||||||
// NodeServiceServer.GetExtPeers - returns ext peers for a gateway node
|
// NodeServiceServer.GetExtPeers - returns ext peers for a gateway node
|
||||||
func (s *NodeServiceServer) GetExtPeers(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
|
func (s *NodeServiceServer) GetExtPeers(ctx context.Context, req *nodepb.Object) (*nodepb.Object, error) {
|
||||||
|
|
||||||
var node, err = getNewOrLegacyNode(req.Data)
|
var node, err = getNodeFromRequestData(req.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -257,7 +256,7 @@ func (s *NodeServiceServer) GetExtPeers(ctx context.Context, req *nodepb.Object)
|
||||||
}
|
}
|
||||||
|
|
||||||
// == private methods ==
|
// == private methods ==
|
||||||
|
/*
|
||||||
func getNewOrLegacyNode(data string) (models.Node, error) {
|
func getNewOrLegacyNode(data string) (models.Node, error) {
|
||||||
var reqNode, node models.Node
|
var reqNode, node models.Node
|
||||||
var err error
|
var err error
|
||||||
|
@ -265,20 +264,30 @@ func getNewOrLegacyNode(data string) (models.Node, error) {
|
||||||
if err = json.Unmarshal([]byte(data), &reqNode); err != nil {
|
if err = json.Unmarshal([]byte(data), &reqNode); err != nil {
|
||||||
oldID := strings.Split(data, "###") // handle legacy client IDs
|
oldID := strings.Split(data, "###") // handle legacy client IDs
|
||||||
if len(oldID) == 2 {
|
if len(oldID) == 2 {
|
||||||
if node, err = logic.GetNodeByIDorMacAddress(reqNode.ID, oldID[0], oldID[1]); err != nil {
|
if node, err = logic.GetNodeByID(reqNode.ID); err != nil {
|
||||||
return models.Node{}, err
|
return models.Node{}, err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return models.Node{}, err
|
return models.Node{}, err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
node, err = logic.GetNodeByIDorMacAddress(reqNode.ID, reqNode.MacAddress, reqNode.Network)
|
node, err = logic.GetNodeByID(reqNode.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Node{}, err
|
return models.Node{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return node, nil
|
return node, nil
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
func getNodeFromRequestData(data string) (models.Node, error) {
|
||||||
|
var reqNode models.Node
|
||||||
|
var err error
|
||||||
|
|
||||||
|
if err = json.Unmarshal([]byte(data), &reqNode); err != nil {
|
||||||
|
return models.Node{}, err
|
||||||
|
}
|
||||||
|
return logic.GetNodeByID(reqNode.ID)
|
||||||
|
}
|
||||||
|
|
||||||
func isServer(node *models.Node) bool {
|
func isServer(node *models.Node) bool {
|
||||||
return node.IsServer == "yes"
|
return node.IsServer == "yes"
|
||||||
|
|
|
@ -1,10 +1,5 @@
|
||||||
persistence true
|
persistence true
|
||||||
persistence file mosquitto.db
|
|
||||||
persistance_location mosquitto/data
|
|
||||||
|
|
||||||
log_dest_file mosquitto/log/mosquitto.log
|
|
||||||
|
|
||||||
per_listener_settings true
|
per_listener_settings true
|
||||||
listener 1883
|
listener 1883
|
||||||
allow_anonymous true
|
allow_anonymous true
|
||||||
|
|
||||||
|
|
|
@ -238,11 +238,7 @@ func CreateNode(node *models.Node) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: This covers legacy nodes, eventually want to remove legacy check
|
// TODO: This covers legacy nodes, eventually want to remove legacy check
|
||||||
if node.IsServer == "yes" {
|
|
||||||
node.ID = uuid.NewString()
|
node.ID = uuid.NewString()
|
||||||
} else if node.IsServer != "yes" || (node.ID == "" || strings.Contains(node.ID, "###")) {
|
|
||||||
node.ID = uuid.NewString()
|
|
||||||
}
|
|
||||||
|
|
||||||
//Create a JWT for the node
|
//Create a JWT for the node
|
||||||
tokenString, _ := CreateJWT(node.ID, node.MacAddress, node.Network)
|
tokenString, _ := CreateJWT(node.ID, node.MacAddress, node.Network)
|
||||||
|
@ -549,6 +545,7 @@ func GetNodeRelay(network string, relayedNodeAddr string) (models.Node, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetNodeByIDorMacAddress - gets the node, if a mac address exists, but not id, then it should delete it and recreate in DB with new ID
|
// GetNodeByIDorMacAddress - gets the node, if a mac address exists, but not id, then it should delete it and recreate in DB with new ID
|
||||||
|
/*
|
||||||
func GetNodeByIDorMacAddress(uuid string, macaddress string, network string) (models.Node, error) {
|
func GetNodeByIDorMacAddress(uuid string, macaddress string, network string) (models.Node, error) {
|
||||||
var node models.Node
|
var node models.Node
|
||||||
var err error
|
var err error
|
||||||
|
@ -571,7 +568,7 @@ func GetNodeByIDorMacAddress(uuid string, macaddress string, network string) (mo
|
||||||
}
|
}
|
||||||
return node, err
|
return node, err
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
// GetNodeByID - get node by uuid, should have been set by create
|
// GetNodeByID - get node by uuid, should have been set by create
|
||||||
func GetNodeByID(uuid string) (models.Node, error) {
|
func GetNodeByID(uuid string) (models.Node, error) {
|
||||||
var record, err = database.FetchRecord(database.NODES_TABLE_NAME, uuid)
|
var record, err = database.FetchRecord(database.NODES_TABLE_NAME, uuid)
|
||||||
|
|
|
@ -199,7 +199,7 @@ func GetNodePeers(networkName string, excludeRelayed bool) ([]models.Node, error
|
||||||
if len(endpointarr) == 2 {
|
if len(endpointarr) == 2 {
|
||||||
port, err := strconv.Atoi(endpointarr[1])
|
port, err := strconv.Atoi(endpointarr[1])
|
||||||
if err == nil {
|
if err == nil {
|
||||||
peer.Endpoint = endpointarr[0]
|
// peer.Endpoint = endpointarr[0]
|
||||||
peer.ListenPort = int32(port)
|
peer.ListenPort = int32(port)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -253,7 +253,7 @@ func GetPeersList(networkName string, excludeRelayed bool, relayedNodeAddr strin
|
||||||
if err == nil && peerNode.UDPHolePunch == "yes" {
|
if err == nil && peerNode.UDPHolePunch == "yes" {
|
||||||
for _, nodepeer := range nodepeers {
|
for _, nodepeer := range nodepeers {
|
||||||
if nodepeer.Address == peerNode.Address {
|
if nodepeer.Address == peerNode.Address {
|
||||||
peerNode.Endpoint = nodepeer.Endpoint
|
// peerNode.Endpoint = nodepeer.Endpoint
|
||||||
peerNode.ListenPort = nodepeer.ListenPort
|
peerNode.ListenPort = nodepeer.ListenPort
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,8 +165,12 @@ func Push(cfg config.ClientConfig) error {
|
||||||
} else {
|
} else {
|
||||||
err = functions.Push(cfg.Network)
|
err = functions.Push(cfg.Network)
|
||||||
}
|
}
|
||||||
|
if err == nil {
|
||||||
ncutils.PrintLog("completed pushing network configs to remote server", 1)
|
ncutils.PrintLog("completed pushing network configs to remote server", 1)
|
||||||
ncutils.PrintLog("success", 1)
|
ncutils.PrintLog("success", 1)
|
||||||
|
} else {
|
||||||
|
ncutils.PrintLog("error occurred pushing configs", 1)
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,8 +196,13 @@ func Pull(cfg config.ClientConfig) error {
|
||||||
} else {
|
} else {
|
||||||
_, err = functions.Pull(cfg.Network, true)
|
_, err = functions.Pull(cfg.Network, true)
|
||||||
}
|
}
|
||||||
|
ncutils.PrintLog("reset network and peer configs", 1)
|
||||||
|
if err == nil {
|
||||||
ncutils.PrintLog("reset network and peer configs", 1)
|
ncutils.PrintLog("reset network and peer configs", 1)
|
||||||
ncutils.PrintLog("success", 1)
|
ncutils.PrintLog("success", 1)
|
||||||
|
} else {
|
||||||
|
ncutils.PrintLog("error occurred pulling configs from server", 1)
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package daemon
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/gravitl/netmaker/netclient/config"
|
"github.com/gravitl/netmaker/netclient/config"
|
||||||
)
|
)
|
||||||
|
@ -29,3 +30,22 @@ func InstallDaemon(cfg config.ClientConfig) error {
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Restart() error {
|
||||||
|
os := runtime.GOOS
|
||||||
|
var err error
|
||||||
|
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
|
||||||
|
switch os {
|
||||||
|
case "windows":
|
||||||
|
RestartWindowsDaemon()
|
||||||
|
case "darwin":
|
||||||
|
RestartLaunchD()
|
||||||
|
case "linux":
|
||||||
|
RestartSystemD()
|
||||||
|
default:
|
||||||
|
err = errors.New("this os is not yet supported for daemon mode. Run join cmd with flag '--daemon off'")
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
)
|
)
|
||||||
|
@ -54,6 +55,12 @@ func CleanupMac() {
|
||||||
os.Remove(EXEC_DIR + "netclient")
|
os.Remove(EXEC_DIR + "netclient")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RestartLaunchD() {
|
||||||
|
ncutils.RunCmd("launchctl unload /Library/LaunchDaemons/"+MAC_SERVICE_NAME+".plist", true)
|
||||||
|
time.Sleep(time.Second >> 2)
|
||||||
|
ncutils.RunCmd("launchctl load /Library/LaunchDaemons/"+MAC_SERVICE_NAME+".plist", true)
|
||||||
|
}
|
||||||
|
|
||||||
// CreateMacService - Creates the mac service file for LaunchDaemons
|
// CreateMacService - Creates the mac service file for LaunchDaemons
|
||||||
func CreateMacService(servicename string, interval string) error {
|
func CreateMacService(servicename string, interval string) error {
|
||||||
_, err := os.Stat("/Library/LaunchDaemons")
|
_, err := os.Stat("/Library/LaunchDaemons")
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/gravitl/netmaker/netclient/ncutils"
|
"github.com/gravitl/netmaker/netclient/ncutils"
|
||||||
)
|
)
|
||||||
|
@ -73,6 +74,12 @@ WantedBy=multi-user.target
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RestartSystemD() {
|
||||||
|
ncutils.PrintLog("restarting netclient.service", 1)
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
_, _ = ncutils.RunCmd("systemctl restart netclient.service", true)
|
||||||
|
}
|
||||||
|
|
||||||
func CleanupLinux() {
|
func CleanupLinux() {
|
||||||
if err := os.RemoveAll(ncutils.GetNetclientPath()); err != nil {
|
if err := os.RemoveAll(ncutils.GetNetclientPath()); err != nil {
|
||||||
ncutils.PrintLog("Removing netclient configs: "+err.Error(), 1)
|
ncutils.PrintLog("Removing netclient configs: "+err.Error(), 1)
|
||||||
|
|
|
@ -34,6 +34,13 @@ func SetupWindowsDaemon() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RestartWindowsDaemon() {
|
||||||
|
StopWindowsDaemon()
|
||||||
|
// start daemon, will not restart or start another
|
||||||
|
ncutils.RunCmd(strings.Replace(ncutils.GetNetclientPathSpecific(), `\\`, `\`, -1)+`winsw.exe start`, false)
|
||||||
|
ncutils.Log(strings.Replace(ncutils.GetNetclientPathSpecific(), `\\`, `\`, -1) + `winsw.exe start`)
|
||||||
|
}
|
||||||
|
|
||||||
// CleanupWindows - cleans up windows files
|
// CleanupWindows - cleans up windows files
|
||||||
func CleanupWindows() {
|
func CleanupWindows() {
|
||||||
if !ncutils.FileExists(ncutils.GetNetclientPathSpecific() + "winsw.xml") {
|
if !ncutils.FileExists(ncutils.GetNetclientPathSpecific() + "winsw.xml") {
|
||||||
|
|
|
@ -155,7 +155,6 @@ func Pull(network string, manual bool) (*models.Node, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
node := cfg.Node
|
node := cfg.Node
|
||||||
//servercfg := cfg.Server
|
//servercfg := cfg.Server
|
||||||
|
|
||||||
|
@ -185,7 +184,6 @@ func Pull(network string, manual bool) (*models.Node, error) {
|
||||||
ncutils.PrintLog("Failed to authenticate: "+err.Error(), 1)
|
ncutils.PrintLog("Failed to authenticate: "+err.Error(), 1)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := json.Marshal(&node)
|
data, err := json.Marshal(&node)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ncutils.PrintLog("Failed to parse node config: "+err.Error(), 1)
|
ncutils.PrintLog("Failed to parse node config: "+err.Error(), 1)
|
||||||
|
@ -201,6 +199,7 @@ func Pull(network string, manual bool) (*models.Node, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = json.Unmarshal([]byte(readres.Data), &resNode); err != nil {
|
if err = json.Unmarshal([]byte(readres.Data), &resNode); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -225,6 +224,7 @@ func Pull(network string, manual bool) (*models.Node, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &resNode, err
|
return &resNode, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if resNode.IsServer != "yes" {
|
if resNode.IsServer != "yes" {
|
||||||
if wcclient == nil || ctx == nil {
|
if wcclient == nil || ctx == nil {
|
||||||
return &cfg.Node, errors.New("issue initializing gRPC client")
|
return &cfg.Node, errors.New("issue initializing gRPC client")
|
||||||
|
|
|
@ -43,20 +43,21 @@ func getPrivateAddr() (string, error) {
|
||||||
|
|
||||||
var local string
|
var local string
|
||||||
conn, err := net.Dial("udp", "8.8.8.8:80")
|
conn, err := net.Dial("udp", "8.8.8.8:80")
|
||||||
if err != nil {
|
if err == nil {
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
localAddr := conn.LocalAddr().(*net.UDPAddr)
|
localAddr := conn.LocalAddr().(*net.UDPAddr)
|
||||||
localIP := localAddr.IP
|
localIP := localAddr.IP
|
||||||
local = localIP.String()
|
local = localIP.String()
|
||||||
|
}
|
||||||
if local == "" {
|
if local == "" {
|
||||||
local, err = getPrivateAddrBackup()
|
local, err = getPrivateAddrBackup()
|
||||||
}
|
}
|
||||||
|
|
||||||
if local == "" {
|
if local == "" {
|
||||||
err = errors.New("could not find local ip")
|
err = errors.New("could not find local ip")
|
||||||
}
|
}
|
||||||
|
|
||||||
return local, err
|
return local, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -311,10 +311,12 @@ func UpdatePeers(client mqtt.Client, msg mqtt.Message) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// see if cache hit, if so skip
|
// see if cache hit, if so skip
|
||||||
|
/*
|
||||||
var currentMessage = read(peerUpdate.Network, lastPeerUpdate)
|
var currentMessage = read(peerUpdate.Network, lastPeerUpdate)
|
||||||
if currentMessage == string(data) {
|
if currentMessage == string(data) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
insert(peerUpdate.Network, lastPeerUpdate, string(data))
|
insert(peerUpdate.Network, lastPeerUpdate, string(data))
|
||||||
ncutils.Log("update peer handler")
|
ncutils.Log("update peer handler")
|
||||||
|
|
||||||
|
@ -355,7 +357,7 @@ func MonitorKeepalive(ctx context.Context, client mqtt.Client, cfg *config.Clien
|
||||||
ncutils.Log("unable to parse timestamp " + keepalivetime.String())
|
ncutils.Log("unable to parse timestamp " + keepalivetime.String())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if time.Since(keepalivetime) > time.Second*200 { // more than 3+ minutes
|
if time.Since(keepalivetime) > time.Second*120 { // more than 2+ minutes
|
||||||
ncutils.Log("server keepalive not recieved recently, resubscribe to message queue")
|
ncutils.Log("server keepalive not recieved recently, resubscribe to message queue")
|
||||||
err := Resubscribe(client, cfg)
|
err := Resubscribe(client, cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -513,6 +515,12 @@ func PublishNodeUpdate(cfg *config.ClientConfig) {
|
||||||
func Hello(cfg *config.ClientConfig, network string) {
|
func Hello(cfg *config.ClientConfig, network string) {
|
||||||
if err := publish(cfg, fmt.Sprintf("ping/%s", cfg.Node.ID), []byte("hello world!")); err != nil {
|
if err := publish(cfg, fmt.Sprintf("ping/%s", cfg.Node.ID), []byte("hello world!")); err != nil {
|
||||||
ncutils.Log(fmt.Sprintf("error publishing ping, %v", err))
|
ncutils.Log(fmt.Sprintf("error publishing ping, %v", err))
|
||||||
|
ncutils.Log("running pull on " + cfg.Node.Network + " to reconnect")
|
||||||
|
_, err := Pull(cfg.Node.Network, true)
|
||||||
|
if err != nil {
|
||||||
|
ncutils.Log("could not run pull on " + cfg.Node.Network + ", error: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@ import (
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
|
||||||
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"
|
||||||
|
@ -70,6 +69,11 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
|
||||||
if cfg.Node.LocalRange != "" && cfg.Node.LocalAddress == "" {
|
if cfg.Node.LocalRange != "" && cfg.Node.LocalAddress == "" {
|
||||||
log.Println("local vpn, getting local address from range: " + cfg.Node.LocalRange)
|
log.Println("local vpn, getting local address from range: " + cfg.Node.LocalRange)
|
||||||
cfg.Node.LocalAddress = getLocalIP(cfg.Node)
|
cfg.Node.LocalAddress = getLocalIP(cfg.Node)
|
||||||
|
} else if cfg.Node.LocalAddress == "" {
|
||||||
|
intIP, err := getPrivateAddr()
|
||||||
|
if err == nil {
|
||||||
|
cfg.Node.LocalAddress = intIP
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set endpoint if blank. set to local if local net, retrieve from function if not
|
// set endpoint if blank. set to local if local net, retrieve from function if not
|
||||||
|
@ -104,10 +108,6 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if cfg.Node.ID == "" {
|
|
||||||
cfg.Node.ID = uuid.NewString()
|
|
||||||
}
|
|
||||||
|
|
||||||
if ncutils.IsLinux() {
|
if ncutils.IsLinux() {
|
||||||
_, err := exec.LookPath("resolvconf")
|
_, err := exec.LookPath("resolvconf")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -238,6 +238,8 @@ func JoinNetwork(cfg config.ClientConfig, privateKey string) error {
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
} else {
|
||||||
|
daemon.Restart()
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -136,9 +136,6 @@ echo "Setting Caddyfile..."
|
||||||
sed -i "s/NETMAKER_BASE_DOMAIN/$NETMAKER_BASE_DOMAIN/g" /root/Caddyfile
|
sed -i "s/NETMAKER_BASE_DOMAIN/$NETMAKER_BASE_DOMAIN/g" /root/Caddyfile
|
||||||
sed -i "s/YOUR_EMAIL/$EMAIL/g" /root/Caddyfile
|
sed -i "s/YOUR_EMAIL/$EMAIL/g" /root/Caddyfile
|
||||||
|
|
||||||
echo "Setting Broker..."
|
|
||||||
sed -i "s/SERVER_PBLIC_IP/$SERVER_PUBLIC_IP/g" /root/mosquitto.conf
|
|
||||||
|
|
||||||
echo "Setting docker-compose..."
|
echo "Setting docker-compose..."
|
||||||
|
|
||||||
sed -i "s/NETMAKER_BASE_DOMAIN/$NETMAKER_BASE_DOMAIN/g" /root/docker-compose.yml
|
sed -i "s/NETMAKER_BASE_DOMAIN/$NETMAKER_BASE_DOMAIN/g" /root/docker-compose.yml
|
||||||
|
|
|
@ -224,7 +224,7 @@ if [ "${OS}" = "FreeBSD" ]; then
|
||||||
name="netclient"
|
name="netclient"
|
||||||
rcvar=netclient_enable
|
rcvar=netclient_enable
|
||||||
pidfile="/var/run/${name}.pid"
|
pidfile="/var/run/${name}.pid"
|
||||||
command="/usr/sbin/daemon"
|
command="/sbin/daemon"
|
||||||
command_args="-c -f -P ${pidfile} -R 10 -t "Netclient" -u root -o /etc/netclient/netclient.log /etc/netclient/netclient checkin -n all"
|
command_args="-c -f -P ${pidfile} -R 10 -t "Netclient" -u root -o /etc/netclient/netclient.log /etc/netclient/netclient checkin -n all"
|
||||||
|
|
||||||
load_rc_config $name
|
load_rc_config $name
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
name="netclient"
|
name="netclient"
|
||||||
rcvar=netclient_enable
|
rcvar=netclient_enable
|
||||||
pidfile="/var/run/${name}.pid"
|
pidfile="/var/run/${name}.pid"
|
||||||
command="/usr/sbin/daemon"
|
command="/sbin/daemon"
|
||||||
command_args="-c -f -P ${pidfile} -R 10 -t "Netclient" -u root -o /etc/netclient/netclient.log /etc/netclient/netclient checkin -n all"
|
command_args="-c -f -P ${pidfile} -R 10 -t "Netclient" -u root -o /etc/netclient/netclient.log /etc/netclient/netclient checkin -n all"
|
||||||
|
|
||||||
load_rc_config $name
|
load_rc_config $name
|
||||||
|
|
|
@ -50,7 +50,7 @@ elif [ -f /etc/fedora-release ]; then
|
||||||
dnf update
|
dnf update
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dependencies=("docker.io" "docker-compose" "wireguard" "jq" "resolvconf")
|
dependencies=("docker.io" "docker-compose" "wireguard" "jq" "resolvectl")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -138,7 +138,6 @@ sed -i "s/YOUR_EMAIL/$EMAIL/g" /root/Caddyfile
|
||||||
echo "setting mosquitto.conf..."
|
echo "setting mosquitto.conf..."
|
||||||
|
|
||||||
wget -q -O /root/mosquitto.conf https://raw.githubusercontent.com/gravil/netmaker/master/docker/mosquitto.conf
|
wget -q -O /root/mosquitto.conf https://raw.githubusercontent.com/gravil/netmaker/master/docker/mosquitto.conf
|
||||||
sed -i "s/SERVER_PUBLIC_IP/$SERVER_PUBLIC_IP/g" /root/mosquitto.conf
|
|
||||||
|
|
||||||
echo "setting docker-compose..."
|
echo "setting docker-compose..."
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue