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 37f78cf..63034c9 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 024e52f..75fbba4 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 63034c9..c443bea 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 a070ecd..6f0e2f7 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 625bbe4..9579f5c 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 9579f5c..40cd271 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 40cd271..c6d311f 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 c6d311f..fc70cc2 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 fc70cc2..70f1077 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 0f687a5..8cad07a 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 b6b0524..2e6d8be 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 ac69301..309a394 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 78a0eed..9b504f7 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 9b504f7..dc107f2 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 75fbba4..5f0f4db 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 c443bea..dfa2b99 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 6f0e2f7..37aa074 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 70f1077..68d8250 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 ae89cfb..e82cea6 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 e82cea6..34a9e8f 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 e731d95..e2fcfa3 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 990aef9..70d3ff5 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 9385341..d55fa08 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 0000000..6afc40e --- /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 309a394..a56f68e 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 0000000..b3cb621 --- /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 5f0f4db..0554cdb 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 dfa2b99..9075df5 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 37aa074..d8cd39d 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 68d8250..0a0b1ff 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 33f82f9..ba4dfed 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 0a0b1ff..9721b8b 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 b3cb621..a3a25db 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 70d3ff5..fae49a7 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 9a8a129..2cea9a9 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 e052c20..dcf2044 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 117e4c7..92bf2f7 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 be36cb4..51ac9a4 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 212b16c..d54b9bd 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 cdbd72b..8581ccc 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 92eafa6..fd89260 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 63d6408..c7c4635 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 44bee7a..2869b25 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 8e271d6..358cc08 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 ef68bcb..9729aa1 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 d55fa08..ccf9bf2 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 380c89f..94b53b8 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 105737a..c1a09e4 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 0b8ceb2..3d19bdf 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 60eb29d..1982fa3 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 6afc40e..7ca98fa 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 2d9dad3..15b11f6 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 e4e553c..d6ebe51 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 f3dccdb..a29232d 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 9a0f486..d293b2c 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 994ea23..8290e9d 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 3d8a29b..78aeb36 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 e3603b5..b7ca016 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 3cea720..49a40bc 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 96710a2..adb35ac 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 dc107f2..b111d59 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 908fb56..06c3b4b 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 a56f68e..33f7b99 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 7514f82..c0f7aee 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 c151db2..49231dd 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 e36d384..d83fa80 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 873ccac..04c62a8 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 e45e17a..acd8f97 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 caff9ff..15d888f 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 a16da7d..b3c6800 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 dcf2044..db1e00a 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 92bf2f7..4df14fd 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 51ac9a4..e6bed51 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 d54b9bd..1e17d62 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 8581ccc..9cee6e6 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 fd89260..34e3c91 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 c7c4635..d7c4676 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 2869b25..f6a4d22 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 358cc08..778c080 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 9729aa1..a9da4a2 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 ccf9bf2..766c258 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 94b53b8..3120749 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 c1a09e4..28baac0 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 3d19bdf..8679bfa 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 1982fa3..245b457 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 7ca98fa..c913d8e 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 15b11f6..2a7fbfa 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 d6ebe51..3b9c94f 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 a29232d..b410979 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 d293b2c..349ae63 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 8290e9d..ae4eb6a 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 78aeb36..0ad67fb 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 b7ca016..3a0f3be 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 49a40bc..c1c059e 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 adb35ac..4fbfc2b 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 b111d59..c9917cb 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 06c3b4b..2fba33e 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 33f7b99..0007acc 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 c0f7aee..ae58da5 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 49231dd..775b977 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 d83fa80..8442774 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 04c62a8..417f462 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 acd8f97..c19e138 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 15d888f..9dd7f19 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 5b2817b..02d1e8d 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 67dd04d..290826e 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 766c258..da74639 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 b07d27d..9f21255 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 fae49a7..eac6855 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 4df14fd..c768be1 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 1e17d62..cbda74e 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 f6a4d22..bddcd5a 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 778c080..81a9f75 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 a9da4a2..e5027a8 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 da74639..b8f6183 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 3120749..4e629a5 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 28baac0..0d6ddef 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 3a0f3be..6ff652f 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 0000000..511d9a2 --- /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 c9917cb..47fa5f3 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 417f462..9028045 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 eac6855..732afd9 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 c768be1..0761982 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 cbda74e..72781ba 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 bddcd5a..a553e6a 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 81a9f75..f6900ce 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 e5027a8..704a86b 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 b8f6183..cac1850 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 4e629a5..5425f76 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 0d6ddef..d204691 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 6ff652f..1ac6a04 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 0000000..e357b5b --- /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 511d9a2..435694e 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 47fa5f3..b2f6dd0 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 9028045..9ebae69 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 732afd9..80e4693 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 zcmXw3c{mh$7aqGiA~7x^NtWzGWQ4>Z`;zR8of%^pJK1+7O!hKl8HUN$SO$sV%379^ zHB{HWi;4#GjlSoe-}9XJJ@0#-bIxBs001E95fqMc4ncSTsBw-y2oE_QgtLc{hMWdf z`tIW%5#;m7qoHO2gtwpTd8Gva&`{rb z2GCpv0Dy8-eglE<{j>XzbD3JW)1Eg|dz?eSa!@~SzdtLz5U2nYRX0GOT>YpBLIk4R z&l>>%I$>%%h)UQ|h%m$-g_)U|iWi(ihvhtbo}CeTx_Quc9k4&nd+fe;UQNFg&bTp?Dz1Z3z&JFftBSy<@APM2K$wzEVt zx*sn`OgEvk+lhNX(#b3dp^VH)%sRfgZgN8`m<+aDU`gD0-FH*u-QOz%tmJW?AiI@H zr46=^q%4oEd#g9Qm;`h^C2wOXVEYZPfROHYH7=u}h}I+bq-J*rIOtYmaf6+hj)4Ci zUVD#+ysX24`GZdd?hfFJd|(CT>&|him+YN%Zga7W7ls+g#Dip+!Y<P(&)HWwae;&A0npGD~QRtag!+^i=& z@ec2yri}UVr7GPH=dX5$3aLJuRw)!Y0kdBKvar?J8iLmv|P&C3t$9;656|`ecCn6s{L^%e;4SrNmI* zKffoF6jzJ6bg!r<7WS9g*NrTfxwU?C-7C;hd2OsocXZi7wJ_PL`3arCseQE*z}oOZ zDms>2>o>7yqQfAsB6;%~w`%N)99-t4jrI~akJ%G=RcNZiWg`pX>@(`dp^$N+WC;P& zjkVvtJC<9B6_HQVjG$e%tVhK3ve><>XCh07Ga1ns(d?foeA z+OkNSW$&ap3oKf8C1SXS*;{2hla27~bNecUTize0z;^{mE8`=t76yRPkC1mJ;^M@8 z<>CnI-@gbkip#1^)U@babVvwUf6gHE4s>n*Jws_vj9qU*4CQq^lb$9a=aT-U(yWcJ z)|hUxn4VkaS#G|C!>H+&mmuw2xRbIYH>mD?NOt;_Mx{bZz{XLLJrj_fGt&Puk}p$= z%c!$N@c!>qO)kdf=V@msfx!Yg8Fszz$O`2TTm||JJ%i{mcB!}@^b*W3d7>5%7cl97 zC%P{euC47{{|qggX7kTUouz<<39BO!6!sAfn=UIzDfw-! z1ul243^W>^fnH&m97c;Qm~EcYf>kbPPJ4AFKNI8EAkw`25EyMgZ0`2JYC9eDb|EDt zqVVVLqk>dOjor)Pk@WQoQcEkAZ$#AFYk0TOmv*;@%a7_a2j(>*vr+;4RX_@;=5^`b zBRny-Q2WQf9lVF6MLK$Q4xdaW$AKxSc57RG&6u>Hnk#V#=iN#*^f zp6=-g7~IvIG{g?8E^7H!UXL6fb_(|X)tr;WqizNn=M8Q6CKlKDm(|ZsSXgKMcDQCFbQau;Yl6KQ@ z7sROG~XP*TsrQr6nwI`R=6b@xvwsu@ES z3h$v$vjA0NXp^bCl%pu=w&&)%wGa0uqkSetPT5V4EJ+nKT9 z137!D1|Ot=`O-Z&zYzFJimqRYWMpv|z1v1Gs8ir$FPT{XoM&)%Z(VB8upXqT{-#P( zLuD3uAgxy*WHk}^L6>DqE@tH8%Qr13bh~9lb_Yw!Gg~YssVy)Uh2J{+MhBK8G<3eG zT?C9N&BsjB_<6{W=-mv)FkTWAM-I3@8=^gX^)f!r2#sfH=Ktg) zdL=f(v}|t1`&cINmVnYlOabARn|ZD0w(?o4o&4iZKdLEX%iPa0xYzmTtLCm{%weZw zqScsLmSxcgnd1Z^o@kvZE&cRNS#i68IWtuE2Uq0FBPJ1~gokb#jD%a+6F;)KDXtwq zhMzx`ThEtDF?uG>-hs|R3}gJDPI|3u{)F7n3QBR}XPD1L#u zFy&m*k=+3j4|Ah=_-f27z=U_~!;gAa3vK)8F+VL3{pQMbJfC~g(FVKsrG)|(0lKbx z`Q4-`wxBSEknq`{4ap8RuA16NGN|qp&Qxz{{@M7%9`cG}4bRpY(^Q{_h|VSx=F;QT z(tLJ=KkGFJ&Q$IBrl=^KQvYZ2J@~Q_y$@68E8j*?duDt~vSL|*uJl(w5_}-iG34a% zMRjr@3zucmM@{c30$vg1R9sAS*S^5daRxUSdg6F&#YzWMu;u@dqP-Y(%xTxj>gUkD zw_@gbr;|IV8FvEYe9VZad)+7M>^;V%p0#N0rn)GrDQo`~_P#2x;fC9Z8`EPRo#S?W zoDF3PDWKG3@ro;}X$yk>P;~1BWs9qPjB}Rvfdxjg*pdl>cFnaXM zcQmR+)WI}X7Lu)}crg4G@&U733eS@h`{V(%k!mPTd|HWQ`FB~y90OTW_Lo-f<}`Pl z$btx!qTO%Mdz4rUZrLP7ygy{{{YKUS2X|t literal 0 HcmV?d00001 diff --git a/doc/mod/inspectvar.md b/doc/mod/inspectvar.md new file mode 100644 index 0000000..d3fb3b2 --- /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 80e4693..f9a4fb1 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 f9a4fb1..80657af 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 0000000..17ec575 --- /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 0000000..190ed03 --- /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 0554cdb..a664cb6 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 9075df5..946559e 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 d8cd39d..2764d78 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 9721b8b..ef7fa15 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;