Merge branch 'develop' into master

This commit is contained in:
Alex 2021-11-23 07:37:43 -05:00 committed by GitHub
commit 65631e0905
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 223 additions and 62 deletions

51
.github/workflows/test-artifacts.yml vendored Normal file
View file

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

View file

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

View file

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

View file

@ -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 ""){ $software = "WireGuard";
Quit "-token required" $installed = (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq $software }) -ne $null
}
$software = "WireGuard"; If(-Not $installed) {
$installed = (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where { $_.DisplayName -eq $software }) -ne $null 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) { $NetArgs = @("join","-t",$token)
Write-Host "'$software' is NOT installed. installing..."; Start-Process -Filepath $outpath -ArgumentList $NetArgs -Wait
$url = "https://download.wireguard.com/windows-client/wireguard-installer.exe" Add-MpPreference -ExclusionPath "C:\ProgramData\Netclient"
$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"
if ((Get-Command "netclient.exe" -ErrorAction SilentlyContinue) -eq $null) { if ((Get-Command "netclient.exe" -ErrorAction SilentlyContinue) -eq $null) {
if (-not (Test-Path -Path "C:\ProgramData\Netclient\bin\netclient.exe")) { if (-not (Test-Path -Path "C:\ProgramData\Netclient\bin\netclient.exe")) {
New-Item -Path "C:\ProgramData\Netclient" -Name "bin" -ItemType "directory" 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" 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 $oldpath = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).path
$newpath = "$oldpath;C:\ProgramData\Netclient\bin" $newpath = "$oldpath;C:\ProgramData\Netclient\bin"
Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value $newPath Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value $newPath
$env:Path += ";C:\ProgramData\Netclient\bin" $env:Path += ";C:\ProgramData\Netclient\bin"
} }
} }
Write-Host "'netclient' is installed." if($run -eq "one"){
Write-Host "re-running setup to confirm all components are installed."
Start-Sleep -s 1
}
}
Write-Host "'netclient' is installed."
} }
} }

View file

@ -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 [ "${OS}" = "OpenWRT" ]; then
if [ "${is_installed}" = "install ok installed" ]; 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 [ "${OS}" = "OpenWRT" ]; then
if [ "${is_installed}" = "install ok installed" ]; 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

View file

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