From bdd1c8fc386158953fe16dcf01fa3c63bb5c5f72 Mon Sep 17 00:00:00 2001 From: afeiszli Date: Mon, 22 Nov 2021 07:54:01 -0500 Subject: [PATCH] fixed openwrt/windows scripts --- README.md | 11 ++++ scripts/netclient-install.ps1 | 104 ++++++++++++++++++---------------- scripts/netclient-install.sh | 98 +++++++++++++++++++++++++++++--- scripts/nm-quick.sh | 14 ++++- 4 files changed, 169 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index 08b82a03..e7e6a019 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,17 @@ After installing Netmaker, check out the [Walkthrough](https://itnext.io/getting - [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 [WireGuard](https://wireguard.com/) is a registered trademark of Jason A. Donenfeld. diff --git a/scripts/netclient-install.ps1 b/scripts/netclient-install.ps1 index f5de174a..9d8411ea 100644 --- a/scripts/netclient-install.ps1 +++ b/scripts/netclient-install.ps1 @@ -11,57 +11,65 @@ new-module -name netclient-install -scriptblock { Function Netclient-Install() { 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." } } + diff --git a/scripts/netclient-install.sh b/scripts/netclient-install.sh index 1fdb051e..a8cc3a58 100755 --- a/scripts/netclient-install.sh +++ b/scripts/netclient-install.sh @@ -10,15 +10,30 @@ echo "checking dependencies..." OS=$(uname) if [ -f /etc/debian_version ]; then + dependencies="wireguard wireguard-tools" + update_cmd='apt update' install_cmd='apt-get install -y' elif [ -f /etc/alpine-release ]; then + dependencies="wireguard" + update_cmd='apk update' install_cmd='apk --update add' elif [ -f /etc/centos-release ]; then + dependencies="wireguard" + update_cmd='yum update' install_cmd='yum install -y' elif [ -f /etc/fedora-release ]; then + dependencies="wireguard" + update_cmd='dnf update' install_cmd='dnf install -y' elif [ "${OS}" = "FreeBSD" ]; then + dependencies="wireguard" + update_cmd='pkg update' 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 install_cmd='' fi @@ -27,7 +42,7 @@ if [ -z "${install_cmd}" ]; then echo "OS unsupported for automatic dependency install" exit 1 fi -dependencies="wireguard" + set -- $dependencies while [ -n "$1" ]; do echo $1 @@ -50,15 +65,23 @@ while [ -n "$1" ]; do fi fi 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 else echo " " $1 is not installed. Attempting install. ${install_cmd} $1 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 elif [ -x "$(command -v $1)" ]; then echo " " $1 is installed @@ -155,18 +178,23 @@ esac echo "Binary = $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 echo "Downloading $dist $VERSION" - wget -nv -O netclient $url + wget $curl_opts -O netclient $url else 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 chmod +x netclient EXTRA_ARGS="" -if [ "${OS}" = "FreeBSD" ]; then +if [ "${OS}" = "FreeBSD" ] || [ "${OS}" = "OpenWRT" ]; then EXTRA_ARGS="--daemon=off" fi @@ -201,6 +229,58 @@ END_OF_FILE sudo chmod +x /usr/local/etc/rc.d/netclient sudo /usr/local/etc/rc.d/netclient enable 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 fi + diff --git a/scripts/nm-quick.sh b/scripts/nm-quick.sh index d4e4d19a..507e6258 100755 --- a/scripts/nm-quick.sh +++ b/scripts/nm-quick.sh @@ -28,7 +28,7 @@ fi echo "checking dependencies..." 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/centos-release]="yum install -y" osInfo[/etc/fedora-release]="dnf install -y" @@ -40,8 +40,20 @@ do fi 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") + + for dependency in ${dependencies[@]}; do is_installed=$(dpkg-query -W --showformat='${Status}\n' ${dependency} | grep "install ok installed")