|
|
|
|
@@ -20,7 +20,6 @@ AMLOGIC_SOC_FILE="/etc/flippy-openwrt-release"
|
|
|
|
|
START_LOG="${TMP_CHECK_DIR}/amlogic_check_firmware.log"
|
|
|
|
|
RUNNING_LOG="${TMP_CHECK_DIR}/amlogic_running_script.log"
|
|
|
|
|
LOG_FILE="${TMP_CHECK_DIR}/amlogic.log"
|
|
|
|
|
github_api_openwrt="${TMP_CHECK_DIR}/github_api_openwrt"
|
|
|
|
|
support_platform=("allwinner" "rockchip" "amlogic" "qemu-aarch64")
|
|
|
|
|
LOGTIME="$(date "+%Y-%m-%d %H:%M:%S")"
|
|
|
|
|
[[ -d ${TMP_CHECK_DIR} ]] || mkdir -p ${TMP_CHECK_DIR}
|
|
|
|
|
@@ -92,20 +91,18 @@ if [[ -z "${PLATFORM}" || -z "$(echo "${support_platform[@]}" | grep -w "${PLATF
|
|
|
|
|
tolog "Missing [ PLATFORM / SOC / BOARD ] value in ${AMLOGIC_SOC_FILE} file." "1"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
tolog "PLATFORM: [ ${PLATFORM} ], Box: [ ${SOC}_${BOARD} ], Use in [ ${EMMC_NAME} ]"
|
|
|
|
|
tolog "PLATFORM: [ ${PLATFORM} ], BOARD: [ ${BOARD} ], Use in [ ${EMMC_NAME} ]"
|
|
|
|
|
sleep 2
|
|
|
|
|
|
|
|
|
|
# 01. Query local version information
|
|
|
|
|
tolog "01. Query version information."
|
|
|
|
|
# 01.01 Query the current version
|
|
|
|
|
current_kernel_v="$(ls /lib/modules/ 2>/dev/null | grep -oE '^[1-9].[0-9]{1,3}.[0-9]+')"
|
|
|
|
|
current_kernel_v="$(uname -r 2>/dev/null | grep -oE '^[1-9].[0-9]{1,3}.[0-9]+')"
|
|
|
|
|
tolog "01.01 current version: ${current_kernel_v}"
|
|
|
|
|
sleep 2
|
|
|
|
|
|
|
|
|
|
# 01.01 Version comparison
|
|
|
|
|
main_line_ver="$(echo "${current_kernel_v}" | cut -d '.' -f1)"
|
|
|
|
|
main_line_maj="$(echo "${current_kernel_v}" | cut -d '.' -f2)"
|
|
|
|
|
main_line_version="${main_line_ver}.${main_line_maj}"
|
|
|
|
|
main_line_version="$(echo ${current_kernel_v} | awk -F '.' '{print $1"."$2}')"
|
|
|
|
|
|
|
|
|
|
# 01.02. Query the selected branch in the settings
|
|
|
|
|
server_kernel_branch="$(uci get amlogic.config.amlogic_kernel_branch 2>/dev/null | grep -oE '^[1-9].[0-9]{1,3}')"
|
|
|
|
|
@@ -128,40 +125,29 @@ releases_tag_keywords="$(uci get amlogic.config.amlogic_firmware_tag 2>/dev/null
|
|
|
|
|
firmware_suffix="$(uci get amlogic.config.amlogic_firmware_suffix 2>/dev/null)"
|
|
|
|
|
[[ ! -z "${firmware_suffix}" ]] || tolog "01.05 The custom firmware suffix is invalid." "1"
|
|
|
|
|
|
|
|
|
|
# Supported format:
|
|
|
|
|
# server_firmware_url="https://github.com/ophub/amlogic-s9xxx-openwrt"
|
|
|
|
|
# server_firmware_url="ophub/amlogic-s9xxx-openwrt"
|
|
|
|
|
if [[ "${server_firmware_url}" == http* ]]; then
|
|
|
|
|
server_firmware_url="${server_firmware_url#*com\/}"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
firmware_download_url="https:.*${releases_tag_keywords}.*_${BOARD}_.*${main_line_version}.*${firmware_suffix}"
|
|
|
|
|
firmware_sha256sums_download_url="https:.*${releases_tag_keywords}.*sha256sums"
|
|
|
|
|
|
|
|
|
|
# 02. Check Updated
|
|
|
|
|
check_updated() {
|
|
|
|
|
tolog "02. Start checking the updated ..."
|
|
|
|
|
curl -s "https://api.github.com/repos/${server_firmware_url}/releases" >${github_api_openwrt} && sync
|
|
|
|
|
sleep 1
|
|
|
|
|
tolog "02. Start checking for the latest version..."
|
|
|
|
|
|
|
|
|
|
# Get the openwrt firmware updated_at
|
|
|
|
|
api_down_line_array="$(cat ${github_api_openwrt} | grep -n "${firmware_download_url}" | awk -F ":" '{print $1}' | tr "\n" " " | echo $(xargs))"
|
|
|
|
|
# return: 123 233 312
|
|
|
|
|
# Query the latest version
|
|
|
|
|
latest_version="$(
|
|
|
|
|
curl -s \
|
|
|
|
|
-H "Accept: application/vnd.github+json" \
|
|
|
|
|
https://api.github.com/repos/${server_firmware_url}/releases |
|
|
|
|
|
jq -r --arg RTK "${releases_tag_keywords}" '.[] | select(.tag_name | contains($RTK))' |
|
|
|
|
|
jq -s '.[] | {tag_name:.tag_name, data:.published_at, url:.assets[].browser_download_url }' |
|
|
|
|
|
jq -s --arg BOARD "_${BOARD}_" --arg MLV "${main_line_version}." '.[] | select((.url | contains($BOARD)) and (.url | contains($MLV)))' |
|
|
|
|
|
jq -s 'sort_by(.data)|reverse[]' |
|
|
|
|
|
jq -s '.[0]'
|
|
|
|
|
)"
|
|
|
|
|
latest_updated_at="$(echo ${latest_version} | jq -r '.data')"
|
|
|
|
|
latest_url="$(echo ${latest_version} | jq -r '.url')"
|
|
|
|
|
|
|
|
|
|
i=1
|
|
|
|
|
api_updated_at=()
|
|
|
|
|
api_updated_merge=()
|
|
|
|
|
for x in ${api_down_line_array}; do
|
|
|
|
|
api_updated_at[${i}]="$(cat ${github_api_openwrt} | sed -n "$((x - 1))p" | cut -d '"' -f4)"
|
|
|
|
|
api_updated_merge[${i}]="${x}@$(cat ${github_api_openwrt} | sed -n "$((x - 1))p" | cut -d '"' -f4)"
|
|
|
|
|
let i++
|
|
|
|
|
done
|
|
|
|
|
# return: api_updated_at: 2021-10-21T17:52:56Z 2021-10-21T11:22:39Z 2021-10-22T17:52:56Z
|
|
|
|
|
latest_updated_at="$(echo ${api_updated_at[*]} | tr ' ' '\n' | sort -r | head -n 1)"
|
|
|
|
|
latest_updated_at_format="$(echo ${latest_updated_at} | tr 'T' '(' | tr 'Z' ')')"
|
|
|
|
|
# return: latest_updated_at: 2021-10-22T17:52:56Z
|
|
|
|
|
api_op_down_line="$(echo ${api_updated_merge[*]} | tr ' ' '\n' | grep ${latest_updated_at} | cut -d '@' -f1)"
|
|
|
|
|
# return: api_openwrt_download_line: 123
|
|
|
|
|
|
|
|
|
|
# Check the firmware update code
|
|
|
|
|
op_release_code="${FIRMWARE_DOWNLOAD_PATH}/.luci-app-amlogic/op_release_code"
|
|
|
|
|
@@ -173,10 +159,10 @@ check_updated() {
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Prompt to update
|
|
|
|
|
if [[ -n "${api_op_down_line}" && -n "$(echo ${api_op_down_line} | sed -n "/^[0-9]\+$/p")" ]]; then
|
|
|
|
|
tolog '<input type="button" class="cbi-button cbi-button-reload" value="Download" onclick="return b_check_firmware(this, '"'download_${api_op_down_line}_${latest_updated_at}'"')"/> Latest updated: '${latest_updated_at_format}'' "1"
|
|
|
|
|
if [[ "${latest_url}" == "http"* ]]; then
|
|
|
|
|
tolog '<input type="button" class="cbi-button cbi-button-reload" value="Download" onclick="return b_check_firmware(this, '"'download_${latest_updated_at}@${latest_url##*download/}'"')"/> Latest updated: '${latest_updated_at_format}'' "1"
|
|
|
|
|
else
|
|
|
|
|
tolog "02.02 No firmware available, please use another kernel branch." "1"
|
|
|
|
|
tolog "02.02 [${latest_url}] No firmware available, please use another kernel branch." "1"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
exit 0
|
|
|
|
|
@@ -187,12 +173,10 @@ download_firmware() {
|
|
|
|
|
tolog "03. Download Openwrt firmware ..."
|
|
|
|
|
|
|
|
|
|
# Get the openwrt firmware download path
|
|
|
|
|
if [[ "${download_version}" == download* ]]; then
|
|
|
|
|
download_firmware_line="$(echo "${download_version}" | cut -d '_' -f2)"
|
|
|
|
|
download_latest_updated="$(echo "${download_version}" | cut -d '_' -f3)"
|
|
|
|
|
if [[ "${download_version}" == "download_"* ]]; then
|
|
|
|
|
tolog "03.01 Start downloading..."
|
|
|
|
|
else
|
|
|
|
|
tolog "03.02 Invalid parameter" "1"
|
|
|
|
|
tolog "03.02 Invalid parameter." "1"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Delete other residual firmware files
|
|
|
|
|
@@ -200,44 +184,41 @@ download_firmware() {
|
|
|
|
|
rm -f ${FIRMWARE_DOWNLOAD_PATH}/*.img 2>/dev/null && sync
|
|
|
|
|
rm -f ${FIRMWARE_DOWNLOAD_PATH}/sha256sums 2>/dev/null && sync
|
|
|
|
|
|
|
|
|
|
firmware_releases_path="$(cat ${github_api_openwrt} | sed -n "${download_firmware_line}p" | grep "browser_download_url" | grep -o "${firmware_download_url}" | head -n 1)"
|
|
|
|
|
# Download to local rename
|
|
|
|
|
firmware_download_name="openwrt_${SOC}_${BOARD}_k${main_line_version}_github${firmware_suffix}"
|
|
|
|
|
# The name in the github.com releases
|
|
|
|
|
firmware_download_oldname="${firmware_releases_path##*/}"
|
|
|
|
|
firmware_download_oldname="${firmware_download_oldname//%2B/+}"
|
|
|
|
|
# OpenWrt make data
|
|
|
|
|
latest_updated_at="$(echo ${download_version} | awk -F'@' '{print $1}' | sed -e s'|download_||'g)"
|
|
|
|
|
|
|
|
|
|
# Download firmware
|
|
|
|
|
wget "${firmware_releases_path}" -O "${FIRMWARE_DOWNLOAD_PATH}/${firmware_download_name}" >/dev/null 2>&1 && sync
|
|
|
|
|
opfile_path="$(echo ${download_version} | awk -F'@' '{print $2}')"
|
|
|
|
|
latest_url="https://github.com/ophub/amlogic-s9xxx-openwrt/releases/download/${opfile_path}"
|
|
|
|
|
|
|
|
|
|
# Download sha256sums file
|
|
|
|
|
shafile_path="$(echo ${opfile_path} | awk -F'/' '{print $1}')"
|
|
|
|
|
shafile_file="https://github.com/ophub/amlogic-s9xxx-openwrt/releases/download/${shafile_path}/sha256sums"
|
|
|
|
|
|
|
|
|
|
# Download to local rename
|
|
|
|
|
firmware_download_name="openwrt_${BOARD}_k${main_line_version}_github${firmware_suffix}"
|
|
|
|
|
|
|
|
|
|
wget "${latest_url}" -q -O "${FIRMWARE_DOWNLOAD_PATH}/${firmware_download_name}"
|
|
|
|
|
if [[ "$?" -eq "0" && -s "${FIRMWARE_DOWNLOAD_PATH}/${firmware_download_name}" ]]; then
|
|
|
|
|
tolog "03.01 Firmware download complete."
|
|
|
|
|
tolog "03.01 OpenWrt downloaded successfully."
|
|
|
|
|
else
|
|
|
|
|
tolog "03.02 Firmware download failed." "1"
|
|
|
|
|
fi
|
|
|
|
|
sleep 2
|
|
|
|
|
|
|
|
|
|
sha256sums_check="1"
|
|
|
|
|
[[ -n "$(which sha256sum)" ]] || sha256sums_check="0"
|
|
|
|
|
firmware_sha256sums_path="$(cat ${github_api_openwrt} | grep "browser_download_url" | grep -o "${firmware_sha256sums_download_url}" | head -n 1)"
|
|
|
|
|
if [[ -n "${firmware_sha256sums_path}" && "${sha256sums_check}" -eq "1" ]]; then
|
|
|
|
|
wget "${firmware_sha256sums_path}" -O "${FIRMWARE_DOWNLOAD_PATH}/sha256sums" >/dev/null 2>&1 && sync
|
|
|
|
|
if [[ "$?" -eq "0" && -s "${FIRMWARE_DOWNLOAD_PATH}/sha256sums" ]]; then
|
|
|
|
|
tolog "03.03 Sha256sums download complete."
|
|
|
|
|
releases_firmware_sha256sums="$(cat sha256sums | grep ${firmware_download_oldname} | awk '{print $1}')"
|
|
|
|
|
download_firmware_sha256sums="$(sha256sum ${firmware_download_name} | awk '{print $1}')"
|
|
|
|
|
[[ -n "${releases_firmware_sha256sums}" && "${releases_firmware_sha256sums}" != "${download_firmware_sha256sums}" ]] && tolog "03.04 sha256sum verification failed." "1"
|
|
|
|
|
else
|
|
|
|
|
tolog "03.05 Sha256sums download failed." "1"
|
|
|
|
|
fi
|
|
|
|
|
sleep 2
|
|
|
|
|
tolog "03.02 OpenWrt download failed." "1"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Delete temporary files
|
|
|
|
|
rm -f ${github_api_openwrt} 2>/dev/null && sync
|
|
|
|
|
firmware_download_oldname="${opfile_path##*/}"
|
|
|
|
|
firmware_download_oldname="${firmware_download_oldname//%2B/+}"
|
|
|
|
|
if wget "${shafile_file}" -q -O "${FIRMWARE_DOWNLOAD_PATH}/sha256sums" 2>/dev/null; then
|
|
|
|
|
tolog "03.03 Sha256sums download complete."
|
|
|
|
|
releases_firmware_sha256sums="$(cat sha256sums | grep ${firmware_download_oldname} | awk '{print $1}')"
|
|
|
|
|
download_firmware_sha256sums="$(sha256sum ${firmware_download_name} | awk '{print $1}')"
|
|
|
|
|
[[ -n "${releases_firmware_sha256sums}" && "${releases_firmware_sha256sums}" != "${download_firmware_sha256sums}" ]] && tolog "03.04 sha256sum verification failed." "1"
|
|
|
|
|
fi
|
|
|
|
|
sync && sleep 3
|
|
|
|
|
|
|
|
|
|
tolog "You can update."
|
|
|
|
|
|
|
|
|
|
#echo '<a href="javascript:;" onclick="return amlogic_update(this, '"'${firmware_download_name}'"')">Update</a>' >$START_LOG
|
|
|
|
|
tolog '<input type="button" class="cbi-button cbi-button-reload" value="Update" onclick="return amlogic_update(this, '"'${firmware_download_name}@${download_latest_updated}@${FIRMWARE_DOWNLOAD_PATH}'"')"/>' "1"
|
|
|
|
|
tolog '<input type="button" class="cbi-button cbi-button-reload" value="Update" onclick="return amlogic_update(this, '"'${firmware_download_name}@${latest_updated_at}@${FIRMWARE_DOWNLOAD_PATH}'"')"/>' "1"
|
|
|
|
|
|
|
|
|
|
exit 0
|
|
|
|
|
}
|
|
|
|
|
|