| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 | 
							- #!/bin/bash
 
- PATH="/usr/sbin:/usr/bin:/sbin:/bin"
 
- binpath=$(uci get AdGuardHome.AdGuardHome.binpath)
 
- if [ -z "$binpath" ]; then
 
- uci set AdGuardHome.AdGuardHome.binpath="/tmp/AdGuardHome/AdGuardHome"
 
- binpath="/tmp/AdGuardHome/AdGuardHome"
 
- fi
 
- mkdir -p ${binpath%/*}
 
- upxflag=$(uci get AdGuardHome.AdGuardHome.upxflag 2>/dev/null)
 
- check_if_already_running(){
 
- 	running_tasks="$(ps |grep "AdGuardHome" |grep "update_core" |grep -v "grep" |awk '{print $1}' |wc -l)"
 
- 	[ "${running_tasks}" -gt "2" ] && echo -e "\nA task is already running."  && EXIT 2
 
- }
 
- check_wgetcurl(){
 
- 	which curl && downloader="curl -L -k --retry 2 --connect-timeout 20 -o" && return
 
- 	which wget-ssl && downloader="wget-ssl --no-check-certificate -t 2 -T 20 -O" && return
 
- 	[ -z "$1" ] && opkg update || (echo error opkg && EXIT 1)
 
- 	#wgetver=$(opkg list wget | awk '{print $3}' | sort -r | head -n 1)
 
- 	#[ -z "$1" ] && (opkg install wget=$wgetver --force-overwrite ; check_wgetcurl 1 ;return)
 
- 	[ -z "$1" ] && (opkg remove wget wget-nossl --force-depends ; opkg install wget --force-overwrite; check_wgetcurl 1 ;return)
 
- 	[ "$1" == "1" ] && (opkg install curl --force-overwrite; check_wgetcurl 2 ; return)
 
- 	echo error curl and wget && EXIT 1
 
- }
 
- check_latest_version(){
 
- 	check_wgetcurl
 
- 	latest_ver="$($downloader - https://api.github.com/repos/AdguardTeam/AdGuardHome/releases/latest 2>/dev/null|grep -E 'tag_name' |grep -E 'v[0-9.]+' -o 2>/dev/null)"
 
- 	if [ -z "${latest_ver}" ]; then
 
- 		echo -e "\nFailed to check latest version, please try again later."  && EXIT 1
 
- 	fi
 
- 	now_ver="$($binpath -c /dev/null --check-config 2>&1| grep -m 1 -E 'v[0-9.]+' -o)"
 
- 	if [ "${latest_ver}"x != "${now_ver}"x ] || [ "$1" == "force" ]; then
 
- 		echo -e "Local version: ${now_ver}., cloud version: ${latest_ver}." 
 
- 		doupdate_core
 
- 	else
 
- 			echo -e "\nLocal version: ${now_ver}, cloud version: ${latest_ver}." 
 
- 			echo -e "You're already using the latest version." 
 
- 			if [ ! -z "$upxflag" ]; then
 
- 				filesize=$(ls -l $binpath | awk '{ print $5 }')
 
- 				if [ $filesize -gt 8000000 ]; then
 
- 					echo -e "start upx may take a long time"
 
- 					doupx
 
- 					mkdir -p "/tmp/AdGuardHomeupdate/AdGuardHome" >/dev/null 2>&1
 
- 					rm -fr /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/}
 
- 					/tmp/upx-${upx_latest_ver}-${Arch}_linux/upx $upxflag $binpath -o /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/}
 
- 					rm -rf /tmp/upx-${upx_latest_ver}-${Arch}_linux
 
- 					/etc/init.d/AdGuardHome stop nobackup
 
- 					rm $binpath
 
- 					mv -f /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/} $binpath
 
- 					/etc/init.d/AdGuardHome start
 
- 					echo -e "finished"
 
- 				fi
 
- 			fi
 
- 			EXIT 0
 
- 	fi
 
- }
 
- doupx(){
 
- 	Archt="$(opkg info kernel | grep Architecture | awk -F "[ _]" '{print($2)}')"
 
- 	case $Archt in
 
- 	"i386")
 
- 	Arch="i386"
 
- 	;;
 
- 	"i686")
 
- 	Arch="i386"
 
- 	echo -e "i686 use $Arch may have bug" 
 
- 	;;
 
- 	"x86")
 
- 	Arch="amd64"
 
- 	;;
 
- 	"mipsel")
 
- 	Arch="mipsel"
 
- 	;;
 
- 	"mips64el")
 
- 	Arch="mips64el"
 
- 	Arch="mipsel"
 
- 	echo -e "mips64el use $Arch may have bug" 
 
- 	;;
 
- 	"mips")
 
- 	Arch="mips"
 
- 	;;
 
- 	"mips64")
 
- 	Arch="mips64"
 
- 	Arch="mips"
 
- 	echo -e "mips64 use $Arch may have bug" 
 
- 	;;
 
- 	"arm")
 
- 	Arch="arm"
 
- 	;;
 
- 	"armeb")
 
- 	Arch="armeb"
 
- 	;;
 
- 	"aarch64")
 
- 	Arch="arm64"
 
- 	;;
 
- 	"powerpc")
 
- 	Arch="powerpc"
 
- 	;;
 
- 	"powerpc64")
 
- 	Arch="powerpc64"
 
- 	;;
 
- 	*)
 
- 	echo -e "error not support $Archt if you can use offical release please issue a bug" 
 
- 	EXIT 1
 
- 	;;
 
- 	esac
 
- 	upx_latest_ver="$($downloader - https://api.github.com/repos/upx/upx/releases/latest 2>/dev/null|grep -E 'tag_name' |grep -E '[0-9.]+' -o 2>/dev/null)"
 
- 	$downloader /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz "https://github.com/upx/upx/releases/download/v${upx_latest_ver}/upx-${upx_latest_ver}-${Arch}_linux.tar.xz" 2>&1
 
- 	#tar xvJf
 
- 	which xz || (opkg list | grep ^xz || opkg update && opkg install xz || (opkg update && opkg install xz)) || (echo "xz download fail" && EXIT 1)
 
- 	mkdir -p /tmp/upx-${upx_latest_ver}-${Arch}_linux
 
- 	xz -d -c /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz| tar -x -C "/tmp" >/dev/null 2>&1
 
- 	if [ ! -e "/tmp/upx-${upx_latest_ver}-${Arch}_linux/upx" ]; then
 
- 		echo -e "Failed to download upx." 
 
- 		EXIT 1
 
- 	fi
 
- 	rm /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz
 
- }
 
- doupdate_core(){
 
- 	echo -e "Updating core..." 
 
- 	mkdir -p "/tmp/AdGuardHomeupdate"
 
- 	rm -rf /tmp/AdGuardHomeupdate/* >/dev/null 2>&1
 
- 	Archt="$(opkg info kernel | grep Architecture | awk -F "[ _]" '{print($2)}')"
 
- 	case $Archt in
 
- 	"i386")
 
- 	Arch="386"
 
- 	;;
 
- 	"i686")
 
- 	Arch="386"
 
- 	;;
 
- 	"x86")
 
- 	Arch="amd64"
 
- 	;;
 
- 	"mipsel")
 
- 	Arch="mipsle"
 
- 	;;
 
- 	"mips64el")
 
- 	Arch="mips64le"
 
- 	Arch="mipsle"
 
- 	echo -e "mips64el use $Arch may have bug" 
 
- 	;;
 
- 	"mips")
 
- 	Arch="mips"
 
- 	;;
 
- 	"mips64")
 
- 	Arch="mips64"
 
- 	Arch="mips"
 
- 	echo -e "mips64 use $Arch may have bug" 
 
- 	;;
 
- 	"arm")
 
- 	Arch="arm"
 
- 	;;
 
- 	"aarch64")
 
- 	Arch="arm64"
 
- 	;;
 
- 	"powerpc")
 
- 	Arch="ppc"
 
- 	echo -e "error not support $Archt" 
 
- 	EXIT 1
 
- 	;;
 
- 	"powerpc64")
 
- 	Arch="ppc64"
 
- 	echo -e "error not support $Archt" 
 
- 	EXIT 1
 
- 	;;
 
- 	*)
 
- 	echo -e "error not support $Archt if you can use offical release please issue a bug" 
 
- 	EXIT 1
 
- 	;;
 
- 	esac
 
- 	echo -e "start download" 
 
- 	grep -v "^#" /usr/share/AdGuardHome/links.txt >/tmp/run/AdHlinks.txt
 
- 	while read link
 
- 	do
 
- 		eval link="$link"
 
- 		$downloader /tmp/AdGuardHomeupdate/${link##*/} "$link" 2>&1
 
- 		if [ "$?" != "0" ]; then
 
- 			echo "download failed try another download"
 
- 			rm -f /tmp/AdGuardHomeupdate/${link##*/}
 
- 		else
 
- 			local success="1"
 
- 			break
 
- 		fi 
 
- 	done < "/tmp/run/AdHlinks.txt"
 
- 	rm /tmp/run/AdHlinks.txt
 
- 	[ -z "$success" ] && echo "no download success" && EXIT 1
 
- 	if [ "${link##*.}" == "gz" ]; then
 
- 		tar -zxf "/tmp/AdGuardHomeupdate/${link##*/}" -C "/tmp/AdGuardHomeupdate/"
 
- 		if [ ! -e "/tmp/AdGuardHomeupdate/AdGuardHome" ]; then
 
- 			echo -e "Failed to download core." 
 
- 			rm -rf "/tmp/AdGuardHomeupdate" >/dev/null 2>&1
 
- 			EXIT 1
 
- 		fi
 
- 		downloadbin="/tmp/AdGuardHomeupdate/AdGuardHome/AdGuardHome"
 
- 	else
 
- 		downloadbin="/tmp/AdGuardHomeupdate/${link##*/}"
 
- 	fi
 
- 	chmod 755 $downloadbin
 
- 	echo -e "download success start copy" 
 
- 	if [ -n "$upxflag" ]; then
 
- 		echo -e "start upx may take a long time" 
 
- 		doupx
 
- 		/tmp/upx-${upx_latest_ver}-${Arch}_linux/upx $upxflag $downloadbin
 
- 		rm -rf /tmp/upx-${upx_latest_ver}-${Arch}_linux
 
- 	fi
 
- 	echo -e "start copy" 
 
- 	/etc/init.d/AdGuardHome stop nobackup
 
- 	rm "$binpath"
 
- 	mv -f "$downloadbin" "$binpath"
 
- 	if [ "$?" == "1" ]; then
 
- 		echo "mv failed maybe not enough space please use upx or change bin to /tmp/AdGuardHome" 
 
- 		EXIT 1
 
- 	fi
 
- 	/etc/init.d/AdGuardHome start
 
- 	rm -rf "/tmp/AdGuardHomeupdate" >/dev/null 2>&1
 
- 	echo -e "Succeeded in updating core." 
 
- 	echo -e "Local version: ${latest_ver}, cloud version: ${latest_ver}.\n" 
 
- 	EXIT 0
 
- }
 
- EXIT(){
 
- 	rm /var/run/update_core 2>/dev/null
 
- 	[ "$1" != "0" ] && touch /var/run/update_core_error
 
- 	exit $1
 
- }
 
- main(){
 
- 	
 
- 	check_if_already_running
 
- 	check_latest_version $1
 
- }
 
- 	trap "EXIT 1" SIGTERM SIGINT
 
- 	touch /var/run/update_core
 
- 	rm /var/run/update_core_error 2>/dev/null
 
- 	main $1
 
 
  |