From 335266f2470593dfae33d6871abad7d2fe7297d2 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 19 Nov 2025 16:18:10 +0100 Subject: [PATCH 01/76] README: update the screenshot for script update... ... to match commit 2c92c78b4647e43c44da567e98adee69b7857393. --- README.d/09-update-scripts.avif | Bin 1733 -> 1928 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/README.d/09-update-scripts.avif b/README.d/09-update-scripts.avif index f549fef5bd7a33f883044d25f3fcac68134b130f..a31d60b3a0066d1ee68abbf79fd48aa6d77ffdd0 100644 GIT binary patch delta 1713 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 T^8jiU8*(U{VZwl~v4`?B()a82 From 1fe4391acab502ce2c7bb2f5aedb5894932e2301 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Thu, 13 Nov 2025 13:37:51 +0100 Subject: [PATCH 02/76] contrib/html: add empty lines... ... for easier rebasing. --- contrib/html.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contrib/html.sh b/contrib/html.sh index bbd8ba8..6942ecf 100755 --- a/contrib/html.sh +++ b/contrib/html.sh @@ -3,7 +3,9 @@ set -e sed "s|__TITLE__|$(head -n1 "${1}")|" < "${0}.d/head.html" + markdown -f toc,idanchor "${1}" | sed \ -e 's/href="\([-_\./[:alnum:]]*\)\.md"/href="\1.html"/g' \ -e '/| id="\L\1">|' + printf '' From 619914dcc6acf2e47cc9474f9d5c713f42b8784e Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 29 Oct 2025 14:31:17 +0100 Subject: [PATCH 03/76] contrib/{logo-color,notification}: use a single style --- contrib/logo-color.d/style.css | 5 ----- contrib/logo-color.html | 2 +- contrib/notification.html | 4 ++-- {contrib/notification.d => general}/style.css | 3 ++- 4 files changed, 5 insertions(+), 9 deletions(-) delete mode 100644 contrib/logo-color.d/style.css rename {contrib/notification.d => general}/style.css (93%) diff --git a/contrib/logo-color.d/style.css b/contrib/logo-color.d/style.css deleted file mode 100644 index eb2ec6a..0000000 --- a/contrib/logo-color.d/style.css +++ /dev/null @@ -1,5 +0,0 @@ -body { - font-family: fira-sans, sans-serif; - font-size: 10pt; - background-color: transparent; -} diff --git a/contrib/logo-color.html b/contrib/logo-color.html index 17942ce..507445b 100644 --- a/contrib/logo-color.html +++ b/contrib/logo-color.html @@ -3,7 +3,7 @@ RouterOS-Scripts Logo Color Changer - + diff --git a/contrib/notification.html b/contrib/notification.html index 7875036..b7d6764 100644 --- a/contrib/notification.html +++ b/contrib/notification.html @@ -3,8 +3,8 @@ RouterOS-Scripts Notification Generator - - + + diff --git a/contrib/notification.d/style.css b/general/style.css similarity index 93% rename from contrib/notification.d/style.css rename to general/style.css index 648ea23..66d44f1 100644 --- a/contrib/notification.d/style.css +++ b/general/style.css @@ -1,7 +1,8 @@ +/* stylesheet for RouterOS Scripts */ body { + background-color: transparent; font-family: fira-sans, sans-serif; font-size: 10pt; - background-color: transparent; } div.notification { position: relative; From 1a1399d3026918d2b9f89f13878fe2a66855d06b Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 11:20:47 +0100 Subject: [PATCH 04/76] README: support new builtin-trust-store... ... which was introduced with RouterOS 7.21beta7. --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 529bb4c..b77538d 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,10 @@ download the certificates. > can skip the steps regarding certificate download and import and jump > to [installation of scripts](#installation-of-scripts) if you set the > trust for these builtin trust anchors: -> `/certificate/settings/set builtin-trust-anchors=trusted;` +> `/certificate/settings/set builtin-trust-anchors=trusted;` +> With RouterOS 7.21 the functionality was changed. Set this at minimum, +> but make sure not to drop other targets: +> `/certificate/settings/set builtin-trust-store=fetch;` If you intend to download the scripts from a different location (for example from github.com) install the corresponding From bdf170a7feabbd1ef7e959d90ae3fa3afa67cf77 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 29 Oct 2025 14:46:01 +0100 Subject: [PATCH 05/76] contrib/html: include stylesheet via link --- Makefile | 2 +- contrib/html.sh | 7 ++++++- contrib/html.sh.d/head.html | 11 +---------- general/style.css | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index d8f2387..b799535 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ HTML = $(MARKDOWN:.md=.html) all: $(CAPSMAN) $(LOCAL) $(WIFI) $(HTML) checksums.json -%.html: %.md contrib/html.sh contrib/html.sh.d/head.html +%.html: %.md general/style.css contrib/html.sh contrib/html.sh.d/head.html contrib/html.sh $< > $@ %.capsman.rsc: %.template.rsc Makefile diff --git a/contrib/html.sh b/contrib/html.sh index 6942ecf..6a32b5d 100755 --- a/contrib/html.sh +++ b/contrib/html.sh @@ -2,7 +2,12 @@ set -e -sed "s|__TITLE__|$(head -n1 "${1}")|" < "${0}.d/head.html" +RELTO="$(dirname "${1}")" + +sed \ + -e "s|__TITLE__|$(head -n1 "${1}")|" \ + -e "s|__STYLE__|$(realpath --relative-to="${RELTO}" general/style.css)|" \ + < "${0}.d/head.html" markdown -f toc,idanchor "${1}" | sed \ -e 's/href="\([-_\./[:alnum:]]*\)\.md"/href="\1.html"/g' \ diff --git a/contrib/html.sh.d/head.html b/contrib/html.sh.d/head.html index 1b1dd03..50653ae 100644 --- a/contrib/html.sh.d/head.html +++ b/contrib/html.sh.d/head.html @@ -1,15 +1,6 @@ RouterOS Scripts :: __TITLE__ - + diff --git a/general/style.css b/general/style.css index 66d44f1..be67afa 100644 --- a/general/style.css +++ b/general/style.css @@ -4,6 +4,28 @@ body { font-family: fira-sans, sans-serif; font-size: 10pt; } +h2 { + border-bottom: 1px solid #ccc; + color: #000; +} +a { + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +blockquote { + border-left: 4px solid #ccc; + padding: 0 10px; + color: #777; +} +code { + margin: 0 2px; + padding: 2px 5px; + border: 1px solid #ccc; + background-color: #f8f8f8; + border-radius: 3px; +} div.notification { position: relative; float: right; @@ -31,6 +53,16 @@ p.hint { pre { font-family: fira-mono, monospace; white-space: pre-wrap; + background-color: #f8f8f8; + border: 1px solid #ccc; + overflow: auto; + padding: 6px 10px; + border-radius: 3px; +} +pre code { + margin: 0; + padding: 0; + border: 0; } span.link { color: #863600; From fbfeea30426ac9be62bdaf7392fbfc51d4143ae3 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 11:38:31 +0100 Subject: [PATCH 06/76] INITIAL-COMMANDS: support new builtin-trust-store... ... which was introduced with RouterOS 7.21beta7. --- INITIAL-COMMANDS.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/INITIAL-COMMANDS.md b/INITIAL-COMMANDS.md index 40f609b..6e70b66 100644 --- a/INITIAL-COMMANDS.md +++ b/INITIAL-COMMANDS.md @@ -22,8 +22,11 @@ Run the complete base installation: :local CertFileName "ISRG-Root-X2.pem"; :local CertFingerprint "69729b8e15a86efc177a57afb7171dfc64add28c2fca8cf1507e34453ccb1470"; - :if (!(([ /certificate/settings/get ]->"builtin-trust-anchors") = "trusted" && \ - [[ :parse (":return [ :len [ /certificate/builtin/find where common-name=\"" . $CertCommonName . "\" ] ]") ]] > 0)) do={ + :local CertSettings [ /certificate/settings/get ]; + :if (!((($CertSettings->"builtin-trust-anchors") = "trusted" || \ + ($CertSettings->"builtin-trust-store") ~ "fetch" || \ + ($CertSettings->"builtin-trust-store") = "all") && \ + [[ :parse (":return [ :len [ /certificate/builtin/find where common-name=\"" . $CertCommonName . "\" ] ]") ]] > 0)) do={ :put "Importing certificate..."; /tool/fetch ($BaseUrl . "certs/" . $CertFileName) dst-path=$CertFileName as-value; :delay 1s; From 514596f6640249ca44cd924607d72dbb455db3c0 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 7 Nov 2025 12:51:34 +0100 Subject: [PATCH 07/76] contrib/html: add a margin on left and right... ... for windows in landscape (wider than high). Also make the notification float right for landscape only. --- general/style.css | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/general/style.css b/general/style.css index be67afa..a9ede5e 100644 --- a/general/style.css +++ b/general/style.css @@ -28,7 +28,7 @@ code { } div.notification { position: relative; - float: right; + float: none; width: 600px; border: 3px outset #6c5d53; /* border-radius: 5px; */ @@ -67,3 +67,12 @@ pre code { span.link { color: #863600; } +@media only screen and (orientation: landscape) { + body { + margin-left: 10vw; + margin-right: 10vw; + } + div.notification { + float: right; + } +} From db0a5bf33ce5ff585f568affbea3d399466159de Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 11:47:55 +0100 Subject: [PATCH 08/76] global-functions: $CertificateAvailable: support new builtin-trust-store... ... which was introduced with RouterOS 7.21beta7. --- global-functions.rsc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/global-functions.rsc b/global-functions.rsc index eb837aa..9f92b07 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -106,11 +106,15 @@ # check and download required certificate :set CertificateAvailable do={ :local CommonName [ :tostr $1 ]; + :local UseFor [ :tostr $2 ]; :global CertificateDownload; + :global EitherOr; :global LogPrint; :global ParseKeyValueStore; + :set UseFor [ $EitherOr $UseFor "undefined" ]; + :if ([ /system/resource/get free-hdd-space ] < 8388608 && \ [ /certificate/settings/get crl-download ] = true && \ [ /certificate/settings/get crl-store ] = "system") do={ @@ -123,7 +127,10 @@ :return false; } - :if (([ /certificate/settings/get ]->"builtin-trust-anchors") = "trusted" && \ + :local CertSettings [ /certificate/settings/get ]; + :if ((($CertSettings->"builtin-trust-anchors") = "trusted" || \ + ($CertSettings->"builtin-trust-store") ~ $UseFor || \ + ($CertSettings->"builtin-trust-store") = "all") && \ [[ :parse (":return [ :len [ /certificate/builtin/find where common-name=\"" . $CommonName . "\" ] ]") ]] > 0) do={ :return true; } From 6f53bedb98924cb4c6e15f0c16fbcc510ecc9fc2 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 11:30:49 +0100 Subject: [PATCH 09/76] contrib/html: increase default line height --- general/style.css | 1 + 1 file changed, 1 insertion(+) diff --git a/general/style.css b/general/style.css index a9ede5e..ad25c7c 100644 --- a/general/style.css +++ b/general/style.css @@ -3,6 +3,7 @@ body { background-color: transparent; font-family: fira-sans, sans-serif; font-size: 10pt; + line-height: 1.6; } h2 { border-bottom: 1px solid #ccc; From 8eb397f79fafa90b078abe880dd3b2958ae95dad Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 11:59:28 +0100 Subject: [PATCH 10/76] global-functions: $DownloadPackage: define certificate use --- global-functions.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global-functions.rsc b/global-functions.rsc index 9f92b07..412777c 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -404,7 +404,7 @@ :return true; } - :if ([ $CertificateAvailable "ISRG Root X1" ] = false) do={ + :if ([ $CertificateAvailable "ISRG Root X1" "fetch" ] = false) do={ $LogPrint error $0 ("Downloading required certificate failed."); :return false; } From 843347dafe2dc62521c8af9f802e99745623e00e Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 29 Oct 2025 14:55:00 +0100 Subject: [PATCH 11/76] contrib/html: link the logo with relative path --- contrib/html.sh | 1 + contrib/html.sh.d/head.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib/html.sh b/contrib/html.sh index 6a32b5d..d4a1a90 100755 --- a/contrib/html.sh +++ b/contrib/html.sh @@ -7,6 +7,7 @@ RELTO="$(dirname "${1}")" sed \ -e "s|__TITLE__|$(head -n1 "${1}")|" \ -e "s|__STYLE__|$(realpath --relative-to="${RELTO}" general/style.css)|" \ + -e "s|__LOGO__|$(realpath --relative-to="${RELTO}" logo.png)|" \ < "${0}.d/head.html" markdown -f toc,idanchor "${1}" | sed \ diff --git a/contrib/html.sh.d/head.html b/contrib/html.sh.d/head.html index 50653ae..779e246 100644 --- a/contrib/html.sh.d/head.html +++ b/contrib/html.sh.d/head.html @@ -2,5 +2,5 @@ RouterOS Scripts :: __TITLE__ - + From f3e6e152bce0d2563f864a2d0652899c22c53918 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 12:01:11 +0100 Subject: [PATCH 12/76] global-functions: $GetMacVendor: define certificate use --- global-functions.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global-functions.rsc b/global-functions.rsc index 412777c..d4c37a2 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -640,7 +640,7 @@ } :do { - :if ([ $CertificateAvailable "GTS Root R4" ] = false) do={ + :if ([ $CertificateAvailable "GTS Root R4" "fetch" ] = false) do={ $LogPrint warning $0 ("Downloading required certificate failed."); :error false; } From f41ed5b1f522df98e2d007fe0421b0ca06a28009 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 7 Nov 2025 22:34:00 +0100 Subject: [PATCH 13/76] contrib/html: properly handle anchors --- contrib/html.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/html.sh b/contrib/html.sh index d4a1a90..603e606 100755 --- a/contrib/html.sh +++ b/contrib/html.sh @@ -11,7 +11,7 @@ sed \ < "${0}.d/head.html" markdown -f toc,idanchor "${1}" | sed \ - -e 's/href="\([-_\./[:alnum:]]*\)\.md"/href="\1.html"/g' \ + -e 's/href="\([-_\./[:alnum:]]*\)\.md\(#[-[:alnum:]]*\)\?"/href="\1.html\2"/g' \ -e '/| id="\L\1">|' printf '' From b5a026966736f8c530e902d222dbf8dc4eea9cfd Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 12:01:57 +0100 Subject: [PATCH 14/76] global-functions: $ScriptInstallUpdate: define certificate use --- global-functions.rsc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/global-functions.rsc b/global-functions.rsc index d4c37a2..48aaf7f 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -1248,7 +1248,7 @@ :global SymbolForNotification; :global ValidateSyntax; - :if ([ $CertificateAvailable "ISRG Root X2" ] = false) do={ + :if ([ $CertificateAvailable "ISRG Root X2" "fetch" ] = false) do={ $LogPrint warning $0 ("Downloading certificate failed, trying without."); } @@ -1299,7 +1299,7 @@ } :if ([ :len ($ScriptInfo->"certificate") ] > 0) do={ - :if ([ $CertificateAvailable ($ScriptInfo->"certificate") ] = false) do={ + :if ([ $CertificateAvailable ($ScriptInfo->"certificate") "fetch" ] = false) do={ $LogPrint warning $0 ("Downloading certificate failed, trying without."); } } From 93a17d8df405c81fbfa7a9b60f9a4ade4eae12a7 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 7 Nov 2025 22:57:17 +0100 Subject: [PATCH 15/76] contrib/html: drop ampersand, comma, dash & tick from id/anchor --- contrib/html.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib/html.sh b/contrib/html.sh index 603e606..9c1556c 100755 --- a/contrib/html.sh +++ b/contrib/html.sh @@ -12,6 +12,7 @@ sed \ markdown -f toc,idanchor "${1}" | sed \ -e 's/href="\([-_\./[:alnum:]]*\)\.md\(#[-[:alnum:]]*\)\?"/href="\1.html\2"/g' \ - -e '/| id="\L\1">|' + -e '/| id="\L\1">|' \ + -e '/' From 876505c36dd2cafb9ce151a3051b1631fe09b3a1 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 12:05:10 +0100 Subject: [PATCH 16/76] check-certificates: define certificate use --- check-certificates.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check-certificates.rsc b/check-certificates.rsc index f2d5c1f..3300bee 100644 --- a/check-certificates.rsc +++ b/check-certificates.rsc @@ -189,7 +189,7 @@ fingerprint!=[ :tostr ($CertVal->"fingerprint") ] expires-after>$CertRenewTime ]; :local CertNewVal [ /certificate/get $CertNew ]; - :if ([ $CertificateAvailable ([ $ParseKeyValueStore ($CertNewVal->"issuer") ]->"CN") ] = false) do={ + :if ([ $CertificateAvailable ([ $ParseKeyValueStore ($CertNewVal->"issuer") ]->"CN") "fetch" ] = false) do={ $LogPrint warning $ScriptName ("The certificate chain is not available!"); } From 677b5b8069194fdd5c1c2ddbbcd4da2c5eb0c52b Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 18 Nov 2025 16:50:09 +0100 Subject: [PATCH 17/76] doc/mod/ssh-keys-import: create code block with indention --- doc/mod/ssh-keys-import.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/doc/mod/ssh-keys-import.md b/doc/mod/ssh-keys-import.md index 49276d0..abf4d39 100644 --- a/doc/mod/ssh-keys-import.md +++ b/doc/mod/ssh-keys-import.md @@ -51,12 +51,10 @@ The functions `$SSHKeysImportFile` can read an `authorized_keys`-style file and import all the keys. The user given to the function can be overwritting from comments in the file. Create a file `keys.pub` with this content: -``` -ssh-ed25519 AAAAC3Nza...3OcN8A user@client -ssh-rsa AAAAB3Nza...ozyts= worker@station -# user=example -ssh-rsa AAAAB3Nza...GXQVk= person@host -``` + ssh-ed25519 AAAAC3Nza...3OcN8A user@client + ssh-rsa AAAAB3Nza...ozyts= worker@station + # user=example + ssh-rsa AAAAB3Nza...GXQVk= person@host Then import it with: From 0707250adabc551f2c0383129c704464a2700433 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 29 Oct 2025 15:19:32 +0100 Subject: [PATCH 18/76] contrib/*: unify html code --- contrib/html.sh.d/head.html | 4 ++-- contrib/logo-color.html | 17 +++++++---------- contrib/notification.html | 17 +++++++---------- doc/mod/notification-telegram.md | 2 +- 4 files changed, 17 insertions(+), 23 deletions(-) diff --git a/contrib/html.sh.d/head.html b/contrib/html.sh.d/head.html index 779e246..0ce3ff7 100644 --- a/contrib/html.sh.d/head.html +++ b/contrib/html.sh.d/head.html @@ -1,6 +1,6 @@ -RouterOS Scripts :: __TITLE__ - + +RouterOS Scripts :: __TITLE__ diff --git a/contrib/logo-color.html b/contrib/logo-color.html index 507445b..eb00492 100644 --- a/contrib/logo-color.html +++ b/contrib/logo-color.html @@ -1,14 +1,12 @@ - - - - -RouterOS-Scripts Logo Color Changer + + +RouterOS Scripts :: Logo Color Changer + - - + -

RouterOS-Scripts Logo Color Changer

+

Logo Color Changer

You want the logo for your own notifications? But you joined the Telegram Group and want @@ -36,5 +34,4 @@ for other browsers may differ.)

Set a profile photo for your Telegram bot.

- - + diff --git a/contrib/notification.html b/contrib/notification.html index b7d6764..472ce48 100644 --- a/contrib/notification.html +++ b/contrib/notification.html @@ -1,14 +1,12 @@ - - - - -RouterOS-Scripts Notification Generator + + +RouterOS Scripts :: Notification Generator + - - + -

RouterOS-Scripts Notification Generator

+

Notification Generator

@@ -31,5 +29,4 @@

Then right-click, click "Take Screenshot" and finally select the notification and download it.

- - + diff --git a/doc/mod/notification-telegram.md b/doc/mod/notification-telegram.md index 804104f..7d5092d 100644 --- a/doc/mod/notification-telegram.md +++ b/doc/mod/notification-telegram.md @@ -107,7 +107,7 @@ chat with [BotFather ↗️](https://t.me/BotFather) and set it there. ![set profile photo](notification-telegram.d/setuserpic.avif) Have a look at my -[RouterOS-Scripts Logo Color Changer](https://git.eworm.de/cgit/routeros-scripts/plain/contrib/logo-color.html) +[Logo Color Changer](https://git.eworm.de/cgit/routeros-scripts/plain/contrib/logo-color.html) to create a colored version of this scripts' logo. See also From 87787eefe3425b29e5fffe0c636adffc04208de6 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 12:06:03 +0100 Subject: [PATCH 19/76] fw-addr-lists: define certificate use --- fw-addr-lists.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fw-addr-lists.rsc b/fw-addr-lists.rsc index c85cc8b..e5a71aa 100644 --- a/fw-addr-lists.rsc +++ b/fw-addr-lists.rsc @@ -74,7 +74,7 @@ :if ([ :len ($List->"cert") ] > 0) do={ :set CheckCertificate true; - :if ([ $CertificateAvailable ($List->"cert") ] = false) do={ + :if ([ $CertificateAvailable ($List->"cert") "fetch" ] = false) do={ $LogPrint warning $ScriptName ("Downloading required certificate (" . $FwListName . \ " / " . $List->"url" . ") failed, trying anyway."); } From affb9b3baf44fe84089a5b4059b93b336f29b21c Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 18 Nov 2025 16:52:21 +0100 Subject: [PATCH 20/76] doc/mode-button: create code block with indention --- doc/mode-button.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/doc/mode-button.md b/doc/mode-button.md index be15bc9..af95ddb 100644 --- a/doc/mode-button.md +++ b/doc/mode-button.md @@ -26,17 +26,15 @@ can configure the reset button to act the same, see Copy this code to terminal to check: -``` -:if ([ :len [ /system/routerboard/mode-button/print as-value ] ] > 0) do={ - :put "Mode button is supported."; -} else={ - :if ([ :len [ /system/routerboard/reset-button/print as-value ] ] > 0) do={ - :put "Mode button is not supported, but reset button is."; - } else={ - :put "Neither mode button nor reset button is supported."; - } -} -``` + :if ([ :len [ /system/routerboard/mode-button/print as-value ] ] > 0) do={ + :put "Mode button is supported."; + } else={ + :if ([ :len [ /system/routerboard/reset-button/print as-value ] ] > 0) do={ + :put "Mode button is not supported, but reset button is."; + } else={ + :put "Neither mode button nor reset button is supported."; + } + } Requirements and installation ----------------------------- From 7b57882fa09c71dae7854ce46285e28b57a56f48 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 29 Oct 2025 15:35:14 +0100 Subject: [PATCH 21/76] contrib/{logo-color,notification}: add navigation structure --- contrib/logo-color.html | 6 ++++++ contrib/notification.html | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/contrib/logo-color.html b/contrib/logo-color.html index eb00492..8ee1ba9 100644 --- a/contrib/logo-color.html +++ b/contrib/logo-color.html @@ -8,6 +8,8 @@

Logo Color Changer

+

⬅️ Go back to main README

+

You want the logo for your own notifications? But you joined the Telegram Group and want something that differentiates? Color it!

@@ -34,4 +36,8 @@ for other browsers may differ.)

Set a profile photo for your Telegram bot.

+
+ +

⬅️ Go back to main README
+⬆️ Go back to top

diff --git a/contrib/notification.html b/contrib/notification.html index 472ce48..3bc86fc 100644 --- a/contrib/notification.html +++ b/contrib/notification.html @@ -8,6 +8,8 @@

Notification Generator

+

⬅️ Go back to main README

+
@@ -29,4 +31,8 @@

Then right-click, click "Take Screenshot" and finally select the notification and download it.

+
+ +

⬅️ Go back to main README
+⬆️ Go back to top

From 8ff34a2408b920dcdb59b2ea48d70148496553e2 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 12:10:22 +0100 Subject: [PATCH 22/76] mod/notification-ntfy: define certificate use --- mod/notification-ntfy.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/notification-ntfy.rsc b/mod/notification-ntfy.rsc index 7114020..dd10812 100644 --- a/mod/notification-ntfy.rsc +++ b/mod/notification-ntfy.rsc @@ -109,7 +109,7 @@ :onerror Err { :if ($Server = "ntfy.sh") do={ - :if ([ $CertificateAvailable "ISRG Root X1" ] = false) do={ + :if ([ $CertificateAvailable "ISRG Root X1" "fetch" ] = false) do={ $LogPrint warning $0 ("Downloading required certificate failed."); :error false; } From 090f25a82d862eaa5db86a18f9d570084e20e2b5 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 12:04:13 +0100 Subject: [PATCH 23/76] check-certificates: add missing semicolon --- check-certificates.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check-certificates.rsc b/check-certificates.rsc index c10e33b..f2d5c1f 100644 --- a/check-certificates.rsc +++ b/check-certificates.rsc @@ -21,7 +21,7 @@ :global CertWarnTime; :global Identity; - :global CertificateAvailable + :global CertificateAvailable; :global EscapeForRegEx; :global IfThenElse; :global LogPrint; From 1c6e888664eb9bec7f19d59f5608b01bdabbbbf5 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 29 Oct 2025 16:06:42 +0100 Subject: [PATCH 24/76] contrib/notification: update date format --- contrib/notification.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/notification.html b/contrib/notification.html index 3bc86fc..c86450c 100644 --- a/contrib/notification.html +++ b/contrib/notification.html @@ -16,7 +16,7 @@

[MikroTik] ℹ️ Subject

Message
-

⏰ This message was queued since oct/18/2022 18:30:48 and may be obsolete.

+

⏰ This message was queued since 2025-10-29 16:06:18 and may be obsolete.

✂️ The message was too long and has been truncated, cut off 13%!

@@ -25,7 +25,7 @@

Subject:

Message:

Show link:

-

Queued since

+

Queued since

Cut-off with percent

Then right-click, click "Take Screenshot" and finally select the From f0910a44723feccbf5fb25340985cd654f310cd1 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 12:09:43 +0100 Subject: [PATCH 25/76] mod/notification-telegram: define certificate use --- mod/notification-telegram.rsc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mod/notification-telegram.rsc b/mod/notification-telegram.rsc index ff9b4da..b1996a3 100644 --- a/mod/notification-telegram.rsc +++ b/mod/notification-telegram.rsc @@ -30,7 +30,7 @@ :return false; } - :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ + :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={ $LogPrint warning $0 ("Downloading required certificate failed."); :return false; } @@ -72,7 +72,7 @@ :global CertificateAvailable; :global LogPrint; - :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ + :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={ $LogPrint warning $0 ("Downloading required certificate failed."); :return false; } @@ -197,7 +197,7 @@ "&reply_to_message_id=" . ($Notification->"replyto") . "&message_thread_id=" . $ThreadId . \ "&disable_web_page_preview=true&parse_mode=MarkdownV2"); :onerror Err { - :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ + :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={ $LogPrint warning $0 ("Downloading required certificate failed."); :error false; } From 83b164d5115931209452940b2350dcd8077b139a Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 11:58:23 +0100 Subject: [PATCH 26/76] global-functions: $CertificateDownload: drop unused function --- global-functions.rsc | 1 - 1 file changed, 1 deletion(-) diff --git a/global-functions.rsc b/global-functions.rsc index 5ede654..3089d2e 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -161,7 +161,6 @@ :global ScriptUpdatesBaseUrl; :global ScriptUpdatesUrlSuffix; - :global CertificateAvailable; :global CertificateNameByCN; :global CleanName; :global FetchUserAgentStr; From 2ca922d779e3718ae20a198c66a7825b17e10a62 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 29 Oct 2025 16:11:23 +0100 Subject: [PATCH 27/76] contrib/notification: format the values italic --- contrib/notification.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/notification.html b/contrib/notification.html index c86450c..a4d0486 100644 --- a/contrib/notification.html +++ b/contrib/notification.html @@ -16,8 +16,8 @@

[MikroTik] ℹ️ Subject

Message
-

⏰ This message was queued since 2025-10-29 16:06:18 and may be obsolete.

-

✂️ The message was too long and has been truncated, cut off 13%!

+

⏰ This message was queued since 2025-10-29 16:06:18 and may be obsolete.

+

✂️ The message was too long and has been truncated, cut off 13%!

From 7772fbb22d6eb9118075c87230a43cf9b4926da5 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 12:07:22 +0100 Subject: [PATCH 28/76] netwatch-dns: define certificate use --- netwatch-dns.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netwatch-dns.rsc b/netwatch-dns.rsc index 9e2f9bc..eee5f85 100644 --- a/netwatch-dns.rsc +++ b/netwatch-dns.rsc @@ -112,7 +112,7 @@ :foreach DohServer in=$DohServers do={ :if ([ :len ($DohServer->"doh-cert") ] > 0) do={ - :if ([ $CertificateAvailable ($DohServer->"doh-cert") ] = false) do={ + :if ([ $CertificateAvailable ($DohServer->"doh-cert") "dns" ] = false) do={ $LogPrint warning $ScriptName ("Downloading certificate failed, trying without."); } } From 7d701483d333cec77c4b7cc6ce2bb4a8fc2eb81c Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Thu, 30 Oct 2025 11:07:38 +0100 Subject: [PATCH 29/76] contrib/checksums: output to stdout... ... and let the Makefile redirect. --- Makefile | 2 +- contrib/checksums.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 0265a51..d8f2387 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ all: $(CAPSMAN) $(LOCAL) $(WIFI) $(HTML) checksums.json < $< > $@ checksums.json: contrib/checksums.sh *.rsc */*.rsc - contrib/checksums.sh + contrib/checksums.sh > $@ clean: rm -f $(HTML) checksums.json diff --git a/contrib/checksums.sh b/contrib/checksums.sh index b472b49..ab4e973 100755 --- a/contrib/checksums.sh +++ b/contrib/checksums.sh @@ -6,4 +6,4 @@ set -e md5sum $(find -name '*.rsc' | sort) | \ sed -e "s| \./||" -e 's|.rsc$||' | \ - jq --raw-input --null-input '[ inputs | split (" ") | { (.[1]): (.[0]) }] | add' > 'checksums.json' + jq --raw-input --null-input '[ inputs | split (" ") | { (.[1]): (.[0]) }] | add' From 27a2f98db9ec012096240aebff624257f3e4bcea Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 16:25:01 +0100 Subject: [PATCH 30/76] doc/mod/notification-telegram: use relative reference in link This may break, depending on site. --- doc/mod/notification-telegram.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/mod/notification-telegram.md b/doc/mod/notification-telegram.md index 7d5092d..bdf1331 100644 --- a/doc/mod/notification-telegram.md +++ b/doc/mod/notification-telegram.md @@ -106,8 +106,7 @@ chat with [BotFather ↗️](https://t.me/BotFather) and set it there. ![set profile photo](notification-telegram.d/setuserpic.avif) -Have a look at my -[Logo Color Changer](https://git.eworm.de/cgit/routeros-scripts/plain/contrib/logo-color.html) +Have a look at my [Logo Color Changer](../../contrib/logo-color.html) to create a colored version of this scripts' logo. See also From 5ccb0d07b120f1fd7af738d5eed3b20345e2c971 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 12:10:58 +0100 Subject: [PATCH 31/76] telegram-chat: define certificate use --- telegram-chat.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telegram-chat.rsc b/telegram-chat.rsc index 7f7b7a7..54872fb 100644 --- a/telegram-chat.rsc +++ b/telegram-chat.rsc @@ -61,7 +61,7 @@ :set TelegramRandomDelay 0; } - :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ + :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={ $LogPrint warning $ScriptName ("Downloading required certificate failed."); :set ExitOK true; :error false; From 20885c4620ec95e46d914fdbb4b63378e72c25d9 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Sun, 2 Nov 2025 09:19:16 +0100 Subject: [PATCH 32/76] global-functions: $ScriptInstallUpdate: give hint on ignore Fixes: https://github.com/eworm-de/routeros-scripts/issues/112 --- global-functions.rsc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/global-functions.rsc b/global-functions.rsc index 3089d2e..b5fc0eb 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -1313,6 +1313,11 @@ $LogPrint warning $0 ("Removing dummy. Typo on installation?"); /system/script/remove $Script; } + :if ([ :len ($ScriptInfo->"base-url") ] = 0 && [ :len ($ScriptInfo->"url-suffix") ] = 0 && \ + [ :len $CheckSum ] = 0) do={ + $LogPrintOnce warning $0 \ + ("Added the script manually? Skip updates with 'ignore=true' in comment."); + } :error false; } From c404dc63268da7e1f14cc57f85ec971012559c60 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 16:27:59 +0100 Subject: [PATCH 33/76] contrib/logo-color: use relative reference in link ... without extra path elements. This may break, depending on site. --- contrib/logo-color.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/logo-color.html b/contrib/logo-color.html index 8ee1ba9..9962e99 100644 --- a/contrib/logo-color.html +++ b/contrib/logo-color.html @@ -33,7 +33,7 @@ logo and download it.

for other browsers may differ.)

See how to -Set +Set a profile photo for your Telegram bot.


From 335bfc0a88e0a79e3ae03ee72a81edda9f5d0c32 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 12:03:33 +0100 Subject: [PATCH 34/76] update-tunnelbroker: define certificate use --- update-tunnelbroker.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/update-tunnelbroker.rsc b/update-tunnelbroker.rsc index 9057e1e..5372f4c 100644 --- a/update-tunnelbroker.rsc +++ b/update-tunnelbroker.rsc @@ -28,7 +28,7 @@ :error false; } - :if ([ $CertificateAvailable "Starfield Root Certificate Authority - G2" ] = false) do={ + :if ([ $CertificateAvailable "Starfield Root Certificate Authority - G2" "fetch" ] = false) do={ $LogPrint error $ScriptName ("Downloading required certificate failed."); :set ExitOK true; :error false; From 298a43a871b28bcdc057310dbc5b7819944e4bb2 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 7 Nov 2025 00:00:03 +0100 Subject: [PATCH 35/76] global-functions: $ScriptInstallUpdate: either or... ... but not both. --- global-functions.rsc | 1 + 1 file changed, 1 insertion(+) diff --git a/global-functions.rsc b/global-functions.rsc index b5fc0eb..2379f9b 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -1312,6 +1312,7 @@ :if ($ScriptVal->"source" = "#!rsc by RouterOS\n") do={ $LogPrint warning $0 ("Removing dummy. Typo on installation?"); /system/script/remove $Script; + :error false; } :if ([ :len ($ScriptInfo->"base-url") ] = 0 && [ :len ($ScriptInfo->"url-suffix") ] = 0 && \ [ :len $CheckSum ] = 0) do={ From 15c64a6b11ec33107125c10029507875b4ab862d Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 16:26:05 +0100 Subject: [PATCH 36/76] contrib: introduce Makefile... ... and update references in links. --- contrib/Makefile | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 contrib/Makefile diff --git a/contrib/Makefile b/contrib/Makefile new file mode 100644 index 0000000..aae3178 --- /dev/null +++ b/contrib/Makefile @@ -0,0 +1,10 @@ +# Makefile + +HTML := $(wildcard *.html) + +.PHONY: all docs + +all: docs + +docs: $(HTML) + sed -i '/href=/s|\.md|\.html|' $(HTML) From 737a872a5f768eea07b1b74439580e3ce98752cd Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 12:11:38 +0100 Subject: [PATCH 37/76] CERTIFICATES: define certificate use --- CERTIFICATES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CERTIFICATES.md b/CERTIFICATES.md index 69d6c18..0e0a867 100644 --- a/CERTIFICATES.md +++ b/CERTIFICATES.md @@ -61,7 +61,7 @@ Import a certificate by CommonName Running the function `$CertificateAvailable` with that name as parameter makes sure the certificate is available in the device's store: - $CertificateAvailable "ISRG Root X2"; + $CertificateAvailable "ISRG Root X2" "fetch"; If the certificate is actually available already nothing happens, and there is no output. Otherwise the certificate is downloaded and imported. From d002d1c0c04e90cd73e1b821e944c56321bfa1d8 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 3 Nov 2025 09:17:25 +0100 Subject: [PATCH 38/76] global-functions: $ScriptInstallUpdate: extra actions on 'not found' only --- global-functions.rsc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/global-functions.rsc b/global-functions.rsc index 2379f9b..eb837aa 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -1309,6 +1309,10 @@ } } do={ $LogPrint warning $0 ("Failed fetching script '" . $ScriptVal->"name" . "': " . $Err); + :if ($Err != "Fetch failed with status 404") do={ + :error false; + } + :if ($ScriptVal->"source" = "#!rsc by RouterOS\n") do={ $LogPrint warning $0 ("Removing dummy. Typo on installation?"); /system/script/remove $Script; From 6aed778f5b12568ab3799ed17c8cf711963410a5 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 23:40:27 +0100 Subject: [PATCH 39/76] doc/mod/notification-telegram: hint on possibly broken link --- doc/mod/notification-telegram.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/mod/notification-telegram.md b/doc/mod/notification-telegram.md index bdf1331..f464ff0 100644 --- a/doc/mod/notification-telegram.md +++ b/doc/mod/notification-telegram.md @@ -109,6 +109,10 @@ chat with [BotFather ↗️](https://t.me/BotFather) and set it there. Have a look at my [Logo Color Changer](../../contrib/logo-color.html) to create a colored version of this scripts' logo. +> 💡️ **Hint**: The above link may be broken on code hosting sites. +> Use [Logo Color Changer](https://rsc.eworm.de/main/contrib/logo-color.html) +> instead. + See also -------- From cc5aea22b357cebb54741be1d71a99f0b28d8c3f Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 10 Nov 2025 12:08:49 +0100 Subject: [PATCH 40/76] doc/mod/notification-matrix: define certificate use --- doc/mod/notification-matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/mod/notification-matrix.md b/doc/mod/notification-matrix.md index da6d6de..ad4cf4f 100644 --- a/doc/mod/notification-matrix.md +++ b/doc/mod/notification-matrix.md @@ -49,7 +49,7 @@ your server in device's certificate store. The example below is for `matrix.org`, which uses a trust chain from *Google Trust Services*. Run this to import the required certificate: - $CertificateAvailable "GTS Root R4"; + $CertificateAvailable "GTS Root R4" "fetch"; Replace the CA certificate name with what ever is needed for your server. You may want to find the From 8f6a38f2994a36742c6d200d74d4548bd9c2e356 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 17 Nov 2025 09:56:49 +0100 Subject: [PATCH 41/76] mod/notification-email: remove schedule with find... ... as a race condition could occur and the scheduler is already gone. --- mod/notification-email.rsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/notification-email.rsc b/mod/notification-email.rsc index 7c3a6ff..668daba 100644 --- a/mod/notification-email.rsc +++ b/mod/notification-email.rsc @@ -132,7 +132,7 @@ } :if ($AllDone = true && $QueueLen = [ :len $EmailQueue ]) do={ - /system/scheduler/remove $Scheduler; + /system/scheduler/remove [ find where name="_FlushEmailQueue" ]; :set EmailQueue; :return true; } From 49a8c29f9a4be0856f49f6c79fe9e561dafc34df Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 23:59:08 +0100 Subject: [PATCH 42/76] contrib/html: hide the hint on broken link --- contrib/html.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib/html.sh b/contrib/html.sh index 9c1556c..6d7c640 100755 --- a/contrib/html.sh +++ b/contrib/html.sh @@ -13,6 +13,7 @@ sed \ markdown -f toc,idanchor "${1}" | sed \ -e 's/href="\([-_\./[:alnum:]]*\)\.md\(#[-[:alnum:]]*\)\?"/href="\1.html\2"/g' \ -e '/| id="\L\1">|' \ - -e '/' From 7e5638b84545a1b2d4fa887acbc42f2999e0122e Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 23:51:05 +0100 Subject: [PATCH 43/76] contrib/logo-color: hint on possibly broken site --- contrib/logo-color.html | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/contrib/logo-color.html b/contrib/logo-color.html index 9962e99..f05f4bb 100644 --- a/contrib/logo-color.html +++ b/contrib/logo-color.html @@ -10,6 +10,11 @@

⬅️ Go back to main README

+

💡️ Hint: This site or links +on it may be broken on code hosting sites. Use +Logo Color Changer +instead.

+

You want the logo for your own notifications? But you joined the Telegram Group and want something that differentiates? Color it!

From c6cc8b9a51c0f399c36823b33a6d282344f16416 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 22:19:44 +0100 Subject: [PATCH 44/76] README: move the QR code --- README.md | 2 +- README.d/upstream.png => general/qr-code.png | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename README.d/upstream.png => general/qr-code.png (100%) diff --git a/README.md b/README.md index b77538d..36408ec 100644 --- a/README.md +++ b/README.md @@ -404,7 +404,7 @@ immediately remove the link in question. Upstream -------- -[![upstream](README.d/upstream.png)](https://rsc.eworm.de/) +[![upstream](general/qr-code.png)](https://rsc.eworm.de/) URL: [GitHub.com](https://github.com/eworm-de/routeros-scripts#routeros-scripts) diff --git a/README.d/upstream.png b/general/qr-code.png similarity index 100% rename from README.d/upstream.png rename to general/qr-code.png From 92b7277c6f7bbf2ec91490795425c99a5cc8a9df Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 22:08:11 +0100 Subject: [PATCH 45/76] contrib/html: add a head with eworm, QR code and caption --- contrib/html.sh | 2 ++ contrib/html.sh.d/head.html | 9 +++++++++ general/eworm-meadow.avif | Bin 0 -> 3922 bytes general/style.css | 12 ++++++++++++ 4 files changed, 23 insertions(+) create mode 100644 general/eworm-meadow.avif diff --git a/contrib/html.sh b/contrib/html.sh index 6d7c640..cf5f9b2 100755 --- a/contrib/html.sh +++ b/contrib/html.sh @@ -8,6 +8,8 @@ sed \ -e "s|__TITLE__|$(head -n1 "${1}")|" \ -e "s|__STYLE__|$(realpath --relative-to="${RELTO}" general/style.css)|" \ -e "s|__LOGO__|$(realpath --relative-to="${RELTO}" logo.png)|" \ + -e "s|__EWORM__|$(realpath --relative-to="${RELTO}" general/eworm-meadow.avif)|" \ + -e "s|__QR_CODE__|$(realpath --relative-to="${RELTO}" general/qr-code.png)|" \ < "${0}.d/head.html" markdown -f toc,idanchor "${1}" | sed \ diff --git a/contrib/html.sh.d/head.html b/contrib/html.sh.d/head.html index 0ce3ff7..da54157 100644 --- a/contrib/html.sh.d/head.html +++ b/contrib/html.sh.d/head.html @@ -4,3 +4,12 @@ + + + + + +
eworm on meadowQR code: rsc.eworm.deRouterOS Scripts
+ a collection of scripts for MikroTik RouterOS
+
+ diff --git a/general/eworm-meadow.avif b/general/eworm-meadow.avif new file mode 100644 index 0000000000000000000000000000000000000000..f592d59b86c9d178954a09bfb30dd7b6268a3a0b GIT binary patch literal 3922 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 Ol=-JRBU@RH*#86W_XlVI literal 0 HcmV?d00001 diff --git a/general/style.css b/general/style.css index ad25c7c..018ccc4 100644 --- a/general/style.css +++ b/general/style.css @@ -68,6 +68,18 @@ pre code { span.link { color: #863600; } +td.head { + line-height: 1.2; + padding: 0 2em; +} +td.head .top { + font-size: 250%; + font-weight: bold; +} +td.head .bottom { + font-size: 125%; + color: #555; +} @media only screen and (orientation: landscape) { body { margin-left: 10vw; From 8ef6ec981920d12dec3e5c79f7f3027c72263975 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 23:52:58 +0100 Subject: [PATCH 46/76] contrib/notification: hint on possibly broken site --- contrib/notification.html | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/contrib/notification.html b/contrib/notification.html index a4d0486..3ff8754 100644 --- a/contrib/notification.html +++ b/contrib/notification.html @@ -10,6 +10,11 @@

⬅️ Go back to main README

+

💡️ Hint: This site or links +on it may be broken on code hosting sites. Use +Notification Generator +instead.

+
From a2250a00e61edda3dadf7b253dc606713e036f56 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 23:19:15 +0100 Subject: [PATCH 47/76] README: add the upstream url verbatim --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 36408ec..3c69017 100644 --- a/README.md +++ b/README.md @@ -404,6 +404,8 @@ immediately remove the link in question. Upstream -------- +[rsc.eworm.de](https://rsc.eworm.de/) + [![upstream](general/qr-code.png)](https://rsc.eworm.de/) URL: From 520e27c7f1c4d2b3ce56736aecddd44bf8d21d5b Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 23:26:37 +0100 Subject: [PATCH 48/76] contrib/logo-color: add a head with eworm, QR code and caption --- contrib/logo-color.html | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/contrib/logo-color.html b/contrib/logo-color.html index f05f4bb..3aca324 100644 --- a/contrib/logo-color.html +++ b/contrib/logo-color.html @@ -6,6 +6,14 @@ + + + + +
eworm on meadowQR code: rsc.eworm.deRouterOS Scripts
+ a collection of scripts for MikroTik RouterOS
+
+

Logo Color Changer

⬅️ Go back to main README

From b24435decb2d48c3ba5de1cdab950a8c71e29ca2 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 23:56:16 +0100 Subject: [PATCH 49/76] contrib/Makefile: hide the hint on broken site --- contrib/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/contrib/Makefile b/contrib/Makefile index aae3178..cdb9f4c 100644 --- a/contrib/Makefile +++ b/contrib/Makefile @@ -7,4 +7,7 @@ HTML := $(wildcard *.html) all: docs docs: $(HTML) - sed -i '/href=/s|\.md|\.html|' $(HTML) + sed -i \ + -e '/href=/s|\.md|\.html|' \ + -e '/blockquote/s|/\*! display \*/|display: none;|' \ + $(HTML) From 5adbb852989c065d1c6b7c0f096e96247af26e0f Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 23:16:04 +0100 Subject: [PATCH 50/76] README: add a sub-section for code hosting --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 3c69017..f751d02 100644 --- a/README.md +++ b/README.md @@ -408,12 +408,11 @@ Upstream [![upstream](general/qr-code.png)](https://rsc.eworm.de/) -URL: -[GitHub.com](https://github.com/eworm-de/routeros-scripts#routeros-scripts) +### Code hosting -Mirror: -[eworm.de](https://git.eworm.de/cgit/routeros-scripts/about/) -[GitLab.com](https://gitlab.com/eworm-de/routeros-scripts#routeros-scripts) +* [eworm.de](https://git.eworm.de/cgit/routeros-scripts/about/) +* [GitHub.com](https://github.com/eworm-de/routeros-scripts#routeros-scripts) +* [GitLab.com](https://gitlab.com/eworm-de/routeros-scripts#routeros-scripts) --- [⬆️ Go back to top](#top) From c38031b74e7592b63e23db892d5795eb304ab65c Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 23:27:09 +0100 Subject: [PATCH 51/76] contrib/notification: add a head with eworm, QR code and caption --- contrib/notification.html | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/contrib/notification.html b/contrib/notification.html index 3ff8754..902d328 100644 --- a/contrib/notification.html +++ b/contrib/notification.html @@ -6,6 +6,14 @@ + + + + +
eworm on meadowQR code: rsc.eworm.deRouterOS Scripts
+ a collection of scripts for MikroTik RouterOS
+
+

Notification Generator

⬅️ Go back to main README

From 9d3d12945aafe36c6be46c41941541ad744eb025 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 12 Nov 2025 17:22:30 +0100 Subject: [PATCH 52/76] contrib/html: add a footer --- Makefile | 6 +++++- contrib/html.sh | 5 ++++- contrib/html.sh.d/foot.html | 4 ++++ general/style.css | 4 ++++ 4 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 contrib/html.sh.d/foot.html diff --git a/Makefile b/Makefile index f841ca2..ecb25bc 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,10 @@ GEN_RSC := $(wildcard *.capsman.rsc *.local.rsc *.wifi.rsc) MARKDOWN := $(wildcard *.md doc/*.md doc/mod/*.md) HTML := $(MARKDOWN:.md=.html) +DATE ?= $(shell date --rfc-email) +VERSION ?= $(shell git symbolic-ref --short HEAD 2>/dev/null)/$(shell git rev-list --count HEAD 2>/dev/null)/$(shell git rev-parse --short=8 HEAD 2>/dev/null) +export DATE VERSION + .PHONY: all checksums docs rsc clean all: checksums docs rsc @@ -19,7 +23,7 @@ checksums.json: contrib/checksums.sh $(ALL_RSC) docs: $(HTML) -%.html: %.md general/style.css contrib/html.sh contrib/html.sh.d/head.html +%.html: %.md general/style.css contrib/html.sh contrib/html.sh.d/head.html contrib/html.sh.d/foot.html contrib/html.sh $< > $@ rsc: $(GEN_RSC) diff --git a/contrib/html.sh b/contrib/html.sh index cf5f9b2..11dcefc 100755 --- a/contrib/html.sh +++ b/contrib/html.sh @@ -18,4 +18,7 @@ markdown -f toc,idanchor "${1}" | sed \ -e '/' +sed \ + -e "s|__DATE__|${DATE:-$(date --rfc-email)}|" \ + -e "s|__VERSION__|${VERSION:-unknown}|" \ + < "${0}.d/foot.html" diff --git a/contrib/html.sh.d/foot.html b/contrib/html.sh.d/foot.html new file mode 100644 index 0000000..106c2bd --- /dev/null +++ b/contrib/html.sh.d/foot.html @@ -0,0 +1,4 @@ + +

RouterOS Scripts documentation generated on __DATE__ for __VERSION__

+ + diff --git a/general/style.css b/general/style.css index 018ccc4..73b0921 100644 --- a/general/style.css +++ b/general/style.css @@ -43,6 +43,10 @@ img.logo { float: left; border-radius: 50%; } +p.foot { + color: #777; + text-align: center; +} p.heading { margin: 0px; font-weight: bold; From 783021c9a07d5584b49bef56c0edb1cbb838b5c5 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Thu, 6 Nov 2025 17:32:37 +0100 Subject: [PATCH 53/76] Makefile: clean up and add phony targets --- Makefile | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index b799535..f841ca2 100644 --- a/Makefile +++ b/Makefile @@ -2,18 +2,28 @@ # template scripts -> final scripts # markdown files -> html files -CAPSMAN = $(wildcard *.capsman.rsc) -LOCAL = $(wildcard *.local.rsc) -WIFI = $(wildcard *.wifi.rsc) +ALL_RSC := $(wildcard *.rsc */*.rsc) +GEN_RSC := $(wildcard *.capsman.rsc *.local.rsc *.wifi.rsc) -MARKDOWN = $(wildcard *.md doc/*.md doc/mod/*.md) -HTML = $(MARKDOWN:.md=.html) +MARKDOWN := $(wildcard *.md doc/*.md doc/mod/*.md) +HTML := $(MARKDOWN:.md=.html) -all: $(CAPSMAN) $(LOCAL) $(WIFI) $(HTML) checksums.json +.PHONY: all checksums docs rsc clean + +all: checksums docs rsc + +checksums: checksums.json + +checksums.json: contrib/checksums.sh $(ALL_RSC) + contrib/checksums.sh > $@ + +docs: $(HTML) %.html: %.md general/style.css contrib/html.sh contrib/html.sh.d/head.html contrib/html.sh $< > $@ +rsc: $(GEN_RSC) + %.capsman.rsc: %.template.rsc Makefile sed -e '/\/interface\/wifi\//d' -e '/\/interface\/wireless\//d' -e 's|%TEMPL%|.capsman|' \ -e '/^# NOT \/caps-man\/ #$$/,/^# NOT \/caps-man\/ #$$/d' \ @@ -32,8 +42,5 @@ all: $(CAPSMAN) $(LOCAL) $(WIFI) $(HTML) checksums.json -e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \ < $< > $@ -checksums.json: contrib/checksums.sh *.rsc */*.rsc - contrib/checksums.sh > $@ - clean: rm -f $(HTML) checksums.json From 585f3816d2f17955a703d74fc20560b7e31f8ce6 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 7 Nov 2025 23:03:58 +0100 Subject: [PATCH 54/76] fw-addr-lists.d/{allow,block}: use short url rsc.eworm.de --- fw-addr-lists.d/allow | 2 +- fw-addr-lists.d/block | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fw-addr-lists.d/allow b/fw-addr-lists.d/allow index 8b59ed7..f0239cd 100644 --- a/fw-addr-lists.d/allow +++ b/fw-addr-lists.d/allow @@ -1,3 +1,3 @@ # an ip address list for use with fw-addr-lists script -# https://git.eworm.de/cgit/routeros-scripts/about/doc/fw-addr-lists.md +# https://rsc.eworm.de/doc/fw-addr-lists.md git.eworm.de diff --git a/fw-addr-lists.d/block b/fw-addr-lists.d/block index 5e9fef2..86a6c62 100644 --- a/fw-addr-lists.d/block +++ b/fw-addr-lists.d/block @@ -1,5 +1,5 @@ # an ip address list for use with fw-addr-lists script -# https://git.eworm.de/cgit/routeros-scripts/about/doc/fw-addr-lists.md +# https://rsc.eworm.de/doc/fw-addr-lists.md # example.net 93.184.216.34 From 843618296098feb26f639d04cac2271bc8a8e5db Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 7 Nov 2025 23:05:56 +0100 Subject: [PATCH 55/76] fw-addr-lists.d/allow: use rsc.eworm.de in the list --- fw-addr-lists.d/allow | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fw-addr-lists.d/allow b/fw-addr-lists.d/allow index f0239cd..8c4ca3c 100644 --- a/fw-addr-lists.d/allow +++ b/fw-addr-lists.d/allow @@ -1,3 +1,3 @@ # an ip address list for use with fw-addr-lists script # https://rsc.eworm.de/doc/fw-addr-lists.md -git.eworm.de +rsc.eworm.de From 021caf01e26e55c1b566c7160fbd3dc8403a6a82 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 12 Nov 2025 18:18:36 +0100 Subject: [PATCH 56/76] contrib/template-capsman: split off from Makefile --- Makefile | 7 ++----- contrib/template-capsman.sh | 11 +++++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) create mode 100755 contrib/template-capsman.sh diff --git a/Makefile b/Makefile index ecb25bc..14aab08 100644 --- a/Makefile +++ b/Makefile @@ -28,11 +28,8 @@ docs: $(HTML) rsc: $(GEN_RSC) -%.capsman.rsc: %.template.rsc Makefile - sed -e '/\/interface\/wifi\//d' -e '/\/interface\/wireless\//d' -e 's|%TEMPL%|.capsman|' \ - -e '/^# NOT \/caps-man\/ #$$/,/^# NOT \/caps-man\/ #$$/d' \ - -e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \ - < $< > $@ +%.capsman.rsc: %.template.rsc contrib/template-capsman.sh + contrib/template-capsman.sh $< > $@ %.local.rsc: %.template.rsc Makefile sed -e '/\/caps-man\//d' -e '/\/interface\/wifi\//d' -e 's|%TEMPL%|.local|' \ diff --git a/contrib/template-capsman.sh b/contrib/template-capsman.sh new file mode 100755 index 0000000..5771b53 --- /dev/null +++ b/contrib/template-capsman.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +sed \ + -e '/\/interface\/wifi\//d' \ + -e '/\/interface\/wireless\//d' \ + -e 's|%TEMPL%|.capsman|' \ + -e '/^# NOT \/caps-man\/ #$/,/^# NOT \/caps-man\/ #$/d' \ + -e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \ + < "${1}" From 5b40a48669c3d71f8b4f19aed886c9da219eb295 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 22:53:31 +0100 Subject: [PATCH 57/76] general/style: make the blockquote darker --- general/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/style.css b/general/style.css index 73b0921..ea9b111 100644 --- a/general/style.css +++ b/general/style.css @@ -18,7 +18,7 @@ a:hover { blockquote { border-left: 4px solid #ccc; padding: 0 10px; - color: #777; + color: #555; } code { margin: 0 2px; From 711b96dab1042ce11c2fd3dd6b589e0bc47ca695 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 12 Nov 2025 00:23:02 +0100 Subject: [PATCH 58/76] README: install from rsc.eworm.de --- README.d/01-download-certs.avif | Bin 4890 -> 1869 bytes README.d/04-import-scripts.avif | Bin 3782 -> 3932 bytes README.d/07-edit-global-config-overlay.avif | Bin 5103 -> 5129 bytes README.md | 4 ++-- 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.d/01-download-certs.avif b/README.d/01-download-certs.avif index d41ca0595fa2f6b2ca1eaf3a94e34244d46e017a..0532ec3addc1b174c13c5edd6acc1294dbf36666 100644 GIT binary patch delta 1661 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 diff --git a/README.d/04-import-scripts.avif b/README.d/04-import-scripts.avif index 53439e4e5f832c7cd7e8a424f1b70e471ac8e31a..a5cfa7bf46733ae385e5cb9c8cc55364724c0b2d 100644 GIT binary patch delta 3727 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 diff --git a/README.d/07-edit-global-config-overlay.avif b/README.d/07-edit-global-config-overlay.avif index f87fda88e60281d3b0c4a2cb301025832c2bf8de..b6f8e3177a13a7b16c4a625b4b1b1356e5be281d 100644 GIT binary patch delta 4668 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 delta 4643 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 ZoRum4({4<&@cv2wl^$!=Nbpn=@u|lv0xkdm diff --git a/README.md b/README.md index f751d02..af9ef65 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ If you intend to download the scripts from a different location (for example from github.com) install the corresponding certificate chain. - /tool/fetch "https://git.eworm.de/cgit/routeros-scripts/plain/certs/ISRG-Root-X2.pem" dst-path="isrg-root-x2.pem"; + /tool/fetch "https://rsc.eworm.de/main/certs/ISRG-Root-X2.pem" dst-path="isrg-root-x2.pem"; ![screenshot: download certs](README.d/01-download-certs.avif) @@ -125,7 +125,7 @@ date and time is set correctly! Now let's download the main scripts and add them in configuration on the fly. - :foreach Script in={ "global-config"; "global-config-overlay"; "global-functions" } do={ /system/script/add name=$Script owner=$Script source=([ /tool/fetch check-certificate=yes-without-crl ("https://git.eworm.de/cgit/routeros-scripts/plain/" . $Script . ".rsc") output=user as-value]->"data"); }; + :foreach Script in={ "global-config"; "global-config-overlay"; "global-functions" } do={ /system/script/add name=$Script owner=$Script source=([ /tool/fetch check-certificate=yes-without-crl ("https://rsc.eworm.de/main/" . $Script . ".rsc") output=user as-value]->"data"); }; ![screenshot: import scripts](README.d/04-import-scripts.avif) From 515b3dda1a0e4827bd58357198907fd5e304d147 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 12 Nov 2025 18:21:39 +0100 Subject: [PATCH 59/76] contrib/template-local: split off from Makefile --- Makefile | 7 ++----- contrib/template-local.sh | 11 +++++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) create mode 100755 contrib/template-local.sh diff --git a/Makefile b/Makefile index 14aab08..b90002d 100644 --- a/Makefile +++ b/Makefile @@ -31,11 +31,8 @@ rsc: $(GEN_RSC) %.capsman.rsc: %.template.rsc contrib/template-capsman.sh contrib/template-capsman.sh $< > $@ -%.local.rsc: %.template.rsc Makefile - sed -e '/\/caps-man\//d' -e '/\/interface\/wifi\//d' -e 's|%TEMPL%|.local|' \ - -e '/^# NOT \/interface\/wireless\/ #$$/,/^# NOT \/interface\/wireless\/ #$$/d' \ - -e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \ - < $< > $@ +%.local.rsc: %.template.rsc contrib/template-local.sh + contrib/template-local.sh $< > $@ %.wifi.rsc: %.template.rsc Makefile sed -e '/\/caps-man\//d' -e '/\/interface\/wireless\//d' -e 's|%TEMPL%|.wifi|' \ diff --git a/contrib/template-local.sh b/contrib/template-local.sh new file mode 100755 index 0000000..bc5b327 --- /dev/null +++ b/contrib/template-local.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +sed \ + -e '/\/caps-man\//d' \ + -e '/\/interface\/wifi\//d' \ + -e 's|%TEMPL%|.local|' \ + -e '/^# NOT \/interface\/wireless\/ #$/,/^# NOT \/interface\/wireless\/ #$/d' \ + -e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \ + < "${1}" From afe4c4691514bc3f12573c9c16690055392edc00 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 11 Nov 2025 17:07:01 +0100 Subject: [PATCH 60/76] contrib/logo-color: place screenshots below each other... ... not side by side. --- contrib/logo-color.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contrib/logo-color.html b/contrib/logo-color.html index 3aca324..2c4cef6 100644 --- a/contrib/logo-color.html +++ b/contrib/logo-color.html @@ -37,9 +37,9 @@ something that differentiates? Color it!

Then right-click, click "Take Screenshot" and finally select the logo and download it.

-

Screenshot Browser 01 -Screenshot Browser 02 -Screenshot Browser 03

+

Screenshot Browser 01

+

Screenshot Browser 02

+

Screenshot Browser 03

(This example is with Firefox. The workflow From 42194964c537da85adda4128fedff9c7d610f760 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 12 Nov 2025 00:23:37 +0100 Subject: [PATCH 61/76] INITIAL-COMMANDS: install from rsc.eworm.de --- INITIAL-COMMANDS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INITIAL-COMMANDS.md b/INITIAL-COMMANDS.md index 6e70b66..787c11e 100644 --- a/INITIAL-COMMANDS.md +++ b/INITIAL-COMMANDS.md @@ -17,7 +17,7 @@ Initial commands Run the complete base installation: { - :local BaseUrl "https://git.eworm.de/cgit/routeros-scripts/plain/"; + :local BaseUrl "https://rsc.eworm.de/main/"; :local CertCommonName "ISRG Root X2"; :local CertFileName "ISRG-Root-X2.pem"; :local CertFingerprint "69729b8e15a86efc177a57afb7171dfc64add28c2fca8cf1507e34453ccb1470"; From 892a1038e0dacffab740e826854551263f6429de Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 12 Nov 2025 18:22:35 +0100 Subject: [PATCH 62/76] contrib/template-wifi: split off from Makefile --- Makefile | 7 ++----- contrib/template-wifi.sh | 11 +++++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) create mode 100755 contrib/template-wifi.sh diff --git a/Makefile b/Makefile index b90002d..fa4cdcb 100644 --- a/Makefile +++ b/Makefile @@ -34,11 +34,8 @@ rsc: $(GEN_RSC) %.local.rsc: %.template.rsc contrib/template-local.sh contrib/template-local.sh $< > $@ -%.wifi.rsc: %.template.rsc Makefile - sed -e '/\/caps-man\//d' -e '/\/interface\/wireless\//d' -e 's|%TEMPL%|.wifi|' \ - -e '/^# NOT \/interface\/wifi\/ #$$/,/^# NOT \/interface\/wifi\/ #$$/d' \ - -e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \ - < $< > $@ +%.wifi.rsc: %.template.rsc contrib/template-wifi.sh + contrib/template-wifi.sh $< > $@ clean: rm -f $(HTML) checksums.json diff --git a/contrib/template-wifi.sh b/contrib/template-wifi.sh new file mode 100755 index 0000000..5e297d9 --- /dev/null +++ b/contrib/template-wifi.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +sed \ + -e '/\/caps-man\//d' \ + -e '/\/interface\/wireless\//d' \ + -e 's|%TEMPL%|.wifi|' \ + -e '/^# NOT \/interface\/wifi\/ #$/,/^# NOT \/interface\/wifi\/ #$/d' \ + -e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \ + < "${1}" From a62ab60635a126169fd5e6c070138dc4fc4c3443 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Thu, 13 Nov 2025 12:18:38 +0100 Subject: [PATCH 63/76] contrib/logo-color: drop width & height properties for images --- contrib/logo-color.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contrib/logo-color.html b/contrib/logo-color.html index 2c4cef6..5516964 100644 --- a/contrib/logo-color.html +++ b/contrib/logo-color.html @@ -37,9 +37,9 @@ something that differentiates? Color it!

Then right-click, click "Take Screenshot" and finally select the logo and download it.

-

Screenshot Browser 01

-

Screenshot Browser 02

-

Screenshot Browser 03

+

Screenshot Browser 01

+

Screenshot Browser 02

+

Screenshot Browser 03

(This example is with Firefox. The workflow From 08a59fd349f54652ddcd80e897dfc4d02bbd24d1 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 12 Nov 2025 00:25:18 +0100 Subject: [PATCH 64/76] doc/mod/scriptrunonce: get script from rsc.eworm.de --- doc/mod/scriptrunonce.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/mod/scriptrunonce.md b/doc/mod/scriptrunonce.md index 955d12e..1fbb697 100644 --- a/doc/mod/scriptrunonce.md +++ b/doc/mod/scriptrunonce.md @@ -48,7 +48,7 @@ Usage and invocation The function `$ScriptRunOnce` expects an URL (or name if `ScriptRunOnceBaseUrl` is given) pointing to a script as parameter. - $ScriptRunOnce https://git.eworm.de/cgit/routeros-scripts/plain/doc/mod/scriptrunonce.d/hello-world.rsc; + $ScriptRunOnce https://rsc.eworm.de/main/doc/mod/scriptrunonce.d/hello-world.rsc; ![ScriptRunOnce](scriptrunonce.d/scriptrunonce.avif) From f5fe673605cfb82989f70226abad3ba79d739832 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Thu, 13 Nov 2025 15:30:30 +0100 Subject: [PATCH 65/76] global-functions: $FetchUserAgentStr: add commit info in user agent string --- global-functions.rsc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/global-functions.rsc b/global-functions.rsc index 48aaf7f..dccb8b6 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -539,10 +539,16 @@ :set FetchUserAgentStr do={ :local Caller [ :tostr $1 ]; + :global CommitId; + :global CommitInfo; + + :global IfThenElse; + :local Resource [ /system/resource/get ]; - :return ("User-Agent: Mikrotik/" . $Resource->"version" . " " . \ - $Resource->"architecture-name" . " " . $Caller . "/Fetch (https://rsc.eworm.de/)"); + :return ("User-Agent: Mikrotik/" . $Resource->"version" . " " . $Resource->"architecture-name" . \ + " " . $Caller . "/Fetch (https://rsc.eworm.de/" . [ $IfThenElse ($CommitId != "unknown") \ + ("; " . $CommitInfo . "/" . [ :pick $CommitId 0 8 ]) ] . ")"); } # check for existence of file, optionally with type From 174de528af187ca2906bc01896f666389d39edab Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Thu, 13 Nov 2025 19:48:02 +0100 Subject: [PATCH 66/76] global-functions: add and fix global scheduler automatically... ... and also adjust README and INITIAL-COMMANDS. --- INITIAL-COMMANDS.md | 3 --- README.d/05-run-and-schedule-scripts.avif | Bin 1946 -> 0 bytes README.d/05-run-scripts.avif | Bin 0 -> 1801 bytes README.md | 6 +++--- global-functions.rsc | 9 +++++++++ 5 files changed, 12 insertions(+), 6 deletions(-) delete mode 100644 README.d/05-run-and-schedule-scripts.avif create mode 100644 README.d/05-run-scripts.avif diff --git a/INITIAL-COMMANDS.md b/INITIAL-COMMANDS.md index 787c11e..374f716 100644 --- a/INITIAL-COMMANDS.md +++ b/INITIAL-COMMANDS.md @@ -45,9 +45,6 @@ Run the complete base installation: }; :put "Loading configuration and functions..."; /system/script { run global-config; run global-functions; }; - :put "Scheduling to load configuration and functions..."; - /system/scheduler/remove [ find where name="global-scripts" ]; - /system/scheduler/add name="global-scripts" start-time=startup on-event="/system/script { run global-config; run global-functions; }"; :if ([ :len [ /certificate/find where fingerprint=$CertFingerprint ] ] > 0) do={ :put "Renaming certificate by its common-name..."; :global CertificateNameByCN; diff --git a/README.d/05-run-and-schedule-scripts.avif b/README.d/05-run-and-schedule-scripts.avif deleted file mode 100644 index 37e1173f13037180a42ff7451fdd8bac7728211f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1946 zcmXv|2{_by7ao$eCd(wt7ly$|Vk}v&XplV_jHon&(ccX7Czq5k;o7$l*H)IS4IzY# zE&DbZMAqzkK1tM9zTrOi{GQ+Yp7XxvIp;ti5D9{hKZx@M2oPo*u?Ijvc>p+qg+5B3 zDeZW;`rwW{W+3mmki7p%ArKI7_W3tIViJJ=cMKE+d_0al7AA@TB(n2SWdMP&Fy9eE zSVSNY_F!g?1OU(D-N%jyvv6f)%10H>R|$nClgP&_-2u=WWa?%B=uBoZ47d-v9yLNB zClE|fWqw`|cmNzLoSd9YK85o|p(zqa3Piw}O!D@0COu$IKK;+?a{%apJ2sCGV`E_r zVPjqu;o*Yw;fHW@X-IqPjOn5E^Od(xnRl^Gh7=&M-=B?nuB=++KIK!*zj-nuZ`T(R zb?!7L)>2A*Bhmb_+KJlDU!)ArQ;6sdjl?MLjWVMlQ?a)qYD*%M@XzRZeHo!~sMR$? zJ^Dw5vuDC5lUYDoRuXx)rccKJmTg1(08KAPUSEG~yCNY%aVTl#`0jsWOEkPW%rJB) zqo#89{MixivjrR-$t3F53?h=Fibus;smz;&)c?Yxb|cV1+)hIat2lL6I(K>%%3skG zrTy|0sp9ovJo{?wT#?gs$553HT`9d7lOoI;F-_CT8zD(J*SNi(?7AqE&`+nzgu-4o z&PFh@GxA%Dv=x(tC+(?JFGk-u`$2OToZitfTWzar@^!{sVMs-kbWN-bUYSfUYzKLe z+;dTZv=H2Ko7(J3hJRL&+3V5y;y-z|2k!DHwxP7?RC4qNS^7T5NB=hy)pd`IHv|vI zf|FwFPe5+b3bLCTdieYTUi{UoZZxjd0Poj&;i%3EK19;2(Kie5|V8;|{^X8EPZmvedw-&?VkI`Ct*t{9KR_iOI$ zxBqBqc$sr5I8!S?Mr3NaY!1ifg6 z<%Xvf4MUyc&tH8edBz{^V@kA~r2GuDQKIQqb9ou+oY_n(nX~EDeAQ7gqkAH3YT1qL zohG=IK{+smMFwDO*Fq+w@5sAq`pp)Fw%+=4OvfhVtnB_0NFZM2CL*3~^R`$D#U|=O z8?8*{!B0`8DTKc!deUBVQ6OQPt%~$>nko| zpRYyyPc&ygdzG#vVPQANS1SZ<`Q?@$r8h-(TTzbOK}H;{n$vv80LxMSyZvyEpd?YVo!o2R{>Ex$%ym{+5B)H+JwG5EV;37#Iqu#1! zvdN9auvJfG`{v}9!@kT9keUB(S=AevjkkqK!$PDkz%gxdpkX~5^;h201&r4F_Btv~ z+YERyu*ep>)&sv<7h!=PZi*BX8b}?-#fXbEE4@uO|KJqt4$t06_zfEz2-ihyHEfqE z#~6erZ?>y^V{IF3ety=KG#MO?H}jUbLi9of?Nap;yBvpmoEXBX5FH1Y^_y$o;gnv7 zCCSe@(`mt17>*#klDGvQ5!2l)4f47Po466v!I5)sssh2fp$br%@k zYT^M~2tlx@E2gs-kEiz$7aQVqvrz|xh28Nhp(L_up&cWIL%(f7whMdd_n@u|^^bgA zM&boC>sdzHA+?yazT{)xr<1(7bA8}qP&uj^$%0A{ksq{gM{bak&9-{{^f?7_&VFc^>x)WdiIJ}K(QIFzv*=i78)ovVJ&{| zaziB_X8q}Gyc~~ltAl$01F`kyBbYoy$Qs!Vy3d|ZA JV`^E{{(m}8biDuo diff --git a/README.d/05-run-scripts.avif b/README.d/05-run-scripts.avif new file mode 100644 index 0000000000000000000000000000000000000000..e3b8b8b424f0502cc08fc7932742e97aa50ce7f5 GIT binary patch literal 1801 zcmXw02{hZ;7Y-t$mWq9-oz9?^A~Cha+Of2jv8$yLOZ#gQ(jX17WYDHn6=K?A>{^tm zMxs=Vt+m%yTQStw1{I2GX!$eYf9AgP?)TmAyXW0|&I5r!%3)D4I3xiG199URu|SwU z7C?qMS?ODGr8R756!O^PhRXF24F3NV1i}HqQUCG(@H7sH!k!d7+^h&-B7%=ATM&qc zdyX@RM*;-m=Ww|O0EC|mJ#pl?MJVraGq(pxIInLLfr&VobpycRaa{cpfD4Y`q9hQB z3q5WGf%w$93C6up96$t46afJNE(#+F`Zm8RA1fe<;0O#pJQzddzAOTQkhzi!fWsn> zJ#KIp1M~1EgSlHBVndKo;vhlDg|m3G33Y>2q08Oi>EtqX@8$CN;ytqxuaWA|m4u!p zLes+#NA#u4W$Epyxa`weqjc-B=lv7myTFQ>JS$~7x5 zd-Q3#-~IHVi7)bUi%6%`@PVBxdm-VOO2-AtiVP}gmzh>4Z}dXLR*pC=hIpACIeBe& zNLqtdtR~&}_%SYk-_t^AY4ZFd79**~jw+iQcMr=$|81=eEhNmL>BJ*!{Ow9S)-+t!cOQKXHpJ=_+Ap?|4~|gB=t%^<6P@S+yH6eg)?;&{3dp_1%}qG zd_OkrCF&R1n2~xl?VJp`rbU|Yj zh(5KVdcR&K^%3Su$yu#bPMoF+H3L{jT7vZs1|eg4MLVB|&Bv9psvXFWeGKu7{p7L~ zw`eBH^G@}5_&0m@578XhBFl7f0|_Na=Aq8*9msJY0GA_XU4NRcp@}H zZ_{{{?>!Vm=tbNL`gy1!`FE7Vw!%qu+S8zc?-6Sc0E#|n}7aC^jb_Ynr2^YZC#v`IPKr}Ptk^| z?Yxu}wc_V1oZ$=#FJEbOhMoaFduTAu7MwigV=pS2=6CQnm z&Q41!ipn+kKrzde@u0s8>ZQ&qJ~g&8C=kAH5~u#n+N*GaBhJxYT54hGJ@qA;2K?#V zAgmn`cPF`=y0=!=Z1hw4yWL2J`^OAsMeuBq-Z}Q>tEe-J033c^dfJ0RnTi{EPAo;CE4Y9d#-+yJTKDD z3(eZ?Y=}`xXB{crznIg{-s~U+R~s>yr~bE(s9el^J=P|tRqC<5H+Gv>=qTN~Za@&z z1Ibxw*R{{{y&YRd`m(fMr@cdxfJzzJ+tPf-n8Q5T_4%6;V+38k7hA~>Ovh*_>HeVl zmk0cf2z%vgR*n?s{B*bk&|VgQCeX*cyAp5FAe-)qyg{r>XDBAgl4ew?3Xnlw$n?#9 zduy}YZbNO3|G5<0i0i$!Wld$mNS91&=ktwJ#ugqel)k6~FNK+)2Z!htn~84=)4Cc_ z_jPgcEM}~5AHJ7A>edW>Tk5uU?q@e*@Jnzp!!ZTJt^%7(Z(Rp#JGY$$1nD(KYiHNel9?bC=0rgh23|m9G+V(`24{D{rZw@ zwrEUHvf`2GV$rbJ5MgI0N`d<6aVYzVB)p5{2(?{ks1X0Gbhlad>)Mo;7|X6dE9KN* zffQ=PMCG<+_6MSG&Xk_G;p=rP2yfEdh~_(Wwk6H55Z< f0rP^B=6p`ZLaprrjEG=8GH{uaQqby)Bxw8#n%yM% literal 0 HcmV?d00001 diff --git a/README.md b/README.md index af9ef65..d8047d0 100644 --- a/README.md +++ b/README.md @@ -129,12 +129,12 @@ Now let's download the main scripts and add them in configuration on the fly. ![screenshot: import scripts](README.d/04-import-scripts.avif) -And finally load configuration and functions and add the scheduler. +And finally run configuration and functions. This will also add the +scheduler for loading at system startup automatically. /system/script { run global-config; run global-functions; }; - /system/scheduler/add name="global-scripts" start-time=startup on-event="/system/script { run global-config; run global-functions; }"; -![screenshot: run and schedule scripts](README.d/05-run-and-schedule-scripts.avif) +![screenshot: run scripts](README.d/05-run-scripts.avif) > 💡️ **Hint**: You see complaints regarding syntax errors? Most likely the > RouterOS on your device is too old. Check for updates! diff --git a/global-functions.rsc b/global-functions.rsc index dccb8b6..db9eac6 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -1900,6 +1900,15 @@ } } +# add (and fix) global scripts scheduler +:local OnEvent "/system/script { run global-config; run global-functions; }"; +:if ([ :len [ /system/scheduler/find where name="global-scripts" ] ] = 0) do={ + /system/scheduler/add name="global-scripts" start-time=startup; +} +:if ([ /system/scheduler/get "global-scripts" on-event ] != $OnEvent) do={ + /system/scheduler/set "global-scripts" on-event=$OnEvent; +} + # Log success :local Resource [ /system/resource/get ]; $LogPrintOnce info $ScriptName ("Loaded on " . $Resource->"board-name" . \ From d115f8fc20b58ad7cf369db669bbccd787aa4dd7 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Thu, 13 Nov 2025 19:34:10 +0100 Subject: [PATCH 67/76] contrib/commitinfo: support updating the commit info --- Makefile | 6 +++++- contrib/commitinfo.sh | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100755 contrib/commitinfo.sh diff --git a/Makefile b/Makefile index fa4cdcb..2e3ba0d 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ DATE ?= $(shell date --rfc-email) VERSION ?= $(shell git symbolic-ref --short HEAD 2>/dev/null)/$(shell git rev-list --count HEAD 2>/dev/null)/$(shell git rev-parse --short=8 HEAD 2>/dev/null) export DATE VERSION -.PHONY: all checksums docs rsc clean +.PHONY: all checksums commitinfo docs rsc clean all: checksums docs rsc @@ -21,6 +21,10 @@ checksums: checksums.json checksums.json: contrib/checksums.sh $(ALL_RSC) contrib/checksums.sh > $@ +commitinfo: global-functions.rsc + contrib/commitinfo.sh $< > $<~ + mv $<~ $< + docs: $(HTML) %.html: %.md general/style.css contrib/html.sh contrib/html.sh.d/head.html contrib/html.sh.d/foot.html diff --git a/contrib/commitinfo.sh b/contrib/commitinfo.sh new file mode 100755 index 0000000..21faf9f --- /dev/null +++ b/contrib/commitinfo.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +sed \ + -e "/^:global CommitId/c :global CommitId \"${COMMITID:-unknown}\";" \ + -e "/^:global CommitInfo/c :global CommitInfo \"${COMMITINFO:-unknown}\";" \ + < "${1}" From 12fa8ee03636328c4b8bad906778d5d6aa31b2f6 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 17 Nov 2025 09:31:36 +0100 Subject: [PATCH 68/76] contrib/html: support click on code block to copy to clipboard --- contrib/html.sh | 2 ++ contrib/html.sh.d/head.html | 1 + general/clipboard.js | 4 ++++ 3 files changed, 7 insertions(+) create mode 100644 general/clipboard.js diff --git a/contrib/html.sh b/contrib/html.sh index 11dcefc..182ad97 100755 --- a/contrib/html.sh +++ b/contrib/html.sh @@ -10,12 +10,14 @@ sed \ -e "s|__LOGO__|$(realpath --relative-to="${RELTO}" logo.png)|" \ -e "s|__EWORM__|$(realpath --relative-to="${RELTO}" general/eworm-meadow.avif)|" \ -e "s|__QR_CODE__|$(realpath --relative-to="${RELTO}" general/qr-code.png)|" \ + -e "s|__CLIPBOARD__|$(realpath --relative-to="${RELTO}" general/clipboard.js)|" \ < "${0}.d/head.html" markdown -f toc,idanchor "${1}" | sed \ -e 's/href="\([-_\./[:alnum:]]*\)\.md\(#[-[:alnum:]]*\)\?"/href="\1.html\2"/g' \ -e '/| id="\L\1">|' \ -e '//s|pre|pre onclick="CopyToClipboard(this)"|g' \ -e '/The above link may be broken on code hosting sites/s|blockquote|blockquote style="display: none;"|' sed \ diff --git a/contrib/html.sh.d/head.html b/contrib/html.sh.d/head.html index da54157..861a87b 100644 --- a/contrib/html.sh.d/head.html +++ b/contrib/html.sh.d/head.html @@ -3,6 +3,7 @@ RouterOS Scripts :: __TITLE__ + diff --git a/general/clipboard.js b/general/clipboard.js new file mode 100644 index 0000000..fceff85 --- /dev/null +++ b/general/clipboard.js @@ -0,0 +1,4 @@ +/* copy code to clipboard */ +function CopyToClipboard(element) { + navigator.clipboard.writeText(element.firstElementChild.innerHTML); +} From 814e62014671507809f3c13fac68a11c8d5f55a7 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 17 Nov 2025 09:53:30 +0100 Subject: [PATCH 69/76] =?UTF-8?q?general/style:=20add=20a=20"=F0=9F=93=8B?= =?UTF-8?q?=20Copy!"=20hint=20to=20code=20blocks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- general/style.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/general/style.css b/general/style.css index ea9b111..191c0f6 100644 --- a/general/style.css +++ b/general/style.css @@ -69,6 +69,12 @@ pre code { padding: 0; border: 0; } +pre::before { + content: "📋 Copy!"; + float: right; + border: 1px solid #ccc; + border-radius: 3px; +} span.link { color: #863600; } From 5b0239a46f83002c2acff6f76eb2ee262d3241d3 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 19 Nov 2025 16:38:27 +0100 Subject: [PATCH 70/76] general/clipboard: add a visual feedback --- general/clipboard.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/general/clipboard.js b/general/clipboard.js index fceff85..30c3134 100644 --- a/general/clipboard.js +++ b/general/clipboard.js @@ -1,4 +1,8 @@ /* copy code to clipboard */ function CopyToClipboard(element) { + element.style.filter = 'invert(1)'; navigator.clipboard.writeText(element.firstElementChild.innerHTML); + setTimeout(function() { + element.style.filter = 'invert(0)'; + }, 100); } From 0179e2891a78eb05d35701079e43773486fcd1ad Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 17 Nov 2025 11:03:02 +0100 Subject: [PATCH 71/76] contrib/html: simplify handling of relative paths --- contrib/html.sh | 7 ++----- contrib/html.sh.d/head.html | 10 +++++----- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/contrib/html.sh b/contrib/html.sh index 182ad97..5fbba45 100755 --- a/contrib/html.sh +++ b/contrib/html.sh @@ -6,11 +6,8 @@ RELTO="$(dirname "${1}")" sed \ -e "s|__TITLE__|$(head -n1 "${1}")|" \ - -e "s|__STYLE__|$(realpath --relative-to="${RELTO}" general/style.css)|" \ - -e "s|__LOGO__|$(realpath --relative-to="${RELTO}" logo.png)|" \ - -e "s|__EWORM__|$(realpath --relative-to="${RELTO}" general/eworm-meadow.avif)|" \ - -e "s|__QR_CODE__|$(realpath --relative-to="${RELTO}" general/qr-code.png)|" \ - -e "s|__CLIPBOARD__|$(realpath --relative-to="${RELTO}" general/clipboard.js)|" \ + -e "s|__GENERAL__|$(realpath --relative-to="${RELTO}" general/)|" \ + -e "s|__ROOT__|$(realpath --relative-to="${RELTO}" ./)|" \ < "${0}.d/head.html" markdown -f toc,idanchor "${1}" | sed \ diff --git a/contrib/html.sh.d/head.html b/contrib/html.sh.d/head.html index 861a87b..656a63c 100644 --- a/contrib/html.sh.d/head.html +++ b/contrib/html.sh.d/head.html @@ -1,14 +1,14 @@ RouterOS Scripts :: __TITLE__ - - - + + +
- - + +
eworm on meadowQR code: rsc.eworm.deeworm on meadowQR code: rsc.eworm.de RouterOS Scripts
a collection of scripts for MikroTik RouterOS
From 3d1010128a4e7ae800977302d9f911dd2c1ed881 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 17 Nov 2025 13:17:17 +0100 Subject: [PATCH 72/76] contrib/static-html: split off from Makefile --- contrib/Makefile | 7 ++----- contrib/logo-color.html | 2 +- contrib/notification.html | 2 +- contrib/static-html.sh | 8 ++++++++ 4 files changed, 12 insertions(+), 7 deletions(-) create mode 100755 contrib/static-html.sh diff --git a/contrib/Makefile b/contrib/Makefile index cdb9f4c..f704378 100644 --- a/contrib/Makefile +++ b/contrib/Makefile @@ -6,8 +6,5 @@ HTML := $(wildcard *.html) all: docs -docs: $(HTML) - sed -i \ - -e '/href=/s|\.md|\.html|' \ - -e '/blockquote/s|/\*! display \*/|display: none;|' \ - $(HTML) +docs: static-html.sh $(HTML) + ./static-html.sh $(HTML) diff --git a/contrib/logo-color.html b/contrib/logo-color.html index 5516964..a45ea93 100644 --- a/contrib/logo-color.html +++ b/contrib/logo-color.html @@ -18,7 +18,7 @@

⬅️ Go back to main README

-

💡️ Hint: This site or links +

💡️ Hint: This site or links on it may be broken on code hosting sites. Use Logo Color Changer instead.

diff --git a/contrib/notification.html b/contrib/notification.html index 902d328..a618f22 100644 --- a/contrib/notification.html +++ b/contrib/notification.html @@ -18,7 +18,7 @@

⬅️ Go back to main README

-

💡️ Hint: This site or links +

💡️ Hint: This site or links on it may be broken on code hosting sites. Use Notification Generator instead.

diff --git a/contrib/static-html.sh b/contrib/static-html.sh new file mode 100755 index 0000000..2c6f595 --- /dev/null +++ b/contrib/static-html.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +set -e + +sed -i \ + -e '/href=/s|\.md|\.html|' \ + -e '/blockquote/s|/\* display \*/|display: none;|' \ + "${@}" From 8abb1a4d0fc2ef700e826cf05c184a3146519d76 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 18 Nov 2025 18:53:29 +0100 Subject: [PATCH 73/76] contrib/static-html: find static html files by comment --- contrib/Makefile | 2 +- contrib/logo-color.html | 1 + contrib/notification.html | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/contrib/Makefile b/contrib/Makefile index f704378..9417af3 100644 --- a/contrib/Makefile +++ b/contrib/Makefile @@ -1,6 +1,6 @@ # Makefile -HTML := $(wildcard *.html) +HTML := $(shell grep -xl '' *.html) .PHONY: all docs diff --git a/contrib/logo-color.html b/contrib/logo-color.html index a45ea93..1d67b4e 100644 --- a/contrib/logo-color.html +++ b/contrib/logo-color.html @@ -1,4 +1,5 @@ + RouterOS Scripts :: Logo Color Changer diff --git a/contrib/notification.html b/contrib/notification.html index a618f22..248565d 100644 --- a/contrib/notification.html +++ b/contrib/notification.html @@ -1,4 +1,5 @@ + RouterOS Scripts :: Notification Generator From 0c56b8b48ee01d94125c7756ec0fbbc6c5152747 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 18 Nov 2025 19:01:39 +0100 Subject: [PATCH 74/76] contrib/static-html: add badges --- contrib/Makefile | 5 ++++- contrib/badges.md | 6 ++++++ contrib/logo-color.html | 2 ++ contrib/notification.html | 2 ++ contrib/static-html.sh | 2 ++ 5 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 contrib/badges.md diff --git a/contrib/Makefile b/contrib/Makefile index 9417af3..ef0e41d 100644 --- a/contrib/Makefile +++ b/contrib/Makefile @@ -6,5 +6,8 @@ HTML := $(shell grep -xl '' *.html) all: docs -docs: static-html.sh $(HTML) +badges.html: badges.md + markdown $< > $@ + +docs: static-html.sh $(HTML) badges.html ./static-html.sh $(HTML) diff --git a/contrib/badges.md b/contrib/badges.md new file mode 100644 index 0000000..24bd205 --- /dev/null +++ b/contrib/badges.md @@ -0,0 +1,6 @@ +[![GitHub stars](https://img.shields.io/github/stars/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=red)](https://github.com/eworm-de/routeros-scripts/stargazers) +[![GitHub forks](https://img.shields.io/github/forks/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=green)](https://github.com/eworm-de/routeros-scripts/network) +[![GitHub watchers](https://img.shields.io/github/watchers/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=blue)](https://github.com/eworm-de/routeros-scripts/watchers) +[![required RouterOS version](https://img.shields.io/badge/RouterOS-7.15-yellow?style=flat)](https://mikrotik.com/download/changelogs/) +[![Telegram group @routeros_scripts](https://img.shields.io/badge/Telegram-%40routeros__scripts-%2326A5E4?logo=telegram&style=flat)](https://t.me/routeros_scripts) +[![donate with PayPal](https://img.shields.io/badge/Like_it%3F-Donate!-orange?logo=githubsponsors&logoColor=orange&style=flat)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A4ZXBD6YS2W8J) diff --git a/contrib/logo-color.html b/contrib/logo-color.html index 1d67b4e..84365a6 100644 --- a/contrib/logo-color.html +++ b/contrib/logo-color.html @@ -17,6 +17,8 @@

Logo Color Changer

+ +

⬅️ Go back to main README

💡️ Hint: This site or links diff --git a/contrib/notification.html b/contrib/notification.html index 248565d..a0580bd 100644 --- a/contrib/notification.html +++ b/contrib/notification.html @@ -17,6 +17,8 @@

Notification Generator

+ +

⬅️ Go back to main README

💡️ Hint: This site or links diff --git a/contrib/static-html.sh b/contrib/static-html.sh index 2c6f595..7acf104 100755 --- a/contrib/static-html.sh +++ b/contrib/static-html.sh @@ -5,4 +5,6 @@ set -e sed -i \ -e '/href=/s|\.md|\.html|' \ -e '/blockquote/s|/\* display \*/|display: none;|' \ + -e '//r badges.html' \ + -e '//d' \ "${@}" From eb179a6e5f2e9271132f74676d1fd1b6889f61a8 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 18 Nov 2025 19:18:43 +0100 Subject: [PATCH 75/76] contrib/Makefile: add target clean --- contrib/Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/contrib/Makefile b/contrib/Makefile index ef0e41d..e755a1d 100644 --- a/contrib/Makefile +++ b/contrib/Makefile @@ -2,7 +2,7 @@ HTML := $(shell grep -xl '' *.html) -.PHONY: all docs +.PHONY: all docs clean all: docs @@ -11,3 +11,7 @@ badges.html: badges.md docs: static-html.sh $(HTML) badges.html ./static-html.sh $(HTML) + +clean: + rm -f badges.html + git checkout HEAD -- $(HTML) From 51be801dbe48ebdab659d8c61e3aa23995e4576c Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 19 Nov 2025 08:21:36 +0100 Subject: [PATCH 76/76] Makefile: also clean contrib --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 2e3ba0d..5db0a30 100644 --- a/Makefile +++ b/Makefile @@ -43,3 +43,4 @@ rsc: $(GEN_RSC) clean: rm -f $(HTML) checksums.json + make -C contrib/ clean