From 7d5c9679952339c8064dc34967c13d0c7779ae87 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 14 Jan 2022 07:34:50 +0100 Subject: [PATCH 01/31] global-config: add $ScriptUpdatesUrlSuffix in overlay for RouterOS v6 --- global-config-overlay | 3 +++ 1 file changed, 3 insertions(+) diff --git a/global-config-overlay b/global-config-overlay index 37f78cfb..63034c9c 100644 --- a/global-config-overlay +++ b/global-config-overlay @@ -10,6 +10,9 @@ # Comment or remove to disable news and change notifications. :global GlobalConfigVersion 74; +# Use branch routeros-v6 with RouterOS v6: +:global ScriptUpdatesUrlSuffix "\?h=routeros-v6"; + # Copy configuration from global-config here and modify it. From ee9818e34dbdfeba3104857a54c8ec1bc6aba4ce Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 14 Jan 2022 08:55:07 +0100 Subject: [PATCH 02/31] global: send notification on 'routeros-v6' This is mainly to keep the version in 'routeros-v6' and 'main' in sync... --- global-config | 2 +- global-config-overlay | 2 +- global-config.changes | 1 + global-functions | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/global-config b/global-config index 024e52f5..75fbba41 100644 --- a/global-config +++ b/global-config @@ -8,7 +8,7 @@ # Make sure all configuration properties are up to date and this # value is in sync with value in script 'global-functions'! -:global GlobalConfigVersion 74; +:global GlobalConfigVersion 75; # This is used for DNS and backup file. :global Domain "example.com"; diff --git a/global-config-overlay b/global-config-overlay index 63034c9c..c443bead 100644 --- a/global-config-overlay +++ b/global-config-overlay @@ -8,7 +8,7 @@ # Make sure all configuration properties are up to date and this # value is in sync with value in script 'global-functions'! # Comment or remove to disable news and change notifications. -:global GlobalConfigVersion 74; +:global GlobalConfigVersion 75; # Use branch routeros-v6 with RouterOS v6: :global ScriptUpdatesUrlSuffix "\?h=routeros-v6"; diff --git a/global-config.changes b/global-config.changes index a070ecd2..6f0e2f72 100644 --- a/global-config.changes +++ b/global-config.changes @@ -78,6 +78,7 @@ 72="Introduced new script 'netwatch-dns' to manage DNS and DoH servers from netwatch."; 73="Renamed backup scripts ('cloud-backup' -> 'backup-cloud', 'email-backup' -> 'backup-email', 'upload-backup' -> 'backup-upload')."; 74="Extended 'hotspot-to-wpa', it can now read additional configuration from templates and hotspot users."; + 75="You are using the branch 'routeros-v6', well done."; }; # Migration steps to be applied on script updates diff --git a/global-functions b/global-functions index 625bbe4f..9579f5c7 100644 --- a/global-functions +++ b/global-functions @@ -8,7 +8,7 @@ # https://git.eworm.de/cgit/routeros-scripts/about/ # expected configuration version -:global ExpectedConfigVersion 74; +:global ExpectedConfigVersion 75; # global variables not to be changed by user :global GlobalFunctionsReady false; From 25338ca384ddd41c4b9d3ad2a937228562043235 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 17 Jan 2022 20:15:24 +0100 Subject: [PATCH 03/31] global-functions: $DownloadPackage: give url in debug output (cherry picked from commit 51cd11c80380eac0bfde4649cb30747c198881b7) --- global-functions | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/global-functions b/global-functions index 9579f5c7..40cd271a 100644 --- a/global-functions +++ b/global-functions @@ -278,13 +278,13 @@ $LogPrintExit2 error $0 ("Downloading required certificate failed.") true; } + :local Url ("https://upgrade.mikrotik.com/routeros/" . $PkgVer . "/" . $PkgFile); $LogPrintExit2 info $0 ("Downloading package file '" . $PkgName . "'...") false; + $LogPrintExit2 debug $0 ("... from url: " . $Url) false; :local Retry 3; :while ($Retry > 0) do={ :do { - / tool fetch check-certificate=yes-without-crl \ - ("https://upgrade.mikrotik.com/routeros/" . $PkgVer . "/" . $PkgFile) \ - dst-path=$PkgDest; + / tool fetch check-certificate=yes-without-crl $Url dst-path=$PkgDest; $WaitForFile $PkgDest; :if ([ / file get [ find where name=$PkgDest ] type ] = "package") do={ From 5363df356875325420a62273f00df1ea404d2aa4 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 17 Jan 2022 20:50:52 +0100 Subject: [PATCH 04/31] global-functions: $DownloadPackage: handle special case with name For RouterOS 6.x bundled package version and architecture are swapped. Closes: #21 (cherry picked from commit 1e6931c8e34d5035cb07baa98b57eccbcd4278ab) --- global-functions | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/global-functions b/global-functions index 40cd271a..c6d311f9 100644 --- a/global-functions +++ b/global-functions @@ -252,6 +252,7 @@ :global CleanFilePath; :global LogPrintExit2; :global MkDir; + :global VersionToNum; :global WaitForFile; :if ([ :len $PkgName ] = 0) do={ :return false; } @@ -259,6 +260,9 @@ :if ([ :len $PkgArch ] = 0) do={ :set PkgArch [ / system resource get architecture-name ]; } :local PkgFile ($PkgName . "-" . $PkgVer . "-" . $PkgArch . ".npk"); + :if ([ $VersionToNum $PkgVer ] < [ $VersionToNum "7.0" ] && $PkgName = "routeros") do={ + :set PkgFile ($PkgName . "-" . $PkgArch . "-" . $PkgVer . ".npk"); + } :if ($PkgArch = "x86_64" || $PkgName ~ "^routeros-") do={ :set PkgFile ($PkgName . "-" . $PkgVer . ".npk"); } From 9024e20c0b576d7d22c28ead3c6461e228bfda49 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Thu, 20 Jan 2022 22:05:05 +0100 Subject: [PATCH 05/31] global-functions: $ScriptInstallUpdate: give final url in debug output (cherry picked from commit b4a5d824a268fae9f06ccf61fff4f67c760773ed) --- global-functions | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/global-functions b/global-functions index c6d311f9..fc70cc2e 100644 --- a/global-functions +++ b/global-functions @@ -731,15 +731,15 @@ :if ([ :len $SourceNew ] = 0 && $ScriptUpdatesFetch = true) do={ :local Comment [ $ParseKeyValueStore ($ScriptVal->"comment") ]; :if (!($Comment->"ignore" = true)) do={ - $LogPrintExit2 debug $0 ("Fetching script from url: " . $ScriptVal->"name") false; :do { :local BaseUrl $ScriptUpdatesBaseUrl; :local UrlSuffix $ScriptUpdatesUrlSuffix; :if ([ :typeof ($Comment->"base-url") ] = "str") do={ :set BaseUrl ($Comment->"base-url"); } :if ([ :typeof ($Comment->"url-suffix") ] = "str") do={ :set UrlSuffix ($Comment->"url-suffix"); } + :local Url ($BaseUrl . $ScriptVal->"name" . $UrlSuffix); - :local Result [ / tool fetch check-certificate=yes-without-crl \ - ($BaseUrl . $ScriptVal->"name" . $UrlSuffix) output=user as-value ]; + $LogPrintExit2 debug $0 ("Fetching script '" . $ScriptVal->"name" . "' from url: " . $Url) false; + :local Result [ / tool fetch check-certificate=yes-without-crl $Url output=user as-value ]; :if ($Result->"status" = "finished") do={ :set SourceNew ($Result->"data"); } @@ -804,11 +804,10 @@ :global GlobalConfigMigration; :local ChangeLogCode; - $LogPrintExit2 debug $0 ("Fetching news, changes and migration.") false; :do { - :local Result [ / tool fetch check-certificate=yes-without-crl \ - ($ScriptUpdatesBaseUrl . "global-config.changes" . $ScriptUpdatesUrlSuffix) \ - output=user as-value ]; + :local Url ($ScriptUpdatesBaseUrl . "global-config.changes" . $ScriptUpdatesUrlSuffix); + $LogPrintExit2 debug $0 ("Fetching news, changes and migration: " . $Url) false; + :local Result [ / tool fetch check-certificate=yes-without-crl $Url output=user as-value ]; :if ($Result->"status" = "finished") do={ :set ChangeLogCode ($Result->"data"); } From 0a9d0473f37b0091ff115ac7d47d93a521c37c7a Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Thu, 20 Jan 2022 22:11:30 +0100 Subject: [PATCH 06/31] global-functions: $ScriptInstallUpdate: quote names in log output (cherry picked from commit 5e32105e7ea4bd357f9826d1ca24ca6e2c455bdc) --- global-functions | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/global-functions b/global-functions index fc70cc2e..70f10778 100644 --- a/global-functions +++ b/global-functions @@ -723,8 +723,8 @@ :foreach Scheduler in=[ / system scheduler find where on-event~("\\b" . $ScriptVal->"name" . "\\b") ] do={ :local SchedulerVal [ / system scheduler get $Scheduler ]; :if ($ScriptVal->"policy" != $SchedulerVal->"policy") do={ - $LogPrintExit2 warning $0 ("Policies differ for script " . $ScriptVal->"name" . \ - " and its scheduler " . $SchedulerVal->"name" . "!") false; + $LogPrintExit2 warning $0 ("Policies differ for script '" . $ScriptVal->"name" . \ + "' and its scheduler '" . $SchedulerVal->"name" . "'!") false; } } @@ -744,7 +744,7 @@ :set SourceNew ($Result->"data"); } } on-error={ - $LogPrintExit2 warning $0 ("Failed fetching " . $ScriptVal->"name") false; + $LogPrintExit2 warning $0 ("Failed fetching script '" . $ScriptVal->"name" . "'!") false; } } } @@ -765,18 +765,18 @@ :set ReloadGlobalFunctions true; } } else={ - $LogPrintExit2 warning $0 ("Syntax validation for script " . $ScriptVal->"name" . \ - " failed! Ignoring!") false; + $LogPrintExit2 warning $0 ("Syntax validation for script '" . $ScriptVal->"name" . \ + "' failed! Ignoring!") false; } } else={ - $LogPrintExit2 warning $0 ("Looks like new script " . $ScriptVal->"name" . \ - " is not valid (missing shebang). Ignoring!") false; + $LogPrintExit2 warning $0 ("Looks like new script '" . $ScriptVal->"name" . \ + "' is not valid (missing shebang). Ignoring!") false; } } else={ - $LogPrintExit2 debug $0 ("Script " . $ScriptVal->"name" . " did not change.") false; + $LogPrintExit2 debug $0 ("Script '" . $ScriptVal->"name" . "' did not change.") false; } } else={ - $LogPrintExit2 debug $0 ("No update for script " . $ScriptVal->"name" . ".") false; + $LogPrintExit2 debug $0 ("No update for script '" . $ScriptVal->"name" . "'.") false; } } From 221b0409d5198c13c11b0dddb730bd0bf5752efe Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Sun, 30 Jan 2022 22:05:58 +0100 Subject: [PATCH 07/31] check-routeros-update: use correct syntax (cherry picked from commit dfe995be270f1ee9621454e7feada84c33168db0) --- check-routeros-update | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check-routeros-update b/check-routeros-update index 0f687a5e..8cad07ab 100644 --- a/check-routeros-update +++ b/check-routeros-update @@ -108,7 +108,7 @@ $LogPrintExit2 debug $0 ("Checking for updates...") false; :if ([ $ScriptFromTerminal $0 ] = true) do={ :put ("Do you want to install RouterOS version " . $Update->"latest-version" . "? [y/N]"); - :if (([ :terminal inkey timeout=60 ] % 32) = 25) do={ + :if (([ / terminal inkey timeout=60 ] % 32) = 25) do={ $DoUpdate; } else={ :put "Canceled..."; From 52bd08b750b16b03494af7f7bdd66225fa82995a Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Sun, 30 Jan 2022 22:06:37 +0100 Subject: [PATCH 08/31] packages-update: use correct syntax (cherry picked from commit 27a81bcbca52d513c5b9c10578474a1863bd08af) --- packages-update | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages-update b/packages-update index b6b05246..2e6d8be0 100644 --- a/packages-update +++ b/packages-update @@ -35,7 +35,7 @@ $ScriptLock $0; :if ($NumInstalled > $NumLatest) do={ :if ([ $ScriptFromTerminal $0 ] = true) do={ :put "Latest version is older than installed one. Want to downgrade? [y/N]"; - :if (([ :terminal inkey timeout=60 ] % 32) = 25) do={ + :if (([ / terminal inkey timeout=60 ] % 32) = 25) do={ :set DoDowngrade true; } else={ :put "Canceled..."; @@ -61,7 +61,7 @@ $ScriptLock $0; $LogPrintExit2 warning $0 ("Running backup script " . $ScriptName . " before update failed!") false; :if ([ $ScriptFromTerminal $0 ] = true) do={ :put "Do you want to continue anyway? [y/N]"; - :if (([ :terminal inkey timeout=60 ] % 32) = 25) do={ + :if (([ / terminal inkey timeout=60 ] % 32) = 25) do={ $LogPrintExit2 info $0 ("User requested to continue anyway.") false; } else={ $LogPrintExit2 info $0 ("Canceled update...") true; @@ -80,7 +80,7 @@ $ScriptLock $0; :if ([ $ScriptFromTerminal $0 ] = true) do={ :put "Do you want to (s)chedule reboot or (r)eboot now? [s/R]"; - :if (([ :terminal inkey timeout=60 ] % 32) = 19) do={ + :if (([ / terminal inkey timeout=60 ] % 32) = 19) do={ / system scheduler add name="reboot-for-update" start-time=03:00:00 interval=1d \ on-event=(":global RandomDelay; \$RandomDelay 3600; " . \ "/ system scheduler remove reboot-for-update; / system reboot;"); From b2f45c03501b8f1ff446ec770c05fefcfa36d0ef Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Thu, 3 Feb 2022 14:29:37 +0100 Subject: [PATCH 09/31] doc/packages-update: link backup-cloud (cherry picked from commit dd19aea3628471ce54fefa30913879322f20e63a) --- doc/packages-update.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/packages-update.md b/doc/packages-update.md index ac693016..309a3941 100644 --- a/doc/packages-update.md +++ b/doc/packages-update.md @@ -41,6 +41,7 @@ See also -------- * [Notify on RouterOS update](check-routeros-update.md) +* [Upload backup to Mikrotik cloud](backup-cloud.md) * [Send backup via e-mail](backup-email.md) * [Upload backup to server](backup-upload.md) From 8d49babb0114ad55ec3094f7d9cec2f1bfea43be Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 8 Feb 2022 17:39:53 +0100 Subject: [PATCH 10/31] doc/netwatch-notify: add sections (cherry picked from commit 42c203291a7db814be00f40caddb6980632358fa) --- doc/netwatch-notify.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/netwatch-notify.md b/doc/netwatch-notify.md index 78a0eedf..9b504f7f 100644 --- a/doc/netwatch-notify.md +++ b/doc/netwatch-notify.md @@ -38,6 +38,8 @@ The hosts to be checked have to be added to netwatch with specific comment: / tool netwatch add comment="notify, hostname=example.com" host=[ :resolve "example.com" ]; +### Hooks + It is possible to run an up hook command (`up-hook`) or down hook command (`down-hook`) when a notification is triggered. This has to be added in comment, note that some characters need extra escaping: @@ -48,10 +50,14 @@ Also there is a `pre-down-hook` that fires at two thirds of failed checks required for the notification. The idea is to fix the issue before a notification is sent. +### Count threshould + The count threshould (default is 5 checks) is configurable as well: / tool netwatch add comment="notify, hostname=example.com, count=10" host=104.18.144.11; +### Parents & dependencies + If the host is behind another checked host add a dependency, this will suppress notification if the parent host is down: @@ -61,6 +67,8 @@ suppress notification if the parent host is down: Note that every configured parent in a chain increases the check count threshould by one. +### Update from DNS + The host address can be updated dynamically. Give extra parameter `resolve` with a resolvable name: From c03da561cdf7cf6f47de79772749ef459f6ee495 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Thu, 3 Feb 2022 13:51:40 +0100 Subject: [PATCH 11/31] netwatch-notify: allow to suppress notification on host down (cherry picked from commit c6e581d4f90c9bea0adf405685aa634e264d1f3b) --- doc/netwatch-notify.md | 10 ++++++++++ global-config | 2 +- global-config-overlay | 2 +- global-config.changes | 1 + global-functions | 2 +- netwatch-notify | 16 +++++++++------- 6 files changed, 23 insertions(+), 10 deletions(-) diff --git a/doc/netwatch-notify.md b/doc/netwatch-notify.md index 9b504f7f..dc107f23 100644 --- a/doc/netwatch-notify.md +++ b/doc/netwatch-notify.md @@ -78,6 +78,16 @@ But be warned: Dynamic updates will probably cause issues if the name has more than one record in dns - a high rate of configuration changes (and flash writes) at least. +### No notification on host down + +Also suppressing the notification on host down is possible with parameter +`no-down-notification`. This may be desired for devices that are usually +powered off, but accessibility is of interest. + + / tool netwatch add comment="notify, hostname=printer, no-down-notification" host=10.0.0.30; + +Go and get your coffee β˜•οΈ before sending the print job. + Also notification settings are required for e-mail, matrix and/or telegram. Tips & Tricks diff --git a/global-config b/global-config index 75fbba41..5f0f4dbf 100644 --- a/global-config +++ b/global-config @@ -8,7 +8,7 @@ # Make sure all configuration properties are up to date and this # value is in sync with value in script 'global-functions'! -:global GlobalConfigVersion 75; +:global GlobalConfigVersion 76; # This is used for DNS and backup file. :global Domain "example.com"; diff --git a/global-config-overlay b/global-config-overlay index c443bead..dfa2b99c 100644 --- a/global-config-overlay +++ b/global-config-overlay @@ -8,7 +8,7 @@ # Make sure all configuration properties are up to date and this # value is in sync with value in script 'global-functions'! # Comment or remove to disable news and change notifications. -:global GlobalConfigVersion 75; +:global GlobalConfigVersion 76; # Use branch routeros-v6 with RouterOS v6: :global ScriptUpdatesUrlSuffix "\?h=routeros-v6"; diff --git a/global-config.changes b/global-config.changes index 6f0e2f72..37aa0741 100644 --- a/global-config.changes +++ b/global-config.changes @@ -79,6 +79,7 @@ 73="Renamed backup scripts ('cloud-backup' -> 'backup-cloud', 'email-backup' -> 'backup-email', 'upload-backup' -> 'backup-upload')."; 74="Extended 'hotspot-to-wpa', it can now read additional configuration from templates and hotspot users."; 75="You are using the branch 'routeros-v6', well done."; + 76="Added an option to suppress notifications on host down with 'netwatch-notify'."; }; # Migration steps to be applied on script updates diff --git a/global-functions b/global-functions index 70f10778..68d82504 100644 --- a/global-functions +++ b/global-functions @@ -8,7 +8,7 @@ # https://git.eworm.de/cgit/routeros-scripts/about/ # expected configuration version -:global ExpectedConfigVersion 75; +:global ExpectedConfigVersion 76; # global variables not to be changed by user :global GlobalFunctionsReady false; diff --git a/netwatch-notify b/netwatch-notify index ae89cfb2..e82cea69 100644 --- a/netwatch-notify +++ b/netwatch-notify @@ -122,10 +122,10 @@ $ScriptLock $0; :set Parent ($NetwatchNotify->$Parent->"parent"); } } - $LogPrintExit2 info $0 ("Host " . $HostName . " (" . $HostVal->"host" . ") is down for " . \ - $Metric->"count" . " checks, " . [ $IfThenElse ($ParentNotified = false) [ $IfThenElse \ - ($Metric->"notified" = true) ("already notified.") ($Count - $Metric->"count" . " to go.") ] \ - ("parent host " . $Parent . " is down.") ]) false; + $LogPrintExit2 [ $IfThenElse ($HostInfo->"no-down-notification" != true) info debug ] $0 \ + ("Host " . $HostName . " (" . $HostVal->"host" . ") is down for " . $Metric->"count" . " checks, " . \ + [ $IfThenElse ($ParentNotified = false) [ $IfThenElse ($Metric->"notified" = true) ("already notified.") \ + ($Count - $Metric->"count" . " to go.") ] ("parent host " . $Parent . " is down.") ]) false; :if ((($Count * 2) - ($Metric->"count" * 3)) / 2 = 0 && [ :typeof ($HostInfo->"pre-down-hook") ] = "str") do={ $NetwatchNotifyHook $HostName "pre-down" ($HostInfo->"pre-down-hook"); } @@ -134,9 +134,11 @@ $ScriptLock $0; :if ([ :typeof ($HostInfo->"down-hook") ] = "str") do={ :set Message ($Message . "\n\n" . [ $NetwatchNotifyHook $HostName "down" ($HostInfo->"down-hook") ]); } - $SendNotification2 ({ origin=$0; \ - subject=([ $SymbolForNotification "cross-mark" ] . "Netwatch Notify: " . $HostName . " down"); \ - message=$Message }); + :if ($HostInfo->"no-down-notification" != true) do={ + $SendNotification2 ({ origin=$0; \ + subject=([ $SymbolForNotification "cross-mark" ] . "Netwatch Notify: " . $HostName . " down"); \ + message=$Message }); + } :set ($Metric->"notified") true; } } From 0c607a8f9ce7ed9d33df775f03b0292787d9326f Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 7 Feb 2022 21:46:10 +0100 Subject: [PATCH 12/31] netwatch-notify: nest conditions The logic here was right, but RouterOS runs the checks simultaneously. This caused delays even if no resolving was needed. Nesting the checks fixes this. (cherry picked from commit 0b46c508dc8f76955dd528900882b54c07b62ef3) --- netwatch-notify | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/netwatch-notify b/netwatch-notify index e82cea69..34a9e8fe 100644 --- a/netwatch-notify +++ b/netwatch-notify @@ -66,21 +66,23 @@ $ScriptLock $0; :set $Metric ($NetwatchNotify->$HostName); } - :if ([ :typeof ($HostInfo->"resolve") ] = "str" && [ $DNSIsResolving ] = true) do={ - :do { - :local Resolve [ :resolve ($HostInfo->"resolve") ]; - :if ($Resolve != $HostVal->"host") do={ - $LogPrintExit2 info $0 ("Name '" . $HostInfo->"resolve" . [ $IfThenElse ($HostInfo->"resolve" != \ - $HostInfo->"hostname") ("' for host '" . $HostInfo->"hostname") "" ] . \ - "' resolves to different address " . $Resolve . ", updating.") false; - / tool netwatch set host=$Resolve $Host; - :set ($Metric->"resolve-failed") false; - } - } on-error={ - :if ($Metric->"resolve-failed" != true) do={ - $LogPrintExit2 warning $0 ("Resolving name '" . $HostInfo->"resolve" . [ $IfThenElse ($HostInfo->"resolve" != \ - $HostInfo->"hostname") ("' for host '" . $HostInfo->"hostname") "" ] . "' failed.") false; - :set ($Metric->"resolve-failed") true; + :if ([ :typeof ($HostInfo->"resolve") ] = "str") do={ + :if ([ $DNSIsResolving ] = true) do={ + :do { + :local Resolve [ :resolve ($HostInfo->"resolve") ]; + :if ($Resolve != $HostVal->"host") do={ + $LogPrintExit2 info $0 ("Name '" . $HostInfo->"resolve" . [ $IfThenElse ($HostInfo->"resolve" != \ + $HostInfo->"hostname") ("' for host '" . $HostInfo->"hostname") "" ] . \ + "' resolves to different address " . $Resolve . ", updating.") false; + / tool netwatch set host=$Resolve $Host; + :set ($Metric->"resolve-failed") false; + } + } on-error={ + :if ($Metric->"resolve-failed" != true) do={ + $LogPrintExit2 warning $0 ("Resolving name '" . $HostInfo->"resolve" . [ $IfThenElse ($HostInfo->"resolve" != \ + $HostInfo->"hostname") ("' for host '" . $HostInfo->"hostname") "" ] . "' failed.") false; + :set ($Metric->"resolve-failed") true; + } } } } From c95e8161485ac47aa3c4f65efe99f335cf330d46 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 7 Feb 2022 09:58:53 +0100 Subject: [PATCH 13/31] netwatch-dns: flush cache on configuration change (cherry picked from commit a47f5723cc4cdd287d36aaffd7619c17494f9345) --- netwatch-dns | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/netwatch-dns b/netwatch-dns index e731d953..e2fcfa31 100644 --- a/netwatch-dns +++ b/netwatch-dns @@ -43,12 +43,14 @@ $ScriptLock $0; :if ($DnsServers != $DnsCurrent) do={ $LogPrintExit2 info $0 ("Updating DNS servers: " . [ :tostr $DnsServers ]) false; / ip dns set servers=$DnsServers; + / ip dns cache flush; } } else={ :if ([ :len $DnsFallback ] > 0) do={ :if ($DnsFallback != $DnsCurrent) do={ $LogPrintExit2 info $0 ("Updating DNS servers to fallback: " . [ :tostr $DnsFallback ]) false; / ip dns set servers=$DnsFallback; + / ip dns cache flush; } } } @@ -69,10 +71,12 @@ $ScriptLock $0; :if ($DohServer != $DohCurrent) do={ $LogPrintExit2 info $0 ("Updating DoH server: " . $DohServer) false; / ip dns set use-doh-server=$DohServer; + / ip dns cache flush; } } else={ :if ($DohCurrent != "") do={ $LogPrintExit2 info $0 ("DoH server (" . $DohCurrent . ") is down, disabling.") false; / ip dns set use-doh-server=""; + / ip dns cache flush; } } From 32cc55f7d2570e80ab270ae6e5ce97e3c1bc7644 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 2 Feb 2022 21:10:10 +0100 Subject: [PATCH 14/31] introduce firmware-upgrade-reboot (cherry picked from commit 3c358980cb416c61419a0aaa384ab1db1dab8d29) --- README.md | 1 + doc/check-routeros-update.md | 1 + doc/firmware-upgrade-reboot.md | 36 ++++++++++++++++++++++++++++++++++ doc/packages-update.md | 1 + firmware-upgrade-reboot | 32 ++++++++++++++++++++++++++++++ global-config | 2 +- global-config-overlay | 2 +- global-config.changes | 1 + global-functions | 2 +- 9 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 doc/firmware-upgrade-reboot.md create mode 100644 firmware-upgrade-reboot diff --git a/README.md b/README.md index 990aef9d..70d3ff5b 100644 --- a/README.md +++ b/README.md @@ -204,6 +204,7 @@ Available scripts * [Use wireless network with daily psk](doc/daily-psk.md) * [Comment DHCP leases with info from access list](doc/dhcp-lease-comment.md) * [Create DNS records for DHCP leases](doc/dhcp-to-dns.md) +* [Automatically upgrade firmware and reboot](doc/firmware-upgrade-reboot.md) * [Wait for global functions und modules](doc/global-wait.md) * [Send GPS position to server](doc/gps-track.md) * [Use WPA2 network with hotspot credentials](doc/hotspot-to-wpa.md) diff --git a/doc/check-routeros-update.md b/doc/check-routeros-update.md index 9385341d..d55fa089 100644 --- a/doc/check-routeros-update.md +++ b/doc/check-routeros-update.md @@ -61,6 +61,7 @@ Installing script [packages-update](packages-update.md) gives extra options. See also -------- +* [Automatically upgrade firmware and reboot](firmware-upgrade-reboot.md) * [Manage system update](packages-update.md) --- diff --git a/doc/firmware-upgrade-reboot.md b/doc/firmware-upgrade-reboot.md new file mode 100644 index 00000000..6afc40e3 --- /dev/null +++ b/doc/firmware-upgrade-reboot.md @@ -0,0 +1,36 @@ +Automatically upgrade firmware and reboot +========================================= + +[β—€ Go back to main README](../README.md) + +πŸ›ˆ This script can not be used on its own but requires the base installation. +See [main README](../README.md) for details. + +Description +----------- + +RouterOS and firmware are upgraded separately, activating the latter +requires an extra reboot. This script handles upgrade and reboot. + +⚠️ **Warning**: This *should* be bullet proof, but I can not guarantee. In +worst case it has potential to cause a boot loop, so handle with care! + +Requirements and installation +----------------------------- + +Just install the script and create a scheduler: + + $ScriptInstallUpdate firmware-upgrade-reboot; + / system scheduler add name=firmware-upgrade-reboot on-event="/ system script run firmware-upgrade-reboot;" start-time=startup; + +Enjoy firmware being up to date and in sync with RouterOS. + +See also +-------- + +* [Notify on RouterOS update](check-routeros-update.md) +* [Manage system update](packages-update.md) + +--- +[β—€ Go back to main README](../README.md) +[β–² Go back to top](#top) diff --git a/doc/packages-update.md b/doc/packages-update.md index 309a3941..a56f68ef 100644 --- a/doc/packages-update.md +++ b/doc/packages-update.md @@ -44,6 +44,7 @@ See also * [Upload backup to Mikrotik cloud](backup-cloud.md) * [Send backup via e-mail](backup-email.md) * [Upload backup to server](backup-upload.md) +* [Automatically upgrade firmware and reboot](firmware-upgrade-reboot.md) --- [β—€ Go back to main README](../README.md) diff --git a/firmware-upgrade-reboot b/firmware-upgrade-reboot new file mode 100644 index 00000000..b3cb6214 --- /dev/null +++ b/firmware-upgrade-reboot @@ -0,0 +1,32 @@ +#!rsc by RouterOS +# RouterOS script: firmware-upgrade-reboot +# Copyright (c) 2022 Christian Hesse +# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md +# +# install firmware upgrade, and reboot +# https://git.eworm.de/cgit/routeros-scripts/about/doc/firmware-upgrade-reboot.md + +:local 0 "firmware-upgrade-reboot"; +:global GlobalFunctionsReady; +:while ($GlobalFunctionsReady != true) do={ :delay 500ms; } + +:global LogPrintExit2; + +:local RouterBoard [ / system routerboard get ]; +:if ($RouterBoard->"current-firmware" = $RouterBoard->"upgrade-firmware") do={ + $LogPrintExit2 info $0 ("Firmware is already up to date.") 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; +} + +:while ([ :len [ / log find where topics=({"system";"info";"critical"}) \ + message="Firmware upgraded successfully, please reboot for changes to take effect!" ] ] = 0) do={ + :delay 1s; +} + +$LogPrintExit2 info $0 ("Firmware upgrade successful, rebooting.") false; +/ system reboot; diff --git a/global-config b/global-config index 5f0f4dbf..0554cdb7 100644 --- a/global-config +++ b/global-config @@ -8,7 +8,7 @@ # Make sure all configuration properties are up to date and this # value is in sync with value in script 'global-functions'! -:global GlobalConfigVersion 76; +:global GlobalConfigVersion 77; # This is used for DNS and backup file. :global Domain "example.com"; diff --git a/global-config-overlay b/global-config-overlay index dfa2b99c..9075df50 100644 --- a/global-config-overlay +++ b/global-config-overlay @@ -8,7 +8,7 @@ # Make sure all configuration properties are up to date and this # value is in sync with value in script 'global-functions'! # Comment or remove to disable news and change notifications. -:global GlobalConfigVersion 76; +:global GlobalConfigVersion 77; # Use branch routeros-v6 with RouterOS v6: :global ScriptUpdatesUrlSuffix "\?h=routeros-v6"; diff --git a/global-config.changes b/global-config.changes index 37aa0741..d8cd39d8 100644 --- a/global-config.changes +++ b/global-config.changes @@ -80,6 +80,7 @@ 74="Extended 'hotspot-to-wpa', it can now read additional configuration from templates and hotspot users."; 75="You are using the branch 'routeros-v6', well done."; 76="Added an option to suppress notifications on host down with 'netwatch-notify'."; + 77="Introduced new script 'firmware-upgrade-reboot'. Handle with care!"; }; # Migration steps to be applied on script updates diff --git a/global-functions b/global-functions index 68d82504..0a0b1ffa 100644 --- a/global-functions +++ b/global-functions @@ -8,7 +8,7 @@ # https://git.eworm.de/cgit/routeros-scripts/about/ # expected configuration version -:global ExpectedConfigVersion 76; +:global ExpectedConfigVersion 77; # global variables not to be changed by user :global GlobalFunctionsReady false; From 943b60bfe38139e617b8f8eb58eccd0508d8f51a Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 7 Feb 2022 14:28:09 +0100 Subject: [PATCH 15/31] update list of contributors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thanks a lot and please enjoy firmware-upgrade-reboot! 😊 (cherry picked from commit a50d9d30e3fbf6b4236f99cb40df656206492f8f) --- CONTRIBUTIONS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTIONS.md b/CONTRIBUTIONS.md index 33f82f95..ba4dfed2 100644 --- a/CONTRIBUTIONS.md +++ b/CONTRIBUTIONS.md @@ -22,6 +22,7 @@ Add yourself to the list, * Abdul Mannan Abbasi * Andrew Cox * Christoph Boss (@Kampfwurst) +* Devin Dean (@dd2594gh) * Klaus Michael RΓΌbsam * Linux-Schmie.de Michael Gisbers * Manuel Kuhn From 3dd34523037ce356092eee59bc35acaa8d7020ed Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Thu, 10 Feb 2022 11:05:21 +0100 Subject: [PATCH 16/31] global-functions: $MkDir: do not act without directory (cherry picked from commit 7b48b25c271111570d27708ceac437e24f05e6fe) --- global-functions | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/global-functions b/global-functions index 0a0b1ffa..9721b8b5 100644 --- a/global-functions +++ b/global-functions @@ -510,6 +510,10 @@ :set Dir [ $CleanFilePath $Dir ]; + :if ($Dir = "") do={ + :return true; + } + :if ([ :len [ / file find where name=$Dir type="directory" ] ] = 1) do={ :return true; } From b60dcb5fad6181692a057a541a47cb1bc8ef2671 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 11 Feb 2022 00:19:41 +0100 Subject: [PATCH 17/31] firmware-upgrade-reboot: add a delay before reboot Looks like my timing was too good... Upgrade and reboot happened too fast, so device reported: system;error;critical router was rebooted without proper shutdown Let's try something smart... Delay the reboot by the amount of uptime, and hope all devices - slow and powerful - are happy. (cherry picked from commit 3f8e835233d8d9ac6f31572a1a115eb73c46ff92) --- firmware-upgrade-reboot | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/firmware-upgrade-reboot b/firmware-upgrade-reboot index b3cb6214..a3a25dbe 100644 --- a/firmware-upgrade-reboot +++ b/firmware-upgrade-reboot @@ -28,5 +28,10 @@ :delay 1s; } +:local Uptime [ / system resource get uptime ]; +:if ($Uptime < 1m) do={ + :delay $Uptime; +} + $LogPrintExit2 info $0 ("Firmware upgrade successful, rebooting.") false; / system reboot; From a9805365d22ee32539b26509df21a0b8316d8ecc Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 11 Feb 2022 23:35:02 +0100 Subject: [PATCH 18/31] README: put hint into block quote (cherry picked from commit a5e421faebe8ac82c1ade73f8c1ea26ef728030b) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 70d3ff5b..fae49a75 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,8 @@ RouterOS script distribution](https://www.youtube.com/watch?v=B9neG3oAhcY) including demonstation recorded live at [MUM Europe 2019](https://mum.mikrotik.com/2019/EU/) in Vienna. -*Be warned!* Some details changed. So see the presentation, then follow -the steps below for up-to-date commands. +> ⚠️ **Warning**: Some details changed. So see the presentation, then follow +> the steps below for up-to-date commands. ### The long way in detail From 2f965630fac97cce6d46614818e3cebca10fc2f7 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 11 Feb 2022 23:37:29 +0100 Subject: [PATCH 19/31] INITIAL-COMMANDS: put hint into block quote (cherry picked from commit 4b16dc06c4b1bcd7c7ec5e3849736765799e32e6) --- INITIAL-COMMANDS.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/INITIAL-COMMANDS.md b/INITIAL-COMMANDS.md index 9a8a1293..2cea9a97 100644 --- a/INITIAL-COMMANDS.md +++ b/INITIAL-COMMANDS.md @@ -3,8 +3,9 @@ Initial commands [β—€ Go back to main README](README.md) -These command are inteneded for initial setup. If you are not aware of the -procedure please follow [the long way in detail](README.md#the-long-way-in-detail). +> ⚠️ **Warning**: These command are inteneded for initial setup. If you are +> not aware of the procedure please follow +> [the long way in detail](README.md#the-long-way-in-detail). One extra step is required if you run RouterOS v6: From 5f52e3e3f47706fa3edced5521796c38512d2aa3 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 11 Feb 2022 23:34:39 +0100 Subject: [PATCH 20/31] doc: put hints into block quote (cherry picked from commit 9e91ed56aaed77c6776ef95ebed791c40d7f21d2) --- doc/accesslist-duplicates.md | 4 ++-- doc/backup-cloud.md | 4 ++-- doc/backup-email.md | 5 ++--- doc/backup-upload.md | 4 ++-- doc/capsman-download-packages.md | 4 ++-- doc/capsman-rolling-upgrade.md | 4 ++-- doc/certificate-renew-issued.md | 4 ++-- doc/check-certificates.md | 4 ++-- doc/check-health.md | 4 ++-- doc/check-lte-firmware-upgrade.md | 4 ++-- doc/check-routeros-update.md | 4 ++-- doc/collect-wireless-mac.md | 4 ++-- doc/daily-psk.md | 4 ++-- doc/dhcp-lease-comment.md | 4 ++-- doc/dhcp-to-dns.md | 4 ++-- doc/firmware-upgrade-reboot.md | 8 ++++---- doc/global-wait.md | 4 ++-- doc/gps-track.md | 4 ++-- doc/hotspot-to-wpa.md | 4 ++-- doc/ipsec-to-dns.md | 4 ++-- doc/ipv6-update.md | 4 ++-- doc/lease-script.md | 4 ++-- doc/log-forward.md | 4 ++-- doc/mode-button.md | 4 ++-- doc/netwatch-dns.md | 4 ++-- doc/netwatch-notify.md | 4 ++-- doc/ospf-to-leds.md | 4 ++-- doc/packages-update.md | 4 ++-- doc/ppp-on-up.md | 4 ++-- doc/rotate-ntp.md | 4 ++-- doc/sms-action.md | 4 ++-- doc/sms-forward.md | 4 ++-- doc/update-gre-address.md | 4 ++-- doc/update-tunnelbroker.md | 4 ++-- 34 files changed, 70 insertions(+), 71 deletions(-) diff --git a/doc/accesslist-duplicates.md b/doc/accesslist-duplicates.md index e052c20a..dcf20443 100644 --- a/doc/accesslist-duplicates.md +++ b/doc/accesslist-duplicates.md @@ -3,8 +3,8 @@ Find and remove access list duplicates [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/backup-cloud.md b/doc/backup-cloud.md index 117e4c7d..92bf2f70 100644 --- a/doc/backup-cloud.md +++ b/doc/backup-cloud.md @@ -3,8 +3,8 @@ Upload backup to Mikrotik cloud [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/backup-email.md b/doc/backup-email.md index be36cb4f..51ac9a45 100644 --- a/doc/backup-email.md +++ b/doc/backup-email.md @@ -3,8 +3,8 @@ Send backup via e-mail [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- @@ -12,7 +12,6 @@ Description This script sends binary backup (`/ system backup save`) and complete configuration export (`/ export terse`) via e-mail. - Requirements and installation ----------------------------- diff --git a/doc/backup-upload.md b/doc/backup-upload.md index 212b16cb..d54b9bd2 100644 --- a/doc/backup-upload.md +++ b/doc/backup-upload.md @@ -3,8 +3,8 @@ Upload backup to server [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/capsman-download-packages.md b/doc/capsman-download-packages.md index cdbd72b3..8581cccc 100644 --- a/doc/capsman-download-packages.md +++ b/doc/capsman-download-packages.md @@ -3,8 +3,8 @@ Download packages for CAP upgrade from CAPsMAN [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/capsman-rolling-upgrade.md b/doc/capsman-rolling-upgrade.md index 92eafa69..fd892603 100644 --- a/doc/capsman-rolling-upgrade.md +++ b/doc/capsman-rolling-upgrade.md @@ -3,8 +3,8 @@ Run rolling CAP upgrades from CAPsMAN [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/certificate-renew-issued.md b/doc/certificate-renew-issued.md index 63d64085..c7c46354 100644 --- a/doc/certificate-renew-issued.md +++ b/doc/certificate-renew-issued.md @@ -3,8 +3,8 @@ Renew locally issued certificates [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/check-certificates.md b/doc/check-certificates.md index 44bee7a3..2869b258 100644 --- a/doc/check-certificates.md +++ b/doc/check-certificates.md @@ -3,8 +3,8 @@ Renew certificates and notify on expiration [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/check-health.md b/doc/check-health.md index 8e271d6c..358cc084 100644 --- a/doc/check-health.md +++ b/doc/check-health.md @@ -3,8 +3,8 @@ Notify about health state [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/check-lte-firmware-upgrade.md b/doc/check-lte-firmware-upgrade.md index ef68bcb5..9729aa18 100644 --- a/doc/check-lte-firmware-upgrade.md +++ b/doc/check-lte-firmware-upgrade.md @@ -3,8 +3,8 @@ Notify on LTE firmware upgrade [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/check-routeros-update.md b/doc/check-routeros-update.md index d55fa089..ccf9bf24 100644 --- a/doc/check-routeros-update.md +++ b/doc/check-routeros-update.md @@ -3,8 +3,8 @@ Notify on RouterOS update [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/collect-wireless-mac.md b/doc/collect-wireless-mac.md index 380c89f3..94b53b83 100644 --- a/doc/collect-wireless-mac.md +++ b/doc/collect-wireless-mac.md @@ -3,8 +3,8 @@ Collect MAC addresses in wireless access list [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/daily-psk.md b/doc/daily-psk.md index 105737a8..c1a09e4b 100644 --- a/doc/daily-psk.md +++ b/doc/daily-psk.md @@ -3,8 +3,8 @@ Use wireless network with daily psk [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/dhcp-lease-comment.md b/doc/dhcp-lease-comment.md index 0b8ceb2a..3d19bdfa 100644 --- a/doc/dhcp-lease-comment.md +++ b/doc/dhcp-lease-comment.md @@ -3,8 +3,8 @@ Comment DHCP leases with info from access list [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/dhcp-to-dns.md b/doc/dhcp-to-dns.md index 60eb29d0..1982fa36 100644 --- a/doc/dhcp-to-dns.md +++ b/doc/dhcp-to-dns.md @@ -3,8 +3,8 @@ Create DNS records for DHCP leases [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/firmware-upgrade-reboot.md b/doc/firmware-upgrade-reboot.md index 6afc40e3..7ca98faf 100644 --- a/doc/firmware-upgrade-reboot.md +++ b/doc/firmware-upgrade-reboot.md @@ -3,8 +3,8 @@ Automatically upgrade firmware and reboot [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- @@ -12,8 +12,8 @@ Description RouterOS and firmware are upgraded separately, activating the latter requires an extra reboot. This script handles upgrade and reboot. -⚠️ **Warning**: This *should* be bullet proof, but I can not guarantee. In -worst case it has potential to cause a boot loop, so handle with care! +> ⚠️ **Warning**: This *should* be bullet proof, but I can not guarantee. In +> worst case it has potential to cause a boot loop, so handle with care! Requirements and installation ----------------------------- diff --git a/doc/global-wait.md b/doc/global-wait.md index 2d9dad31..15b11f6c 100644 --- a/doc/global-wait.md +++ b/doc/global-wait.md @@ -3,8 +3,8 @@ Wait for global functions and modules [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/gps-track.md b/doc/gps-track.md index e4e553c9..d6ebe51a 100644 --- a/doc/gps-track.md +++ b/doc/gps-track.md @@ -3,8 +3,8 @@ Send GPS position to server [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/hotspot-to-wpa.md b/doc/hotspot-to-wpa.md index f3dccdba..a29232d8 100644 --- a/doc/hotspot-to-wpa.md +++ b/doc/hotspot-to-wpa.md @@ -3,8 +3,8 @@ Use WPA2 network with hotspot credentials [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/ipsec-to-dns.md b/doc/ipsec-to-dns.md index 9a0f4865..d293b2c5 100644 --- a/doc/ipsec-to-dns.md +++ b/doc/ipsec-to-dns.md @@ -3,8 +3,8 @@ Create DNS records for IPSec peers [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/ipv6-update.md b/doc/ipv6-update.md index 994ea23b..8290e9d4 100644 --- a/doc/ipv6-update.md +++ b/doc/ipv6-update.md @@ -3,8 +3,8 @@ Update configuration on IPv6 prefix change [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/lease-script.md b/doc/lease-script.md index 3d8a29bc..78aeb368 100644 --- a/doc/lease-script.md +++ b/doc/lease-script.md @@ -3,8 +3,8 @@ Run other scripts on DHCP lease [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/log-forward.md b/doc/log-forward.md index e3603b5e..b7ca016a 100644 --- a/doc/log-forward.md +++ b/doc/log-forward.md @@ -3,8 +3,8 @@ Forward log messages via notification [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/mode-button.md b/doc/mode-button.md index 3cea7203..49a40bce 100644 --- a/doc/mode-button.md +++ b/doc/mode-button.md @@ -3,8 +3,8 @@ Mode button with multiple presses [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/netwatch-dns.md b/doc/netwatch-dns.md index 96710a2c..adb35acf 100644 --- a/doc/netwatch-dns.md +++ b/doc/netwatch-dns.md @@ -3,8 +3,8 @@ Manage DNS and DoH servers from netwatch [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/netwatch-notify.md b/doc/netwatch-notify.md index dc107f23..b111d596 100644 --- a/doc/netwatch-notify.md +++ b/doc/netwatch-notify.md @@ -3,8 +3,8 @@ Notify on host up and down [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/ospf-to-leds.md b/doc/ospf-to-leds.md index 908fb565..06c3b4b2 100644 --- a/doc/ospf-to-leds.md +++ b/doc/ospf-to-leds.md @@ -3,8 +3,8 @@ Visualize OSPF state via LEDs [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/packages-update.md b/doc/packages-update.md index a56f68ef..33f7b994 100644 --- a/doc/packages-update.md +++ b/doc/packages-update.md @@ -3,8 +3,8 @@ Manage system update [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/ppp-on-up.md b/doc/ppp-on-up.md index 7514f822..c0f7aee5 100644 --- a/doc/ppp-on-up.md +++ b/doc/ppp-on-up.md @@ -3,8 +3,8 @@ Run scripts on ppp connection [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/rotate-ntp.md b/doc/rotate-ntp.md index c151db24..49231ddf 100644 --- a/doc/rotate-ntp.md +++ b/doc/rotate-ntp.md @@ -3,8 +3,8 @@ Rotate NTP servers [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/sms-action.md b/doc/sms-action.md index e36d384d..d83fa804 100644 --- a/doc/sms-action.md +++ b/doc/sms-action.md @@ -3,8 +3,8 @@ Act on received SMS [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/sms-forward.md b/doc/sms-forward.md index 873ccac9..04c62a8d 100644 --- a/doc/sms-forward.md +++ b/doc/sms-forward.md @@ -3,8 +3,8 @@ Forward received SMS [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/update-gre-address.md b/doc/update-gre-address.md index e45e17a5..acd8f97b 100644 --- a/doc/update-gre-address.md +++ b/doc/update-gre-address.md @@ -3,8 +3,8 @@ Update GRE configuration with dynamic addresses [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- diff --git a/doc/update-tunnelbroker.md b/doc/update-tunnelbroker.md index caff9ff6..15d888ff 100644 --- a/doc/update-tunnelbroker.md +++ b/doc/update-tunnelbroker.md @@ -3,8 +3,8 @@ Update tunnelbroker configuration [β—€ Go back to main README](../README.md) -πŸ›ˆ This script can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> installation. See [main README](../README.md) for details. Description ----------- From 5e7735a507e1b447f542c1251a28982fe5b30130 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 11 Feb 2022 23:50:56 +0100 Subject: [PATCH 21/31] doc/early-errors: no site structure, hint only (cherry picked from commit f0b0951968bc865877c1f5b6607935490ba68033) --- doc/early-errors.md | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/doc/early-errors.md b/doc/early-errors.md index a16da7df..b3c68009 100644 --- a/doc/early-errors.md +++ b/doc/early-errors.md @@ -1,11 +1,2 @@ -Send notification with early errors -=================================== - -[β—€ Go back to main README](../README.md) - -This script has been replace. Please migrate to +This script has been replaced. Please migrate to [Forward log messages via notification](log-forward.md). - ---- -[β—€ Go back to main README](../README.md) -[β–² Go back to top](#top) From d1c9fe4dce55feb0a77dd90eb9046897a89f8a35 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Sat, 12 Feb 2022 13:05:56 +0100 Subject: [PATCH 22/31] =?UTF-8?q?doc:=20use=20another=20info=20icon:=20?= =?UTF-8?q?=F0=9F=9B=88=20->=20=E2=84=B9=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit cd2a7dcf8ce3324179768b48a785f24f0d53aa19) --- doc/accesslist-duplicates.md | 2 +- doc/backup-cloud.md | 2 +- doc/backup-email.md | 2 +- doc/backup-upload.md | 2 +- doc/capsman-download-packages.md | 2 +- doc/capsman-rolling-upgrade.md | 2 +- doc/certificate-renew-issued.md | 2 +- doc/check-certificates.md | 2 +- doc/check-health.md | 2 +- doc/check-lte-firmware-upgrade.md | 2 +- doc/check-routeros-update.md | 2 +- doc/collect-wireless-mac.md | 2 +- doc/daily-psk.md | 2 +- doc/dhcp-lease-comment.md | 2 +- doc/dhcp-to-dns.md | 2 +- doc/firmware-upgrade-reboot.md | 2 +- doc/global-wait.md | 2 +- doc/gps-track.md | 2 +- doc/hotspot-to-wpa.md | 2 +- doc/ipsec-to-dns.md | 2 +- doc/ipv6-update.md | 2 +- doc/lease-script.md | 2 +- doc/log-forward.md | 2 +- doc/mode-button.md | 2 +- doc/netwatch-dns.md | 2 +- doc/netwatch-notify.md | 2 +- doc/ospf-to-leds.md | 2 +- doc/packages-update.md | 2 +- doc/ppp-on-up.md | 2 +- doc/rotate-ntp.md | 2 +- doc/sms-action.md | 2 +- doc/sms-forward.md | 2 +- doc/update-gre-address.md | 2 +- doc/update-tunnelbroker.md | 2 +- 34 files changed, 34 insertions(+), 34 deletions(-) diff --git a/doc/accesslist-duplicates.md b/doc/accesslist-duplicates.md index dcf20443..db1e00a1 100644 --- a/doc/accesslist-duplicates.md +++ b/doc/accesslist-duplicates.md @@ -3,7 +3,7 @@ Find and remove access list duplicates [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/backup-cloud.md b/doc/backup-cloud.md index 92bf2f70..4df14fd9 100644 --- a/doc/backup-cloud.md +++ b/doc/backup-cloud.md @@ -3,7 +3,7 @@ Upload backup to Mikrotik cloud [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/backup-email.md b/doc/backup-email.md index 51ac9a45..e6bed51b 100644 --- a/doc/backup-email.md +++ b/doc/backup-email.md @@ -3,7 +3,7 @@ Send backup via e-mail [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/backup-upload.md b/doc/backup-upload.md index d54b9bd2..1e17d620 100644 --- a/doc/backup-upload.md +++ b/doc/backup-upload.md @@ -3,7 +3,7 @@ Upload backup to server [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/capsman-download-packages.md b/doc/capsman-download-packages.md index 8581cccc..9cee6e6e 100644 --- a/doc/capsman-download-packages.md +++ b/doc/capsman-download-packages.md @@ -3,7 +3,7 @@ Download packages for CAP upgrade from CAPsMAN [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/capsman-rolling-upgrade.md b/doc/capsman-rolling-upgrade.md index fd892603..34e3c91b 100644 --- a/doc/capsman-rolling-upgrade.md +++ b/doc/capsman-rolling-upgrade.md @@ -3,7 +3,7 @@ Run rolling CAP upgrades from CAPsMAN [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/certificate-renew-issued.md b/doc/certificate-renew-issued.md index c7c46354..d7c46768 100644 --- a/doc/certificate-renew-issued.md +++ b/doc/certificate-renew-issued.md @@ -3,7 +3,7 @@ Renew locally issued certificates [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/check-certificates.md b/doc/check-certificates.md index 2869b258..f6a4d22c 100644 --- a/doc/check-certificates.md +++ b/doc/check-certificates.md @@ -3,7 +3,7 @@ Renew certificates and notify on expiration [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/check-health.md b/doc/check-health.md index 358cc084..778c0802 100644 --- a/doc/check-health.md +++ b/doc/check-health.md @@ -3,7 +3,7 @@ Notify about health state [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/check-lte-firmware-upgrade.md b/doc/check-lte-firmware-upgrade.md index 9729aa18..a9da4a28 100644 --- a/doc/check-lte-firmware-upgrade.md +++ b/doc/check-lte-firmware-upgrade.md @@ -3,7 +3,7 @@ Notify on LTE firmware upgrade [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/check-routeros-update.md b/doc/check-routeros-update.md index ccf9bf24..766c2580 100644 --- a/doc/check-routeros-update.md +++ b/doc/check-routeros-update.md @@ -3,7 +3,7 @@ Notify on RouterOS update [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/collect-wireless-mac.md b/doc/collect-wireless-mac.md index 94b53b83..31207494 100644 --- a/doc/collect-wireless-mac.md +++ b/doc/collect-wireless-mac.md @@ -3,7 +3,7 @@ Collect MAC addresses in wireless access list [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/daily-psk.md b/doc/daily-psk.md index c1a09e4b..28baac0a 100644 --- a/doc/daily-psk.md +++ b/doc/daily-psk.md @@ -3,7 +3,7 @@ Use wireless network with daily psk [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/dhcp-lease-comment.md b/doc/dhcp-lease-comment.md index 3d19bdfa..8679bfae 100644 --- a/doc/dhcp-lease-comment.md +++ b/doc/dhcp-lease-comment.md @@ -3,7 +3,7 @@ Comment DHCP leases with info from access list [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/dhcp-to-dns.md b/doc/dhcp-to-dns.md index 1982fa36..245b4574 100644 --- a/doc/dhcp-to-dns.md +++ b/doc/dhcp-to-dns.md @@ -3,7 +3,7 @@ Create DNS records for DHCP leases [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/firmware-upgrade-reboot.md b/doc/firmware-upgrade-reboot.md index 7ca98faf..c913d8ef 100644 --- a/doc/firmware-upgrade-reboot.md +++ b/doc/firmware-upgrade-reboot.md @@ -3,7 +3,7 @@ Automatically upgrade firmware and reboot [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/global-wait.md b/doc/global-wait.md index 15b11f6c..2a7fbfaf 100644 --- a/doc/global-wait.md +++ b/doc/global-wait.md @@ -3,7 +3,7 @@ Wait for global functions and modules [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/gps-track.md b/doc/gps-track.md index d6ebe51a..3b9c94f3 100644 --- a/doc/gps-track.md +++ b/doc/gps-track.md @@ -3,7 +3,7 @@ Send GPS position to server [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/hotspot-to-wpa.md b/doc/hotspot-to-wpa.md index a29232d8..b4109791 100644 --- a/doc/hotspot-to-wpa.md +++ b/doc/hotspot-to-wpa.md @@ -3,7 +3,7 @@ Use WPA2 network with hotspot credentials [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/ipsec-to-dns.md b/doc/ipsec-to-dns.md index d293b2c5..349ae63d 100644 --- a/doc/ipsec-to-dns.md +++ b/doc/ipsec-to-dns.md @@ -3,7 +3,7 @@ Create DNS records for IPSec peers [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/ipv6-update.md b/doc/ipv6-update.md index 8290e9d4..ae4eb6af 100644 --- a/doc/ipv6-update.md +++ b/doc/ipv6-update.md @@ -3,7 +3,7 @@ Update configuration on IPv6 prefix change [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/lease-script.md b/doc/lease-script.md index 78aeb368..0ad67fbb 100644 --- a/doc/lease-script.md +++ b/doc/lease-script.md @@ -3,7 +3,7 @@ Run other scripts on DHCP lease [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/log-forward.md b/doc/log-forward.md index b7ca016a..3a0f3bea 100644 --- a/doc/log-forward.md +++ b/doc/log-forward.md @@ -3,7 +3,7 @@ Forward log messages via notification [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/mode-button.md b/doc/mode-button.md index 49a40bce..c1c059ef 100644 --- a/doc/mode-button.md +++ b/doc/mode-button.md @@ -3,7 +3,7 @@ Mode button with multiple presses [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/netwatch-dns.md b/doc/netwatch-dns.md index adb35acf..4fbfc2be 100644 --- a/doc/netwatch-dns.md +++ b/doc/netwatch-dns.md @@ -3,7 +3,7 @@ Manage DNS and DoH servers from netwatch [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/netwatch-notify.md b/doc/netwatch-notify.md index b111d596..c9917cbd 100644 --- a/doc/netwatch-notify.md +++ b/doc/netwatch-notify.md @@ -3,7 +3,7 @@ Notify on host up and down [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/ospf-to-leds.md b/doc/ospf-to-leds.md index 06c3b4b2..2fba33e4 100644 --- a/doc/ospf-to-leds.md +++ b/doc/ospf-to-leds.md @@ -3,7 +3,7 @@ Visualize OSPF state via LEDs [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/packages-update.md b/doc/packages-update.md index 33f7b994..0007acc3 100644 --- a/doc/packages-update.md +++ b/doc/packages-update.md @@ -3,7 +3,7 @@ Manage system update [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/ppp-on-up.md b/doc/ppp-on-up.md index c0f7aee5..ae58da5b 100644 --- a/doc/ppp-on-up.md +++ b/doc/ppp-on-up.md @@ -3,7 +3,7 @@ Run scripts on ppp connection [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/rotate-ntp.md b/doc/rotate-ntp.md index 49231ddf..775b977b 100644 --- a/doc/rotate-ntp.md +++ b/doc/rotate-ntp.md @@ -3,7 +3,7 @@ Rotate NTP servers [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/sms-action.md b/doc/sms-action.md index d83fa804..84427746 100644 --- a/doc/sms-action.md +++ b/doc/sms-action.md @@ -3,7 +3,7 @@ Act on received SMS [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/sms-forward.md b/doc/sms-forward.md index 04c62a8d..417f4621 100644 --- a/doc/sms-forward.md +++ b/doc/sms-forward.md @@ -3,7 +3,7 @@ Forward received SMS [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/update-gre-address.md b/doc/update-gre-address.md index acd8f97b..c19e138b 100644 --- a/doc/update-gre-address.md +++ b/doc/update-gre-address.md @@ -3,7 +3,7 @@ Update GRE configuration with dynamic addresses [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description diff --git a/doc/update-tunnelbroker.md b/doc/update-tunnelbroker.md index 15d888ff..9dd7f196 100644 --- a/doc/update-tunnelbroker.md +++ b/doc/update-tunnelbroker.md @@ -3,7 +3,7 @@ Update tunnelbroker configuration [β—€ Go back to main README](../README.md) -> πŸ›ˆ **Info**: This script can not be used on its own but requires the base +> ℹ️ **Info**: This script can not be used on its own but requires the base > installation. See [main README](../README.md) for details. Description From 798fd7cc86eeac7e460a6dd670fdfdfeabdfe754 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Sat, 12 Feb 2022 13:15:33 +0100 Subject: [PATCH 23/31] doc/mod: put hints into block quote, update info icon, fix links (cherry picked from commit fd36241be649989e7b26348db31a3d3461888a1c) --- doc/mod/bridge-port-to.md | 8 ++++---- doc/mod/bridge-port-vlan.md | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/mod/bridge-port-to.md b/doc/mod/bridge-port-to.md index 5b2817be..02d1e8da 100644 --- a/doc/mod/bridge-port-to.md +++ b/doc/mod/bridge-port-to.md @@ -1,10 +1,10 @@ Manage ports in bridge ====================== -[β—€ Go back to main README](../README.md) +[β—€ Go back to main README](../../README.md) -πŸ›ˆ This module can not be used on its own but requires the base installation. -See [main README](../README.md) for details. +> ℹ️️ **Info**: This module can not be used on its own but requires the base +> installation. See [main README](../../README.md) for details. Description ----------- @@ -77,5 +77,5 @@ See also * [Manage VLANs on bridge ports](bridge-port-vlan.md) --- -[β—€ Go back to main README](../README.md) +[β—€ Go back to main README](../../README.md) [β–² Go back to top](#top) diff --git a/doc/mod/bridge-port-vlan.md b/doc/mod/bridge-port-vlan.md index 67dd04d6..290826ee 100644 --- a/doc/mod/bridge-port-vlan.md +++ b/doc/mod/bridge-port-vlan.md @@ -3,8 +3,8 @@ Manage VLANs on bridge ports [β—€ Go back to main README](../../README.md) -πŸ›ˆ This module can not be used on its own but requires the base installation. -See [main README](../../README.md) for details. +> ℹ️️ **Info**: This module can not be used on its own but requires the base +> installation. See [main README](../../README.md) for details. Description ----------- From 17b3e04d4141072a650b877ac601a6ac7fe0a800 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Sun, 20 Feb 2022 23:34:35 +0100 Subject: [PATCH 24/31] doc/check-routeros-update: mention e-mail, matrix and telegram (cherry picked from commit 6f27553f15787540a7b4bc353d89aa4d3d268830) --- doc/check-routeros-update.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/check-routeros-update.md b/doc/check-routeros-update.md index 766c2580..da746392 100644 --- a/doc/check-routeros-update.md +++ b/doc/check-routeros-update.md @@ -47,6 +47,8 @@ safe versions from a web server. The configuration goes to * `SafeUpdateUrl`: url to check for safe update, the channel (`long-term`, `stable` or `testing`) is appended +Also notification settings are required for e-mail, matrix and/or telegram. + Usage and invocation -------------------- From 06bdce1378f717d4f5c3bb61f5d560cb334f82fc Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Sat, 19 Feb 2022 14:13:23 +0100 Subject: [PATCH 25/31] Makefile: match all *.md files, incl. doc/mod/ (cherry picked from commit 886cd67edba86906fea4c0d753b13b7c68c5e78b) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b07d27de..9f21255a 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ TEMPLATE = $(wildcard *.template) CAPSMAN = $(TEMPLATE:.template=.capsman) LOCAL = $(TEMPLATE:.template=.local) -MARKDOWN = $(wildcard *.md) $(wildcard doc/*.md) +MARKDOWN = $(wildcard *.md doc/*.md doc/mod/*.md) HTML = $(MARKDOWN:.md=.html) all: $(CAPSMAN) $(LOCAL) $(HTML) From cd1de8145b9000f0adec87c1a991007043ef5171 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 16 Nov 2021 16:03:43 +0100 Subject: [PATCH 26/31] add doc/mod/notification-telegram (cherry picked from commit e6a686187c3d3c981b7ab86b4cbce46fc6466da4) --- README.md | 1 + doc/backup-cloud.md | 3 +- doc/backup-upload.md | 3 +- doc/check-certificates.md | 2 +- doc/check-health.md | 3 +- doc/check-lte-firmware-upgrade.md | 3 +- doc/check-routeros-update.md | 3 +- doc/collect-wireless-mac.md | 3 +- doc/daily-psk.md | 3 +- doc/log-forward.md | 3 +- doc/mod/notification-telegram.d/newbot.avif | Bin 0 -> 35870 bytes doc/mod/notification-telegram.md | 58 ++++++++++++++++++++ doc/netwatch-notify.md | 3 +- doc/sms-forward.md | 5 +- 14 files changed, 81 insertions(+), 12 deletions(-) create mode 100644 doc/mod/notification-telegram.d/newbot.avif create mode 100644 doc/mod/notification-telegram.md diff --git a/README.md b/README.md index fae49a75..eac68559 100644 --- a/README.md +++ b/README.md @@ -239,6 +239,7 @@ Available modules * [Manage ports in bridge](doc/mod/bridge-port-to.md) * [Manage VLANs on bridge ports](doc/mod/bridge-port-vlan.md) +* [Send notifications via Telegram](doc/mod/notification-telegram.md) Contact ------- diff --git a/doc/backup-cloud.md b/doc/backup-cloud.md index 4df14fd9..c768be1a 100644 --- a/doc/backup-cloud.md +++ b/doc/backup-cloud.md @@ -30,7 +30,8 @@ The configuration goes to `global-config-overlay`, these are the parameters: * `BackupPassword`: password to encrypt the backup with * `BackupRandomDelay`: delay up to amount of seconds when run from scheduler -Also notification settings are required for e-mail, matrix and/or telegram. +Also notification settings are required for e-mail, matrix and/or +[telegram](mod/notification-telegram.md). Usage and invocation -------------------- diff --git a/doc/backup-upload.md b/doc/backup-upload.md index 1e17d620..cbda74e8 100644 --- a/doc/backup-upload.md +++ b/doc/backup-upload.md @@ -36,7 +36,8 @@ The configuration goes to `global-config-overlay`, these are the parameters: * `BackupUploadUser`: username for server authentication * `BackupUploadPass`: password for server authentication -Also notification settings are required for e-mail, matrix and/or telegram. +Also notification settings are required for e-mail, matrix and/or +[telegram](mod/notification-telegram.md). ### Issues with SFTP client diff --git a/doc/check-certificates.md b/doc/check-certificates.md index f6a4d22c..bddcd5a3 100644 --- a/doc/check-certificates.md +++ b/doc/check-certificates.md @@ -27,7 +27,7 @@ Configuration ------------- The expiry notifications just require notification settings for e-mail, -matrix and/or telegram. +matrix and/or [telegram](mod/notification-telegram.md). For automatic download and renewal of certificates you need configuration in `global-config-overlay`, these are the parameters: diff --git a/doc/check-health.md b/doc/check-health.md index 778c0802..81a9f751 100644 --- a/doc/check-health.md +++ b/doc/check-health.md @@ -56,7 +56,8 @@ The configuration goes to `global-config-overlay`, these are the parameters: * `CheckHealthVoltageLow`: value (in volt*10) giving a hard lower limit * `CheckHealthVoltagePercent`: percentage value to trigger voltage jumps -Also notification settings are required for e-mail, matrix and/or telegram. +Also notification settings are required for e-mail, matrix and/or +[telegram](mod/notification-telegram.md). --- [β—€ Go back to main README](../README.md) diff --git a/doc/check-lte-firmware-upgrade.md b/doc/check-lte-firmware-upgrade.md index a9da4a28..e5027a8b 100644 --- a/doc/check-lte-firmware-upgrade.md +++ b/doc/check-lte-firmware-upgrade.md @@ -35,7 +35,8 @@ Just install the script: Configuration ------------- -Notification setting are required for e-mail, matrix and/or telegram. +Notification setting are required for e-mail, matrix and/or +[telegram](mod/notification-telegram.md). See also -------- diff --git a/doc/check-routeros-update.md b/doc/check-routeros-update.md index da746392..b8f61837 100644 --- a/doc/check-routeros-update.md +++ b/doc/check-routeros-update.md @@ -47,7 +47,8 @@ safe versions from a web server. The configuration goes to * `SafeUpdateUrl`: url to check for safe update, the channel (`long-term`, `stable` or `testing`) is appended -Also notification settings are required for e-mail, matrix and/or telegram. +Also notification settings are required for e-mail, matrix and/or +[telegram](mod/notification-telegram.md). Usage and invocation -------------------- diff --git a/doc/collect-wireless-mac.md b/doc/collect-wireless-mac.md index 31207494..4e629a5c 100644 --- a/doc/collect-wireless-mac.md +++ b/doc/collect-wireless-mac.md @@ -40,7 +40,8 @@ On first run a disabled access list entry acting as marker (with comment "`--- collected above ---`") is added. Move this entry to define where new entries are to be added. -Also notification settings are required for e-mail, matrix and/or telegram. +Also notification settings are required for e-mail, matrix and/or +[telegram](mod/notification-telegram.md). Usage and invocation -------------------- diff --git a/doc/daily-psk.md b/doc/daily-psk.md index 28baac0a..0d6ddeff 100644 --- a/doc/daily-psk.md +++ b/doc/daily-psk.md @@ -51,7 +51,8 @@ Then add an access list entry: / interface wireless access-list add comment="Daily PSK" interface=wl-daily private-pre-shared-key="ToBeChangedDaily"; -Also notification settings are required for e-mail, matrix and/or telegram. +Also notification settings are required for e-mail, matrix and/or +[telegram](mod/notification-telegram.md). --- [β—€ Go back to main README](../README.md) diff --git a/doc/log-forward.md b/doc/log-forward.md index 3a0f3bea..6ff652fe 100644 --- a/doc/log-forward.md +++ b/doc/log-forward.md @@ -46,7 +46,8 @@ The configuration goes to `global-config-overlay`, these are the parameters: * `LogForwardIncludeMessage`: define message text to be forwarded (even if filter matches) -Also notification settings are required for e-mail, matrix and/or telegram. +Also notification settings are required for e-mail, matrix and/or +[telegram](mod/notification-telegram.md)m. --- [β—€ Go back to main README](../README.md) diff --git a/doc/mod/notification-telegram.d/newbot.avif b/doc/mod/notification-telegram.d/newbot.avif new file mode 100644 index 0000000000000000000000000000000000000000..1fc7355fd56c8102d7f754be052dada52ce71790 GIT binary patch literal 35870 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

rb2y&J9R0rU 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 literal 0 HcmV?d00001 diff --git a/doc/mod/notification-telegram.md b/doc/mod/notification-telegram.md new file mode 100644 index 00000000..511d9a2e --- /dev/null +++ b/doc/mod/notification-telegram.md @@ -0,0 +1,58 @@ +Send notifications via Telegram +=============================== + +[β—€ Go back to main README](../../README.md) + +> ℹ️️ **Info**: This module can not be used on its own but requires the base +> installation. See [main README](../../README.md) for details. + +Description +----------- + +This module adds support for sending notifications via +[Telegram](https://telegram.org/) via bot api. A queue is used to make sure +notifications are not lost on failure but sent later. + +Requirements and installation +----------------------------- + +Just install the module: + + $ScriptInstallUpdate mod/notification-telegram; + +Also install Telegram on at least one of your mobile and/or desktop devices +and create an account. + +Configuration +------------- + +Open Telegram, then start a chat with [BotFather](https://t.me/BotFather) and +create your own bot: + +![create new bot](notification-telegram.d/newbot.avif) + +Now open a chat with your bot and start it by clicking the `START` button. + +Open just another chat with [GetIDs Bot](https://t.me/getidsbot), again start +with the `START` button. It will send you some information, including the +`id`, just below `You`. + +Finally edit `global-config-overlay`, add `TelegramTokenId` with the token +from *BotFather* and `TelegramChatId` with your id from *GetIDs Bot*. Then +reload the configuration. + +### Notifications to a group + +Sending notifications to a group is possible as well. Add your bot and the +*GetIDs Bot* to a group, then use the group's id (which starts with a dash) +for `TelegramChatId`. Then remove *GetIDs Bot* from group. + +Usage and invocation +-------------------- + +There's nothing special to do. Every script or function sending a notification +will now send it to your Telegram account. + +--- +[β—€ Go back to main README](../../README.md) +[β–² Go back to top](#top) diff --git a/doc/netwatch-notify.md b/doc/netwatch-notify.md index c9917cbd..47fa5f35 100644 --- a/doc/netwatch-notify.md +++ b/doc/netwatch-notify.md @@ -88,7 +88,8 @@ powered off, but accessibility is of interest. Go and get your coffee β˜•οΈ before sending the print job. -Also notification settings are required for e-mail, matrix and/or telegram. +Also notification settings are required for e-mail, matrix and/or +[telegram](mod/notification-telegram.md). Tips & Tricks ------------- diff --git a/doc/sms-forward.md b/doc/sms-forward.md index 417f4621..9028045e 100644 --- a/doc/sms-forward.md +++ b/doc/sms-forward.md @@ -31,8 +31,9 @@ Just install the script: Configuration ------------- -Notification settings are required for e-mail, matrix and/or telegram. Also -you have to enable receiving of SMS: +Notification settings are required for e-mail, matrix and/or +[telegram](mod/notification-telegram.md). Also you have to enable receiving +of SMS: / tool sms set receive-enabled=yes; From 10bb0a9f52a9dbd4a92c72f444ed5b831c91e4df Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 16 Nov 2021 16:03:25 +0100 Subject: [PATCH 27/31] add doc/mod/notification-matrix (cherry picked from commit 07fc5c898ad36debad96d06e3a65fa06ccdadde8) --- README.md | 1 + doc/backup-cloud.md | 3 ++- doc/backup-upload.md | 3 ++- doc/check-certificates.md | 3 ++- doc/check-health.md | 3 ++- doc/check-lte-firmware-upgrade.md | 3 ++- doc/check-routeros-update.md | 3 ++- doc/collect-wireless-mac.md | 3 ++- doc/daily-psk.md | 3 ++- doc/log-forward.md | 3 ++- doc/mod/notification-matrix.md | 45 +++++++++++++++++++++++++++++++ doc/mod/notification-telegram.md | 5 ++++ doc/netwatch-notify.md | 3 ++- doc/sms-forward.md | 3 ++- 14 files changed, 73 insertions(+), 11 deletions(-) create mode 100644 doc/mod/notification-matrix.md diff --git a/README.md b/README.md index eac68559..732afd97 100644 --- a/README.md +++ b/README.md @@ -239,6 +239,7 @@ Available modules * [Manage ports in bridge](doc/mod/bridge-port-to.md) * [Manage VLANs on bridge ports](doc/mod/bridge-port-vlan.md) +* [Send notifications via Matrix](doc/mod/notification-matrix.md) * [Send notifications via Telegram](doc/mod/notification-telegram.md) Contact diff --git a/doc/backup-cloud.md b/doc/backup-cloud.md index c768be1a..0761982a 100644 --- a/doc/backup-cloud.md +++ b/doc/backup-cloud.md @@ -30,7 +30,8 @@ The configuration goes to `global-config-overlay`, these are the parameters: * `BackupPassword`: password to encrypt the backup with * `BackupRandomDelay`: delay up to amount of seconds when run from scheduler -Also notification settings are required for e-mail, matrix and/or +Also notification settings are required for e-mail, +[matrix](mod/notification-matrix.md) and/or [telegram](mod/notification-telegram.md). Usage and invocation diff --git a/doc/backup-upload.md b/doc/backup-upload.md index cbda74e8..72781baf 100644 --- a/doc/backup-upload.md +++ b/doc/backup-upload.md @@ -36,7 +36,8 @@ The configuration goes to `global-config-overlay`, these are the parameters: * `BackupUploadUser`: username for server authentication * `BackupUploadPass`: password for server authentication -Also notification settings are required for e-mail, matrix and/or +Also notification settings are required for e-mail, +[matrix](mod/notification-matrix.md) and/or [telegram](mod/notification-telegram.md). ### Issues with SFTP client diff --git a/doc/check-certificates.md b/doc/check-certificates.md index bddcd5a3..a553e6ac 100644 --- a/doc/check-certificates.md +++ b/doc/check-certificates.md @@ -27,7 +27,8 @@ Configuration ------------- The expiry notifications just require notification settings for e-mail, -matrix and/or [telegram](mod/notification-telegram.md). +[matrix](mod/notification-matrix.md) and/or +[telegram](mod/notification-telegram.md). For automatic download and renewal of certificates you need configuration in `global-config-overlay`, these are the parameters: diff --git a/doc/check-health.md b/doc/check-health.md index 81a9f751..f6900cee 100644 --- a/doc/check-health.md +++ b/doc/check-health.md @@ -56,7 +56,8 @@ The configuration goes to `global-config-overlay`, these are the parameters: * `CheckHealthVoltageLow`: value (in volt*10) giving a hard lower limit * `CheckHealthVoltagePercent`: percentage value to trigger voltage jumps -Also notification settings are required for e-mail, matrix and/or +Also notification settings are required for e-mail, +[matrix](mod/notification-matrix.md) and/or [telegram](mod/notification-telegram.md). --- diff --git a/doc/check-lte-firmware-upgrade.md b/doc/check-lte-firmware-upgrade.md index e5027a8b..704a86bd 100644 --- a/doc/check-lte-firmware-upgrade.md +++ b/doc/check-lte-firmware-upgrade.md @@ -35,7 +35,8 @@ Just install the script: Configuration ------------- -Notification setting are required for e-mail, matrix and/or +Notification setting are required for e-mail, +[matrix](mod/notification-matrix.md) and/or [telegram](mod/notification-telegram.md). See also diff --git a/doc/check-routeros-update.md b/doc/check-routeros-update.md index b8f61837..cac18500 100644 --- a/doc/check-routeros-update.md +++ b/doc/check-routeros-update.md @@ -47,7 +47,8 @@ safe versions from a web server. The configuration goes to * `SafeUpdateUrl`: url to check for safe update, the channel (`long-term`, `stable` or `testing`) is appended -Also notification settings are required for e-mail, matrix and/or +Also notification settings are required for e-mail, +[matrix](mod/notification-matrix.md) and/or [telegram](mod/notification-telegram.md). Usage and invocation diff --git a/doc/collect-wireless-mac.md b/doc/collect-wireless-mac.md index 4e629a5c..5425f768 100644 --- a/doc/collect-wireless-mac.md +++ b/doc/collect-wireless-mac.md @@ -40,7 +40,8 @@ On first run a disabled access list entry acting as marker (with comment "`--- collected above ---`") is added. Move this entry to define where new entries are to be added. -Also notification settings are required for e-mail, matrix and/or +Also notification settings are required for e-mail, +[matrix](mod/notification-matrix.md) and/or [telegram](mod/notification-telegram.md). Usage and invocation diff --git a/doc/daily-psk.md b/doc/daily-psk.md index 0d6ddeff..d2046913 100644 --- a/doc/daily-psk.md +++ b/doc/daily-psk.md @@ -51,7 +51,8 @@ Then add an access list entry: / interface wireless access-list add comment="Daily PSK" interface=wl-daily private-pre-shared-key="ToBeChangedDaily"; -Also notification settings are required for e-mail, matrix and/or +Also notification settings are required for e-mail, +[matrix](mod/notification-matrix.md) and/or [telegram](mod/notification-telegram.md). --- diff --git a/doc/log-forward.md b/doc/log-forward.md index 6ff652fe..1ac6a042 100644 --- a/doc/log-forward.md +++ b/doc/log-forward.md @@ -46,7 +46,8 @@ The configuration goes to `global-config-overlay`, these are the parameters: * `LogForwardIncludeMessage`: define message text to be forwarded (even if filter matches) -Also notification settings are required for e-mail, matrix and/or +Also notification settings are required for e-mail, +[matrix](mod/notification-matrix.md) and/or [telegram](mod/notification-telegram.md)m. --- diff --git a/doc/mod/notification-matrix.md b/doc/mod/notification-matrix.md new file mode 100644 index 00000000..e357b5b2 --- /dev/null +++ b/doc/mod/notification-matrix.md @@ -0,0 +1,45 @@ +Send notifications via Matrix +============================= + +[β—€ Go back to main README](../../README.md) + +> ℹ️️ **Info**: This module can not be used on its own but requires the base +> installation. See [main README](../../README.md) for details. + +Description +----------- + +This module adds support for sending notifications via +[Matrix](https://matrix.org/) via client server api. A queue is used to +make sure notifications are not lost on failure but sent later. + +Requirements and installation +----------------------------- + +Just install the module: + + $ScriptInstallUpdate mod/notification-matrix; + +Also install a Matrix client on at least one of your mobile and/or desktop +devices and create an account. + +Configuration +------------- + +Edit `global-config-overlay`, add `MatrixHomeServer`, `MatrixAccessToken` and +`MatrixRoom`. Then reload the configuration. + +Usage and invocation +-------------------- + +There's nothing special to do. Every script or function sending a notification +will now send it to your Matrix account. + +See also +-------- + +* [Send notifications via Telegram](notification-telegram.md) + +--- +[β—€ Go back to main README](../../README.md) +[β–² Go back to top](#top) diff --git a/doc/mod/notification-telegram.md b/doc/mod/notification-telegram.md index 511d9a2e..435694e5 100644 --- a/doc/mod/notification-telegram.md +++ b/doc/mod/notification-telegram.md @@ -53,6 +53,11 @@ Usage and invocation There's nothing special to do. Every script or function sending a notification will now send it to your Telegram account. +See also +-------- + +* [Send notifications via Matrix](notification-matrix.md) + --- [β—€ Go back to main README](../../README.md) [β–² Go back to top](#top) diff --git a/doc/netwatch-notify.md b/doc/netwatch-notify.md index 47fa5f35..b2f6dd02 100644 --- a/doc/netwatch-notify.md +++ b/doc/netwatch-notify.md @@ -88,7 +88,8 @@ powered off, but accessibility is of interest. Go and get your coffee β˜•οΈ before sending the print job. -Also notification settings are required for e-mail, matrix and/or +Also notification settings are required for e-mail, +[matrix](mod/notification-matrix.md) and/or [telegram](mod/notification-telegram.md). Tips & Tricks diff --git a/doc/sms-forward.md b/doc/sms-forward.md index 9028045e..9ebae694 100644 --- a/doc/sms-forward.md +++ b/doc/sms-forward.md @@ -31,7 +31,8 @@ Just install the script: Configuration ------------- -Notification settings are required for e-mail, matrix and/or +Notification settings are required for e-mail, +[matrix](mod/notification-matrix.md) and/or [telegram](mod/notification-telegram.md). Also you have to enable receiving of SMS: From d1c4eb2303fc4ea3c2acbafe5b31825ca07b56a9 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 16 Nov 2021 16:02:55 +0100 Subject: [PATCH 28/31] add doc/mod/inspectvar (cherry picked from commit 002315035c25b8569d2b6f232a6f8dfba37cf07b) --- README.md | 1 + doc/mod/inspectvar.d/inspectvar.avif | Bin 0 -> 2891 bytes doc/mod/inspectvar.md | 33 +++++++++++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 doc/mod/inspectvar.d/inspectvar.avif create mode 100644 doc/mod/inspectvar.md diff --git a/README.md b/README.md index 732afd97..80e4693d 100644 --- a/README.md +++ b/README.md @@ -239,6 +239,7 @@ Available modules * [Manage ports in bridge](doc/mod/bridge-port-to.md) * [Manage VLANs on bridge ports](doc/mod/bridge-port-vlan.md) +* [Inspect variables](doc/mod/inspectvar.md) * [Send notifications via Matrix](doc/mod/notification-matrix.md) * [Send notifications via Telegram](doc/mod/notification-telegram.md) diff --git a/doc/mod/inspectvar.d/inspectvar.avif b/doc/mod/inspectvar.d/inspectvar.avif new file mode 100644 index 0000000000000000000000000000000000000000..d4a745f2c26446eb02c053a96294bfe35219a984 GIT binary patch literal 2891 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 literal 0 HcmV?d00001 diff --git a/doc/mod/inspectvar.md b/doc/mod/inspectvar.md new file mode 100644 index 00000000..d3fb3b2c --- /dev/null +++ b/doc/mod/inspectvar.md @@ -0,0 +1,33 @@ +Inspect variables +================= + +[β—€ Go back to main README](../../README.md) + +> ℹ️️ **Info**: This module can not be used on its own but requires the base +> installation. See [main README](../../README.md) for details. + +Description +----------- + +RouterOS handles not just scalar variables, but also arrays - even nested. +This module adds a function to inspect variables. + +Requirements and installation +----------------------------- + +Just install the module: + + $ScriptInstallUpdate mod/inspectvar; + +Usage and invocation +-------------------- + +Call the function `$InspectVar` with a variable as parameter: + + $InspectVar $ModeButton + +![InspectVar](inspectvar.d/inspectvar.avif) + +--- +[β—€ Go back to main README](../../README.md) +[β–² Go back to top](#top) From 39871f22210d6b48775bef4f78c73a78626fa7ba Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 16 Nov 2021 16:03:10 +0100 Subject: [PATCH 29/31] add doc/mod/ipcalc (cherry picked from commit e9953c361267f10fd15d3280ccd985062c1dde28) --- README.md | 1 + doc/mod/ipcalc.d/ipcalc.avif | Bin 0 -> 1791 bytes doc/mod/ipcalc.d/ipcalcreturn.avif | Bin 0 -> 1283 bytes doc/mod/ipcalc.md | 53 +++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+) create mode 100644 doc/mod/ipcalc.d/ipcalc.avif create mode 100644 doc/mod/ipcalc.d/ipcalcreturn.avif create mode 100644 doc/mod/ipcalc.md diff --git a/README.md b/README.md index 80e4693d..f9a4fb1f 100644 --- a/README.md +++ b/README.md @@ -240,6 +240,7 @@ Available modules * [Manage ports in bridge](doc/mod/bridge-port-to.md) * [Manage VLANs on bridge ports](doc/mod/bridge-port-vlan.md) * [Inspect variables](doc/mod/inspectvar.md) +* [IP address calculation](doc/mod/ipcalc.md) * [Send notifications via Matrix](doc/mod/notification-matrix.md) * [Send notifications via Telegram](doc/mod/notification-telegram.md) diff --git a/doc/mod/ipcalc.d/ipcalc.avif b/doc/mod/ipcalc.d/ipcalc.avif new file mode 100644 index 0000000000000000000000000000000000000000..022f325bc4637fbb9e4cee8a8d9ad66eab3ba49e GIT binary patch literal 1791 zcmXv|3p~>c8~&RSjTz}+iOmv~bJ|KLa&M?;Tg+XqL$)?sEaEE;$#MHIq@&1mIbY2E zk{q{`+i|}XK5RlR=V;TAYxp+b@4WBt_df6YJkRfaUjP6Q0nBiQPbfJ65QP|N=S^qz*vZ=WtuSKL*yv7%!Y|UxGXNf*x z45sGa1W9*6w8LBLRCefI@A%0vuLcxBSLgON+KC5=le}DCpgRBs?=qY?8gOr%EK82<+EcD0E-GkjOm|k<|dp56PhQ7PJHXpq3wB8^o2leDnK2k5d=6f4Y(KPN{ zXikb}as9KN`Jizw!BGEC)nCcy^RUxXWT>!skOXQ6(&(BuS zZB^j^$}!d2rJ&r^Fs{hwr;XG~+FNEex4c*OG?Cs5ijn=fZ^9dLIJQOHxy0lVa89P> zI=gNZl+fc?o!HTo6-G!2PGX!<^IlRkN1o@Uv)MhFN(G@`93td2V0u@vr2Na>IMif{ zj2RHKcEsW2>$gjWfjG7ua%t<>vQ%2n;Xih|z9QvTAJ z90*6xc;%s%qpJ2pS^hgHCP8~bYQsoPEdzZAXaD(l%uCNR!3%6MR%*Cfnv&h_N7+tx zzz{EUIS+;l_;73Qz9w_7hE_akLK@-JD%kXhtJ_=t{o(-+e|b46XtCT(2LxAhZF$ zBa-^H^KND%XSFUV$&lh!XQpUXrlJV-yO;R*EHsdRgxJ#&vW#LB{C2{sb-L`O9qc6K z=V}&}cs)6rbFi`1RVUYFgln$$vG0Q3YH;}ivc|ft^Mf^XCK~3?VW_ZP8yq4ow7A+XW3;3JbmIuqm`Xkond@VS*K(2K)Oz8@;_wILqxi%O{~ zzrOP*?YW*jTu=%bL6p(4y7`z#Beae}rz2*|LTT|PdWfx_SCKYc(gKNI8Sz@X6ku5Q_J(& zro0pU+9?+0)u+0|c+qwK1O!)C`p9tp5z-vESQbP>D?;59yg~af+Z(UvG z5x^Ym)s4PzJHk?pGYy(O>aFO4Wt_GO;Qj$FP!eUDxr#agRs$aDEoD`sJ)K!MuLx(%}dRt0uKApN5kshW3dQq4wZ z3|{JjY8lT_t@=*$y)COT7da^D;UC+;G*xU`T)^u2l7)KX)l&9*oAf!kt=7t+1#rKD4FAgS Oj1?32im|Lp#Qy*bWgj&F literal 0 HcmV?d00001 diff --git a/doc/mod/ipcalc.d/ipcalcreturn.avif b/doc/mod/ipcalc.d/ipcalcreturn.avif new file mode 100644 index 0000000000000000000000000000000000000000..d858bb12cd8b487f6d1dc8106f978304eae4f524 GIT binary patch literal 1283 zcmZQzU{FXasVqn=%S>Yc0uY^>nP!-qnV9D5Xy^zO`jnemk_eIm0*#E6oFWL5fuSHX zxdg@r(K(q(Fk|=%GD~v7a*RMyE;A=T8N_p8U|EXYj+$pHb-VJwVH%`8CEKIWz* zmIyI$aayPrS=?}Nc3fg~lilY8%bn(BD&gO!-N<|KGGNgpL6aqstR0KLlreOP^Kyjy zDa*f^=woKey#4LpoY{Fi+FCUV;ZH)B&x}?K;+`Amb$-#`laJWBX3Bo|o!KCNq~Kie z>F1LEt9J9J>e>Ezlb_r7-RkS3{rnbR5{(x&hqn8cFIWHmRxN1NqfS}9XV-;w7W~Qz z(B8^f*SspX*}6pX)|||rNtG{`N7(BNRJq(_u-Rs>`0{nwiLf(83#5*|>Nz88KmFOP z*`c1Vt=5%$-Pt;+=b7N_S94N$cS?zg?y5fZ_-|%*cHpggw_i!g?Dx}jx27Kd>n>wD zeO=pO$L4}RPhb2BT<|w%&5@LpGc)V+t=Xm>{g4~_!bFkvl6(5zzI`Suc^ccimRA|b z?l~{_tF2(p-zCSd+x+LXxlq{<{8s4fypTUo|ZC>&(|#oIU;NG@YbZXU{M3y7J^u_0Nc# zM>*=*jx()XBwwd5*}L?1nf;E8pXzMO|4p|4naZ{PqTv(kOm(dguH4+0Rev}H)idWu zAAWi1DAw%aX7-z9;VPNbK>y}Epj~iDu4ff zOK5pv8p+5r#X}`np#Jmk{g>}_RsZyPxch)KhgSmEHW?P>Yf{TEo{N2}$66zFRwrL; zWpMo|(Y2TEzghI`#9y~phpzn#$|^dywCJ_cIfuh~0UYZW@Hm`(@@#AOw`R>x{iRRz zublh&%I=u$Eil`*#5P9C&~5!( z=GD`FPiWc1Sr~cw-}?B>Fv@KiRH33D@k&9~^# z+PiC(*xIFfC*1`XEz`0nR+zBAq?9e~XJtjE?FXM8zU3t>!v4~n*BoOm%yfwhHtKJS zWdB;Q_+y>@C%ropF53AUu&PX3x?R9(ZWotlrkvx;Tw`D1thZd#d3 ℹ️️ **Info**: This module can not be used on its own but requires the base +> installation. See [main README](../../README.md) for details. + +Description +----------- + +This module adds functions for IP address calculation. + +Requirements and installation +----------------------------- + +Just install the module: + + $ScriptInstallUpdate mod/ipcalc; + +Usage and invocation +-------------------- + +### IPCalc + +The function `$IPCalc` prints information to terminal, including: + +* address +* netmask +* network in CIDR notation +* minimum host address +* maximum host address +* broadcast address + +It expects an IP address in CIDR notation as argument. + + $IPCalc 192.168.88.1/24; + +![IPCalc](ipcalc.d/ipcalc.avif) + +### IPCalcReturn + +The function `$IPCalcReturn` expects an IP address in CIDR notation as +argument as well. But it does not print to terminal, instead it returns +the information in a named array. + + :put ([ $IPCalcReturn 192.168.88.1/24 ]->"broadcast"); + +![IPCalcReturn](ipcalc.d/ipcalcreturn.avif) + +--- +[β—€ Go back to main README](../../README.md) +[β–² Go back to top](#top) From 9419e3407731eea0594c8fbdff27d9688e656397 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 16 Nov 2021 16:03:56 +0100 Subject: [PATCH 30/31] add doc/mod/scriptrunonce --- README.md | 1 + doc/mod/scriptrunonce.d/hello-world.rsc | 3 ++ doc/mod/scriptrunonce.d/scriptrunonce.avif | Bin 0 -> 2466 bytes doc/mod/scriptrunonce.md | 35 +++++++++++++++++++++ 4 files changed, 39 insertions(+) create mode 100644 doc/mod/scriptrunonce.d/hello-world.rsc create mode 100644 doc/mod/scriptrunonce.d/scriptrunonce.avif create mode 100644 doc/mod/scriptrunonce.md diff --git a/README.md b/README.md index f9a4fb1f..80657af7 100644 --- a/README.md +++ b/README.md @@ -243,6 +243,7 @@ Available modules * [IP address calculation](doc/mod/ipcalc.md) * [Send notifications via Matrix](doc/mod/notification-matrix.md) * [Send notifications via Telegram](doc/mod/notification-telegram.md) +* [Download script and run it once](doc/mod/scriptrunonce.md) Contact ------- diff --git a/doc/mod/scriptrunonce.d/hello-world.rsc b/doc/mod/scriptrunonce.d/hello-world.rsc new file mode 100644 index 00000000..17ec5752 --- /dev/null +++ b/doc/mod/scriptrunonce.d/hello-world.rsc @@ -0,0 +1,3 @@ +#!rsc by RouterOS + +:put ("Hello World from " . [ / system identity get name ] . "!"); diff --git a/doc/mod/scriptrunonce.d/scriptrunonce.avif b/doc/mod/scriptrunonce.d/scriptrunonce.avif new file mode 100644 index 0000000000000000000000000000000000000000..614c72c670ff87f31bbd59d11c73927d62630129 GIT binary patch literal 2466 zcmXw4c{mh$7oH(Y_9aPnV_&MtSYnv0V;PsR6(h{G%`lU(j}V5)I>{1|ExshXB(6qw zC1b0|mXPJMRTyLK8-33`=lPxYocBG?Ip@D0005Bk4h|=vL$TffhMgiF>kYG72xI(`H5wI`j(I$RFqbXQeNe5J+I~mRN#^KLgKU zg9u)yjQ{|%EF;)69v=Zq#QtH}+1VM$g$@N9#Y&wr06`CbT;OdF9FZ}Z8^9XFpoFmm zJo;2)7~`-rK&H4ejH@2tJ<-7e0FJZTat%5-De2JvBn$~hmr8p&q6!>t5;U-AJf6@G4cq~G$_cvz#i)P#X1pM+$1ViJ-T1MiW0 zc6ZIdtAc)PTxW8BO!8Pg*o!at#}AA#0Ot;Ib~r?C4+B?WO8G>aIuKJ^Muq z5?Nb0`UOHlV77b;?9(C=ILrv{6&IT0BnRgU$Dwq%DuTaHd8CJZOt!nHJ!%(PrP(On zxHMu(fuz)|EprfgEcsw%0cnLgevg&7YNA53#F93kC%`7#{z7JyY#3_l^PY0=0?0;V< z&X^_YAgH4;uDomDj}4?(KAS5}z1_Jts{=oE<(5JQeq#cLS}lTt?%0Y|7>f*}UTnwv z;%72Z(#eqCK$m|mH^VA!z_O#{ZYprp4~ct?r(EgHAEb-O>Lzf1>R#Fd#vGSu! z?s>%w#W)O-`%&Z`!xVG2BnE!+Lv(hAqOV~>{1 z4&^OnSMI=w+O6Z!&pVUyz-8Fd;ST%wnvG8zzlotLB55EC;$SS*xXnx|c6y zI4`6WsKBV_u8*3J|fHgn?@n-CzDsVeqHyr3J$rhY|6 zI+JQ=<=d(_559ztWFy^LrLQJABwuy8iqNt?7JIEV6&F`^BZ0j2o$WmO`-Sg4RmA>M zqRhm%t?n5|-pVUzgu?G7b{qY+jD6R{06-k%t~xF7=3q&49ud zC;t9U5!Fr_i{jgzkHdAxrsrB!jIS29>xRhC_lVWds6`vN4C`P4@3c<0=wIf zk#PTq<=XUxNT4cbNt=E1uF2lk{u_$p+_5Y3EvRYimn65Gp2)e761X);58DT-B!iP3 z+Q||U#MB|zeYW&~MoTAh&u&NdVpGOd{ByxMdvBh5PRce#nKsK&Bz=XcsMmHvXn1~Y zEfrz$?m9S-_PW%zu~;i9zl9&Y$oL%e%d5+~oG|-VNa<@a1NGuuSz+xZwYg6Amv8O2 z62$6wxhB?!b|oGnpJLJ`@x3P(4dFAnArUQy>7KA_X1HA{l;)F%k^6e`Xn}6LBjZwE zS`?$;Dcv^0W|FzpAZ*Tj#o#1inLecVZ66bkk}Z-AE@`2Ku(?^?{R>>ibnAib`&x?^ zUNL&nVX<64{q(v#Cb}NqeL=}YZ!o`7DYgB4&l#aM;A7NaE1TA_l6(#x`Gg5p`6<4% z#7*L+kysUiKsn;JW% z^_1hI>_v3s!>A^g^CBP0Mu|f5O-P)^YhzvTu~0i`@`c~&ZNDM; z&MMmmPz!yWn`WUs#Ho;bBzPZ=w} zSPNhF1O;U^oAxe>)aBM_SpoEmx;YD>IgZ;x&>*(j@a1<-A-eG**R=Jg6NGOoJ`Lvc zGk%jLyhkw`@Ij;(YzVIMG>gR3vf$I-A5F}<-kYM!e$bW?(g-_g{C3X3#246+H*TkA TP0`4OjfKTV!F_r)V0HfktQ2I! literal 0 HcmV?d00001 diff --git a/doc/mod/scriptrunonce.md b/doc/mod/scriptrunonce.md new file mode 100644 index 00000000..190ed03c --- /dev/null +++ b/doc/mod/scriptrunonce.md @@ -0,0 +1,35 @@ +Download script and run it once +=============================== + +[β—€ Go back to main README](../../README.md) + +> ℹ️️ **Info**: This module can not be used on its own but requires the base +> installation. See [main README](../../README.md) for details. + +Description +----------- + +This module adds a function that downloads a script, checks for syntax +validity and runs it once. + +Requirements and installation +----------------------------- + +Just install the module: + + $ScriptInstallUpdate mod/scriptrunonce; + +Usage and invocation +-------------------- + +The function `$ScriptRunOnce` expects an url pointing to a script as parameter. + + $ScriptRunOnce https://git.eworm.de/cgit/routeros-scripts/plain/doc/mod/scriptrunonce.d/hello-world.rsc + +![ScriptRunOnce](scriptrunonce.d/scriptrunonce.avif) + +Giving multiple scripts is possible, separated by comma. + +--- +[β—€ Go back to main README](../../README.md) +[β–² Go back to top](#top) From fed4757eaaf9468b488a07ecaa67b7f63c04bcee Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Sun, 20 Feb 2022 23:17:16 +0100 Subject: [PATCH 31/31] doc/mod: notify about new documentation --- global-config | 2 +- global-config-overlay | 2 +- global-config.changes | 1 + global-functions | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/global-config b/global-config index 0554cdb7..a664cb65 100644 --- a/global-config +++ b/global-config @@ -8,7 +8,7 @@ # Make sure all configuration properties are up to date and this # value is in sync with value in script 'global-functions'! -:global GlobalConfigVersion 77; +:global GlobalConfigVersion 78; # This is used for DNS and backup file. :global Domain "example.com"; diff --git a/global-config-overlay b/global-config-overlay index 9075df50..946559e5 100644 --- a/global-config-overlay +++ b/global-config-overlay @@ -8,7 +8,7 @@ # Make sure all configuration properties are up to date and this # value is in sync with value in script 'global-functions'! # Comment or remove to disable news and change notifications. -:global GlobalConfigVersion 77; +:global GlobalConfigVersion 78; # Use branch routeros-v6 with RouterOS v6: :global ScriptUpdatesUrlSuffix "\?h=routeros-v6"; diff --git a/global-config.changes b/global-config.changes index d8cd39d8..2764d783 100644 --- a/global-config.changes +++ b/global-config.changes @@ -81,6 +81,7 @@ 75="You are using the branch 'routeros-v6', well done."; 76="Added an option to suppress notifications on host down with 'netwatch-notify'."; 77="Introduced new script 'firmware-upgrade-reboot'. Handle with care!"; + 78="New documentation is online for notifications via Telegram & Matrix, variable inspection, ip address calculation and running scripts once."; }; # Migration steps to be applied on script updates diff --git a/global-functions b/global-functions index 9721b8b5..ef7fa151 100644 --- a/global-functions +++ b/global-functions @@ -8,7 +8,7 @@ # https://git.eworm.de/cgit/routeros-scripts/about/ # expected configuration version -:global ExpectedConfigVersion 77; +:global ExpectedConfigVersion 78; # global variables not to be changed by user :global GlobalFunctionsReady false;