diff --git a/Scripts/AutoUpdate.sh b/Scripts/AutoUpdate.sh index 53fa27f..d5933b6 100755 --- a/Scripts/AutoUpdate.sh +++ b/Scripts/AutoUpdate.sh @@ -3,7 +3,7 @@ # AutoUpdate for Openwrt # Dependences: bash wget-ssl/wget/uclient-fetch curl openssl jsonfilter -Version=V6.7.5 +Version=V6.7.6 function TITLE() { clear && echo "Openwrt-AutoUpdate Script by Hyy2001 ${Version}" @@ -64,6 +64,7 @@ function SHOW_VARIABLE() { 设备名称: $(uname -n) / ${TARGET_PROFILE} 固件版本: ${OP_VERSION} 内核版本: $(uname -r) +运行内存: Mem: $(MEMINFO 1)M | Swap: $(MEMINFO 2)M | Total: $(MEMINFO 3)M 其他参数: ${TARGET_BOARD} / ${TARGET_SUBTARGET} 固件作者: ${Author} 作者仓库: ${Github} @@ -82,6 +83,47 @@ EOF echo } +function MEMINFO() { + local Mem Swap All Result + Mem=$(free | grep Mem: | awk '{Mem=$7/1024} {printf("%.0f\n",Mem)}' 2> /dev/null) + Swap=$(free | grep Swap: | awk '{Swap=$4/1024} {printf("%.0f\n",Swap)}' 2> /dev/null) + All=$(echo ${Mem} + ${Swap} | bc 2> /dev/null) + case $1 in + 1) + Result=${Mem} + ;; + 2) + Result=${Swap} + ;; + 3) + Result=${All} + ;; + esac + if [[ -n ${Result} ]] + then + LOGGER "[MEMINFO] [$1] 运行内存: ${Result}M" + echo ${Result} + return 0 + else + return 1 + fi +} + +SPACEINFO() { + local Result Path + Path=$(echo $1 | awk -F '/' '{print $2}') + Result=$(df -m /${Path} 2> /dev/null | grep -v Filesystem | awk '{print $4}') + if [[ -n ${Result} ]] + then + LOGGER "[SPACEINFO] /${Path} 可用空间: ${Result}M" + echo "${Result}" + return 0 + else + LOGGER "[SPACEINFO] /${Path} 可用空间获取失败!" + return 1 + fi +} + function RM() { [[ -z $* ]] && return 1 rm -rf "$*" 2> /dev/null @@ -370,11 +412,9 @@ function CHECK_DEPENDS() { function CHECK_TIME() { [[ -s $1 && -n $(find $1 -type f -mmin -$2) ]] && { - LOGGER "[CHECK_TIME] 文件: [$1] 距离修改时间小于 $2 分钟!" echo true return 0 } || { - LOGGER "[CHECK_TIME] 文件: [$1] 验证失败!" RM $1 echo false return 1 @@ -391,7 +431,7 @@ function ANALYZE_API() { EXIT 2 } RM ${API_File} && touch -a ${API_File} - LOGGER "[ANALYZE_API] 开始解析 Github API ..." + LOGGER "开始解析 Github API ..." for i in $(seq 0 500);do name=$(jsonfilter -i ${API_Cache} -e '@["assets"]' | jsonfilter -e '@['""$i""'].name' 2> /dev/null) [[ ! $? == 0 ]] && break @@ -418,15 +458,15 @@ function ANALYZE_API() { unset i fi [[ ! -s ${API_File} ]] && { - ECHO r "Github API 解析内容为空!" + ECHO r "Github API 解析内容为空,请稍候再试!" return 1 - } + } || return 0 } function GET_CLOUD_LOG() { local Result Version [[ ! $(cat ${API_File} 2> /dev/null) =~ Update_Logs.json ]] && { - LOGGER "[GET_CLOUD_LOG] 未检测到已部署的云端日志!" + LOGGER "未检测到已部署的云端日志!" return 1 } case "$1" in @@ -470,7 +510,7 @@ function GET_FW_INFO() { 1) Type="固件名称";; 2) Type="固件格式";; 3) Type="下载次数";; - 4) Type=" SHA256 ";; + 4) Type="校验信息";; 5) Type="固件版本";; 6) Type="发布日期";; 7) Type="固件体积";; @@ -478,7 +518,7 @@ function GET_FW_INFO() { *) Type="未定义信息";; esac [[ ! ${Result} == "-" ]] && { - LOGGER "[GET_FW_INFO] 获取${Type}: ${Result}" + LOGGER "获取${Type}: ${Result}" echo -e "${Result}" } || { LOGGER "[GET_FW_INFO] ${Type}获取失败!" @@ -541,7 +581,7 @@ function UPGRADE() { ;; --path) Firmware_Path="$2" - ECHO g "使用自定义固件保存路径: [${Firmware_Path}]" + ECHO g "固件保存路径: [${Firmware_Path} | $(SPACEINFO ${Firmware_Path})M]" shift ;; --skip-verify) @@ -609,16 +649,26 @@ $(echo -e "云端固件版本: ${CLOUD_FW_Version}${CHECKED_Type}") 云端固件体积: ${CLOUD_FW_Size} 固件下载次数: ${CLOUD_FW_Count} EOF - LOGGER "当前版本: ${OP_VERSION}" - LOGGER "云端版本: ${CLOUD_FW_Version}" - LOGGER "云端固件名称: ${CLOUD_FW_Name}" - LOGGER "云端固件体积: ${CLOUD_FW_Size}" - LOGGER "固件下载人数: ${CLOUD_FW_Count}" + if [[ ${Force_Mode} != 1 ]] + then + if [[ $(MEMINFO 3) -lt $(echo ${CLOUD_FW_Size} | awk -F '.' '{print $1}') ]] + then + ECHO r "内存空间不足 [${CLOUD_FW_Size}],请尝试设置 Swap 交换分区或重启设备后再试!" + EXIT + fi + if [[ $(SPACEINFO ${Firmware_Path}) -lt $(echo ${CLOUD_FW_Size} | awk -F '.' '{print $1}') ]] + then + ECHO r "设备空间不足 [${CLOUD_FW_Size}],请尝试更换固件保存路径后再试!" + EXIT + fi + else + LOGGER "[Force Mode] 跳过可用资源测试" + fi GET_CLOUD_LOG -v ${CLOUD_FW_Version} case "${Upgrade_Stopped}" in 1 | 2) - [[ ${AutoUpdate_Mode} == 1 ]] && ECHO y "当前固件已是最新版本,无需更新!" && EXIT 0 - [[ ${Upgrade_Stopped} == 1 ]] && err_MSG="当前固件已是最新版本" || err_MSG="云端固件版本为旧版" + [[ ${AutoUpdate_Mode} == 1 ]] && ECHO y "当前固件 [${OP_VERSION}] 已是最新版本,无需更新!" && EXIT 0 + [[ ${Upgrade_Stopped} == 1 ]] && err_MSG="当前固件 [${OP_VERSION}] 已是最新版本" || err_MSG="云端固件版本为旧版" [[ ! ${Force_Mode} == 1 ]] && { ECHO && read -p "${err_MSG},是否继续更新固件?[Y/n]:" Choose } || Choose=Y @@ -679,14 +729,19 @@ EOF } function DO_UPGRADE() { - ECHO r "警告: 固件更新期间请不要断开电源或重启设备!" + ECHO r "警告: 固件更新期间请不要断开电源或进行其他操作!" sleep 3 ECHO g "正在更新固件,请耐心等待 ..." $* - [[ $? -ne 0 ]] && { - ECHO r "固件刷入失败,请尝试使用 [autoupdate -F] 指令更新固件!" + if [[ $? != 0 ]] + then + ECHO r "固件更新失败,请尝试使用 [autoupdate -F] 指令更新固件!" EXIT 1 - } + else + ECHO y "固件更新成功,即将重启设备 ..." + sleep 3 + reboot + fi EXIT } @@ -910,7 +965,6 @@ function LOG() { URL_X() { # URL_X https://raw.githubusercontent.com/Hyy2001X/AutoBuild-Actions/master/Scripts/AutoUpdate.sh F@@1 G@@1 X@@1 - # Support for Github URL local URL=$1 Type URL_Final [[ ${URL} =~ raw.githubusercontent.com ]] && Type=raw [[ ${URL} =~ releases/download ]] && Type=release