44#
55# Original Creation Date: 2023-Oct-01 by @ExtremeFiretop.
66# Official Co-Author: @Martinski W. - Date: 2023-Nov-01
7- # Last Modified: 2025-May-31
7+ # Last Modified: 2025-Jun-02
88# ##################################################################
99set -u
1010
@@ -3587,8 +3587,65 @@ _HasRouterMoreThan256MBtotalRAM_()
35873587{
35883588 local totalRAM_KB
35893589 totalRAM_KB=" $( awk -F ' ' ' /^MemTotal:/{print $2}' /proc/meminfo) "
3590- [ -n " $totalRAM_KB " ] && [ " $totalRAM_KB " -gt 262144 ] && return 0
3591- return 1
3590+ if [ -n " $totalRAM_KB " ] && [ " $totalRAM_KB " -gt 262144 ]
3591+ then return 0
3592+ else return 1
3593+ fi
3594+ }
3595+
3596+ # #-------------------------------------##
3597+ # # Added by Martinski W. [2025-Jun-01] ##
3598+ # #-------------------------------------##
3599+ _HasRouterMoreThan512MBtotalRAM_ ()
3600+ {
3601+ local totalRAM_KB
3602+ totalRAM_KB=" $( awk -F ' ' ' /^MemTotal:/{print $2}' /proc/meminfo) "
3603+ if [ -n " $totalRAM_KB " ] && [ " $totalRAM_KB " -gt 524288 ]
3604+ then return 0
3605+ else return 1
3606+ fi
3607+ }
3608+
3609+ # #-------------------------------------##
3610+ # # Added by Martinski W. [2025-Jun-01] ##
3611+ # #-------------------------------------##
3612+ # ---------------------------------------------------------------------#
3613+ # We define TWO main phases for RAM requirement:
3614+ # In phase ONE, we ask for more RAM Available BEFORE downloading
3615+ # and extracting the F/W image file.
3616+ # In phase greater than ONE, we ask for less RAM Available AFTER
3617+ # the F/W image file has been downloaded and extracted.
3618+ # ---------------------------------------------------------------------#
3619+ _GetAvailableRAM_PercentOverheadNum_ ()
3620+ {
3621+ local phaseNum=1 availableRAM_PercentOverheadNum
3622+
3623+ if [ $# -eq 0 ] || [ -z " $1 " ] || \
3624+ ! echo " $1 " | grep -qE " ^phase#[1-9]$"
3625+ then phaseNum=1
3626+ else phaseNum=" $( echo " $1 " | awk -F ' #' ' {print $2}' ) "
3627+ fi
3628+
3629+ if _HasRouterMoreThan512MBtotalRAM_
3630+ then # #Physical RAM is 1.0GB or more##
3631+ if [ " $phaseNum " -lt 3 ]
3632+ then availableRAM_PercentOverheadNum=50
3633+ else availableRAM_PercentOverheadNum=40
3634+ fi
3635+ elif _HasRouterMoreThan256MBtotalRAM_
3636+ then # #Physical RAM is 512.0MB##
3637+ if [ " $phaseNum " -lt 3 ]
3638+ then availableRAM_PercentOverheadNum=35
3639+ else availableRAM_PercentOverheadNum=25
3640+ fi
3641+ else # #Physical RAM is 256.0MB##
3642+ if [ " $phaseNum " -lt 3 ]
3643+ then availableRAM_PercentOverheadNum=35
3644+ else availableRAM_PercentOverheadNum=30
3645+ fi
3646+ fi
3647+ echo " $availableRAM_PercentOverheadNum "
3648+ return 0
35923649}
35933650
35943651# #----------------------------------------##
@@ -3645,24 +3702,42 @@ _GetFreeRAM_KB_()
36453702}
36463703
36473704# #----------------------------------------##
3648- # # Modified by Martinski W. [2024 -Jun-05 ] ##
3705+ # # Modified by Martinski W. [2025 -Jun-01 ] ##
36493706# #----------------------------------------##
3707+ theZIP_FileSizeKB=0
3708+ theZIP_FileSizeBytes=0
3709+
36503710_GetRequiredRAM_KB_ ()
36513711{
3652- local theURL=" $1 "
3653- local zip_file_size_bytes zip_file_size_kb overhead_kb
3654- local total_required_kb overhead_percentage=50
3712+ local theURL=" $1 " thePhase overhead_percentage
3713+ local overhead_KB total_required_KB
3714+
3715+ if [ $# -lt 2 ] || [ -z " $2 " ] || \
3716+ ! echo " $2 " | grep -qE " ^phase#[1-9]$"
3717+ then thePhase=' phase#1'
3718+ else thePhase=" $2 "
3719+ fi
3720+ overhead_percentage=" $( _GetAvailableRAM_PercentOverheadNum_ " $thePhase " ) "
3721+
3722+ if [ -z " $theZIP_FileSizeBytes " ] || \
3723+ [ " $theZIP_FileSizeBytes " = " 0" ] || \
3724+ ! echo " $theZIP_FileSizeBytes " | grep -qE " ^[0-9]+$"
3725+ then
3726+ theZIP_FileSizeBytes=" $( curl -LsI --retry 4 --retry-delay 5 " $theURL " | grep -i Content-Length | tail -1 | awk ' {print $2}' ) "
3727+ fi
36553728
3656- # Size of the ZIP file in bytes #
3657- zip_file_size_bytes=" $( curl -LsI --retry 4 --retry-delay 5 " $theURL " | grep -i Content-Length | tail -1 | awk ' {print $2}' ) "
3658- # Bytes to KBytes #
3659- zip_file_size_kb=" $(( zip_file_size_bytes / 1024 )) "
3729+ if [ -n " $theZIP_FileSizeBytes " ] && \
3730+ [ " $theZIP_FileSizeBytes " -gt 0 ] && \
3731+ [ " $theZIP_FileSizeKB " -eq 0 ]
3732+ then
3733+ theZIP_FileSizeKB=" $(( theZIP_FileSizeBytes / 1024 )) "
3734+ fi
36603735
36613736 # Calculate overhead based on the percentage #
3662- overhead_kb =" $(( zip_file_size_kb * overhead_percentage / 100 )) "
3737+ overhead_KB =" $(( theZIP_FileSizeKB * overhead_percentage / 100 )) "
36633738
3664- total_required_kb =" $(( zip_file_size_kb + overhead_kb )) "
3665- echo " $total_required_kb "
3739+ total_required_KB =" $(( theZIP_FileSizeKB + overhead_KB )) "
3740+ echo " $total_required_KB "
36663741}
36673742
36683743# #----------------------------------------##
@@ -3672,12 +3747,12 @@ _ShutDownNonCriticalServices_()
36723747{
36733748 for procName in nt_center nt_monitor nt_actMail
36743749 do
3675- procNum=" $( ps w | grep -w " $procName " | grep -cv " grep -w" ) "
3676- if [ " $procNum " -gt 0 ]
3677- then
3678- printf " $procName : [$procNum ]\n"
3679- killall -9 " $procName " && sleep 1
3680- fi
3750+ procNum=" $( ps w | grep -w " $procName " | grep -cv " grep -w" ) "
3751+ if [ " $procNum " -gt 0 ]
3752+ then
3753+ printf " $procName : [$procNum ]\n"
3754+ killall -9 " $procName " && sleep 1
3755+ fi
36813756 done
36823757
36833758 for service_name in conn_diag samba nasapps
@@ -3691,6 +3766,89 @@ _ShutDownNonCriticalServices_()
36913766 done
36923767}
36933768
3769+ # #-------------------------------------##
3770+ # # Added by Martinski W. [2025-Jun-01] ##
3771+ # #-------------------------------------##
3772+ # ---------------------------------------------------------------------#
3773+ # As a last resort, to free more available RAM, we now attempt to
3774+ # disable and shutdown existing ASUS/TrendMicro services such as:
3775+ # AsusNat Tunnel, AiProtection, Traffic Analyzer/Monitor, and
3776+ # Bandwidth Monitor. These appear to use quite a lot of RAM.
3777+ # ---------------------------------------------------------------------#
3778+
3779+ apps_analysis_SAVED=" "
3780+ bwdpi_db_enable_SAVED=" "
3781+ aae_disable_force_SAVED=" "
3782+ wrs_protect_enable_SAVED=" "
3783+ networkmap_fullscan_SAVED=" "
3784+ AsusTrendMicroProcsDisabled=false
3785+
3786+ _DisableAsusTrendMicroProcesses_ ()
3787+ {
3788+ apps_analysis_SAVED=" $( nvram get apps_analysis) "
3789+ bwdpi_db_enable_SAVED=" $( nvram get bwdpi_db_enable) "
3790+ aae_disable_force_SAVED=" $( nvram get aae_disable_force) "
3791+ wrs_protect_enable_SAVED=" $( nvram get wrs_protect_enable) "
3792+ networkmap_fullscan_SAVED=" $( nvram get networkmap_fullscan) "
3793+
3794+ if [ " $apps_analysis_SAVED " = " 1" ] || \
3795+ [ " $bwdpi_db_enable_SAVED " = " 1" ] || \
3796+ [ " $aae_disable_force_SAVED " = " 0" ] || \
3797+ [ " $wrs_protect_enable_SAVED " = " 1" ]
3798+ then
3799+ Say " Temporarily disabling some Asus/TrendMicro services..."
3800+ " $isInteractive " && printf " Please wait.\n"
3801+ nvram set apps_analysis=0 ; sleep 1
3802+ nvram set bwdpi_db_enable=0 ; sleep 1
3803+ nvram set aae_disable_force=1 ; sleep 1
3804+ nvram set wrs_protect_enable=0 ; sleep 1
3805+ nvram set networkmap_fullscan=2
3806+ AsusTrendMicroProcsDisabled=true
3807+ sleep 2
3808+ fi
3809+
3810+ for procName in aaews mastiff dcd wred bwdpi_wred_alive bwdpi_check hour_monitor netool
3811+ do
3812+ procNum=" $( ps w | grep -w " $procName " | grep -cv " grep -w" ) "
3813+ if [ " $procNum " -gt 0 ]
3814+ then
3815+ printf " $procName : [$procNum ]\n"
3816+ killall -9 " $procName " && sleep 1
3817+ fi
3818+ done
3819+
3820+ if " $isInteractive " && " $AsusTrendMicroProcsDisabled "
3821+ then printf " \nDone.\n" ; fi
3822+ }
3823+
3824+ # #-------------------------------------##
3825+ # # Added by Martinski W. [2025-Jun-01] ##
3826+ # #-------------------------------------##
3827+ _ReEnableAsusTrendMicroProcesses_ ()
3828+ {
3829+ if ! " $AsusTrendMicroProcsDisabled "
3830+ then return 0 ; fi
3831+
3832+ Say " Re-enabling existing Asus/TrendMicro services..."
3833+ " $isInteractive " && printf " Please wait.\n"
3834+
3835+ nvram set apps_analysis=" $apps_analysis_SAVED "
3836+ sleep 1
3837+ nvram set bwdpi_db_enable=" $bwdpi_db_enable_SAVED "
3838+ sleep 1
3839+ nvram set aae_disable_force=" $aae_disable_force_SAVED "
3840+ sleep 1
3841+ nvram set wrs_protect_enable=" $wrs_protect_enable_SAVED "
3842+ sleep 1
3843+ nvram set networkmap_fullscan=" $networkmap_fullscan_SAVED "
3844+ sleep 1
3845+ AsusTrendMicroProcsDisabled=false
3846+
3847+ " $isInteractive " && printf " \nDone.\n"
3848+ Say " A reboot may be necessary to fully restart Asus/TrendMicro services..."
3849+ return 0
3850+ }
3851+
36943852# #------------------------------------------##
36953853# # Modified by ExtremeFiretop [2024-Jan-26] ##
36963854# #------------------------------------------##
@@ -3764,7 +3922,7 @@ _LogMemoryDebugInfo_()
37643922}
37653923
37663924# #----------------------------------------##
3767- # # Modified by Martinski W. [2024-Mar-26 ] ##
3925+ # # Modified by Martinski W. [2025-Jun-01 ] ##
37683926# #----------------------------------------##
37693927check_memory_and_prompt_reboot ()
37703928{
@@ -3790,6 +3948,7 @@ check_memory_and_prompt_reboot()
37903948
37913949 # Attempt to clear dentries and inodes. #
37923950 Say " Attempting to free up memory again more aggressively..."
3951+ _DisableAsusTrendMicroProcesses_
37933952 sync; echo 2 > /proc/sys/vm/drop_caches
37943953 sleep 2
37953954
@@ -3806,7 +3965,6 @@ check_memory_and_prompt_reboot()
38063965
38073966 # Stop Entware services to free some memory #
38083967 _EntwareServicesHandler_ stop
3809-
38103968 _ShutDownNonCriticalServices_
38113969
38123970 sync; echo 3 > /proc/sys/vm/drop_caches
@@ -3835,18 +3993,19 @@ check_memory_and_prompt_reboot()
38353993 Say " Insufficient memory to continue. Exiting script."
38363994 # Restart Entware services #
38373995 _EntwareServicesHandler_ start
3996+ _ReEnableAsusTrendMicroProcesses_
38383997
38393998 _DoCleanUp_ 1 " $keepZIPfile " " $keepWfile "
38403999 _DoExit_ 1
38414000 fi
38424001 else
3843- Say " Successfully freed up memory. Available: ${availableRAM_kb} KB."
4002+ Say " Successfully freed up memory. RAM Available: ${availableRAM_kb} KB."
38444003 fi
38454004 else
3846- Say " Successfully freed up memory. Available: ${availableRAM_kb} KB."
4005+ Say " Successfully freed up memory. RAM Available: ${availableRAM_kb} KB."
38474006 fi
38484007 else
3849- Say " Successfully freed up memory. Available: ${availableRAM_kb} KB."
4008+ Say " Successfully freed up memory. RAM Available: ${availableRAM_kb} KB."
38504009 fi
38514010 fi
38524011}
@@ -8738,11 +8897,11 @@ Please manually update to version ${GRNct}${MinSupportedFirmwareVers}${NOct} or
87388897 return 1
87398898 fi
87408899
8741- # #---------------------------------------##
8742- # # Added by ExtremeFiretop [2023-Dec-09 ] ##
8743- # #---------------------------------------##
8900+ # #---------------------------------------- ##
8901+ # # Modified by Martinski W. [2025-Jun-01 ] ##
8902+ # #---------------------------------------- ##
87448903 # Get the required memory for the firmware download and extraction
8745- requiredRAM_kb=" $( _GetRequiredRAM_KB_ " $release_link " ) "
8904+ requiredRAM_kb=" $( _GetRequiredRAM_KB_ " $release_link " ' phase#1 ' ) "
87468905 if ! _HasRouterMoreThan256MBtotalRAM_ && [ " $requiredRAM_kb " -gt 51200 ]
87478906 then
87488907 if ! _ValidateUSBMountPoint_ " $FW_ZIP_BASE_DIR " 1
@@ -8810,11 +8969,12 @@ Please manually update to version ${GRNct}${MinSupportedFirmwareVers}${NOct} or
88108969 fi
88118970 fi
88128971
8813- # #------------------------------------------ ##
8814- # # Modified by ExtremeFiretop [2024-Feb-18 ] ##
8815- # #------------------------------------------ ##
8972+ # #----------------------------------------##
8973+ # # Modified by Martinski W. [2025-Jun-01 ] ##
8974+ # #----------------------------------------##
88168975 freeRAM_kb=" $( _GetFreeRAM_KB_) "
88178976 availableRAM_kb=" $( _GetAvailableRAM_KB_) "
8977+ requiredRAM_kb=" $( _GetRequiredRAM_KB_ " $release_link " ' phase#2' ) "
88188978 Say " Required RAM: ${requiredRAM_kb} KB - RAM Free: ${freeRAM_kb} KB - RAM Available: ${availableRAM_kb} KB"
88198979 check_memory_and_prompt_reboot " $requiredRAM_kb " " $availableRAM_kb "
88208980
@@ -8838,6 +8998,7 @@ Please manually update to version ${GRNct}${MinSupportedFirmwareVers}${NOct} or
88388998
88398999 freeRAM_kb=" $( _GetFreeRAM_KB_) "
88409000 availableRAM_kb=" $( _GetAvailableRAM_KB_) "
9001+ requiredRAM_kb=" $( _GetRequiredRAM_KB_ " $release_link " ' phase#3' ) "
88419002 Say " Required RAM: ${requiredRAM_kb} KB - RAM Free: ${freeRAM_kb} KB - RAM Available: ${availableRAM_kb} KB"
88429003 check_memory_and_prompt_reboot " $requiredRAM_kb " " $availableRAM_kb "
88439004
@@ -8859,6 +9020,7 @@ Please manually update to version ${GRNct}${MinSupportedFirmwareVers}${NOct} or
88599020
88609021 freeRAM_kb=" $( _GetFreeRAM_KB_) "
88619022 availableRAM_kb=" $( _GetAvailableRAM_KB_) "
9023+ requiredRAM_kb=" $( _GetRequiredRAM_KB_ " $release_link " ' phase#4' ) "
88629024 Say " Required RAM: ${requiredRAM_kb} KB - RAM Free: ${freeRAM_kb} KB - RAM Available: ${availableRAM_kb} KB"
88639025 check_memory_and_prompt_reboot " $requiredRAM_kb " " $availableRAM_kb "
88649026
@@ -8945,10 +9107,11 @@ Please manually update to version ${GRNct}${MinSupportedFirmwareVers}${NOct} or
89459107 fi
89469108
89479109 # #----------------------------------------##
8948- # # Modified by Martinski W. [2024-Mar-16 ] ##
9110+ # # Modified by Martinski W. [2025-Jun-01 ] ##
89499111 # #----------------------------------------##
89509112 freeRAM_kb=" $( _GetFreeRAM_KB_) "
89519113 availableRAM_kb=" $( _GetAvailableRAM_KB_) "
9114+ requiredRAM_kb=" $( _GetRequiredRAM_KB_ " $release_link " ' phase#5' ) "
89529115 Say " Required RAM: ${requiredRAM_kb} KB - RAM Free: ${freeRAM_kb} KB - RAM Available: ${availableRAM_kb} KB"
89539116 check_memory_and_prompt_reboot " $requiredRAM_kb " " $availableRAM_kb "
89549117
0 commit comments