update_core.sh 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. #!/bin/bash
  2. PATH="/usr/sbin:/usr/bin:/sbin:/bin"
  3. binpath=$(uci get AdGuardHome.AdGuardHome.binpath)
  4. if [ -z "$binpath" ]; then
  5. uci set AdGuardHome.AdGuardHome.binpath="/tmp/AdGuardHome/AdGuardHome"
  6. binpath="/tmp/AdGuardHome/AdGuardHome"
  7. fi
  8. mkdir -p ${binpath%/*}
  9. upxflag=$(uci get AdGuardHome.AdGuardHome.upxflag 2>/dev/null)
  10. check_if_already_running(){
  11. running_tasks="$(ps |grep "AdGuardHome" |grep "update_core" |grep -v "grep" |awk '{print $1}' |wc -l)"
  12. [ "${running_tasks}" -gt "2" ] && echo -e "\nA task is already running." && EXIT 2
  13. }
  14. check_wgetcurl(){
  15. which curl && downloader="curl -L -k --retry 2 --connect-timeout 20 -o" && return
  16. which wget-ssl && downloader="wget-ssl --no-check-certificate -t 2 -T 20 -O" && return
  17. [ -z "$1" ] && opkg update || (echo error opkg && EXIT 1)
  18. [ -z "$1" ] && (opkg remove wget wget-nossl --force-depends ; opkg install wget ; check_wgetcurl 1 ;return)
  19. [ "$1" == "1" ] && (opkg install curl ; check_wgetcurl 2 ; return)
  20. echo error curl and wget && EXIT 1
  21. }
  22. check_latest_version(){
  23. check_wgetcurl
  24. 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)"
  25. if [ -z "${latest_ver}" ]; then
  26. echo -e "\nFailed to check latest version, please try again later." && EXIT 1
  27. fi
  28. now_ver="$($binpath -c /dev/null --check-config 2>&1| grep -m 1 -E 'v[0-9.]+' -o)"
  29. if [ "${latest_ver}"x != "${now_ver}"x ] || [ "$1" == "force" ]; then
  30. echo -e "Local version: ${now_ver}., cloud version: ${latest_ver}."
  31. doupdate_core
  32. else
  33. echo -e "\nLocal version: ${now_ver}, cloud version: ${latest_ver}."
  34. echo -e "You're already using the latest version."
  35. if [ ! -z "$upxflag" ]; then
  36. filesize=$(ls -l $binpath | awk '{ print $5 }')
  37. if [ $filesize -gt 8000000 ]; then
  38. echo -e "start upx may take a long time"
  39. doupx
  40. mkdir -p "/tmp/AdGuardHomeupdate/AdGuardHome" >/dev/null 2>&1
  41. rm -fr /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/}
  42. /tmp/upx-${upx_latest_ver}-${Arch}_linux/upx $upxflag $binpath -o /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/}
  43. rm -rf /tmp/upx-${upx_latest_ver}-${Arch}_linux
  44. /etc/init.d/AdGuardHome stop nobackup
  45. rm $binpath
  46. mv -f /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/} $binpath
  47. /etc/init.d/AdGuardHome start
  48. echo -e "finished"
  49. fi
  50. fi
  51. EXIT 0
  52. fi
  53. }
  54. doupx(){
  55. Archt="$(opkg info kernel | grep Architecture | awk -F "[ _]" '{print($2)}')"
  56. case $Archt in
  57. "i386")
  58. Arch="i386"
  59. ;;
  60. "i686")
  61. Arch="i386"
  62. echo -e "i686 use $Arch may have bug"
  63. ;;
  64. "x86")
  65. Arch="amd64"
  66. ;;
  67. "mipsel")
  68. Arch="mipsel"
  69. ;;
  70. "mips64el")
  71. Arch="mips64el"
  72. Arch="mipsel"
  73. echo -e "mips64el use $Arch may have bug"
  74. ;;
  75. "mips")
  76. Arch="mips"
  77. ;;
  78. "mips64")
  79. Arch="mips64"
  80. Arch="mips"
  81. echo -e "mips64 use $Arch may have bug"
  82. ;;
  83. "arm")
  84. Arch="arm"
  85. ;;
  86. "armeb")
  87. Arch="armeb"
  88. ;;
  89. "aarch64")
  90. Arch="arm64"
  91. ;;
  92. "powerpc")
  93. Arch="powerpc"
  94. ;;
  95. "powerpc64")
  96. Arch="powerpc64"
  97. ;;
  98. *)
  99. echo -e "error not support $Archt if you can use offical release please issue a bug"
  100. EXIT 1
  101. ;;
  102. esac
  103. 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)"
  104. $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
  105. #tar xvJf
  106. which xz || (opkg list | grep ^xz || opkg update && opkg install xz) || (echo "xz download fail" && EXIT 1)
  107. mkdir -p /tmp/upx-${upx_latest_ver}-${Arch}_linux
  108. xz -d -c /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz| tar -x -C "/tmp" >/dev/null 2>&1
  109. if [ ! -e "/tmp/upx-${upx_latest_ver}-${Arch}_linux/upx" ]; then
  110. echo -e "Failed to download upx."
  111. EXIT 1
  112. fi
  113. rm /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz
  114. }
  115. doupdate_core(){
  116. echo -e "Updating core..."
  117. mkdir -p "/tmp/AdGuardHomeupdate"
  118. rm -rf /tmp/AdGuardHomeupdate/* >/dev/null 2>&1
  119. Archt="$(opkg info kernel | grep Architecture | awk -F "[ _]" '{print($2)}')"
  120. case $Archt in
  121. "i386")
  122. Arch="386"
  123. ;;
  124. "i686")
  125. Arch="386"
  126. ;;
  127. "x86")
  128. Arch="amd64"
  129. ;;
  130. "mipsel")
  131. Arch="mipsle"
  132. ;;
  133. "mips64el")
  134. Arch="mips64le"
  135. Arch="mipsle"
  136. echo -e "mips64el use $Arch may have bug"
  137. ;;
  138. "mips")
  139. Arch="mips"
  140. ;;
  141. "mips64")
  142. Arch="mips64"
  143. Arch="mips"
  144. echo -e "mips64 use $Arch may have bug"
  145. ;;
  146. "arm")
  147. Arch="arm"
  148. ;;
  149. "aarch64")
  150. Arch="arm64"
  151. ;;
  152. "powerpc")
  153. Arch="ppc"
  154. echo -e "error not support $Archt"
  155. EXIT 1
  156. ;;
  157. "powerpc64")
  158. Arch="ppc64"
  159. echo -e "error not support $Archt"
  160. EXIT 1
  161. ;;
  162. *)
  163. echo -e "error not support $Archt if you can use offical release please issue a bug"
  164. EXIT 1
  165. ;;
  166. esac
  167. echo -e "start download"
  168. grep -v "^#" /usr/share/AdGuardHome/links.txt >/tmp/run/AdHlinks.txt
  169. while read link
  170. do
  171. eval link="$link"
  172. $downloader /tmp/AdGuardHomeupdate/${link##*/} "$link" 2>&1
  173. if [ "$?" != "0" ]; then
  174. echo "download failed try another download"
  175. rm -f /tmp/AdGuardHomeupdate/${link##*/}
  176. else
  177. local success="1"
  178. break
  179. fi
  180. done < "/tmp/run/AdHlinks.txt"
  181. rm /tmp/run/AdHlinks.txt
  182. [ -z "$success" ] && echo "no download success" && EXIT 1
  183. if [ "${link##*.}" == "gz" ]; then
  184. tar -zxf "/tmp/AdGuardHomeupdate/${link##*/}" -C "/tmp/AdGuardHomeupdate/"
  185. if [ ! -e "/tmp/AdGuardHomeupdate/AdGuardHome" ]; then
  186. echo -e "Failed to download core."
  187. rm -rf "/tmp/AdGuardHomeupdate" >/dev/null 2>&1
  188. EXIT 1
  189. fi
  190. downloadbin="/tmp/AdGuardHomeupdate/AdGuardHome/AdGuardHome"
  191. else
  192. downloadbin="/tmp/AdGuardHomeupdate/${link##*/}"
  193. fi
  194. chmod 755 $downloadbin
  195. echo -e "download success start copy"
  196. if [ -n "$upxflag" ]; then
  197. echo -e "start upx may take a long time"
  198. doupx
  199. /tmp/upx-${upx_latest_ver}-${Arch}_linux/upx $upxflag $downloadbin
  200. rm -rf /tmp/upx-${upx_latest_ver}-${Arch}_linux
  201. fi
  202. echo -e "start copy"
  203. /etc/init.d/AdGuardHome stop nobackup
  204. rm "$binpath"
  205. mv -f "$downloadbin" "$binpath"
  206. if [ "$?" == "1" ]; then
  207. echo "mv failed maybe not enough space please use upx or change bin to /tmp/AdGuardHome"
  208. EXIT 1
  209. fi
  210. /etc/init.d/AdGuardHome start
  211. rm -rf "/tmp/AdGuardHomeupdate" >/dev/null 2>&1
  212. echo -e "Succeeded in updating core."
  213. echo -e "Local version: ${latest_ver}, cloud version: ${latest_ver}.\n"
  214. EXIT 0
  215. }
  216. EXIT(){
  217. rm /var/run/update_core 2>/dev/null
  218. [ "$1" != "0" ] && touch /var/run/update_core_error
  219. exit $1
  220. }
  221. main(){
  222. check_if_already_running
  223. check_latest_version $1
  224. }
  225. trap "EXIT 1" SIGTERM SIGINT
  226. touch /var/run/update_core
  227. rm /var/run/update_core_error 2>/dev/null
  228. main $1