mirror of
				https://github.com/gravitl/netmaker.git
				synced 2025-10-31 12:16:29 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			307 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			307 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| if [ $(id -u) -ne 0 ]; then
 | |
|    echo "This script must be run as root"
 | |
|    exit 1
 | |
| fi
 | |
| 
 | |
| 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 [ -f /etc/redhat-release ]; then
 | |
| 	dependencies="wireguard"
 | |
| 	update_cmd='yum update'
 | |
| 	install_cmd='yum install -y'
 | |
| elif [ -f /etc/arch-release ]; then
 | |
|     	dependecies="wireguard-tools"
 | |
| 	update_cmd='pacman -Sy'
 | |
| 	install_cmd='pacman -S --noconfirm'
 | |
| elif [ "${OS}" = "FreeBSD" ]; then
 | |
| 	dependencies="wireguard wget"
 | |
| 	update_cmd='pkg update'
 | |
| 	install_cmd='pkg install -y'
 | |
| elif [ -f /etc/turris-version ]; then
 | |
| 	dependencies="wireguard-tools bash"
 | |
| 	OS="TurrisOS"
 | |
| 	update_cmd='opkg update'	
 | |
| 	install_cmd='opkg install'
 | |
| elif [ -f /etc/openwrt_release ]; then
 | |
| 	dependencies="wireguard-tools bash"
 | |
| 	OS="OpenWRT"
 | |
| 	update_cmd='opkg update'	
 | |
| 	install_cmd='opkg install'
 | |
| else
 | |
| 	install_cmd=''
 | |
| fi
 | |
| 
 | |
| if [ -z "${install_cmd}" ]; then
 | |
|         echo "OS unsupported for automatic dependency install"
 | |
| 	exit 1
 | |
| fi
 | |
| 
 | |
| ${update_cmd}
 | |
| 
 | |
| set -- $dependencies
 | |
| while [ -n "$1" ]; do
 | |
|     echo $1
 | |
| 	if [ "${OS}" = "FreeBSD" ]; then
 | |
| 		is_installed=$(pkg check -d $1 | grep "Checking" | grep "done")
 | |
| 		if [ "$is_installed" != "" ]; then
 | |
| 			echo "    " $1 is installed
 | |
| 		else
 | |
| 			echo "    " $1 is not installed. Attempting install.
 | |
| 			${install_cmd} $1
 | |
| 			sleep 5
 | |
| 			is_installed=$(pkg check -d $1 | grep "Checking" | grep "done")
 | |
| 			if [ "$is_installed" != "" ]; then
 | |
| 				echo "    " $1 is installed
 | |
| 			elif [ -x "$(command -v $1)" ]; then
 | |
| 				echo "    " $1 is installed
 | |
| 			else
 | |
| 				echo "    " FAILED TO INSTALL $1
 | |
| 				echo "    " This may break functionality.
 | |
| 			fi
 | |
| 		fi	
 | |
| 	else
 | |
| 		if [ "${OS}" = "OpenWRT" ] || [ "${OS}" = "TurrisOS" ]; 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
 | |
| 			if [ "${OS}" = "OpenWRT" ] || [ "${OS}" = "TurrisOS" ]; 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
 | |
| 			else
 | |
| 				echo "    " FAILED TO INSTALL $1
 | |
| 				echo "    " This may break functionality.
 | |
| 			fi
 | |
| 		fi
 | |
| 	fi
 | |
| 	shift
 | |
| done
 | |
| 
 | |
| set -e
 | |
| 
 | |
| [ -z "$KEY" ] && KEY=nokey;
 | |
| [ -z "$VERSION" ] && echo "no \$VERSION provided, fallback to latest" && VERSION=latest;
 | |
| [ "latest" != "$VERSION" ] && [ "v" != `echo $VERSION | cut -c1` ] && VERSION="v$VERSION"
 | |
| [ -z "$NAME" ] && NAME="";
 | |
| 
 | |
| dist=netclient
 | |
| 
 | |
| echo "OS Version = $(uname)"
 | |
| echo "Netclient Version = $VERSION"
 | |
| 
 | |
| case $(uname | tr A-Z a-z) in
 | |
| 	linux*)
 | |
| 		if [ -z "$CPU_ARCH" ]; then
 | |
| 			CPU_ARCH=$(uname -m)
 | |
| 		fi
 | |
| 		case $CPU_ARCH in
 | |
| 			amd64)
 | |
| 				dist=netclient
 | |
| 			;;
 | |
| 			x86_64)
 | |
| 				dist=netclient
 | |
| 			;;
 | |
|  			arm64)
 | |
| 				dist=netclient-arm64
 | |
| 			;;
 | |
| 			aarch64)
 | |
|                 dist=netclient-arm64
 | |
| 			;;
 | |
| 			armv6l)
 | |
|                 dist=netclient-arm6
 | |
| 			;;
 | |
| 			armv7l)
 | |
|                 dist=netclient-arm7
 | |
| 			;;
 | |
| 			arm*)
 | |
| 				dist=netclient-$CPU_ARCH
 | |
| 			;;
 | |
| 			mipsle)
 | |
|                 dist=netclient-mipsle
 | |
| 			;;
 | |
| 			mips)
 | |
| 			    #If binary in the below condition is not compatible with your hardware, retry with other netclient-mips* binaries.
 | |
| 				if [[ `printf '\0\1' | hexdump -e '/2 "%04x"'` -eq 0100 ]]; then
 | |
| 					#Little Endian, tested and confirmed in GL-MT1300 OS "OpenWrt 19.07.8"
 | |
| 					dist=netclient-mipsle-softfloat
 | |
| 				else
 | |
| 					#Big Endian, tested and confirmed in DSL-2750U OS "OpenWrt 22.03.2"
 | |
| 					dist=netclient-mips-softfloat
 | |
| 				fi
 | |
| 			;;
 | |
| 			*)
 | |
| 				fatal "$CPU_ARCH : cpu architecture not supported"
 | |
|     		esac
 | |
| 	;;
 | |
| 	darwin)
 | |
|         dist=netclient-darwin
 | |
| 	;;
 | |
| 	Darwin)
 | |
|         dist=netclient-darwin
 | |
| 	;;
 | |
| 	freebsd*)
 | |
| 		if [ -z "$CPU_ARCH" ]; then
 | |
| 			CPU_ARCH=$(uname -m)
 | |
| 		fi
 | |
| 		case $CPU_ARCH in
 | |
| 			amd64)
 | |
| 				dist=netclient-freebsd
 | |
| 			;;
 | |
| 			x86_64)
 | |
| 				dist=netclient-freebsd
 | |
| 			;;
 | |
|  			arm64)
 | |
| 				dist=netclient-freebsd-arm64
 | |
| 			;;
 | |
| 			aarch64)
 | |
|                 dist=netclient-freebsd-arm64
 | |
| 			;;
 | |
| 			armv7l)
 | |
|                 dist=netclient-freebsd-arm7
 | |
| 			;;
 | |
| 			arm*)
 | |
| 				dist=netclient-freebsd-$CPU_ARCH
 | |
|             ;;
 | |
| 			*)
 | |
| 				fatal "$CPU_ARCH : cpu architecture not supported"
 | |
|     		esac
 | |
| 	;;
 | |
| esac
 | |
| 
 | |
| echo "Binary = $dist"
 | |
| 
 | |
| url="https://github.com/gravitl/netmaker/releases/download/$VERSION/$dist"
 | |
| curl_opts='-nv'
 | |
| if [ "${OS}" = "OpenWRT" ] || [ "${OS}" = "TurrisOS" ]; then
 | |
| 	curl_opts='-q'
 | |
| fi
 | |
| 
 | |
| if curl --output /dev/null --silent --head --fail "$url"; then
 | |
| 	echo "Downloading $dist $VERSION"
 | |
| 	wget $curl_opts -O netclient $url
 | |
| else
 | |
| 	echo "Downloading $dist latest"
 | |
| 	wget $curl_opts -O netclient https://github.com/gravitl/netmaker/releases/latest/download/$dist
 | |
| fi
 | |
| 
 | |
| chmod +x netclient
 | |
| 
 | |
| EXTRA_ARGS=""
 | |
| if [ "${OS}" = "OpenWRT" ] || [ "${OS}" = "TurrisOS" ]; then
 | |
| 	EXTRA_ARGS="--daemon=off"
 | |
| fi
 | |
| 
 | |
| if [ "${KEY}" != "nokey" ]; then
 | |
|   if [ -z "${NAME}" ]; then
 | |
|     ./netclient join -t $KEY $EXTRA_ARGS
 | |
|   else
 | |
|     ./netclient join -t $KEY --name $NAME $EXTRA_ARGS
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| if [ "${OS}" = "FreeBSD" ]; then
 | |
|   if ! [ -x /usr/sbin/netclient ]; then
 | |
|     echo "Moving netclient executable to \"/usr/sbin/netclient\""
 | |
|     mv netclient /usr/sbin  
 | |
|   else
 | |
|     echo "Netclient already present."
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| if [ "${OS}" = "OpenWRT" ] || [ "${OS}" = "TurrisOS" ]; then
 | |
| 	mv ./netclient /sbin/netclient
 | |
| 
 | |
| 	if [ "${OS}" = "TurrisOS" ]; then
 | |
| 		url="https://raw.githubusercontent.com/gravitl/netmaker/$VERSION/scripts/openwrt-daemon.sh"
 | |
| 		if curl --output /dev/null --silent --head --fail $url; then
 | |
| 			wget $curl_opts -O netclient.service.tmp $url
 | |
| 		else
 | |
| 			wget $curl_opts -O netclient.service.tmp https://raw.githubusercontent.com/gravitl/netmaker/master/scripts/openwrt-daemon.sh
 | |
| 		fi
 | |
| 	elif [ "${OS}" = "OpenWRT" ] && [ "$CPU_ARCH" = "mips" ]; then
 | |
| 		wget $curl_opts -O netclient.service.tmp https://raw.githubusercontent.com/gravitl/netmaker/master/scripts/openwrt-daemon.sh
 | |
| 	else
 | |
| 		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 daemon"|grep -v grep|awk '{print $1}')
 | |
|   if [ "${PID}" ];then
 | |
|     echo "service is running"
 | |
|     return
 | |
|   fi
 | |
|   bash -c "do /sbin/netclient daemon  >> ${LOG_FILE} 2>&1;\
 | |
|            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 daemon"|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 daemon"|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
 | |
| 	fi
 | |
| 	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 | 
