From 2bfa03cf6c92b02e962233f97f32bb07493f79b5 Mon Sep 17 00:00:00 2001 From: Hyy2001X <1804430051@qq.com> Date: Sat, 17 Jul 2021 00:14:38 +0800 Subject: [PATCH] =?UTF-8?q?V6.4.5=20=E5=90=8C=E6=AD=A5=20AutoBuild=5FFunct?= =?UTF-8?q?ion.sh=20=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Scripts/AutoUpdate.sh | 137 +++++++++++++++++++++--------------------- 1 file changed, 68 insertions(+), 69 deletions(-) diff --git a/Scripts/AutoUpdate.sh b/Scripts/AutoUpdate.sh index 85c6b85..237771f 100755 --- a/Scripts/AutoUpdate.sh +++ b/Scripts/AutoUpdate.sh @@ -9,28 +9,29 @@ TITLE() { SHELL_HELP() { TITLE + echo -e "\n当前指令: ${Run_Command}" cat <] [-P] [-n] [-f] [-u] - $0 [<更新脚本>] [-x/-x path=<>/-x url=<>] +使用方法: $0 [-n] [-f] [-u] [-F] [-P] [path=] + $0 [-x] [path=] [url=] 更新固件: - -n 更新固件 [不保留配置] - -f 跳过版本号验证,并强制刷写固件 [保留配置] - -u 适用于定时更新 LUCI 的参数 [保留配置] - -F 强制刷写固件 - --skip 跳过固件 SHA256 比对校验 (危险) - path= 更新固件 (保存固件到提供的绝对路径 ) + -n 不保留配置更新固件 * + -f 跳过版本号、SHA256验证,并强制刷写固件 (危险) * + -u 适用于定时更新 LUCI 的参数 * + -F 强制刷写固件 * + -P 优先开启镜像加速下载固件 * + --skip 跳过云端固件 SHA256 校验 (危险) * + path= 保存固件到提供的绝对路径 * 更新脚本: -x 更新 AutoUpdate.sh 脚本 - -x path= 更新 AutoUpdate.sh 脚本 (保存脚本到提供的路径 ) - -x url= 更新 AutoUpdate.sh 脚本 (使用提供的地址 更新脚本) + -x path= 更新 AutoUpdate.sh 脚本 (保存脚本到提供的绝对路径 ) * + -x url= 更新 AutoUpdate.sh 脚本 (使用提供的地址 更新脚本) * 其他参数: - -P,--proxy 优先开启镜像加速 -C 更改 Github 地址为提供的 - -B 指定 x86_64 设备下载 引导的固件 (危险) + -B 指定 x86 设备下载 引导的固件 (危险) -V < | cloud> 打印 <当前 | 云端> AutoUpdate.sh 版本号 -E < | cloud | *> 打印 <当前 | 云端 | 指定版本> 版本的固件更新日志 -H,--help 打印 AutoUpdate 帮助信息 @@ -57,23 +58,20 @@ SHOW_VARIABLE() { 设备名称: $(uname -n) / ${TARGET_PROFILE} 固件版本: ${CURRENT_Version} +其他参数: ${TARGET_BOARD} / ${TARGET_SUBTARGET} 固件作者: ${Author} -软件架构: ${TARGET_SUBTARGET} -作者仓库: ${Github} -OpenWrt 源码: https://github.com/${Openwrt_Maintainer}/${OP_REPO_NAME}:${OP_BRANCH} -Release API: ${Github_API} -固件格式-框架: $(GET_VARIABLE AutoBuild_Firmware ${Default_Variable}) -固件名称-框架: $(GET_VARIABLE Egrep_Firmware ${Default_Variable}) -固件格式: ${Firmware_Type} +固件作者 URL: ${Github} Release URL: ${Github_Release_URL} -FastGit URL: ${Release_FastGit_URL} -Github Proxy URL: ${Release_Goproxy_URL} -固件保存位置: ${AutoUpdate_Path} -运行日志: ${AutoUpdate_Log_Path}/AutoUpdate.log +Release API: ${Github_API} +OpenWrt 源码 URL: https://github.com/${OP_Maintainer}/${OP_REPO_NAME}:${OP_BRANCH} +固件匹配框架: $(GET_VARIABLE Egrep_Firmware ${Default_Variable}) +固件格式: ${Firmware_Type} +固件保存路径: ${AutoUpdate_Path} +运行日志路径: ${AutoUpdate_Log_Path}/AutoUpdate.log Downloader: ${Downloader} EOF - [[ ${TARGET_PROFILE} == x86_64 ]] && { - echo "x86_64 引导模式: ${x86_64_Boot}" + [[ ${TARGET_BOARD} == x86 ]] && { + echo "x86 固件引导模式: ${x86_Boot}" } EXIT 0 } @@ -106,12 +104,12 @@ LIST_ENV() { local X cat /etc/AutoBuild/*_Variable | grep -v '#' | while read X;do [[ ${X} =~ "=" ]] && { - case $1 in + case "$1" in 1 | 2) - [[ -n $(echo ${X} | cut -d "=" -f1) ]] && echo ${X} | cut -d "=" -f$1 + [[ -n $(echo "${X}" | cut -d "=" -f1) ]] && echo "${X}" | cut -d "=" -f$1 ;; 0) - echo ${X} + echo "${X}" ;; esac } @@ -119,9 +117,8 @@ LIST_ENV() { } EXIT() { - local RUN_TYPE LOGGER "Command :[${Run_Command}] Finished $1" - exit 0 + exit } ECHO() { @@ -129,7 +126,7 @@ ECHO() { [[ -z $1 ]] && { echo -ne "\n${Grey}[$(date "+%H:%M:%S")]${White} " } || { - case $1 in + case "$1" in r) Color="${Red}";; g) Color="${Green}";; b) Color="${Blue}";; @@ -168,9 +165,10 @@ GET_SHA256SUM() { ECHO r "未检测到文件: [$1] 或该文件为空,无法计算 SHA256 值!" EXIT 1 } + LOGGER "[GET_SHA256SUM] Target File: $1" local Result=$(sha256sum $1 | cut -c1-$2) [[ -n ${Result} ]] && echo ${Result} - LOGGER "[GET_SHA256SUM] File [$1] Calculated result: ${Result}" + LOGGER "[GET_SHA256SUM] Calculated result: ${Result}" } GET_VARIABLE() { @@ -198,14 +196,14 @@ LOAD_VARIABLE() { Release_URL="https://github.com/${FW_Author}/releases/download/AutoUpdate" Release_FastGit_URL="https://download.fastgit.org/${FW_Author}/releases/download/AutoUpdate" Release_Goproxy_URL="https://ghproxy.com/${Release_URL}" - case ${TARGET_PROFILE} in - x86_64) - case ${Firmware_Type} in + case "${TARGET_BOARD}" in + x86) + case "${Firmware_Type}" in img.gz | img) - [[ -z ${x86_64_Boot} ]] && { + [[ -z ${x86_Boot} ]] && { [ -d /sys/firmware/efi ] && { - x86_64_Boot=UEFI - } || x86_64_Boot=Legacy + x86_Boot=UEFI + } || x86_Boot=Legacy } ;; *) @@ -265,7 +263,7 @@ CHANGE_BOOT() { [[ -z $1 ]] && SHELL_HELP case "$1" in UEFI | Legacy) - EDIT_VARIABLE edit ${Custom_Variable} x86_64_Boot $1 + EDIT_VARIABLE edit ${Custom_Variable} x86_Boot $1 echo "ON" > /force_dump ECHO r "警告: 更换引导方式后更新固件后可能导致设备无法正常启动!" ECHO y "固件引导格式已指定为: [$1],AutoUpdate 将在下一次更新时执行强制刷写固件!" @@ -330,10 +328,10 @@ CHECK_DEPENDS() { GET_FW_LOG() { local Update_Log case "$1" in - local) + [Ll]ocal) FW_Version="${CURRENT_Version}" ;; - cloud) + [Cc]loud) [[ -z ${CLOUD_Firmware_Version} ]] && GET_CLOUD_VERSION FW_Version="${CLOUD_Firmware_Version}" ;; @@ -346,10 +344,9 @@ GET_FW_LOG() { [[ $? == 0 ]] && { Update_Log=$(jsonfilter -e '@["'"""${TARGET_PROFILE}"""'"]["'"""${FW_Version}"""'"]' < ${AutoUpdate_Path}/Update_Logs.json) rm -f ${AutoUpdate_Path}/Update_Logs.json - } || return - [[ -z ${Update_Log} ]] && return - echo -e "\n${Grey}${FW_Version} for ${TARGET_PROFILE} 更新日志:" - echo -e "\n${Green}${Update_Log}${White}" + echo -e "\n${Grey}${FW_Version} for ${TARGET_PROFILE} 更新日志:" + echo -e "\n${Green}${Update_Log}${White}" + } } GET_CLOUD_INFO() { @@ -404,7 +401,7 @@ PREPARE_UPGRADES() { Test_Mode=1 Special_Commands="${Special_Commands} [测试模式]" ;; - -P | --proxy) + -P) Proxy_Mode=1 Special_Commands="${Special_Commands} [镜像加速]" ;; @@ -438,7 +435,7 @@ PREPARE_UPGRADES() { ECHO g "使用自定义固件保存路径: ${AutoUpdate_Path}" ;; --verbose) - Special_Commands="${Special_Commands} [打印详细信息]" + Special_Commands="${Special_Commands} [详细信息]" ;; *) SHELL_HELP @@ -451,6 +448,7 @@ PREPARE_UPGRADES() { REMOVE_CACHE quiet if [[ $(CHECK_PKG curl) == true && ${Proxy_Mode} != 1 ]];then Google_Check=$(curl -I -s --connect-timeout 3 google.com -w %{http_code} | tail -n1) + LOGGER "Google_Check: ${Google_Check}" [[ ${Google_Check} != 301 ]] && { ECHO r "Google 连接失败,优先使用镜像加速!" Proxy_Mode=1 @@ -468,7 +466,7 @@ PREPARE_UPGRADES() { 固件作者: ${FW_Author%/*} 设备名称: $(uname -n) / ${TARGET_PROFILE} -$([[ ${TARGET_PROFILE} == x86_64 ]] && echo "固件格式: ${Firmware_Type} / ${x86_64_Boot}" || echo "固件格式: ${Firmware_Type}") +$([[ ${TARGET_BOARD} == x86 ]] && echo "固件格式: ${Firmware_Type} / ${x86_Boot}" || echo "固件格式: ${Firmware_Type}") $(echo -e "当前固件版本: ${CURRENT_Version}${CURRENT_Type}") $(echo -e "云端固件版本: ${CLOUD_Firmware_Version}${CLOUD_Type}") @@ -510,13 +508,13 @@ EOF Retry_Times=$((${Retry_Times} - 1)) ECHO r "固件下载失败,剩余尝试次数: ${Retry_Times} 次" done - if [[ ! ${Skip_SHA256} == 1 ]];then + if [[ ! ${Skip_SHA256} == 1 || ! Force_Mode == 1 ]];then CURRENT_SHA256=$(GET_SHA256SUM ${AutoUpdate_Path}/${FW_Name} 5) CLOUD_SHA256=$(echo ${FW_Name} | egrep -o "[0-9a-z]+.${Firmware_Type}" | sed -r "s/(.*).${Firmware_Type}/\1/") [[ ${CURRENT_SHA256} != ${CLOUD_SHA256} ]] && { ECHO r "本地固件 SHA256 与云端比对校验失败 [${CURRENT_SHA256}],请检查网络后重试!" EXIT 1 - } + } || LOGGER "固件 SHA256 比对通过!" fi case "${Firmware_Type}" in img.gz) @@ -547,7 +545,7 @@ DO_UPGRADE() { ECHO g "正在更新固件,请耐心等待 ..." $* [[ $? -ne 0 ]] && { - ECHO r "固件刷写失败,请尝试手动更新固件!" + ECHO r "固件刷写失败,请尝试手动下载更新固件或附加 -F 参数强制刷写!" EXIT 1 } || EXIT 0 } @@ -575,7 +573,7 @@ AutoUpdate_LOG() { } } || { while [[ $1 ]];do - case $1 in + case "$1" in path=/* | rm | del) : ;; @@ -628,7 +626,7 @@ AutoUpdate_Main() { fi [[ -z $* ]] && PREPARE_UPGRADES $* - [[ $1 =~ path= && ! $* =~ -x && ! $* =~ -U ]] && PREPARE_UPGRADES $* + [[ $1 =~ path=/ && ! $* =~ -x && ! $* =~ -U ]] && PREPARE_UPGRADES $* [[ $1 =~ --skip ]] && PREPARE_UPGRADES $* [[ $* =~ -T || $* =~ --verbose ]] && { Downloader="$(echo ${Downloader/ --quiet / })" @@ -637,7 +635,7 @@ AutoUpdate_Main() { while [[ $1 ]];do case "$1" in - -n | -f | -u | -T | -P | --proxy | -F | --verbose) + -n | -f | -u | -T | -P | -F | --verbose) LOGGER "Downloader: ${DL} / ${Downloader}" PREPARE_UPGRADES $* ;; @@ -669,13 +667,13 @@ AutoUpdate_Main() { REMOVE_CACHE ;; --check) - shift && [[ -n $* ]] && SHELL_HELP + shift && [[ -n $* ]] && SHELL_HELP CHECK_DEPENDS bash x86:gzip x86:wget-ssl uclient-fetch curl wget openssl which ;; --env) shift [[ -z $* ]] && LIST_ENV 0 && EXIT 0 - case $1 in + case "$1" in 1 | 2) LIST_ENV $1 ;; @@ -718,7 +716,7 @@ AutoUpdate_Main() { -x) shift while [[ $1 ]];do - case $1 in + case "$1" in url=* | path=/*) : ;; @@ -744,7 +742,7 @@ AutoUpdate_Main() { ;; -B) shift - [[ ${TARGET_PROFILE} != x86_64 ]] && SHELL_HELP + [[ ${TARGET_BOARD} != x86 ]] && EXIT 1 CHANGE_BOOT $1 ;; -C) @@ -753,21 +751,22 @@ AutoUpdate_Main() { ;; -E) shift - [[ -z $1 ]] && GET_FW_LOG local show && EXIT 0 - case $1 in - cloud) - GET_FW_LOG $1 show + [[ -z $* ]] && GET_FW_LOG local + case "$1" in + [Cc]loud) + GET_FW_LOG $1 ;; *) - [[ ! $1 =~ R ]] && SHELL_HELP || GET_FW_LOG -v $1 show + [[ -z $* ]] && EXIT 0 + [[ ! $1 =~ R[0-9] ]] && SHELL_HELP || GET_FW_LOG -v $1 ;; esac EXIT ;; - -H | --help) + -H | --[Hh]elp) SHELL_HELP ;; - -L | --list) + -L | --[Ll]ist) shift && [[ -n $* ]] && SHELL_HELP SHOW_VARIABLE ;; @@ -777,8 +776,8 @@ AutoUpdate_Main() { echo ${CURRENT_Version} EXIT 0 } - case $1 in - cloud | Cloud) + case "$1" in + [Cc]loud) GET_CLOUD_VERSION [[ -z ${CLOUD_Firmware_Version} ]] && echo "未知" || echo "${CLOUD_Firmware_Version}" ;; @@ -788,7 +787,7 @@ AutoUpdate_Main() { -V) shift case "$1" in - cloud) + [Cc]loud) Result="$(${Downloader} - ${AutoUpdate_Script_URL} | egrep -o "V[0-9].+")" ;; *) @@ -808,7 +807,7 @@ AutoUpdate_Main() { done } -Version=V6.4.4 +Version=V6.4.5 AutoUpdate_Path=/tmp/AutoUpdate AutoUpdate_Log_Path=/tmp AutoUpdate_Script_URL=https://ghproxy.com/https://raw.githubusercontent.com/Hyy2001X/AutoBuild-Actions/master/Scripts/AutoUpdate.sh