From 0c3198cbb4ef6d5935d2beb5b70749efb57d273f Mon Sep 17 00:00:00 2001 From: ExtremeFiretop Date: Wed, 23 Jul 2025 23:21:30 -0400 Subject: [PATCH 01/11] Fixing More Comparison Errors Fixing More Comparison Errors --- MerlinAU.sh | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/MerlinAU.sh b/MerlinAU.sh index 80d064d7..00383131 100644 --- a/MerlinAU.sh +++ b/MerlinAU.sh @@ -4,7 +4,7 @@ # # Original Creation Date: 2023-Oct-01 by @ExtremeFiretop. # Official Co-Author: @Martinski W. - Date: 2023-Nov-01 -# Last Modified: 2025-Jul-18 +# Last Modified: 2025-Jul-23 ################################################################### set -u @@ -786,9 +786,9 @@ _GetFirmwareVariantFromRouter_() echo "$hasGNUtonFW" ; return 0 } -##----------------------------------------## -## Modified by Martinski W. [2024-May-31] ## -##----------------------------------------## +##------------------------------------------## +## Modified by ExtremeFiretop [2025-July-23] ## +##------------------------------------------## _FWVersionStrToNum_() { if [ $# -lt 2 ] || [ -z "$1" ] || [ -z "$2" ] @@ -797,7 +797,7 @@ _FWVersionStrToNum_() USE_BETA_WEIGHT="$(Get_Custom_Setting FW_Allow_Beta_Production_Up)" local verNum verStr="$1" nonProductionVersionWeight=0 - local fwBasecodeVers="" numOfFields + local fwBasecodeVers="" numOfFields buildDigits #-------------------------------------------------------------- # Handle any 'alpha/beta' in the version string to be sure @@ -829,7 +829,17 @@ _FWVersionStrToNum_() fwBasecodeVers="$(echo "$verStr" | cut -d'.' -f1)" verStr="$(echo "$verStr" | cut -d'.' -f2-)" fi - verNum="$(echo "$verStr" | awk -F '.' '{printf ("%d%02d%02d\n", $1,$2,$3);}')" + #----------------------------------------------------------- + # NEW: capture any trailing build‑suffix digits (e.g. "gnuton2" → 2) + #----------------------------------------------------------- + buildDigits="$(echo "$verStr" | sed -n 's/.*[^0-9]\([0-9]\+\)$/\1/p')" + buildDigits=$(printf "%02d" "${buildDigits:-0}") + + # Strip the non‑numeric tail so we feed only dotted numbers to awk + verStr="$(echo "$verStr" | sed 's/[^0-9.]*$//')" + + # Core numeric conversion (Major Minor Patch) + two‑digit build suffix + verNum="$(echo "$verStr" | awk -F'.' '{printf ("%d%02d%02d\n", $1,$2,$3);}')${buildDigits}" # Subtract non-production weight from the version number # verNum="$((verNum + nonProductionVersionWeight))" @@ -2935,13 +2945,13 @@ _CreateEMailContent_() fwInstalledVersion="$(_GetCurrentFWInstalledLongVersion_)" if ! "$offlineUpdateTrigger" then - fwNewUpdateVersion="$(_GetLatestFWUpdateVersionFromRouter_)" + fwNewUpdateVersion="$(_GetLatestFWUpdateVersionFromRouter_ 1)" else fwNewUpdateVersion="$(Get_Custom_Setting "FW_New_Update_Notification_Vers")" fi - # Remove "_rog" or "_tuf" or -gHASHVALUES or -Gnuton* suffix to avoid version comparison failure, can't remove all for proper beta and alpha comparison # - fwInstalledVersion="$(echo "$fwInstalledVersion" | sed -E 's/(_(rog|tuf)|-g[0-9a-f]{10}|-gnuton[0-9]+)$//')" + # Remove "_rog" or "_tuf" or -gHASHVALUES suffix to avoid version comparison failure, can't remove all for proper beta and alpha comparison # + fwInstalledVersion="$(echo "$fwInstalledVersion" | sed -E 's/(_(rog|tuf)|-g[0-9a-f]{10})$//')" case "$1" in FW_UPDATE_TEST_EMAIL) @@ -4843,7 +4853,7 @@ _GetLatestFWUpdateVersionFromGitHub_() if ! "$offlineUpdateTrigger" then - routerVersion="$(_GetLatestFWUpdateVersionFromRouter_)" + routerVersion="$(_GetLatestFWUpdateVersionFromRouter_ 1)" else routerVersion="$(Get_Custom_Setting "FW_New_Update_Notification_Vers")" fi @@ -4874,7 +4884,7 @@ _GetLatestFWUpdateVersionFromGitHub_() # Extract the version portion from the URL # urlVersion="$(echo "$theURL" \ | grep -oE "${PRODUCT_ID}_[^ ]*\.(w|pkgtb)" \ - | sed "s/${PRODUCT_ID}_//;s/.w$//;s/.pkgtb$//;s/.ubi$//;s/_/./g;s/-gnuton[0-9][0-9]*\$//" | head -n1)" + | sed "s/${PRODUCT_ID}_//;s/.w$//;s/.pkgtb$//;s/.ubi$//;s/_/./g" | head -n1)" if [ "$urlVersion" = "$routerVersion" ] then @@ -4905,7 +4915,7 @@ GetLatestFirmwareMD5URL() if ! "$offlineUpdateTrigger" then - routerVersion="$(_GetLatestFWUpdateVersionFromRouter_)" + routerVersion="$(_GetLatestFWUpdateVersionFromRouter_ 1)" else routerVersion="$(Get_Custom_Setting "FW_New_Update_Notification_Vers")" fi @@ -4937,7 +4947,7 @@ GetLatestFirmwareMD5URL() # Extract the version portion from the URL # md5Version="$(echo "$theURL" \ | grep -oE "${PRODUCT_ID}_[^ ]*\.(md5)" \ - | sed "s/${PRODUCT_ID}_//;s/.md5$//;s/.w$//;s/.pkgtb$//;s/.ubi$//;s/_/./g;s/-gnuton[0-9][0-9]*\$//" | head -n1)" + | sed "s/${PRODUCT_ID}_//;s/.md5$//;s/.w$//;s/.pkgtb$//;s/.ubi$//;s/_/./g" | head -n1)" if [ "$md5Version" = "$routerVersion" ] then @@ -8750,7 +8760,7 @@ Please manually update to version ${GRNct}${MinSupportedFirmwareVers}${NOct} or # "New F/W Release Version" from the router itself. # If no new F/W version update is available return. #------------------------------------------------------ - if ! release_version="$(_GetLatestFWUpdateVersionFromRouter_)" || \ + if ! release_version="$(_GetLatestFWUpdateVersionFromRouter_ 1)" || \ ! _CheckNewUpdateFirmwareNotification_ "$current_version" "$release_version" then Say "No new firmware version update is found for [$MODEL_ID] router model." @@ -8792,7 +8802,7 @@ Please manually update to version ${GRNct}${MinSupportedFirmwareVers}${NOct} or if ! "$offlineUpdateTrigger" then - NewUpdate_VersionVerify="$(_GetLatestFWUpdateVersionFromRouter_)" + NewUpdate_VersionVerify="$(_GetLatestFWUpdateVersionFromRouter_ 1)" if [ "$NewUpdate_VersionVerify" != "$release_version" ] then Say "WARNING: The release version found by MerlinAU [$release_version] does not match the F/W update version from the router [$NewUpdate_VersionVerify]." From 2b3a5317e68871e9cb3aa4aaa3d1e8a0e73b6b52 Mon Sep 17 00:00:00 2001 From: ExtremeFiretop Date: Wed, 23 Jul 2025 23:46:46 -0400 Subject: [PATCH 02/11] Missed one Missed one --- MerlinAU.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MerlinAU.sh b/MerlinAU.sh index 00383131..007a1dd1 100644 --- a/MerlinAU.sh +++ b/MerlinAU.sh @@ -10402,7 +10402,7 @@ _ShowMainMenuOptions_() # Check if router reports a new F/W update is available. # If yes, modify the notification settings accordingly. #-----------------------------------------------------------# - if FW_NewUpdateVersion="$(_GetLatestFWUpdateVersionFromRouter_)" && \ + if FW_NewUpdateVersion="$(_GetLatestFWUpdateVersionFromRouter_ 1)" && \ [ -n "$FW_NewUpdateVersion" ] && [ -n "$FW_InstalledVersion" ] && \ [ "$FW_NewUpdateVersion" != "$FW_NewUpdateVerInit" ] then From 9e4a6fa42ac5d68c0d1c31e37108bc18676c1d9d Mon Sep 17 00:00:00 2001 From: ExtremeFiretop Date: Thu, 24 Jul 2025 00:34:26 -0400 Subject: [PATCH 03/11] Committing Additional Logic Fixes Committing Additional Logic Fixes --- MerlinAU.sh | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/MerlinAU.sh b/MerlinAU.sh index 007a1dd1..6ecd5615 100644 --- a/MerlinAU.sh +++ b/MerlinAU.sh @@ -786,9 +786,9 @@ _GetFirmwareVariantFromRouter_() echo "$hasGNUtonFW" ; return 0 } -##------------------------------------------## +##-------------------------------------------## ## Modified by ExtremeFiretop [2025-July-23] ## -##------------------------------------------## +##-------------------------------------------## _FWVersionStrToNum_() { if [ $# -lt 2 ] || [ -z "$1" ] || [ -z "$2" ] @@ -796,8 +796,8 @@ _FWVersionStrToNum_() USE_BETA_WEIGHT="$(Get_Custom_Setting FW_Allow_Beta_Production_Up)" - local verNum verStr="$1" nonProductionVersionWeight=0 - local fwBasecodeVers="" numOfFields buildDigits + local verNum verStr="$1" + local fwBasecodeVers="" numOfFields buildDigits isBeta=0 prodFlag #-------------------------------------------------------------- # Handle any 'alpha/beta' in the version string to be sure @@ -805,8 +805,9 @@ _FWVersionStrToNum_() #-------------------------------------------------------------- if echo "$verStr" | grep -qiE '(alpha|beta)' then + isBeta=1 # Adjust weight value if "Beta-to-Production" update is enabled # - [ "$USE_BETA_WEIGHT" = "ENABLED" ] && nonProductionVersionWeight=-100 + [ "$USE_BETA_WEIGHT" = "ENABLED" ] # Replace '.alpha|.beta' and anything following it with ".0" # verStr="$(echo "$verStr" | sed 's/[.][Aa]lpha.*/.0/ ; s/[.][Bb]eta.*/.0/')" @@ -830,19 +831,19 @@ _FWVersionStrToNum_() verStr="$(echo "$verStr" | cut -d'.' -f2-)" fi #----------------------------------------------------------- - # NEW: capture any trailing build‑suffix digits (e.g. "gnuton2" → 2) + # NEW: capture any trailing build-suffix digits (e.g. "gnuton2" → 2) #----------------------------------------------------------- buildDigits="$(echo "$verStr" | sed -n 's/.*[^0-9]\([0-9]\+\)$/\1/p')" buildDigits=$(printf "%02d" "${buildDigits:-0}") - # Strip the non‑numeric tail so we feed only dotted numbers to awk - verStr="$(echo "$verStr" | sed 's/[^0-9.]*$//')" + # Production flag: 1 = prod, 0 = beta/alpha + prodFlag="$((1 - isBeta))" - # Core numeric conversion (Major Minor Patch) + two‑digit build suffix - verNum="$(echo "$verStr" | awk -F'.' '{printf ("%d%02d%02d\n", $1,$2,$3);}')${buildDigits}" + # Strip the non-numeric tail so we feed only dotted numbers to awk + verStr="$(echo "$verStr" | sed 's/[^0-9.]*$//')" - # Subtract non-production weight from the version number # - verNum="$((verNum + nonProductionVersionWeight))" + # Core numeric conversion (Major Minor Patch) + build suffix + prod flag + verNum="$(echo "$verStr" | awk -F'.' '{printf ("%d%02d%02d\n", $1,$2,$3);}')${buildDigits}${prodFlag}" # Now prepend the F/W Basecode version # [ -n "$fwBasecodeVers" ] && verNum="${fwBasecodeVers}$verNum" From 1a57147ec5f26f63ad5a36bc3224cf341f5bc406 Mon Sep 17 00:00:00 2001 From: ExtremeFiretop Date: Thu, 24 Jul 2025 11:21:32 -0400 Subject: [PATCH 04/11] Additional Patches to Webs_Updates Additional Patches to Webs_Updates Reimplement the use of the $USE_BETA_WEIGHT --- MerlinAU.sh | 26 +++++++++++++++++--------- gnuton_webs_update.sh | 16 +++++++++++++--- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/MerlinAU.sh b/MerlinAU.sh index 6ecd5615..b75d217b 100644 --- a/MerlinAU.sh +++ b/MerlinAU.sh @@ -4,7 +4,7 @@ # # Original Creation Date: 2023-Oct-01 by @ExtremeFiretop. # Official Co-Author: @Martinski W. - Date: 2023-Nov-01 -# Last Modified: 2025-Jul-23 +# Last Modified: 2025-Jul-24 ################################################################### set -u @@ -787,7 +787,7 @@ _GetFirmwareVariantFromRouter_() } ##-------------------------------------------## -## Modified by ExtremeFiretop [2025-July-23] ## +## Modified by ExtremeFiretop [2025-July-24] ## ##-------------------------------------------## _FWVersionStrToNum_() { @@ -797,7 +797,15 @@ _FWVersionStrToNum_() USE_BETA_WEIGHT="$(Get_Custom_Setting FW_Allow_Beta_Production_Up)" local verNum verStr="$1" - local fwBasecodeVers="" numOfFields buildDigits isBeta=0 prodFlag + local fwBasecodeVers="" numOfFields buildDigits isBeta=0 prodFlag tagRank=2 + local stableRank=2 betaRank=1 alphaRank=0 + + # If beta weight is NOT enabled, all tags get the same rank (0) + if [ "$USE_BETA_WEIGHT" != "ENABLED" ] + then + stableRank=0 ; betaRank=0 ; alphaRank=0 + fi + tagRank="$stableRank" #-------------------------------------------------------------- # Handle any 'alpha/beta' in the version string to be sure @@ -805,9 +813,9 @@ _FWVersionStrToNum_() #-------------------------------------------------------------- if echo "$verStr" | grep -qiE '(alpha|beta)' then - isBeta=1 - # Adjust weight value if "Beta-to-Production" update is enabled # - [ "$USE_BETA_WEIGHT" = "ENABLED" ] + if echo "$verStr" | grep -qi 'alpha'; then tagRank="$alphaRank" ; isBeta=1 + elif echo "$verStr" | grep -qi 'beta' ; then tagRank="$betaRank" ; isBeta=1 + fi # Replace '.alpha|.beta' and anything following it with ".0" # verStr="$(echo "$verStr" | sed 's/[.][Aa]lpha.*/.0/ ; s/[.][Bb]eta.*/.0/')" @@ -836,13 +844,13 @@ _FWVersionStrToNum_() buildDigits="$(echo "$verStr" | sed -n 's/.*[^0-9]\([0-9]\+\)$/\1/p')" buildDigits=$(printf "%02d" "${buildDigits:-0}") - # Production flag: 1 = prod, 0 = beta/alpha - prodFlag="$((1 - isBeta))" + # Production/Beta/Alpha weight digit + prodFlag="$tagRank" # Strip the non-numeric tail so we feed only dotted numbers to awk verStr="$(echo "$verStr" | sed 's/[^0-9.]*$//')" - # Core numeric conversion (Major Minor Patch) + build suffix + prod flag + # Core numeric conversion (Major Minor Patch) + build suffix + tag weight verNum="$(echo "$verStr" | awk -F'.' '{printf ("%d%02d%02d\n", $1,$2,$3);}')${buildDigits}${prodFlag}" # Now prepend the F/W Basecode version # diff --git a/gnuton_webs_update.sh b/gnuton_webs_update.sh index 1e1fcc6a..966cf414 100644 --- a/gnuton_webs_update.sh +++ b/gnuton_webs_update.sh @@ -1,6 +1,6 @@ #!/bin/sh -readonly SCRIPT_VERSTAG="25070312" +readonly SCRIPT_VERSTAG="25072411" wget_options="-q -t 2 -T 30" @@ -20,8 +20,10 @@ fi current_base=$(nvram get firmver | sed "s/\.//g") current_firm=$(nvram get buildno | cut -d. -f1) current_buildno=$(nvram get buildno | cut -d. -f2) -#Extract extendno, subtract value by 1 if it contains "alpha/beta", remove all other values such as "_rog" or "-g*" -current_extendno="$(nvram get extendno | awk -F'[_-]' '{n=$1} /[aA]lpha|[bB]eta/{n--} END{print n}')" +current_extendno="$(nvram get extendno | awk -F'[_-]' '{print $1}')" +current_gnuton="$(nvram get extendno | sed -n 's/.*gnuton\([0-9]\+\).*/\1/p')" +[ -z "$current_gnuton" ] && current_gnuton=0 +echo "$(nvram get extendno)" | grep -qiE 'beta|alpha' && current_is_beta=1 || current_is_beta=0 # get firmware information model=$(nvram get productid) @@ -50,6 +52,10 @@ else extendno=$(echo $extendno | sed s/#.*//;) lextendno=$(echo $extendno | sed s/-g.*//;) + new_gnuton="$(echo $extendno | sed -n 's/.*gnuton\([0-9]\+\).*/\1/p')" + [ -z "$new_gnuton" ] && new_gnuton=0 + echo "$extendno" | grep -qiE 'beta|alpha' && new_is_beta=1 || new_is_beta=0 + nvram set webs_state_info=${firmbase}_${firmver}_${buildno}_${extendno} rm -f /tmp/wlan_update.* @@ -72,6 +78,10 @@ else newfirm=1 elif [ "$current_base" -eq "$firmbase" ] && [ "$current_firm" -eq "$firmver" ] && [ "$current_buildno" -eq "$buildno" ] && [ "$current_extendno" -lt "$lextendno" ]; then newfirm=1 + elif [ "$current_base" -eq "$firmbase" ] && [ "$current_firm" -eq "$firmver" ] && [ "$current_buildno" -eq "$buildno" ] && [ "$current_extendno" -eq "$lextendno" ] && [ "$current_gnuton" -lt "$new_gnuton" ]; then + newfirm=1 + elif [ "$current_base" -eq "$firmbase" ] && [ "$current_firm" -eq "$firmver" ] && [ "$current_buildno" -eq "$buildno" ] && [ "$current_extendno" -eq "$lextendno" ] && [ "$current_gnuton" -eq "$new_gnuton" ] && [ "$current_is_beta" -eq 1 ] && [ "$new_is_beta" -eq 0 ]; then + newfirm=1 else newfirm=0 fi From 8cc7335211085f3f71a6701e7072c7cc69a343bd Mon Sep 17 00:00:00 2001 From: ExtremeFiretop Date: Thu, 24 Jul 2025 11:40:10 -0400 Subject: [PATCH 05/11] Allow Updates to Webs_Update Script Allow Updates to Webs_Update Script --- MerlinAU.sh | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/MerlinAU.sh b/MerlinAU.sh index b75d217b..b9d18cc5 100644 --- a/MerlinAU.sh +++ b/MerlinAU.sh @@ -2651,6 +2651,18 @@ _GetDLScriptVersion_() return 0 } +##---------------------------------------## +## Added by ExtremeFiretop [2025-Jul-24] ## +##---------------------------------------## +_GetScriptVerstag_() +{ + if [ $# -eq 0 ] || [ -z "$1" ] || [ ! -s "$1" ] + then echo 0 ; return 1 ; fi + sed -n 's/.*SCRIPT_VERSTAG="\([0-9]\+\)".*/\1/p' "$1" | tail -n1 + [ $? -ne 0 ] && echo 0 +} + + ##----------------------------------------## ## Modified by Martinski W. [2025-Feb-15] ## ##----------------------------------------## @@ -11065,9 +11077,9 @@ _DoInitializationStartup_() _SetDefaultBuildType_ } -##-------------------------------------## -## Added by Martinski W. [2025-Jul-03] ## -##-------------------------------------## +##-------------------------------------------## +## Modified by ExtremeFiretop [2025-July-24] ## +##-------------------------------------------## ####################################################################### # TEMPORARY hack to check if the Gnuton F/W built-in 'webs_update.sh' # script is the most recent version that includes required fixes. @@ -11079,8 +11091,7 @@ _DoInitializationStartup_() _Gnuton_Check_Webs_Update_Script_() { if ! "$isGNUtonFW" || \ - ! "$checkWebsUpdateScriptForGnuton" || \ - grep -qE 'SCRIPT_VERSTAG="[0-9]+"' "$FW_UpdateCheckScript" + ! "$checkWebsUpdateScriptForGnuton" then checkWebsUpdateScriptForGnuton=false return 0 @@ -11088,16 +11099,25 @@ _Gnuton_Check_Webs_Update_Script_() local theWebsUpdateFile="webs_update.sh" local fixedWebsUpdateFilePath="${SETTINGS_DIR}/$theWebsUpdateFile" + local localVerstag=0 remoteVerstag=0 + + #Get local VERSTAG (if any) # + localVerstag="$(_GetScriptVerstag_ "$FW_UpdateCheckScript")" + [ -z "$localVerstag" ] && localVerstag=0 - ## Get the fixed version of the script targeted for Gnuton F/W ## + # Get the fixed version of the script targeted for Gnuton F/W # if _CurlFileDownload_ "gnuton_webs_update.sh" "$fixedWebsUpdateFilePath" then chmod 755 "$fixedWebsUpdateFilePath" + remoteVerstag="$(_GetScriptVerstag_ "$fixedWebsUpdateFilePath")" + [ -z "$remoteVerstag" ] && remoteVerstag=0 else return 1 #NOT available so do nothing# fi - if ! diff "$FW_UpdateCheckScript" "$fixedWebsUpdateFilePath" >/dev/null 2>&1 + # Only (re)bind if remote is newer OR files differ # + if [ "$remoteVerstag" -gt "$localVerstag" ] || \ + ! diff "$FW_UpdateCheckScript" "$fixedWebsUpdateFilePath" >/dev/null 2>&1 then umount "$FW_UpdateCheckScript" 2>/dev/null mount -o bind "$fixedWebsUpdateFilePath" "$FW_UpdateCheckScript" From 8670488630a6ebd877556bb42f5cd44a041dd00e Mon Sep 17 00:00:00 2001 From: ExtremeFiretop Date: Thu, 24 Jul 2025 11:47:04 -0400 Subject: [PATCH 06/11] Navigate around the binded file Navigate around the binded file for comparison --- MerlinAU.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/MerlinAU.sh b/MerlinAU.sh index b9d18cc5..b9a2e1db 100644 --- a/MerlinAU.sh +++ b/MerlinAU.sh @@ -11099,17 +11099,18 @@ _Gnuton_Check_Webs_Update_Script_() local theWebsUpdateFile="webs_update.sh" local fixedWebsUpdateFilePath="${SETTINGS_DIR}/$theWebsUpdateFile" + local tmpFixedWebsUpdateFilePath="${fixedWebsUpdateFilePath}.DL.TMP" local localVerstag=0 remoteVerstag=0 - #Get local VERSTAG (if any) # + #Get local VERSTAG (if any) # localVerstag="$(_GetScriptVerstag_ "$FW_UpdateCheckScript")" [ -z "$localVerstag" ] && localVerstag=0 # Get the fixed version of the script targeted for Gnuton F/W # - if _CurlFileDownload_ "gnuton_webs_update.sh" "$fixedWebsUpdateFilePath" + if _CurlFileDownload_ "gnuton_webs_update.sh" "$tmpFixedWebsUpdateFilePath" then - chmod 755 "$fixedWebsUpdateFilePath" - remoteVerstag="$(_GetScriptVerstag_ "$fixedWebsUpdateFilePath")" + chmod 755 "$tmpFixedWebsUpdateFilePath" + remoteVerstag="$(_GetScriptVerstag_ "$tmpFixedWebsUpdateFilePath")" [ -z "$remoteVerstag" ] && remoteVerstag=0 else return 1 #NOT available so do nothing# @@ -11117,11 +11118,14 @@ _Gnuton_Check_Webs_Update_Script_() # Only (re)bind if remote is newer OR files differ # if [ "$remoteVerstag" -gt "$localVerstag" ] || \ - ! diff "$FW_UpdateCheckScript" "$fixedWebsUpdateFilePath" >/dev/null 2>&1 + ! diff "$FW_UpdateCheckScript" "$tmpFixedWebsUpdateFilePath" >/dev/null 2>&1 then umount "$FW_UpdateCheckScript" 2>/dev/null + mv -f "$tmpFixedWebsUpdateFilePath" "$fixedWebsUpdateFilePath" mount -o bind "$fixedWebsUpdateFilePath" "$FW_UpdateCheckScript" Say "${YLWct}Set up a fixed version of the \"${theWebsUpdateFile}\" script file.${NOct}" + else + rm -f "$tmpFixedWebsUpdateFilePath" fi } From f26ba292bdd43ea24471bc65977b34cc96058532 Mon Sep 17 00:00:00 2001 From: ExtremeFiretop Date: Thu, 24 Jul 2025 12:34:09 -0400 Subject: [PATCH 07/11] Workaround for Bound File Workaround for Bound File --- MerlinAU.sh | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/MerlinAU.sh b/MerlinAU.sh index b9a2e1db..035a9827 100644 --- a/MerlinAU.sh +++ b/MerlinAU.sh @@ -2688,7 +2688,13 @@ _CurlFileDownload_() then updatedWebUIPage=true else updatedWebUIPage=false fi - mv -f "$tempFilePathDL" "$2" + if grep -q " $2 " /proc/mounts 2>/dev/null + then + cat "$tempFilePathDL" > "$2" + rm -f "$tempFilePathDL" + else + mv -f "$tempFilePathDL" "$2" + fi retCode=0 fi @@ -11099,18 +11105,18 @@ _Gnuton_Check_Webs_Update_Script_() local theWebsUpdateFile="webs_update.sh" local fixedWebsUpdateFilePath="${SETTINGS_DIR}/$theWebsUpdateFile" - local tmpFixedWebsUpdateFilePath="${fixedWebsUpdateFilePath}.DL.TMP" local localVerstag=0 remoteVerstag=0 #Get local VERSTAG (if any) # localVerstag="$(_GetScriptVerstag_ "$FW_UpdateCheckScript")" [ -z "$localVerstag" ] && localVerstag=0 + umount "$FW_UpdateCheckScript" 2>/dev/null # Get the fixed version of the script targeted for Gnuton F/W # - if _CurlFileDownload_ "gnuton_webs_update.sh" "$tmpFixedWebsUpdateFilePath" + if _CurlFileDownload_ "gnuton_webs_update.sh" "$fixedWebsUpdateFilePath" then - chmod 755 "$tmpFixedWebsUpdateFilePath" - remoteVerstag="$(_GetScriptVerstag_ "$tmpFixedWebsUpdateFilePath")" + chmod 755 "$fixedWebsUpdateFilePath" + remoteVerstag="$(_GetScriptVerstag_ "$fixedWebsUpdateFilePath")" [ -z "$remoteVerstag" ] && remoteVerstag=0 else return 1 #NOT available so do nothing# @@ -11118,14 +11124,13 @@ _Gnuton_Check_Webs_Update_Script_() # Only (re)bind if remote is newer OR files differ # if [ "$remoteVerstag" -gt "$localVerstag" ] || \ - ! diff "$FW_UpdateCheckScript" "$tmpFixedWebsUpdateFilePath" >/dev/null 2>&1 + ! diff "$FW_UpdateCheckScript" "$fixedWebsUpdateFilePath" >/dev/null 2>&1 then umount "$FW_UpdateCheckScript" 2>/dev/null - mv -f "$tmpFixedWebsUpdateFilePath" "$fixedWebsUpdateFilePath" mount -o bind "$fixedWebsUpdateFilePath" "$FW_UpdateCheckScript" Say "${YLWct}Set up a fixed version of the \"${theWebsUpdateFile}\" script file.${NOct}" else - rm -f "$tmpFixedWebsUpdateFilePath" + rm -f "$fixedWebsUpdateFilePath" fi } From 87e259fc63f54e2eec914cad9646b77c6c20012d Mon Sep 17 00:00:00 2001 From: ExtremeFiretop Date: Thu, 24 Jul 2025 12:42:56 -0400 Subject: [PATCH 08/11] Cleanup Cleanup --- MerlinAU.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/MerlinAU.sh b/MerlinAU.sh index 035a9827..fcc30b17 100644 --- a/MerlinAU.sh +++ b/MerlinAU.sh @@ -11122,9 +11122,8 @@ _Gnuton_Check_Webs_Update_Script_() return 1 #NOT available so do nothing# fi - # Only (re)bind if remote is newer OR files differ # - if [ "$remoteVerstag" -gt "$localVerstag" ] || \ - ! diff "$FW_UpdateCheckScript" "$fixedWebsUpdateFilePath" >/dev/null 2>&1 + # Only (re)bind if remote is newer OR the currently bound file is missing the version tag # + if [ "$remoteVerstag" -gt "$localVerstag" ] || [ "$localVerstag" -eq 0 ] then umount "$FW_UpdateCheckScript" 2>/dev/null mount -o bind "$fixedWebsUpdateFilePath" "$FW_UpdateCheckScript" From e9865f44a60f86e08436156d55c09c2b01b96484 Mon Sep 17 00:00:00 2001 From: Joel Samson Date: Thu, 24 Jul 2025 12:56:39 -0400 Subject: [PATCH 09/11] Update gnuton_webs_update.sh --- gnuton_webs_update.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gnuton_webs_update.sh b/gnuton_webs_update.sh index 966cf414..605232e5 100644 --- a/gnuton_webs_update.sh +++ b/gnuton_webs_update.sh @@ -52,9 +52,9 @@ else extendno=$(echo $extendno | sed s/#.*//;) lextendno=$(echo $extendno | sed s/-g.*//;) - new_gnuton="$(echo $extendno | sed -n 's/.*gnuton\([0-9]\+\).*/\1/p')" - [ -z "$new_gnuton" ] && new_gnuton=0 - echo "$extendno" | grep -qiE 'beta|alpha' && new_is_beta=1 || new_is_beta=0 + new_gnuton="$(echo $extendno | sed -n 's/.*gnuton\([0-9]\+\).*/\1/p')" + [ -z "$new_gnuton" ] && new_gnuton=0 + echo "$extendno" | grep -qiE 'beta|alpha' && new_is_beta=1 || new_is_beta=0 nvram set webs_state_info=${firmbase}_${firmver}_${buildno}_${extendno} From 2ca47df3c9c397e559d94945a9a921de5bcada0f Mon Sep 17 00:00:00 2001 From: ExtremeFiretop Date: Fri, 25 Jul 2025 09:19:34 -0400 Subject: [PATCH 10/11] Fine-Tuning Fine-Tuning --- MerlinAU.sh | 5 +++-- gnuton_webs_update.sh | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/MerlinAU.sh b/MerlinAU.sh index fcc30b17..035a9827 100644 --- a/MerlinAU.sh +++ b/MerlinAU.sh @@ -11122,8 +11122,9 @@ _Gnuton_Check_Webs_Update_Script_() return 1 #NOT available so do nothing# fi - # Only (re)bind if remote is newer OR the currently bound file is missing the version tag # - if [ "$remoteVerstag" -gt "$localVerstag" ] || [ "$localVerstag" -eq 0 ] + # Only (re)bind if remote is newer OR files differ # + if [ "$remoteVerstag" -gt "$localVerstag" ] || \ + ! diff "$FW_UpdateCheckScript" "$fixedWebsUpdateFilePath" >/dev/null 2>&1 then umount "$FW_UpdateCheckScript" 2>/dev/null mount -o bind "$fixedWebsUpdateFilePath" "$FW_UpdateCheckScript" diff --git a/gnuton_webs_update.sh b/gnuton_webs_update.sh index 966cf414..605232e5 100644 --- a/gnuton_webs_update.sh +++ b/gnuton_webs_update.sh @@ -52,9 +52,9 @@ else extendno=$(echo $extendno | sed s/#.*//;) lextendno=$(echo $extendno | sed s/-g.*//;) - new_gnuton="$(echo $extendno | sed -n 's/.*gnuton\([0-9]\+\).*/\1/p')" - [ -z "$new_gnuton" ] && new_gnuton=0 - echo "$extendno" | grep -qiE 'beta|alpha' && new_is_beta=1 || new_is_beta=0 + new_gnuton="$(echo $extendno | sed -n 's/.*gnuton\([0-9]\+\).*/\1/p')" + [ -z "$new_gnuton" ] && new_gnuton=0 + echo "$extendno" | grep -qiE 'beta|alpha' && new_is_beta=1 || new_is_beta=0 nvram set webs_state_info=${firmbase}_${firmver}_${buildno}_${extendno} From c02bef148ce8bc0c0c349585f2531f376baadd61 Mon Sep 17 00:00:00 2001 From: ExtremeFiretop Date: Mon, 28 Jul 2025 17:59:42 -0400 Subject: [PATCH 11/11] Removing unnecessary unmount Removing unnecessary unmount Was causing the webs_update file to always need to be remounted. --- MerlinAU.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/MerlinAU.sh b/MerlinAU.sh index 035a9827..371c982f 100644 --- a/MerlinAU.sh +++ b/MerlinAU.sh @@ -11111,7 +11111,6 @@ _Gnuton_Check_Webs_Update_Script_() localVerstag="$(_GetScriptVerstag_ "$FW_UpdateCheckScript")" [ -z "$localVerstag" ] && localVerstag=0 - umount "$FW_UpdateCheckScript" 2>/dev/null # Get the fixed version of the script targeted for Gnuton F/W # if _CurlFileDownload_ "gnuton_webs_update.sh" "$fixedWebsUpdateFilePath" then