Browse Source

Merge branch 'develop' into master

Alex 3 years ago
parent
commit
65631e0905
6 changed files with 223 additions and 62 deletions
  1. 51 0
      .github/workflows/test-artifacts.yml
  2. 0 1
      Dockerfile
  3. 13 2
      README.md
  4. 56 48
      scripts/netclient-install.ps1
  5. 90 10
      scripts/netclient-install.sh
  6. 13 1
      scripts/nm-quick.sh

+ 51 - 0
.github/workflows/test-artifacts.yml

@@ -0,0 +1,51 @@
+name: Build artifacts for deployment testing 
+
+on:
+    push:
+        branches:
+            - 'testing'
+    workflow_dispatch:
+
+jobs:
+    docker:
+        runs-on: ubuntu-latest
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v2
+            - name: Set up QEMU
+              uses: docker/setup-qemu-action@v1
+            - name: Set up Docker Buildx
+              uses: docker/setup-buildx-action@v1
+            - name: Login to DockerHub
+              uses: docker/login-action@v1
+              with:
+                  registry: ghcr.io
+                  username: ${{ github.actor }}
+                  password: ${{ secrets.GITHUB_TOKEN }}
+            - name: Build and Push test
+              uses: docker/build-push-action@v2
+              with:
+                  context: .
+                  platforms: linux/amd64
+                  push: true
+                  tags: ghcr.io/${{ github.repository }}:testing
+    netclient:
+        runs-on: ubuntu-latest
+        steps:
+            - name: Checkout
+              uses: actions/checkout@v2
+            - name: build client
+              run: |
+                cd netclient
+                go build -ldflags="-X 'main.version=testing'" .
+                curl -H 'Authorization: Bearer ${{ secrets.NUSAK_MASTERKEY }}' \
+                -H 'Content-Type: multipart/form-data' --form upload='./netclient' \
+                -X POST https://dashboard.nusak.ca/api/file/netclient
+    #deploy:
+         #runs-on: ubuntu-latest
+         #steps:
+            #- name: Deploy Testing Server and Client(s)
+            #  run: |
+            #      curl -X POST https://api.github.com/mattkasun/terraform-test/dispatches \
+            #      -H 'Accept: application/vnd.github.everest-preview+json' \
+            #      -u ${{ secrets.ACCESS_TOKEN }} 

+ 0 - 1
Dockerfile

@@ -6,7 +6,6 @@ WORKDIR /app
 COPY . .
 COPY . .
 ENV GO111MODULE=auto
 ENV GO111MODULE=auto
 RUN GOOS=linux CGO_ENABLED=1 go build -ldflags="-s -X 'main.version=$version'" -o netmaker main.go
 RUN GOOS=linux CGO_ENABLED=1 go build -ldflags="-s -X 'main.version=$version'" -o netmaker main.go
-
 FROM alpine:3.13.6
 FROM alpine:3.13.6
 # add a c lib
 # add a c lib
 RUN apk add gcompat iptables
 RUN apk add gcompat iptables

+ 13 - 2
README.md

@@ -39,14 +39,14 @@
 **For production-grade installations, visit the [Install Docs](https://netmaker.readthedocs.io/en/master/install.html).**  
 **For production-grade installations, visit the [Install Docs](https://netmaker.readthedocs.io/en/master/install.html).**  
 **For an HA install using helm on k8s, visit the [Helm Repo](https://github.com/gravitl/netmaker-helm/).**
 **For an HA install using helm on k8s, visit the [Helm Repo](https://github.com/gravitl/netmaker-helm/).**
 1. Get a cloud VM with Ubuntu 20.04 and a public IP.
 1. Get a cloud VM with Ubuntu 20.04 and a public IP.
-2. Open ports 443, 53, and 51821-51830/udp on the VM firewall and in cloud security settings.
+2. Open ports 443, 80, 53, and 51821-51830/udp on the VM firewall and in cloud security settings.
 3. Run the script **(see below for optional configurations)**:
 3. Run the script **(see below for optional configurations)**:
 
 
 `sudo wget -qO - https://raw.githubusercontent.com/gravitl/netmaker/master/scripts/nm-quick.sh | bash`
 `sudo wget -qO - https://raw.githubusercontent.com/gravitl/netmaker/master/scripts/nm-quick.sh | bash`
 
 
 <img src="./docs/images/install-server.gif" width="50%" /><img src="./docs/images/visit-website.gif" width="50%" />
 <img src="./docs/images/install-server.gif" width="50%" /><img src="./docs/images/visit-website.gif" width="50%" />
 
 
-Upon completion, the logs will display the instructions to connect various devices. These can also be retrived from the UI under "Acess Keys."
+Upon completion, the logs will display the instructions to connect various devices. These can also be retrived from the UI under "Access Keys."
 
 
 After installing Netmaker, check out the [Walkthrough](https://itnext.io/getting-started-with-netmaker-a-wireguard-virtual-networking-platform-3d563fbd87f0) and [Getting Started](https://netmaker.readthedocs.io/en/master/getting-started.html) guides to learn more about configuring networks. Or, check out some of our other [Tutorials](https://gravitl.com/resources) for different use cases, including Kubernetes.
 After installing Netmaker, check out the [Walkthrough](https://itnext.io/getting-started-with-netmaker-a-wireguard-virtual-networking-platform-3d563fbd87f0) and [Getting Started](https://netmaker.readthedocs.io/en/master/getting-started.html) guides to learn more about configuring networks. Or, check out some of our other [Tutorials](https://gravitl.com/resources) for different use cases, including Kubernetes.
 
 
@@ -88,6 +88,17 @@ After installing Netmaker, check out the [Walkthrough](https://itnext.io/getting
 
 
 - [Learning Resources](https://gravitl.com/resources)
 - [Learning Resources](https://gravitl.com/resources)
 
 
+# Community Projects
+
+- [Netmaker + Traefik Proxy](https://github.com/bsherman/netmaker-traefik)
+
+- [OpenWRT Netclient Packager](https://github.com/sbilly/netmaker-openwrt)
+
+- [Golang GUI](https://github.com/mattkasun/netmaker-gui)
+
+- [CoreDNS Plugin](https://github.com/SekoiaLab/netmaker-coredns)
+
+
 ## Disclaimer
 ## Disclaimer
  [WireGuard](https://wireguard.com/) is a registered trademark of Jason A. Donenfeld.
  [WireGuard](https://wireguard.com/) is a registered trademark of Jason A. Donenfeld.
 
 

+ 56 - 48
scripts/netclient-install.ps1

@@ -11,57 +11,65 @@ new-module -name netclient-install -scriptblock {
     Function Netclient-Install() {
     Function Netclient-Install() {
         param ($version='latest', $token)
         param ($version='latest', $token)
 
 
+            if($token -eq $null -or $token -eq ""){
+                Quit "-token required"
+            }
 
 
-    if($token -eq $null -or $token -eq ""){
-        Quit "-token required"
-    }
+            $software = "WireGuard";
+            $installed = (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq $software }) -ne $null
 
 
-    $software = "WireGuard";
-    $installed = (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq $software }) -ne $null
+            If(-Not $installed) {
+                Write-Host "'$software' is NOT installed. installing...";
+                $url = "https://download.wireguard.com/windows-client/wireguard-installer.exe"
+                $outpath = "$env:userprofile\Downloads\wireguard-installer.exe"
+                Invoke-WebRequest -Uri $url -OutFile $outpath
+                $args = @("Comma","Separated","Arguments")
+                Start-Process -Filepath "$env:userprofile\Downloads\wireguard-installer.exe" -ArgumentList $args -Wait
+                $software = "WireGuard";
+                $installed = (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq $software }) -ne $null
+                If(-Not $installed) {
+                    Quit "Could not install WireGuard"
+                } else {
+                    Write-Host "'$software' is installed."
+                }
+            } else {
+                Write-Host "'$software' is installed."
+            }
+            $outpath = "";
+            if (Test-Path -Path "C:\ProgramData\Netclient\bin\netclient.exe") {
+                $outpath = "C:\ProgramData\Netclient\bin\netclient.exe";
+            } else {
+                $outpath = "$env:userprofile\Downloads\netclient.exe"
+                Write-Host "'netclient.exe' is NOT installed. installing...";
+                Write-Host "https://github.com/gravitl/netmaker/releases/download/$version/netclient.exe";
+                $url = "https://github.com/gravitl/netmaker/releases/download/$version/netclient.exe"
+                Invoke-WebRequest -Uri $url -OutFile $outpath
+                $loc = Get-Location
+                Copy-Item -Path "$env:userprofile\Downloads\netclient.exe" -Destination "$loc\netclient.exe"
+            }
+            $runNum = "one","two"
+            foreach ($run in $runNum) { 
 
 
-    If(-Not $installed) {
-        Write-Host "'$software' is NOT installed. installing...";
-        $url = "https://download.wireguard.com/windows-client/wireguard-installer.exe"
-        $outpath = "$env:userprofile\Downloads\wireguard-installer.exe"
-        Invoke-WebRequest -Uri $url -OutFile $outpath
-        $args = @("Comma","Separated","Arguments")
-        Start-Process -Filepath "$env:userprofile\Downloads\wireguard-installer.exe" -ArgumentList $args -Wait
-        $software = "WireGuard";
-        $installed = (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq $software }) -ne $null
-        If(-Not $installed) {
-            Quit "Could not install WireGuard"
-        } else {
-            Write-Host "'$software' is installed."
-        }
-    } else {
-        Write-Host "'$software' is installed."
-    }
-    $outpath = "";
-    if (Test-Path -Path "C:\ProgramData\Netclient\bin\netclient.exe") {
-        $outpath = "C:\ProgramData\Netclient\bin\netclient.exe";
-    } else {
-        $outpath = "$env:userprofile\Downloads\netclient.exe"
-        Write-Host "'netclient.exe' is NOT installed. installing...";
-        Write-Host "https://github.com/gravitl/netmaker/releases/download/$version/netclient.exe";
-        $url = "https://github.com/gravitl/netmaker/releases/download/$version/netclient.exe"
-        Invoke-WebRequest -Uri $url -OutFile $outpath
-        $loc = Get-Location
-        Copy-Item -Path "$env:userprofile\Downloads\netclient.exe" -Destination "$loc\netclient.exe"
-    }
-    $NetArgs = @("join","-t",$token)
-    Start-Process -Filepath $outpath -ArgumentList $NetArgs -Wait
-    Add-MpPreference -ExclusionPath "C:\ProgramData\Netclient"
+                $NetArgs = @("join","-t",$token)
+                Start-Process -Filepath $outpath -ArgumentList $NetArgs -Wait
+                Add-MpPreference -ExclusionPath "C:\ProgramData\Netclient"
 
 
-    if ((Get-Command "netclient.exe" -ErrorAction SilentlyContinue) -eq $null) { 
-        if (-not (Test-Path -Path "C:\ProgramData\Netclient\bin\netclient.exe")) {
-            New-Item -Path "C:\ProgramData\Netclient" -Name "bin" -ItemType "directory"
-            Move-Item -Path "$env:userprofile\Downloads\netclient.exe" -Destination "C:\ProgramData\Netclient\bin\netclient.exe"
-            $oldpath = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).path
-            $newpath = "$oldpath;C:\ProgramData\Netclient\bin"
-            Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value $newPath
-            $env:Path += ";C:\ProgramData\Netclient\bin"
-        }
-    }
-    Write-Host "'netclient' is installed."
+                if ((Get-Command "netclient.exe" -ErrorAction SilentlyContinue) -eq $null) { 
+                    if (-not (Test-Path -Path "C:\ProgramData\Netclient\bin\netclient.exe")) {
+                        New-Item -Path "C:\ProgramData\Netclient" -Name "bin" -ItemType "directory"
+                        Move-Item -Path "$env:userprofile\Downloads\netclient.exe" -Destination "C:\ProgramData\Netclient\bin\netclient.exe"
+                        $oldpath = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).path
+                        $newpath = "$oldpath;C:\ProgramData\Netclient\bin"
+                        Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value $newPath
+                        $env:Path += ";C:\ProgramData\Netclient\bin"
+                    }
+                }
+                if($run -eq "one"){
+                    Write-Host "re-running setup to confirm all components are installed."
+                    Start-Sleep -s 1
+                }
+            }
+        Write-Host "'netclient' is installed."
     }
     }
 }
 }
+

+ 90 - 10
scripts/netclient-install.sh

@@ -10,15 +10,30 @@ echo "checking dependencies..."
 OS=$(uname)
 OS=$(uname)
 
 
 if [ -f /etc/debian_version ]; then
 if [ -f /etc/debian_version ]; then
+	dependencies="wireguard wireguard-tools"
+	update_cmd='apt update'
 	install_cmd='apt-get install -y'
 	install_cmd='apt-get install -y'
 elif [ -f /etc/alpine-release ]; then
 elif [ -f /etc/alpine-release ]; then
+	dependencies="wireguard"
+	update_cmd='apk update'
 	install_cmd='apk --update add'
 	install_cmd='apk --update add'
 elif [ -f /etc/centos-release ]; then
 elif [ -f /etc/centos-release ]; then
+	dependencies="wireguard"
+	update_cmd='yum update'
 	install_cmd='yum install -y'
 	install_cmd='yum install -y'
 elif [ -f /etc/fedora-release ]; then
 elif [ -f /etc/fedora-release ]; then
+	dependencies="wireguard"
+	update_cmd='dnf update'
 	install_cmd='dnf install -y'
 	install_cmd='dnf install -y'
 elif [ "${OS}" = "FreeBSD" ]; then
 elif [ "${OS}" = "FreeBSD" ]; then
+	dependencies="wireguard"
+	update_cmd='pkg update'
 	install_cmd='pkg install -y'
 	install_cmd='pkg install -y'
+elif [ -f /etc/openwrt_release ]; then
+	dependencies="wireguard-tools"
+	OS="OpenWRT"
+	update_cmd='opkg update'	
+	install_cmd='opkg install'
 else
 else
 	install_cmd=''
 	install_cmd=''
 fi
 fi
@@ -27,7 +42,7 @@ if [ -z "${install_cmd}" ]; then
         echo "OS unsupported for automatic dependency install"
         echo "OS unsupported for automatic dependency install"
 	exit 1
 	exit 1
 fi
 fi
-dependencies="wireguard"
+
 set -- $dependencies
 set -- $dependencies
 while [ -n "$1" ]; do
 while [ -n "$1" ]; do
     echo $1
     echo $1
@@ -50,15 +65,23 @@ while [ -n "$1" ]; do
 			fi
 			fi
 		fi	
 		fi	
 	else
 	else
-		is_installed=$(dpkg-query -W --showformat='${Status}\n' $1 | grep "install ok installed")
-		if [ "${is_installed}" = "install ok installed" ]; then
+		if [ "${OS}" = "OpenWRT" ]; then
+			is_installed=$(opkg list-installed $1 | grep $1)
+		else
+			is_installed=$(dpkg-query -W --showformat='${Status}\n' $1 | grep "install ok installed")
+		fi
+		if [ "${is_installed}" != "" ]; then
 			echo "    " $1 is installed
 			echo "    " $1 is installed
 		else
 		else
 			echo "    " $1 is not installed. Attempting install.
 			echo "    " $1 is not installed. Attempting install.
 			${install_cmd} $1
 			${install_cmd} $1
 			sleep 5
 			sleep 5
-			is_installed=$(dpkg-query -W --showformat='${Status}\n' $1 | grep "install ok installed")
-				if [ "${is_installed}" = "install ok installed" ]; then
+			if [ "${OS}" = "OpenWRT" ]; then
+				is_installed=$(opkg list-installed $1 | grep $1)
+			else
+				is_installed=$(dpkg-query -W --showformat='${Status}\n' $1 | grep "install ok installed")
+			fi
+			if [ "${is_installed}" != "" ]; then
 				echo "    " $1 is installed
 				echo "    " $1 is installed
 			elif [ -x "$(command -v $1)" ]; then
 			elif [ -x "$(command -v $1)" ]; then
 				echo "    " $1 is installed
 				echo "    " $1 is installed
@@ -105,7 +128,7 @@ case $(uname | tr '[:upper:]' '[:lower:]') in
                                 dist=netclient-arm64
                                 dist=netclient-arm64
 			;;
 			;;
 			armv7l)
 			armv7l)
-                                dist=netclient-armv7
+                                dist=netclient-arm7
 			;;
 			;;
 			arm*)
 			arm*)
 				dist=netclient-$CPU_ARCH
 				dist=netclient-$CPU_ARCH
@@ -155,18 +178,23 @@ esac
 echo "Binary = $dist"
 echo "Binary = $dist"
 
 
 url="https://github.com/gravitl/netmaker/releases/download/$VERSION/$dist"
 url="https://github.com/gravitl/netmaker/releases/download/$VERSION/$dist"
+curl_opts='-nv'
+if [ "${OS}" = "OpenWRT" ]; then
+	curl_opts='-q'
+fi
+
 if curl --output /dev/null --silent --head --fail "$url"; then
 if curl --output /dev/null --silent --head --fail "$url"; then
 	echo "Downloading $dist $VERSION"
 	echo "Downloading $dist $VERSION"
-	wget -nv -O netclient $url
+	wget $curl_opts -O netclient $url
 else
 else
 	echo "Downloading $dist latest"
 	echo "Downloading $dist latest"
-	wget -nv -O netclient https://github.com/gravitl/netmaker/releases/download/latest/$dist
+	wget $curl_opts -O netclient https://github.com/gravitl/netmaker/releases/download/latest/$dist
 fi
 fi
 
 
 chmod +x netclient
 chmod +x netclient
 
 
 EXTRA_ARGS=""
 EXTRA_ARGS=""
-if [ "${OS}" = "FreeBSD" ]; then
+if [ "${OS}" = "FreeBSD" ] || [ "${OS}" = "OpenWRT" ]; then
 	EXTRA_ARGS="--daemon=off"
 	EXTRA_ARGS="--daemon=off"
 fi
 fi
 
 
@@ -201,6 +229,58 @@ END_OF_FILE
 	sudo chmod +x /usr/local/etc/rc.d/netclient
 	sudo chmod +x /usr/local/etc/rc.d/netclient
 	sudo /usr/local/etc/rc.d/netclient enable
 	sudo /usr/local/etc/rc.d/netclient enable
 	sudo /usr/local/etc/rc.d/netclient start
 	sudo /usr/local/etc/rc.d/netclient start
-else
+
+elif [ "${OS}" = "OpenWRT" ]; then
+	mv ./netclient /etc/netclient/netclient
+	cat << 'END_OF_FILE' > ./netclient.service.tmp
+#!/bin/sh /etc/rc.common
+
+EXTRA_COMMANDS="status"
+EXTRA_HELP="        status      Check service is running"
+START=99
+
+LOG_FILE="/tmp/netclient.logs"
+
+start() {
+  if [ ! -f "${LOG_FILE}" ];then
+      touch "${LOG_FILE}"
+  fi
+  local PID=$(ps|grep "netclient checkin -n all"|grep -v grep|awk '{print $1}')
+  if [ "${PID}" ];then
+    echo "service is running"
+    return
+  fi
+  bash -c "while [ 1 ]; do /etc/netclient/netclient checkin -n all >> ${LOG_FILE} 2>&1;sleep 15;\
+           if [ $(ls -l ${LOG_FILE}|awk '{print $5}') -gt 10240000 ];then tar zcf "${LOG_FILE}.tar" -C / "tmp/netclient.logs"  && > $LOG_FILE;fi;done &"
+  echo "start"
+}
+
+stop() {
+  pids=$(ps|grep "netclient checkin -n all"|grep -v grep|awk '{print $1}')
+  for i in "${pids[@]}"
+  do
+	if [ "${i}" ];then
+		kill "${i}"
+	fi
+  done
+  echo "stop"
+}
+
+status() {
+  local PID=$(ps|grep "netclient checkin -n all"|grep -v grep|awk '{print $1}')
+  if [ "${PID}" ];then
+    echo -e "netclient[${PID}] is running \n"
+  else
+    echo -e "netclient is not running \n"
+  fi
+}
+
+END_OF_FILE
+	mv ./netclient.service.tmp /etc/init.d/netclient
+	chmod +x /etc/init.d/netclient
+	/etc/init.d/netclient enable
+	/etc/init.d/netclient start
+else 
 	rm -f netclient
 	rm -f netclient
 fi
 fi
+

+ 13 - 1
scripts/nm-quick.sh

@@ -28,7 +28,7 @@ fi
 echo "checking dependencies..."
 echo "checking dependencies..."
 
 
 declare -A osInfo;
 declare -A osInfo;
-osInfo[/etc/debian_version]="apt-get install -y"
+osInfo[/etc/debian_version]="apt-get install -y"u
 osInfo[/etc/alpine-release]="apk --update add"
 osInfo[/etc/alpine-release]="apk --update add"
 osInfo[/etc/centos-release]="yum install -y"
 osInfo[/etc/centos-release]="yum install -y"
 osInfo[/etc/fedora-release]="dnf install -y"
 osInfo[/etc/fedora-release]="dnf install -y"
@@ -40,8 +40,20 @@ do
     fi
     fi
 done
 done
 
 
+if [ -f /etc/debian_version ]; then
+	apt update
+elif [ -f /etc/alpine-release ]; then
+  apk update
+elif [ -f /etc/centos-release ]; then
+	yum update
+elif [ -f /etc/fedora-release ]; then
+	dnf update
+fi
+
 dependencies=("docker.io" "docker-compose" "wireguard" "jq")
 dependencies=("docker.io" "docker-compose" "wireguard" "jq")
 
 
+
+
 for dependency in ${dependencies[@]}; do
 for dependency in ${dependencies[@]}; do
     is_installed=$(dpkg-query -W --showformat='${Status}\n' ${dependency} | grep "install ok installed")
     is_installed=$(dpkg-query -W --showformat='${Status}\n' ${dependency} | grep "install ok installed")