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.rsc54
1 files changed, 54 insertions, 0 deletions
diff --git a/firmware-upgrade-reboot.rsc b/firmware-upgrade-reboot.rsc
new file mode 100644
index 0000000..169a2e0
--- /dev/null
+++ b/firmware-upgrade-reboot.rsc
@@ -0,0 +1,54 @@
+#!rsc by RouterOS
+# RouterOS script: firmware-upgrade-reboot
+# Copyright (c) 2022-2024 Christian Hesse <mail@eworm.de>
+# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
+#
+# requires RouterOS, version=7.13
+#
+# install firmware upgrade, and reboot
+# https://git.eworm.de/cgit/routeros-scripts/about/doc/firmware-upgrade-reboot.md
+
+:global GlobalFunctionsReady;
+:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+
+:do {
+ :local ScriptName [ :jobname ];
+
+ :global LogPrint;
+ :global ScriptLock;
+ :global VersionToNum;
+
+ :if ([ $ScriptLock $ScriptName ] = false) do={
+ :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" . ".");
+ :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.");
+ :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={ }