aboutsummaryrefslogtreecommitdiffstats
path: root/firmware-upgrade-reboot.rsc
diff options
context:
space:
mode:
Diffstat (limited to 'firmware-upgrade-reboot.rsc')
-rw-r--r--firmware-upgrade-reboot.rsc87
1 files changed, 51 insertions, 36 deletions
diff --git a/firmware-upgrade-reboot.rsc b/firmware-upgrade-reboot.rsc
index ec2babc..86a9a8c 100644
--- a/firmware-upgrade-reboot.rsc
+++ b/firmware-upgrade-reboot.rsc
@@ -1,45 +1,60 @@
#!rsc by RouterOS
# RouterOS script: firmware-upgrade-reboot
-# Copyright (c) 2022-2023 Christian Hesse <mail@eworm.de>
-# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
+# Copyright (c) 2022-2025 Christian Hesse <mail@eworm.de>
+# https://rsc.eworm.de/COPYING.md
+#
+# requires RouterOS, version=7.15
#
# install firmware upgrade, and reboot
-# https://git.eworm.de/cgit/routeros-scripts/about/doc/firmware-upgrade-reboot.md
+# https://rsc.eworm.de/doc/firmware-upgrade-reboot.md
-:local 0 "firmware-upgrade-reboot";
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
-:global LogPrintExit2;
-:global ScriptLock;
-:global VersionToNum;
-
-$ScriptLock $0;
-
-:local RouterBoard [ /system/routerboard/get ];
-:if ($RouterBoard->"current-firmware" = $RouterBoard->"upgrade-firmware") do={
- $LogPrintExit2 info $0 ("Current and upgrade firmware match with version " . \
- $RouterBoard->"current-firmware" . ".") true;
-}
-:if ([ $VersionToNum ($RouterBoard->"current-firmware") ] > [ $VersionToNum ($RouterBoard->"upgrade-firmware") ]) do={
- $LogPrintExit2 info $0 ("Different firmware version is available, but it is a downgrade. Ignoring.") true;
-}
-
-:if ([ /system/routerboard/settings/get auto-upgrade ] = false) do={
- $LogPrintExit2 info $0 ("Firmware version " . $RouterBoard->"upgrade-firmware" . \
- " is available, upgrading.") false;
- /system/routerboard/upgrade;
+:local ExitOK false;
+:do {
+ :local ScriptName [ :jobname ];
+
+ :global LogPrint;
+ :global ScriptLock;
+ :global VersionToNum;
+
+ :if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
+ :error false;
+ }
+
+ :local RouterBoard [ /system/routerboard/get ];
+ :if ($RouterBoard->"current-firmware" = $RouterBoard->"upgrade-firmware") do={
+ $LogPrint info $ScriptName ("Current and upgrade firmware match with version " . \
+ $RouterBoard->"current-firmware" . ".");
+ :set ExitOK true;
+ :error true;
+ }
+ :if ([ $VersionToNum ($RouterBoard->"current-firmware") ] > [ $VersionToNum ($RouterBoard->"upgrade-firmware") ]) do={
+ $LogPrint info $ScriptName ("Different firmware version is available, but it is a downgrade. Ignoring.");
+ :set ExitOK true;
+ :error true;
+ }
+
+ :if ([ /system/routerboard/settings/get auto-upgrade ] = false) do={
+ $LogPrint info $ScriptName ("Firmware version " . $RouterBoard->"upgrade-firmware" . \
+ " is available, upgrading.");
+ /system/routerboard/upgrade;
+ }
+
+ :while ([ :len [ /log/find where topics=({"system";"info";"critical"}) \
+ message="Firmware upgraded successfully, please reboot for changes to take effect!" ] ] = 0) do={
+ :delay 1s;
+ }
+
+ :local Uptime [ /system/resource/get uptime ];
+ :if ($Uptime < 1m) do={
+ :delay $Uptime;
+ }
+
+ $LogPrint info $ScriptName ("Firmware upgrade successful, rebooting.");
+ /system/reboot;
+} on-error={
+ :global ExitError; $ExitError $ExitOK [ :jobname ];
}
-
-:while ([ :len [ /log/find where topics=({"system";"info";"critical"}) \
- message="Firmware upgraded successfully, please reboot for changes to take effect!" ] ] = 0) do={
- :delay 1s;
-}
-
-:local Uptime [ /system/resource/get uptime ];
-:if ($Uptime < 1m) do={
- :delay $Uptime;
-}
-
-$LogPrintExit2 info $0 ("Firmware upgrade successful, rebooting.") false;
-/system/reboot;