diff --git a/CERTIFICATES.md b/CERTIFICATES.md index 0e0a8671..69d6c185 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" "fetch"; + $CertificateAvailable "ISRG Root X2"; If the certificate is actually available already nothing happens, and there is no output. Otherwise the certificate is downloaded and imported. diff --git a/INITIAL-COMMANDS.md b/INITIAL-COMMANDS.md index e580bc53..40f609b9 100644 --- a/INITIAL-COMMANDS.md +++ b/INITIAL-COMMANDS.md @@ -17,16 +17,13 @@ Initial commands Run the complete base installation: { - :local BaseUrl "https://rsc.eworm.de/main/"; + :local BaseUrl "https://git.eworm.de/cgit/routeros-scripts/plain/"; :local CertCommonName "ISRG Root X2"; :local CertFileName "ISRG-Root-X2.pem"; :local CertFingerprint "69729b8e15a86efc177a57afb7171dfc64add28c2fca8cf1507e34453ccb1470"; - :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={ + :if (!(([ /certificate/settings/get ]->"builtin-trust-anchors") = "trusted" && \ + [[ :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; @@ -41,10 +38,13 @@ Run the complete base installation: :foreach Script in={ "global-config"; "global-config-overlay"; "global-functions" } do={ :put "Installing $Script..."; /system/script/remove [ find where name=$Script ]; - /system/script/add name=$Script owner=$Script source=([ /tool/fetch check-certificate=yes-without-crl ($BaseUrl . $Script . ".rsc") output=user as-value ]->"data"); + /system/script/add name=$Script owner=$Script source=([ /tool/fetch check-certificate=yes-without-crl ($BaseUrl . $Script . ".rsc") output=user as-value]->"data"); }; :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/Makefile b/Makefile index 5db0a303..0265a51a 100644 --- a/Makefile +++ b/Makefile @@ -2,45 +2,38 @@ # template scripts -> final scripts # markdown files -> html files -ALL_RSC := $(wildcard *.rsc */*.rsc) -GEN_RSC := $(wildcard *.capsman.rsc *.local.rsc *.wifi.rsc) +CAPSMAN = $(wildcard *.capsman.rsc) +LOCAL = $(wildcard *.local.rsc) +WIFI = $(wildcard *.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) -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 +all: $(CAPSMAN) $(LOCAL) $(WIFI) $(HTML) checksums.json -.PHONY: all checksums commitinfo docs rsc clean - -all: checksums docs rsc - -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 +%.html: %.md 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' \ + -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|' \ + -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|' \ + -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 $< > $@ +checksums.json: contrib/checksums.sh *.rsc */*.rsc + contrib/checksums.sh clean: rm -f $(HTML) checksums.json - make -C contrib/ clean diff --git a/README.d/01-download-certs.avif b/README.d/01-download-certs.avif index f2afeb54..d41ca059 100644 Binary files a/README.d/01-download-certs.avif and b/README.d/01-download-certs.avif differ diff --git a/README.d/02-import-certs.avif b/README.d/02-import-certs.avif index b31343cd..bf7d5771 100644 Binary files a/README.d/02-import-certs.avif and b/README.d/02-import-certs.avif differ diff --git a/README.d/03-check-certs.avif b/README.d/03-check-certs.avif index 1f03ad2c..4717b3ea 100644 Binary files a/README.d/03-check-certs.avif and b/README.d/03-check-certs.avif differ diff --git a/README.d/04-import-scripts.avif b/README.d/04-import-scripts.avif index c09949ab..53439e4e 100644 Binary files a/README.d/04-import-scripts.avif and b/README.d/04-import-scripts.avif differ diff --git a/README.d/05-run-and-schedule-scripts.avif b/README.d/05-run-and-schedule-scripts.avif new file mode 100644 index 00000000..37e1173f Binary files /dev/null and b/README.d/05-run-and-schedule-scripts.avif differ diff --git a/README.d/05-run-scripts.avif b/README.d/05-run-scripts.avif deleted file mode 100644 index 12d812c0..00000000 Binary files a/README.d/05-run-scripts.avif and /dev/null differ diff --git a/README.d/06-schedule-update.avif b/README.d/06-schedule-update.avif index 158e13f5..7c96f3aa 100644 Binary files a/README.d/06-schedule-update.avif and b/README.d/06-schedule-update.avif differ diff --git a/README.d/07-edit-global-config-overlay.avif b/README.d/07-edit-global-config-overlay.avif index 9a5b9037..f87fda88 100644 Binary files a/README.d/07-edit-global-config-overlay.avif and b/README.d/07-edit-global-config-overlay.avif differ diff --git a/README.d/08-apply-configuration.avif b/README.d/08-apply-configuration.avif index ab22cae3..b66af1a7 100644 Binary files a/README.d/08-apply-configuration.avif and b/README.d/08-apply-configuration.avif differ diff --git a/README.d/09-update-scripts.avif b/README.d/09-update-scripts.avif index e713ac2c..f549fef5 100644 Binary files a/README.d/09-update-scripts.avif and b/README.d/09-update-scripts.avif differ diff --git a/README.d/10-install-scripts.avif b/README.d/10-install-scripts.avif index cf26b168..00225b16 100644 Binary files a/README.d/10-install-scripts.avif and b/README.d/10-install-scripts.avif differ diff --git a/README.d/11-schedule-script.avif b/README.d/11-schedule-script.avif index 558614f8..d6eb0f89 100644 Binary files a/README.d/11-schedule-script.avif and b/README.d/11-schedule-script.avif differ diff --git a/README.d/12-setup-lease-script.avif b/README.d/12-setup-lease-script.avif index 2a8bcb24..fb4024e2 100644 Binary files a/README.d/12-setup-lease-script.avif and b/README.d/12-setup-lease-script.avif differ diff --git a/README.d/13-install-custom-script.avif b/README.d/13-install-custom-script.avif index 221b84e2..2f01c43c 100644 Binary files a/README.d/13-install-custom-script.avif and b/README.d/13-install-custom-script.avif differ diff --git a/README.d/14-remove-script.avif b/README.d/14-remove-script.avif index 3e4c105a..a5c7dafc 100644 Binary files a/README.d/14-remove-script.avif and b/README.d/14-remove-script.avif differ diff --git a/README.d/notification-news-and-changes.avif b/README.d/notification-news-and-changes.avif index d2e8aa7f..d91b8a08 100644 Binary files a/README.d/notification-news-and-changes.avif and b/README.d/notification-news-and-changes.avif differ diff --git a/general/qr-code.png b/README.d/upstream.png similarity index 100% rename from general/qr-code.png rename to README.d/upstream.png diff --git a/README.md b/README.md index 746390bf..243e1fc5 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,6 @@ RouterOS Scripts [![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) -**a collection of scripts for MikroTik RouterOS** - ![RouterOS Scripts Logo](logo.svg) [RouterOS â†—ī¸](https://mikrotik.com/software) is the operating system developed @@ -57,18 +55,15 @@ Initial setup ### Get me ready! If you know how things work just copy and paste the -[initial commands](INITIAL-COMMANDS.md). These also support fixing an -existing but broken installation. Remember to edit and rerun +[initial commands](INITIAL-COMMANDS.md). Remember to edit and rerun `global-config-overlay`! - -> đŸ’Ąī¸ **Hint**: First time users should take -> [the long way in detail](#the-long-way-in-detail) below. +First time users should take the long way below. ### Live presentation Want to see it in action? I've had a presentation [Repository based RouterOS script distribution â†—ī¸](https://www.youtube.com/watch?v=B9neG3oAhcY) -including demonstration recorded live at [MUM Europe +including demonstation recorded live at [MUM Europe 2019 â†—ī¸](https://mum.mikrotik.com/2019/EU/) in Vienna. > âš ī¸ **Warning**: Some details changed. So see the presentation, then follow @@ -82,17 +77,14 @@ download the certificates. > đŸ’Ąī¸ **Hint**: RouterOS 7.19 comes with a builtin certificate store. You > 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;` -> 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;` +> trust for these builtin trust anchors: +> `/certificate/settings/set builtin-trust-anchors=trusted;` If you intend to download the scripts from a different location (for example from github.com) install the corresponding certificate chain. - /tool/fetch "https://rsc.eworm.de/main/certs/ISRG-Root-X2.pem" dst-path="isrg-root-x2.pem"; + /tool/fetch "https://git.eworm.de/cgit/routeros-scripts/plain/certs/ISRG-Root-X2.pem" dst-path="isrg-root-x2.pem"; ![screenshot: download certs](README.d/01-download-certs.avif) @@ -130,16 +122,16 @@ 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://rsc.eworm.de/main/" . $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://git.eworm.de/cgit/routeros-scripts/plain/" . $Script . ".rsc") output=user as-value]->"data"); }; ![screenshot: import scripts](README.d/04-import-scripts.avif) -And finally run configuration and functions. This will also add the -scheduler for loading at system startup automatically. +And finally load configuration and functions and add the scheduler. /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 scripts](README.d/05-run-scripts.avif) +![screenshot: run and schedule scripts](README.d/05-run-and-schedule-scripts.avif) > đŸ’Ąī¸ **Hint**: You see complaints regarding syntax errors? Most likely the > RouterOS on your device is too old. Check for updates! @@ -181,7 +173,7 @@ This last step is required when ever you make changes to your configuration. > â„šī¸ **Info**: It is recommended to edit the configuration using the command > line interface. If using Winbox on Windows OS, the line endings may be -> missing. To fix this run: +> missing. To fix this run: > `/system/script/set source=[ :tocrlf [ get global-config-overlay source ] ] global-config-overlay;` Updating scripts @@ -227,7 +219,7 @@ cleanup add a scheduler entry. $ScriptInstallUpdate dhcp-to-dns,lease-script; /ip/dhcp-server/set lease-script=lease-script [ find ]; - /system/scheduler/add name="dhcp-to-dns" interval=5m start-time=startup on-event="/system/script/run dhcp-to-dns;"; + /system/scheduler/add name="dhcp-to-dns" interval=5m on-event="/system/script/run dhcp-to-dns;"; ![screenshot: setup lease script](README.d/12-setup-lease-script.avif) @@ -409,15 +401,14 @@ immediately remove the link in question. Upstream -------- -[rsc.eworm.de](https://rsc.eworm.de/) +[![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) -### Code hosting - -* [git.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) +Mirror: +[eworm.de](https://git.eworm.de/cgit/routeros-scripts/about/) +[GitLab.com](https://gitlab.com/eworm-de/routeros-scripts#routeros-scripts) --- [âŦ†ī¸ Go back to top](#top) diff --git a/accesslist-duplicates.capsman.rsc b/accesslist-duplicates.capsman.rsc index 0d7a4386..1da03661 100644 --- a/accesslist-duplicates.capsman.rsc +++ b/accesslist-duplicates.capsman.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: accesslist-duplicates.capsman -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/accesslist-duplicates.local.rsc b/accesslist-duplicates.local.rsc index 080ce72d..03a97241 100644 --- a/accesslist-duplicates.local.rsc +++ b/accesslist-duplicates.local.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: accesslist-duplicates.local -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/accesslist-duplicates.template.rsc b/accesslist-duplicates.template.rsc index 15e96a99..bf231475 100644 --- a/accesslist-duplicates.template.rsc +++ b/accesslist-duplicates.template.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: accesslist-duplicates%TEMPL% -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/accesslist-duplicates.wifi.rsc b/accesslist-duplicates.wifi.rsc index 7696f6cc..528a73ce 100644 --- a/accesslist-duplicates.wifi.rsc +++ b/accesslist-duplicates.wifi.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: accesslist-duplicates.wifi -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/backup-cloud.rsc b/backup-cloud.rsc index 4d8830b6..e41db275 100644 --- a/backup-cloud.rsc +++ b/backup-cloud.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: backup-cloud -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: backup-script, order=40 diff --git a/backup-email.rsc b/backup-email.rsc index 317242b1..8015beaa 100644 --- a/backup-email.rsc +++ b/backup-email.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: backup-email -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: backup-script, order=20 diff --git a/backup-partition.rsc b/backup-partition.rsc index 5f8a635e..ae7ad030 100644 --- a/backup-partition.rsc +++ b/backup-partition.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: backup-partition -# Copyright (c) 2022-2026 Christian Hesse +# Copyright (c) 2022-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: backup-script, order=70 diff --git a/backup-upload.rsc b/backup-upload.rsc index f27032c4..e6b9f92f 100644 --- a/backup-upload.rsc +++ b/backup-upload.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: backup-upload -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: backup-script, order=50 diff --git a/capsman-download-packages.capsman.rsc b/capsman-download-packages.capsman.rsc index ff91e7ca..2ea16674 100644 --- a/capsman-download-packages.capsman.rsc +++ b/capsman-download-packages.capsman.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: capsman-download-packages.capsman -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # Michael Gisbers # https://rsc.eworm.de/COPYING.md # diff --git a/capsman-download-packages.template.rsc b/capsman-download-packages.template.rsc index 7f0a4b47..f95212a4 100644 --- a/capsman-download-packages.template.rsc +++ b/capsman-download-packages.template.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: capsman-download-packages%TEMPL% -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # Michael Gisbers # https://rsc.eworm.de/COPYING.md # diff --git a/capsman-download-packages.wifi.rsc b/capsman-download-packages.wifi.rsc index d65a4aec..03fd9e73 100644 --- a/capsman-download-packages.wifi.rsc +++ b/capsman-download-packages.wifi.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: capsman-download-packages.wifi -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # Michael Gisbers # https://rsc.eworm.de/COPYING.md # diff --git a/capsman-rolling-upgrade.capsman.rsc b/capsman-rolling-upgrade.capsman.rsc index 81ce0152..0d4114a3 100644 --- a/capsman-rolling-upgrade.capsman.rsc +++ b/capsman-rolling-upgrade.capsman.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: capsman-rolling-upgrade.capsman -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # Michael Gisbers # https://rsc.eworm.de/COPYING.md # diff --git a/capsman-rolling-upgrade.template.rsc b/capsman-rolling-upgrade.template.rsc index 9789d2f3..690d73d8 100644 --- a/capsman-rolling-upgrade.template.rsc +++ b/capsman-rolling-upgrade.template.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: capsman-rolling-upgrade%TEMPL% -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # Michael Gisbers # https://rsc.eworm.de/COPYING.md # diff --git a/capsman-rolling-upgrade.wifi.rsc b/capsman-rolling-upgrade.wifi.rsc index bc0d4d38..8e32ab20 100644 --- a/capsman-rolling-upgrade.wifi.rsc +++ b/capsman-rolling-upgrade.wifi.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: capsman-rolling-upgrade.wifi -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # Michael Gisbers # https://rsc.eworm.de/COPYING.md # diff --git a/certificate-renew-issued.rsc b/certificate-renew-issued.rsc index 807f0606..14917e4c 100644 --- a/certificate-renew-issued.rsc +++ b/certificate-renew-issued.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: certificate-renew-issued -# Copyright (c) 2019-2026 Christian Hesse +# Copyright (c) 2019-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/check-certificates.rsc b/check-certificates.rsc index db1e2d45..c10e33ba 100644 --- a/check-certificates.rsc +++ b/check-certificates.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: check-certificates -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 @@ -21,7 +21,7 @@ :global CertWarnTime; :global Identity; - :global CertificateAvailable; + :global CertificateAvailable :global EscapeForRegEx; :global IfThenElse; :global LogPrint; @@ -189,7 +189,7 @@ fingerprint!=[ :tostr ($CertVal->"fingerprint") ] expires-after>$CertRenewTime ]; :local CertNewVal [ /certificate/get $CertNew ]; - :if ([ $CertificateAvailable ([ $ParseKeyValueStore ($CertNewVal->"issuer") ]->"CN") "fetch" ] = false) do={ + :if ([ $CertificateAvailable ([ $ParseKeyValueStore ($CertNewVal->"issuer") ]->"CN") ] = false) do={ $LogPrint warning $ScriptName ("The certificate chain is not available!"); } @@ -231,7 +231,7 @@ :local State [ $IfThenElse (($CertVal->"expired") = true) "expired" "is about to expire" ]; $SendNotification2 ({ origin=$ScriptName; \ - subject=([ $SymbolForNotification "lock-with-ink-pen,warning-sign" ] . "Certificate warning: " . ($CertVal->"name")); \ + subject=([ $SymbolForNotification "warning-sign" ] . "Certificate warning: " . ($CertVal->"name")); \ message=("A certificate on " . $Identity . " " . $State . ".\n\n" . [ $FormatInfo $Cert ]) }); $LogPrint info $ScriptName ("The certificate '" . ($CertVal->"name") . "' " . $State . \ ", it is invalid after " . ($CertVal->"invalid-after") . "."); diff --git a/check-health.d/state.rsc b/check-health.d/state.rsc index ab32e41b..5e4cbb82 100644 --- a/check-health.d/state.rsc +++ b/check-health.d/state.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: check-health.d/state -# Copyright (c) 2019-2026 Christian Hesse +# Copyright (c) 2019-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/check-health.d/temperature.rsc b/check-health.d/temperature.rsc index 6ce3e959..9f3f1a5e 100644 --- a/check-health.d/temperature.rsc +++ b/check-health.d/temperature.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: check-health.d/temperature -# Copyright (c) 2019-2026 Christian Hesse +# Copyright (c) 2019-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/check-health.d/voltage.rsc b/check-health.d/voltage.rsc index 59dd23c3..5891fb4f 100644 --- a/check-health.d/voltage.rsc +++ b/check-health.d/voltage.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: check-health.d/voltage -# Copyright (c) 2019-2026 Christian Hesse +# Copyright (c) 2019-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/check-health.rsc b/check-health.rsc index 90d8c841..760636db 100644 --- a/check-health.rsc +++ b/check-health.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: check-health -# Copyright (c) 2019-2026 Christian Hesse +# Copyright (c) 2019-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 @@ -74,7 +74,7 @@ :set CheckHealthRAMUtilizationNotified false; } - :local Plugins [ /system/script/find where name~"^check-health\\.d/." ]; + :local Plugins [ /system/script/find where name~"^check-health.d/." ]; :if ([ :len $Plugins ] = 0) do={ $LogPrint debug $ScriptName ("No plugins installed."); :set ExitOK true; diff --git a/check-lte-firmware-upgrade.rsc b/check-lte-firmware-upgrade.rsc index ced827e2..9f4b6562 100644 --- a/check-lte-firmware-upgrade.rsc +++ b/check-lte-firmware-upgrade.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: check-lte-firmware-upgrade -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/check-perpetual-license.rsc b/check-perpetual-license.rsc index 0e66bccc..c2f0dff0 100644 --- a/check-perpetual-license.rsc +++ b/check-perpetual-license.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: check-perpetual-license -# Copyright (c) 2025-2026 Christian Hesse +# Copyright (c) 2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 @@ -42,7 +42,7 @@ $LogPrint warning $ScriptName ("Your license expired on " . ($License->"deadline-at") . "!"); :if ($SentCertificateNotification != "expired") do={ $SendNotification2 ({ origin=$ScriptName; \ - subject=([ $SymbolForNotification "scroll,cross-mark" ] . "License expired!"); \ + subject=([ $SymbolForNotification "warning-sign" ] . "License expired!"); \ message=("Your license expired on " . ($License->"deadline-at") . \ ", can no longer update RouterOS on " . $Identity . "...") }); :set SentCertificateNotification "expired"; @@ -55,7 +55,7 @@ $LogPrint warning $ScriptName ("Your license will expire on " . ($License->"deadline-at") . "!"); :if ($SentCertificateNotification != "warning") do={ $SendNotification2 ({ origin=$ScriptName; \ - subject=([ $SymbolForNotification "scroll,warning-sign" ] . "License about to expire!"); \ + subject=([ $SymbolForNotification "warning-sign" ] . "License about to expire!"); \ message=("Your license failed to renew and is about to expire on " . \ ($License->"deadline-at") . " on " . $Identity . "...") }); :set SentCertificateNotification "warning"; @@ -68,7 +68,7 @@ [ :totime ($License->"deadline-at") ] - 4w > [ :timestamp ]) do={ $LogPrint info $ScriptName ("Your license was successfully renewed."); $SendNotification2 ({ origin=$ScriptName; \ - subject=([ $SymbolForNotification "scroll,white-heavy-check-mark" ] . "License renewed"); \ + subject=([ $SymbolForNotification "white-heavy-check-mark" ] . "License renewed"); \ message=("Your license was successfully renewed on " . $Identity . \ ". It is now valid until " . ($License->"deadline-at") . ".") }); :set SentCertificateNotification; diff --git a/check-routeros-update.rsc b/check-routeros-update.rsc index 4a6925d0..8b80ddeb 100644 --- a/check-routeros-update.rsc +++ b/check-routeros-update.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: check-routeros-update -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 @@ -39,11 +39,14 @@ :local DoUpdate do={ :local ScriptName [ :tostr $1 ]; + :global LogPrint; + :if ([ :len [ /system/script/find where name="packages-update" ] ] > 0) do={ /system/script/run packages-update; } else={ /system/package/update/install without-paging; } + $LogPrint info $ScriptName ("Waiting for system to reboot."); } :if ([ $ScriptLock $ScriptName ] = false) do={ diff --git a/collect-wireless-mac.capsman.rsc b/collect-wireless-mac.capsman.rsc index 2572acc9..06b8d844 100644 --- a/collect-wireless-mac.capsman.rsc +++ b/collect-wireless-mac.capsman.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: collect-wireless-mac.capsman -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: lease-script, order=40 diff --git a/collect-wireless-mac.local.rsc b/collect-wireless-mac.local.rsc index ae9a3395..6716582d 100644 --- a/collect-wireless-mac.local.rsc +++ b/collect-wireless-mac.local.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: collect-wireless-mac.local -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: lease-script, order=40 diff --git a/collect-wireless-mac.template.rsc b/collect-wireless-mac.template.rsc index 54b113ec..53e6b0a8 100644 --- a/collect-wireless-mac.template.rsc +++ b/collect-wireless-mac.template.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: collect-wireless-mac%TEMPL% -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: lease-script, order=40 diff --git a/collect-wireless-mac.wifi.rsc b/collect-wireless-mac.wifi.rsc index 20bbb100..43ac8519 100644 --- a/collect-wireless-mac.wifi.rsc +++ b/collect-wireless-mac.wifi.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: collect-wireless-mac.wifi -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: lease-script, order=40 diff --git a/contrib/Makefile b/contrib/Makefile deleted file mode 100644 index e755a1d5..00000000 --- a/contrib/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -# Makefile - -HTML := $(shell grep -xl '' *.html) - -.PHONY: all docs clean - -all: docs - -badges.html: badges.md - markdown $< > $@ - -docs: static-html.sh $(HTML) badges.html - ./static-html.sh $(HTML) - -clean: - rm -f badges.html - git checkout HEAD -- $(HTML) diff --git a/contrib/badges.md b/contrib/badges.md deleted file mode 100644 index 24bd2055..00000000 --- a/contrib/badges.md +++ /dev/null @@ -1,6 +0,0 @@ -[![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/checksums.sh b/contrib/checksums.sh index ab4e9738..b472b49f 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' + jq --raw-input --null-input '[ inputs | split (" ") | { (.[1]): (.[0]) }] | add' > 'checksums.json' diff --git a/contrib/commitinfo.sh b/contrib/commitinfo.sh deleted file mode 100755 index 21faf9fc..00000000 --- a/contrib/commitinfo.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -sed \ - -e "/^:global CommitId/c :global CommitId \"${COMMITID:-unknown}\";" \ - -e "/^:global CommitInfo/c :global CommitInfo \"${COMMITINFO:-unknown}\";" \ - < "${1}" diff --git a/contrib/html.sh b/contrib/html.sh index 03eba23d..bbd8ba86 100755 --- a/contrib/html.sh +++ b/contrib/html.sh @@ -2,22 +2,8 @@ set -e -RELTO="$(dirname "${1}")" - -sed \ - -e "s|__TITLE__|$(head -n1 "${1}")|" \ - -e "s|__GENERAL__|$(realpath --relative-to="${RELTO}" general/)|" \ - -e "s|__ROOT__|$(realpath --relative-to="${RELTO}" ./)|" \ - < "${0}.d/head.html" - +sed "s|__TITLE__|$(head -n1 "${1}")|" < "${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 class="code" onclick="CopyToClipboard(this)"|g' \ - -e '/The above link may be broken on code hosting sites/s|blockquote|blockquote style="display: none;"|' - -sed \ - -e "s|__DATE__|${DATE:-$(date --rfc-email)}|" \ - -e "s|__VERSION__|${VERSION:-unknown}|" \ - < "${0}.d/foot.html" + -e 's/href="\([-_\./[:alnum:]]*\)\.md"/href="\1.html"/g' \ + -e '/| id="\L\1">|' +printf '' diff --git a/contrib/html.sh.d/foot.html b/contrib/html.sh.d/foot.html deleted file mode 100644 index 9e28e115..00000000 --- a/contrib/html.sh.d/foot.html +++ /dev/null @@ -1,5 +0,0 @@ - -

RouterOS Scripts documentation generated on __DATE__ for __VERSION__
-Copyright © 2013-2026 Christian Hesse <mail@eworm.de>

- - diff --git a/contrib/html.sh.d/head.html b/contrib/html.sh.d/head.html index 656a63c0..1b1dd03a 100644 --- a/contrib/html.sh.d/head.html +++ b/contrib/html.sh.d/head.html @@ -1,16 +1,15 @@ - -RouterOS Scripts :: __TITLE__ - - - +RouterOS Scripts :: __TITLE__ + + + - - - - - -
eworm on meadowQR code: rsc.eworm.deRouterOS Scripts
- a collection of scripts for MikroTik RouterOS
-
- diff --git a/contrib/logo-color.d/style.css b/contrib/logo-color.d/style.css new file mode 100644 index 00000000..eb2ec6a1 --- /dev/null +++ b/contrib/logo-color.d/style.css @@ -0,0 +1,5 @@ +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 3e9c05fe..17942cea 100644 --- a/contrib/logo-color.html +++ b/contrib/logo-color.html @@ -1,30 +1,14 @@ - - - -RouterOS Scripts :: Logo Color Changer - - + + + + +RouterOS-Scripts Logo Color Changer + - + + - - - - -
eworm on meadowQR code: rsc.eworm.deRouterOS Scripts
- a collection of scripts for MikroTik RouterOS
-
- -

Logo Color Changer

- - - -

âŦ…ī¸ Go back to main README

- -

đŸ’Ąī¸ Hint: This site or links -on it may be broken on code hosting sites. Use -Logo Color Changer -instead.

+

RouterOS-Scripts Logo Color Changer

You want the logo for your own notifications? But you joined the Telegram Group and want @@ -40,23 +24,17 @@ 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 for other browsers may differ.)

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

-
- -

âŦ…ī¸ Go back to main README
-âŦ†ī¸ Go back to top

- -

Copyright © 2013-2026 Christian Hesse <mail@eworm.de>

- - + + diff --git a/contrib/notification.d/style.css b/contrib/notification.d/style.css new file mode 100644 index 00000000..648ea23c --- /dev/null +++ b/contrib/notification.d/style.css @@ -0,0 +1,36 @@ +body { + font-family: fira-sans, sans-serif; + font-size: 10pt; + background-color: transparent; +} +div.notification { + position: relative; + float: right; + width: 600px; + border: 3px outset #6c5d53; + /* border-radius: 5px; */ + padding: 10px; + background-color: #e6e6e6; +} +div.content { + padding-left: 60px; +} +img.logo { + float: left; + border-radius: 50%; +} +p.heading { + margin: 0px; + font-weight: bold; + text-decoration: underline; +} +p.hint { + display: none; +} +pre { + font-family: fira-mono, monospace; + white-space: pre-wrap; +} +span.link { + color: #863600; +} diff --git a/contrib/notification.html b/contrib/notification.html index 239bc52c..78750362 100644 --- a/contrib/notification.html +++ b/contrib/notification.html @@ -1,57 +1,35 @@ - - - -RouterOS Scripts :: Notification Generator - - - - + + + + +RouterOS-Scripts Notification Generator + + + + - - - - -
eworm on meadowQR code: rsc.eworm.deRouterOS Scripts
- a collection of scripts for MikroTik RouterOS
-
- -

Notification Generator

- - - -

âŦ…ī¸ Go back to main README

- -

đŸ’Ąī¸ Hint: This site or links -on it may be broken on code hosting sites. Use -Notification Generator -instead.

+

RouterOS-Scripts Notification Generator

[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 oct/18/2022 18:30:48 and may be obsolete.

+

âœ‚ī¸ The message was too long and has been truncated, cut off 13%!

Hostname:

Subject:

Message:

-

Show link:

-

Queued since

+

Show link:

+

Queued since

Cut-off with percent

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

-
- -

âŦ…ī¸ Go back to main README
-âŦ†ī¸ Go back to top

- -

Copyright © 2013-2026 Christian Hesse <mail@eworm.de>

- - + + diff --git a/contrib/static-html.sh b/contrib/static-html.sh deleted file mode 100755 index 7acf1041..00000000 --- a/contrib/static-html.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -set -e - -sed -i \ - -e '/href=/s|\.md|\.html|' \ - -e '/blockquote/s|/\* display \*/|display: none;|' \ - -e '//r badges.html' \ - -e '//d' \ - "${@}" diff --git a/contrib/telegram.md b/contrib/telegram.md deleted file mode 100644 index 355a9cdd..00000000 --- a/contrib/telegram.md +++ /dev/null @@ -1,274 +0,0 @@ -Telegram -======== - -[![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) - -[âŦ…ī¸ Go back to main README](../README.md) - -We have [Miss Rose Bot â†—ī¸](https://t.me/MissRose_bot) in our -[RouterOS-Scripts â†—ī¸](https://t.me/routeros_scripts) Telegram group, -always kind and ready to help moderate. - -Notes ------ - -### README - - /save readme Please read the [main README](https://rsc.eworm.de/) to understand how things work and to get the base installation right. - -### Available scripts - -#### accesslist-duplicates - - /save accesslist-duplicates Find and remove access list duplicates with [accesslist-duplicates](https://rsc.eworm.de/doc/accesslist-duplicates.md). - -#### backup-cloud - - /save backup-cloud Upload backup to Mikrotik cloud with [backup-cloud](https://rsc.eworm.de/doc/backup-cloud.md). - -#### backup-email - - /save backup-email Send backup via e-mail with [backup-email](https://rsc.eworm.de/doc/backup-email.md). - -#### backup-partition - - /save backup-partition Save configuration to fallback partition with [backup-partition](https://rsc.eworm.de/doc/backup-partition.md). - -#### backup-upload - - /save backup-upload Upload backup to server with [backup-upload](https://rsc.eworm.de/doc/backup-upload.md). - -#### capsman-download-packages - - /save capsman-download-packages Download packages for CAP upgrade from CAPsMAN with [capsman-download-packages](https://rsc.eworm.de/doc/capsman-download-packages.md). - -#### capsman-rolling-upgrade - - /save capsman-rolling-upgrade Run rolling CAP upgrades from CAPsMAN with [capsman-rolling-upgrade](https://rsc.eworm.de/doc/capsman-rolling-upgrade.md). - -#### certificate-renew-issued - - /save certificate-renew-issued Renew locally issued certificates with [certificate-renew-issued](https://rsc.eworm.de/doc/certificate-renew-issued.md). - -#### check-certificates - - /save check-certificates Renew certificates and notify on expiration with [check-certificates](https://rsc.eworm.de/doc/check-certificates.md). - -#### check-health - - /save check-health Notify about health state with [check-health](https://rsc.eworm.de/doc/check-health.md). - -#### check-lte-firmware-upgrade - - /save check-lte-firmware-upgrade Notify on LTE firmware upgrade with [check-lte-firmware-upgrade](https://rsc.eworm.de/doc/check-lte-firmware-upgrade.md). - -#### check-perpetual-license - - /save check-perpetual-license Check perpetual license on CHR with [check-perpetual-license](https://rsc.eworm.de/doc/check-perpetual-license.md). - -#### check-routeros-update - - /save check-routeros-update Notify on RouterOS update with [check-routeros-update](https://rsc.eworm.de/doc/check-routeros-update.md). - -#### collect-wireless-mac - - /save collect-wireless-mac Collect MAC addresses in wireless access list with [collect-wireless-mac](https://rsc.eworm.de/doc/collect-wireless-mac.md). - -#### daily-psk - - /save daily-psk Use wireless network with [daily-psk](https://rsc.eworm.de/doc/daily-psk.md). - -#### dhcp-lease-comment - - /save dhcp-lease-comment Comment DHCP leases with [dhcp-lease-comment](https://rsc.eworm.de/doc/dhcp-lease-comment.md). - -#### dhcp-to-dns - - /save dhcp-to-dns Create DNS records for DHCP leases with [dhcp-to-dns](https://rsc.eworm.de/doc/dhcp-to-dns.md). - -#### firmware-upgrade-reboot - - /save firmware-upgrade-reboot Automatically upgrade firmware and reboot with [firmware-upgrade-reboot](https://rsc.eworm.de/doc/firmware-upgrade-reboot.md). - -#### fw-addr-lists - - /save fw-addr-lists Download, import and update firewall address-lists with [fw-addr-lists](https://rsc.eworm.de/doc/fw-addr-lists.md). - -#### global-wait - - /save global-wait Wait for global functions und modules with [global-wait](https://rsc.eworm.de/doc/global-wait.md). - -#### gps-track - - /save gps-track Send GPS position to server with [gps-track](https://rsc.eworm.de/doc/gps-track.md). - -#### hotspot-to-wpa - - /save hotspot-to-wpa Use WPA network with [hotspot-to-wpa](https://rsc.eworm.de/doc/hotspot-to-wpa.md). - -#### ipsec-to-dns - - /save ipsec-to-dns Create DNS records for IPSec peers with [ipsec-to-dns](https://rsc.eworm.de/doc/ipsec-to-dns.md). - -#### ipv6-update - - /save ipv6-update Update configuration on IPv6 prefix change with [ipv6-update](https://rsc.eworm.de/doc/ipv6-update.md). - -#### ip-addr-bridge - - /save ip-addr-bridge Manage IP addresses with [ip-addr-bridge](https://rsc.eworm.de/doc/ip-addr-bridge.md). - -#### lease-script - - /save lease-script Run other scripts on DHCP lease with [lease-script](https://rsc.eworm.de/doc/lease-script.md). - -#### leds-mode - - /save leds-mode Manage LEDs dark mode with [leds-mode](https://rsc.eworm.de/doc/leds-mode.md). - -#### log-forward - - /save log-forward Forward log messages via notification with [log-forward](https://rsc.eworm.de/doc/log-forward.md). - -#### mode-button - - /save mode-button Mode button with [mode-button](https://rsc.eworm.de/doc/mode-button.md). - -#### netwatch-dns - - /save netwatch-dns Manage DNS and DoH servers from netwatch with [netwatch-dns](https://rsc.eworm.de/doc/netwatch-dns.md). - -#### netwatch-notify - - /save netwatch-notify Notify on host up and down with [netwatch-notify](https://rsc.eworm.de/doc/netwatch-notify.md). - -#### ospf-to-leds - - /save ospf-to-leds Visualize OSPF state via LEDs with [ospf-to-leds](https://rsc.eworm.de/doc/ospf-to-leds.md). - -#### packages-update - - /save packages-update Manage system update with [packages-update](https://rsc.eworm.de/doc/packages-update.md). - -#### ppp-on-up - - /save ppp-on-up Run scripts on ppp connection with [ppp-on-up](https://rsc.eworm.de/doc/ppp-on-up.md). - -#### sms-action - - /save sms-action Act on received SMS with [sms-action](https://rsc.eworm.de/doc/sms-action.md). - -#### sms-forward - - /save sms-forward Forward received SMS with [sms-forward](https://rsc.eworm.de/doc/sms-forward.md). - -#### super-mario-theme - - /save super-mario-theme Play Super Mario theme with [super-mario-theme](https://rsc.eworm.de/doc/super-mario-theme.md). - -#### telegram-chat - - /save telegram-chat Chat with [telegram-chat](https://rsc.eworm.de/doc/telegram-chat.md). - -#### unattended-lte-firmware-upgrade - - /save unattended-lte-firmware-upgrade Install LTE firmware upgrade with [unattended-lte-firmware-upgrade](https://rsc.eworm.de/doc/unattended-lte-firmware-upgrade.md). - -#### update-gre-address - - /save update-gre-address Update GRE configuration with [update-gre-address](https://rsc.eworm.de/doc/update-gre-address.md). - -#### update-tunnelbroker - - /save update-tunnelbroker Update tunnelbroker configuration with [update-tunnelbroker](https://rsc.eworm.de/doc/update-tunnelbroker.md). - -### Available modules - -#### mod/bridge-port-to - - /save mod/bridge-port-to Manage ports in bridge with [mod/bridge-port-to](https://rsc.eworm.de/doc/mod/bridge-port-to.md). - -#### mod/bridge-port-vlan - - /save mod/bridge-port-vlan Manage VLANs on bridge ports with [mod/bridge-port-vlan](https://rsc.eworm.de/doc/mod/bridge-port-vlan.md). - -#### mod/inspectvar - - /save mod/inspectvar Inspect variables with [mod/inspectvar](https://rsc.eworm.de/doc/mod/inspectvar.md). - -#### mod/ipcalc - - /save mod/ipcalc IP address calculation with [mod/ipcalc](https://rsc.eworm.de/doc/mod/ipcalc.md). - -#### mod/notification-email - - /save mod/notification-email Send notifications via e-mail with [mod/notification-email](https://rsc.eworm.de/doc/mod/notification-email.md). - -#### mod/notification-gotify - - /save mod/notification-gotify Send notifications via Gotify with [mod/notification-gotify](https://rsc.eworm.de/doc/mod/notification-gotify.md). - -#### mod/notification-matrix - - /save mod/notification-matrix Send notifications via Matrix with [mod/notification-matrix](https://rsc.eworm.de/doc/mod/notification-matrix.md). - -#### mod/notification-ntfy - - /save mod/notification-ntfy Send notifications via Ntfy with [mod/notification-ntfy](https://rsc.eworm.de/doc/mod/notification-ntfy.md). - -#### mod/notification-telegram - - /save mod/notification-telegram Send notifications via Telegram with [mod/notification-telegram](https://rsc.eworm.de/doc/mod/notification-telegram.md). - -#### mod/scriptrunonce - - /save mod/scriptrunonce Download script and run it once with [mod/scriptrunonce](https://rsc.eworm.de/doc/mod/scriptrunonce.md). - -#### mod/ssh-keys-import - - /save mod/ssh-keys-import Import ssh keys for public key authentication with [mod/ssh-keys-import](https://rsc.eworm.de/doc/mod/ssh-keys-import.md). - -### Other - -#### Installing from branches - - /save branches Living on the edge or testing new features? Learn how to [switch specific scripts or the complete installation to different branches](https://rsc.eworm.de/BRANCHES.md). - -#### Certificate name from browser - - /save certificate-name-from-browser Running or accessing a custom service and looking for the CA certificate? Get the [certificate name from browser](https://rsc.eworm.de/CERTIFICATES.md). - -#### Debug output and logs - - /save debug Enable [debug output and logs](https://rsc.eworm.de/DEBUG.md) for more information on what happens. - -#### Donate - - /save donate This project is developed in private spare time and usage is free of charge for you. If you like the scripts and think this is of value for you or your business [please consider a donation](https://rsc.eworm.de/#donate). Thanks! - -#### Fix existing installation - - /save fix-installation [Fix existing installation] Your installation broke and you do not know back and forth? See how to [fix an existing installation](https://rsc.eworm.de/INITIAL-COMMANDS.md#fix-existing-installation). - -#### Next! - - /save next Another satisfied user. 😊 Next, please! - -#### Off-topic - - /save off-topic Please note this group is not about MikroTik RouterOS in general, but [RouterOS Scripts](https://rsc.eworm.de/). Your request is not about scripting at all, so please discuss somewhere else. See the [MikroTik RouterOS users (english)](https://t.me/RouterOS_users_english) group or official Mikrotik forums (https://forum.mikrotik.com/). - -Greeting --------- - - /setwelcome Hello {mention}, and welcome to {chatname}! - Please note this group is not about RouterOS in general, but [RouterOS Scripts](https://rsc.eworm.de/). Also pay attention to [rules](https://t.me/routeros_scripts/4), thanks! - ---- -[âŦ…ī¸ Go back to main README](../README.md) -[âŦ†ī¸ Go back to top](#top) diff --git a/contrib/template-capsman.sh b/contrib/template-capsman.sh deleted file mode 100755 index 5771b53c..00000000 --- a/contrib/template-capsman.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/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}" diff --git a/contrib/template-local.sh b/contrib/template-local.sh deleted file mode 100755 index bc5b3272..00000000 --- a/contrib/template-local.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/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}" diff --git a/contrib/template-wifi.sh b/contrib/template-wifi.sh deleted file mode 100755 index 5e297d9e..00000000 --- a/contrib/template-wifi.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/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}" diff --git a/daily-psk.capsman.rsc b/daily-psk.capsman.rsc index 30781d33..3ecd6b66 100644 --- a/daily-psk.capsman.rsc +++ b/daily-psk.capsman.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: daily-psk.capsman -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # Michael Gisbers # https://rsc.eworm.de/COPYING.md # diff --git a/daily-psk.local.rsc b/daily-psk.local.rsc index 730c52f0..d496350c 100644 --- a/daily-psk.local.rsc +++ b/daily-psk.local.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: daily-psk.local -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # Michael Gisbers # https://rsc.eworm.de/COPYING.md # diff --git a/daily-psk.template.rsc b/daily-psk.template.rsc index 51bc4754..5a1df2f1 100644 --- a/daily-psk.template.rsc +++ b/daily-psk.template.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: daily-psk%TEMPL% -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # Michael Gisbers # https://rsc.eworm.de/COPYING.md # diff --git a/daily-psk.wifi.rsc b/daily-psk.wifi.rsc index 91f323d1..c441e581 100644 --- a/daily-psk.wifi.rsc +++ b/daily-psk.wifi.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: daily-psk.wifi -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # Michael Gisbers # https://rsc.eworm.de/COPYING.md # diff --git a/dhcp-lease-comment.capsman.rsc b/dhcp-lease-comment.capsman.rsc index 54dcc799..3615bb9b 100644 --- a/dhcp-lease-comment.capsman.rsc +++ b/dhcp-lease-comment.capsman.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: dhcp-lease-comment.capsman -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: lease-script, order=60 diff --git a/dhcp-lease-comment.local.rsc b/dhcp-lease-comment.local.rsc index 8a54ef68..9da53336 100644 --- a/dhcp-lease-comment.local.rsc +++ b/dhcp-lease-comment.local.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: dhcp-lease-comment.local -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: lease-script, order=60 diff --git a/dhcp-lease-comment.template.rsc b/dhcp-lease-comment.template.rsc index 3bc30723..62cace12 100644 --- a/dhcp-lease-comment.template.rsc +++ b/dhcp-lease-comment.template.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: dhcp-lease-comment%TEMPL% -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: lease-script, order=60 diff --git a/dhcp-lease-comment.wifi.rsc b/dhcp-lease-comment.wifi.rsc index f9f1f048..667708cd 100644 --- a/dhcp-lease-comment.wifi.rsc +++ b/dhcp-lease-comment.wifi.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: dhcp-lease-comment.wifi -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: lease-script, order=60 diff --git a/dhcp-to-dns.rsc b/dhcp-to-dns.rsc index 7a823d24..a9c91e1c 100644 --- a/dhcp-to-dns.rsc +++ b/dhcp-to-dns.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: dhcp-to-dns -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: lease-script, order=20 diff --git a/doc/accesslist-duplicates.d/01-example.avif b/doc/accesslist-duplicates.d/01-example.avif index d290a771..11b3fc5f 100644 Binary files a/doc/accesslist-duplicates.d/01-example.avif and b/doc/accesslist-duplicates.d/01-example.avif differ diff --git a/doc/backup-cloud.d/notification.avif b/doc/backup-cloud.d/notification.avif index 5918a623..e533908f 100644 Binary files a/doc/backup-cloud.d/notification.avif and b/doc/backup-cloud.d/notification.avif differ diff --git a/doc/backup-upload.d/notification.avif b/doc/backup-upload.d/notification.avif index 3bcc1f4d..83cfb18a 100644 Binary files a/doc/backup-upload.d/notification.avif and b/doc/backup-upload.d/notification.avif differ diff --git a/doc/check-certificates.d/notification-01-warn.avif b/doc/check-certificates.d/notification-01-warn.avif deleted file mode 100644 index e32e54b3..00000000 Binary files a/doc/check-certificates.d/notification-01-warn.avif and /dev/null differ diff --git a/doc/check-certificates.d/notification-02-renew.avif b/doc/check-certificates.d/notification-02-renew.avif deleted file mode 100644 index 9ff1400a..00000000 Binary files a/doc/check-certificates.d/notification-02-renew.avif and /dev/null differ diff --git a/doc/check-certificates.d/notification.avif b/doc/check-certificates.d/notification.avif new file mode 100644 index 00000000..7c250da1 Binary files /dev/null and b/doc/check-certificates.d/notification.avif differ diff --git a/doc/check-certificates.md b/doc/check-certificates.md index b8fece01..a9426dba 100644 --- a/doc/check-certificates.md +++ b/doc/check-certificates.md @@ -19,10 +19,9 @@ Description This script tries to download and renew certificates, then notifies about certificates that are still about to expire. -### Sample notifications +### Sample notification -![check-certificates notification warning](check-certificates.d/notification-01-warn.avif) -![check-certificates notification renew](check-certificates.d/notification-02-renew.avif) +![check-certificates notification](check-certificates.d/notification.avif) Requirements and installation ----------------------------- diff --git a/doc/check-health.d/notification-01-cpu-utilization-high.avif b/doc/check-health.d/notification-01-cpu-utilization-high.avif index 7fbce3ce..326e7fed 100644 Binary files a/doc/check-health.d/notification-01-cpu-utilization-high.avif and b/doc/check-health.d/notification-01-cpu-utilization-high.avif differ diff --git a/doc/check-health.d/notification-02-cpu-utilization-ok.avif b/doc/check-health.d/notification-02-cpu-utilization-ok.avif index f8e91a3a..811ccd70 100644 Binary files a/doc/check-health.d/notification-02-cpu-utilization-ok.avif and b/doc/check-health.d/notification-02-cpu-utilization-ok.avif differ diff --git a/doc/check-health.d/notification-03-ram-utilization-high.avif b/doc/check-health.d/notification-03-ram-utilization-high.avif index 9015b4a3..59155c56 100644 Binary files a/doc/check-health.d/notification-03-ram-utilization-high.avif and b/doc/check-health.d/notification-03-ram-utilization-high.avif differ diff --git a/doc/check-health.d/notification-04-ram-utilization-ok.avif b/doc/check-health.d/notification-04-ram-utilization-ok.avif index 8f949ecf..d995b9a1 100644 Binary files a/doc/check-health.d/notification-04-ram-utilization-ok.avif and b/doc/check-health.d/notification-04-ram-utilization-ok.avif differ diff --git a/doc/check-health.d/notification-05-voltage.avif b/doc/check-health.d/notification-05-voltage.avif index 9ef2d943..17a385ba 100644 Binary files a/doc/check-health.d/notification-05-voltage.avif and b/doc/check-health.d/notification-05-voltage.avif differ diff --git a/doc/check-health.d/notification-06-temperature-high.avif b/doc/check-health.d/notification-06-temperature-high.avif index 908e8f2e..60d38027 100644 Binary files a/doc/check-health.d/notification-06-temperature-high.avif and b/doc/check-health.d/notification-06-temperature-high.avif differ diff --git a/doc/check-health.d/notification-07-temperature-ok.avif b/doc/check-health.d/notification-07-temperature-ok.avif index 8f509e8d..4afed02d 100644 Binary files a/doc/check-health.d/notification-07-temperature-ok.avif and b/doc/check-health.d/notification-07-temperature-ok.avif differ diff --git a/doc/check-health.d/notification-08-state-fail.avif b/doc/check-health.d/notification-08-state-fail.avif index 8ba7bb97..ad049ac8 100644 Binary files a/doc/check-health.d/notification-08-state-fail.avif and b/doc/check-health.d/notification-08-state-fail.avif differ diff --git a/doc/check-health.d/notification-09-state-ok.avif b/doc/check-health.d/notification-09-state-ok.avif index 91977416..26f5a745 100644 Binary files a/doc/check-health.d/notification-09-state-ok.avif and b/doc/check-health.d/notification-09-state-ok.avif differ diff --git a/doc/check-lte-firmware-upgrade.d/notification.avif b/doc/check-lte-firmware-upgrade.d/notification.avif index 2c2f692d..c440da59 100644 Binary files a/doc/check-lte-firmware-upgrade.d/notification.avif and b/doc/check-lte-firmware-upgrade.d/notification.avif differ diff --git a/doc/check-perpetual-license.d/notification-01-warn.avif b/doc/check-perpetual-license.d/notification-01-warn.avif deleted file mode 100644 index aa36e45f..00000000 Binary files a/doc/check-perpetual-license.d/notification-01-warn.avif and /dev/null differ diff --git a/doc/check-perpetual-license.d/notification-02-renew.avif b/doc/check-perpetual-license.d/notification-02-renew.avif deleted file mode 100644 index 471a22e4..00000000 Binary files a/doc/check-perpetual-license.d/notification-02-renew.avif and /dev/null differ diff --git a/doc/check-perpetual-license.d/notification.avif b/doc/check-perpetual-license.d/notification.avif new file mode 100644 index 00000000..70ca603d Binary files /dev/null and b/doc/check-perpetual-license.d/notification.avif differ diff --git a/doc/check-perpetual-license.md b/doc/check-perpetual-license.md index a32c4c3f..0335fb54 100644 --- a/doc/check-perpetual-license.md +++ b/doc/check-perpetual-license.md @@ -20,10 +20,9 @@ On *Cloud Hosted Router* (*CHR*) the licensing is perpetual: Buy once, use forever - but it needs regular renewal. This script checks licensing state and sends a notification to warn before expiration. -### Sample notifications +### Sample notification -![check-perpetual-license notification warn](check-perpetual-license.d/notification-01-warn.avif) -![check-perpetual-license notification renew](check-perpetual-license.d/notification-02-renew.avif) +![check-perpetual-license notification](check-perpetual-license.d/notification.avif) Requirements and installation ----------------------------- diff --git a/doc/check-routeros-update.d/notification-01-found.avif b/doc/check-routeros-update.d/notification-01-found.avif deleted file mode 100644 index 54dd2df6..00000000 Binary files a/doc/check-routeros-update.d/notification-01-found.avif and /dev/null differ diff --git a/doc/check-routeros-update.d/notification-02-neighbor.avif b/doc/check-routeros-update.d/notification-02-neighbor.avif deleted file mode 100644 index db4e9807..00000000 Binary files a/doc/check-routeros-update.d/notification-02-neighbor.avif and /dev/null differ diff --git a/doc/check-routeros-update.d/notification.avif b/doc/check-routeros-update.d/notification.avif new file mode 100644 index 00000000..50317cf7 Binary files /dev/null and b/doc/check-routeros-update.d/notification.avif differ diff --git a/doc/check-routeros-update.d/terminal.avif b/doc/check-routeros-update.d/terminal.avif deleted file mode 100644 index af950593..00000000 Binary files a/doc/check-routeros-update.d/terminal.avif and /dev/null differ diff --git a/doc/check-routeros-update.md b/doc/check-routeros-update.md index 029182d3..a45e0751 100644 --- a/doc/check-routeros-update.md +++ b/doc/check-routeros-update.md @@ -31,14 +31,13 @@ automatically is supported. > of view. At the same time it can be source of serve breakage. So test > versions in lab and read > [changelog â†—ī¸](https://mikrotik.com/download/changelogs/) and -> [forum â†—ī¸](https://forum.mikrotik.com/c/announcements/5) before deploying +> [forum â†—ī¸](https://forum.mikrotik.com/viewforum.php?f=21) before deploying > to your production environment! Automatic updates should be handled > with care! -### Sample notifications +### Sample notification -![check-routeros-update notification found](check-routeros-update.d/notification-01-found.avif) -![check-routeros-update notification neighbor](check-routeros-update.d/notification-02-neighbor.avif) +![check-routeros-update notification](check-routeros-update.d/notification.avif) Requirements and installation ----------------------------- @@ -88,8 +87,6 @@ Be notified when run from scheduler or run it manually: If an update is found you can install it right away. -![Terminal](check-routeros-update.d/terminal.avif) - Installing script [packages-update](packages-update.md) gives extra options. Tips & Tricks diff --git a/doc/collect-wireless-mac.d/notification.avif b/doc/collect-wireless-mac.d/notification.avif index 4b21b2f5..a2833f09 100644 Binary files a/doc/collect-wireless-mac.d/notification.avif and b/doc/collect-wireless-mac.d/notification.avif differ diff --git a/doc/daily-psk.d/notification.avif b/doc/daily-psk.d/notification.avif index 79cfc3e2..dd0b1b62 100644 Binary files a/doc/daily-psk.d/notification.avif and b/doc/daily-psk.d/notification.avif differ diff --git a/doc/log-forward.d/notification-01-info.avif b/doc/log-forward.d/notification-01-info.avif deleted file mode 100644 index 6d25467b..00000000 Binary files a/doc/log-forward.d/notification-01-info.avif and /dev/null differ diff --git a/doc/log-forward.d/notification-02-warn.avif b/doc/log-forward.d/notification-02-warn.avif deleted file mode 100644 index ff61c0c0..00000000 Binary files a/doc/log-forward.d/notification-02-warn.avif and /dev/null differ diff --git a/doc/log-forward.d/notification.avif b/doc/log-forward.d/notification.avif new file mode 100644 index 00000000..a0f9ab33 Binary files /dev/null and b/doc/log-forward.d/notification.avif differ diff --git a/doc/log-forward.md b/doc/log-forward.md index d5a2f137..f6086c85 100644 --- a/doc/log-forward.md +++ b/doc/log-forward.md @@ -35,10 +35,9 @@ The script works around the limitations, for example it does: It is intended to be run periodically from scheduler, then collects new log messages and forwards them via notification. -### Sample notifications +### Sample notification -![log-forward notification info](log-forward.d/notification-01-info.avif) -![log-forward notification warn](log-forward.d/notification-02-warn.avif) +![log-forward notification](log-forward.d/notification.avif) Requirements and installation ----------------------------- diff --git a/doc/mod/inspectvar.d/01-inspectvar.avif b/doc/mod/inspectvar.d/01-inspectvar.avif deleted file mode 100644 index e4e9bd5a..00000000 Binary files a/doc/mod/inspectvar.d/01-inspectvar.avif and /dev/null differ diff --git a/doc/mod/inspectvar.d/inspectvar.avif b/doc/mod/inspectvar.d/inspectvar.avif new file mode 100644 index 00000000..f1da1d4d Binary files /dev/null and b/doc/mod/inspectvar.d/inspectvar.avif differ diff --git a/doc/mod/inspectvar.md b/doc/mod/inspectvar.md index e5c5629e..7daba153 100644 --- a/doc/mod/inspectvar.md +++ b/doc/mod/inspectvar.md @@ -33,7 +33,7 @@ Call the function `$InspectVar` with a variable as parameter: $InspectVar $ModeButton; -![InspectVar](inspectvar.d/01-inspectvar.avif) +![InspectVar](inspectvar.d/inspectvar.avif) --- [âŦ…ī¸ Go back to main README](../../README.md) diff --git a/doc/mod/ipcalc.d/01-ipcalc.avif b/doc/mod/ipcalc.d/01-ipcalc.avif deleted file mode 100644 index aaad6167..00000000 Binary files a/doc/mod/ipcalc.d/01-ipcalc.avif and /dev/null differ diff --git a/doc/mod/ipcalc.d/02-ipcalcreturn.avif b/doc/mod/ipcalc.d/02-ipcalcreturn.avif deleted file mode 100644 index 2459eaf3..00000000 Binary files a/doc/mod/ipcalc.d/02-ipcalcreturn.avif and /dev/null differ diff --git a/doc/mod/ipcalc.d/ipcalc.avif b/doc/mod/ipcalc.d/ipcalc.avif new file mode 100644 index 00000000..fe726e8c Binary files /dev/null and b/doc/mod/ipcalc.d/ipcalc.avif differ diff --git a/doc/mod/ipcalc.d/ipcalcreturn.avif b/doc/mod/ipcalc.d/ipcalcreturn.avif new file mode 100644 index 00000000..5e4dd570 Binary files /dev/null and b/doc/mod/ipcalc.d/ipcalcreturn.avif differ diff --git a/doc/mod/ipcalc.md b/doc/mod/ipcalc.md index f8d407c0..c07853e5 100644 --- a/doc/mod/ipcalc.md +++ b/doc/mod/ipcalc.md @@ -43,7 +43,7 @@ It expects an IP address in CIDR notation as argument. $IPCalc 192.168.88.1/24; -![IPCalc](ipcalc.d/01-ipcalc.avif) +![IPCalc](ipcalc.d/ipcalc.avif) ### IPCalcReturn @@ -53,7 +53,7 @@ the information in a named array. :put ([ $IPCalcReturn 192.168.88.1/24 ]->"broadcast"); -![IPCalcReturn](ipcalc.d/02-ipcalcreturn.avif) +![IPCalcReturn](ipcalc.d/ipcalcreturn.avif) --- [âŦ…ī¸ Go back to main README](../../README.md) diff --git a/doc/mod/notification-matrix.d/01-authenticate.avif b/doc/mod/notification-matrix.d/01-authenticate.avif index d5b80256..b897943b 100644 Binary files a/doc/mod/notification-matrix.d/01-authenticate.avif and b/doc/mod/notification-matrix.d/01-authenticate.avif differ diff --git a/doc/mod/notification-matrix.d/02-join-room.avif b/doc/mod/notification-matrix.d/02-join-room.avif index 20c4e799..ad99ffde 100644 Binary files a/doc/mod/notification-matrix.d/02-join-room.avif and b/doc/mod/notification-matrix.d/02-join-room.avif differ diff --git a/doc/mod/notification-matrix.md b/doc/mod/notification-matrix.md index ad4cf4f9..da6d6dea 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" "fetch"; + $CertificateAvailable "GTS Root R4"; Replace the CA certificate name with what ever is needed for your server. You may want to find the diff --git a/doc/mod/notification-telegram.d/02-getchatid.avif b/doc/mod/notification-telegram.d/02-getchatid.avif deleted file mode 100644 index 0112449c..00000000 Binary files a/doc/mod/notification-telegram.d/02-getchatid.avif and /dev/null differ diff --git a/doc/mod/notification-telegram.d/getchatid.avif b/doc/mod/notification-telegram.d/getchatid.avif new file mode 100644 index 00000000..77929691 Binary files /dev/null and b/doc/mod/notification-telegram.d/getchatid.avif differ diff --git a/doc/mod/notification-telegram.d/01-newbot.avif b/doc/mod/notification-telegram.d/newbot.avif similarity index 100% rename from doc/mod/notification-telegram.d/01-newbot.avif rename to doc/mod/notification-telegram.d/newbot.avif diff --git a/doc/mod/notification-telegram.d/03-setuserpic.avif b/doc/mod/notification-telegram.d/setuserpic.avif similarity index 100% rename from doc/mod/notification-telegram.d/03-setuserpic.avif rename to doc/mod/notification-telegram.d/setuserpic.avif diff --git a/doc/mod/notification-telegram.md b/doc/mod/notification-telegram.md index d33f6fc6..804104fa 100644 --- a/doc/mod/notification-telegram.md +++ b/doc/mod/notification-telegram.md @@ -36,7 +36,7 @@ Configuration Open Telegram, then start a chat with [BotFather â†—ī¸](https://t.me/BotFather) and create your own bot: -![create new bot](notification-telegram.d/01-newbot.avif) +![create new bot](notification-telegram.d/newbot.avif) Set that token from *BotFather* (use your own!) to `TelegramTokenId`, for now just temporarily: @@ -49,7 +49,7 @@ then send your first message. Any text will do. On your device run $GetTelegramChatId; -![get chat id](notification-telegram.d/02-getchatid.avif) +![get chat id](notification-telegram.d/getchatid.avif) Finally edit `global-config-overlay`, add `TelegramTokenId` with the token from *BotFather* and `TelegramChatId` with your retrieved chat id. Then @@ -104,15 +104,12 @@ Tips & Tricks You can use a profile photo for your bot to make it recognizable. Open the chat with [BotFather â†—ī¸](https://t.me/BotFather) and set it there. -![set profile photo](notification-telegram.d/03-setuserpic.avif) +![set profile photo](notification-telegram.d/setuserpic.avif) -Have a look at my [Logo Color Changer](../../contrib/logo-color.html) +Have a look at my +[RouterOS-Scripts Logo Color Changer](https://git.eworm.de/cgit/routeros-scripts/plain/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 -------- diff --git a/doc/mod/scriptrunonce.d/01-scriptrunonce.avif b/doc/mod/scriptrunonce.d/01-scriptrunonce.avif deleted file mode 100644 index 461c3981..00000000 Binary files a/doc/mod/scriptrunonce.d/01-scriptrunonce.avif and /dev/null differ diff --git a/doc/mod/scriptrunonce.d/scriptrunonce.avif b/doc/mod/scriptrunonce.d/scriptrunonce.avif new file mode 100644 index 00000000..27ccd41f Binary files /dev/null and b/doc/mod/scriptrunonce.d/scriptrunonce.avif differ diff --git a/doc/mod/scriptrunonce.md b/doc/mod/scriptrunonce.md index db861bbe..955d12ed 100644 --- a/doc/mod/scriptrunonce.md +++ b/doc/mod/scriptrunonce.md @@ -48,9 +48,9 @@ Usage and invocation The function `$ScriptRunOnce` expects an URL (or name if `ScriptRunOnceBaseUrl` is given) pointing to a script as parameter. - $ScriptRunOnce https://rsc.eworm.de/main/doc/mod/scriptrunonce.d/hello-world.rsc; + $ScriptRunOnce https://git.eworm.de/cgit/routeros-scripts/plain/doc/mod/scriptrunonce.d/hello-world.rsc; -![ScriptRunOnce](scriptrunonce.d/01-scriptrunonce.avif) +![ScriptRunOnce](scriptrunonce.d/scriptrunonce.avif) Giving multiple scripts is possible, separated by comma. diff --git a/doc/mod/ssh-keys-import.md b/doc/mod/ssh-keys-import.md index abf4d392..49276d04 100644 --- a/doc/mod/ssh-keys-import.md +++ b/doc/mod/ssh-keys-import.md @@ -51,10 +51,12 @@ 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: diff --git a/doc/mode-button.md b/doc/mode-button.md index af95ddb6..be15bc92 100644 --- a/doc/mode-button.md +++ b/doc/mode-button.md @@ -26,15 +26,17 @@ 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 ----------------------------- diff --git a/doc/netwatch-notify.d/notification-01-down.avif b/doc/netwatch-notify.d/notification-01-down.avif index 2257a0d3..894fb23f 100644 Binary files a/doc/netwatch-notify.d/notification-01-down.avif and b/doc/netwatch-notify.d/notification-01-down.avif differ diff --git a/doc/netwatch-notify.d/notification-02-up.avif b/doc/netwatch-notify.d/notification-02-up.avif index 4147cb77..9021a93b 100644 Binary files a/doc/netwatch-notify.d/notification-02-up.avif and b/doc/netwatch-notify.d/notification-02-up.avif differ diff --git a/doc/sms-forward.d/notification.avif b/doc/sms-forward.d/notification.avif index 14764a3c..01eb7ba6 100644 Binary files a/doc/sms-forward.d/notification.avif and b/doc/sms-forward.d/notification.avif differ diff --git a/firmware-upgrade-reboot.rsc b/firmware-upgrade-reboot.rsc index bd3aa174..e3ca55b3 100644 --- a/firmware-upgrade-reboot.rsc +++ b/firmware-upgrade-reboot.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: firmware-upgrade-reboot -# Copyright (c) 2022-2026 Christian Hesse +# Copyright (c) 2022-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/fw-addr-lists.d/allow b/fw-addr-lists.d/allow index 8c4ca3c7..8b59ed7c 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 -rsc.eworm.de +# https://git.eworm.de/cgit/routeros-scripts/about/doc/fw-addr-lists.md +git.eworm.de diff --git a/fw-addr-lists.d/block b/fw-addr-lists.d/block index 86a6c626..5e9fef29 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://rsc.eworm.de/doc/fw-addr-lists.md +# https://git.eworm.de/cgit/routeros-scripts/about/doc/fw-addr-lists.md # example.net 93.184.216.34 diff --git a/fw-addr-lists.rsc b/fw-addr-lists.rsc index a9c75d65..2b5fd0cf 100644 --- a/fw-addr-lists.rsc +++ b/fw-addr-lists.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: fw-addr-lists -# Copyright (c) 2023-2026 Christian Hesse +# Copyright (c) 2023-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.16 @@ -22,12 +22,10 @@ :global EitherOr; :global FetchHuge; :global HumanReadableNum; - :global IfThenElse; :global LogPrint; :global LogPrintOnce; :global LogPrintVerbose; - :global NetMask4; - :global NetMask6; + :global MIN; :global ScriptLock; :global WaitFullyConnected; @@ -74,7 +72,7 @@ :if ([ :len ($List->"cert") ] > 0) do={ :set CheckCertificate true; - :if ([ $CertificateAvailable ($List->"cert") "fetch" ] = false) do={ + :if ([ $CertificateAvailable ($List->"cert") ] = false) do={ $LogPrint warning $ScriptName ("Downloading required certificate (" . $FwListName . \ " / " . $List->"url" . ") failed, trying anyway."); } @@ -114,35 +112,27 @@ :set Address ([ :pick $Line 0 [ $FindDelim $Line ] ] . ($List->"cidr")); } :do { - :local Branch; + :local Branch [ $GetBranch $Address ]; :if ($Address ~ "^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}(/[0-9]{1,2})?\$") do={ - :local Net $Address; - :local CIDR 32; - :local Slash [ :find $Address "/" ]; - :if ([ :typeof $Slash ] = "num") do={ - :set Net [ :toip [ :pick $Address 0 $Slash ] ] - :set CIDR [ :pick $Address ($Slash + 1) [ :len $Address ] ]; - :set Address [ :tostr (([ :toip $Net ] & [ $NetMask4 $CIDR ]) . [ $IfThenElse ($CIDR < 32) ("/" . $CIDR) ]) ]; + :if ($Address ~ "/32\$") do={ + :set Address [ :pick $Address 0 ([ :len $Address ] - 3) ]; } - :set Branch [ $GetBranch $Address ]; :set ($IPv4Addresses->$Branch->$Address) $TimeOut; :error true; } :if ($Address ~ "^[0-9a-zA-Z]*:[0-9a-zA-Z:\\.]+(/[0-9]{1,3})?\$") do={ :local Net $Address; - :local CIDR 128; + :local Cidr 64; :local Slash [ :find $Address "/" ]; :if ([ :typeof $Slash ] = "num") do={ :set Net [ :toip6 [ :pick $Address 0 $Slash ] ] - :set CIDR [ :pick $Address ($Slash + 1) [ :len $Address ] ]; + :set Cidr [ $MIN [ :pick $Address ($Slash + 1) [ :len $Address ] ] 64 ]; } - :set Address (([ :toip6 $Net ] & [ $NetMask6 $CIDR ]) . "/" . $CIDR); - :set Branch [ $GetBranch $Address ]; + :set Address (([ :toip6 $Net ] & ffff:ffff:ffff:ffff::) . "/" . $Cidr); :set ($IPv6Addresses->$Branch->$Address) $TimeOut; :error true; } :if ($Address ~ "^[\\.a-zA-Z0-9-]+\\.[a-zA-Z]{2,}\$") do={ - :set Branch [ $GetBranch $Address ]; :set ($IPv4Addresses->$Branch->$Address) $TimeOut; :set ($IPv6Addresses->$Branch->$Address) $TimeOut; :error true; diff --git a/general/clipboard.js b/general/clipboard.js deleted file mode 100644 index cbcfa4ad..00000000 --- a/general/clipboard.js +++ /dev/null @@ -1,8 +0,0 @@ -/* copy code to clipboard */ -function CopyToClipboard(element) { - element.style.filter = 'invert(1)'; - navigator.clipboard.writeText(element.firstElementChild.textContent); - setTimeout(function() { - element.style.filter = 'invert(0)'; - }, 100); -} diff --git a/general/eworm-meadow.avif b/general/eworm-meadow.avif deleted file mode 100644 index f592d59b..00000000 Binary files a/general/eworm-meadow.avif and /dev/null differ diff --git a/general/style.css b/general/style.css deleted file mode 100644 index c3e86901..00000000 --- a/general/style.css +++ /dev/null @@ -1,108 +0,0 @@ -/* stylesheet for RouterOS Scripts */ -body { - background-color: transparent; - font-family: fira-sans, sans-serif; - font-size: 10pt; - line-height: 1.6; -} -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: #555; -} -code { - margin: 0 2px; - padding: 2px 5px; - border: 1px solid #ccc; - background-color: #f8f8f8; - border-radius: 3px; -} -div.notification { - position: relative; - float: none; - width: 600px; - border: 3px outset #6c5d53; - /* border-radius: 5px; */ - padding: 10px; - background-color: #e6e6e6; -} -div.content { - padding-left: 60px; -} -hr { - clear: both; -} -img.logo { - float: left; - /* border-radius: 50%; */ -} -p.foot { - color: #777; - text-align: center; -} -p.heading { - font-size: 120%; - margin: 0px; - font-weight: bold; - text-decoration: underline; -} -p.hint { - display: none; -} -pre { - font-family: fira-mono, monospace; - white-space: pre-wrap; -} -pre.code { - background-color: #f8f8f8; - border: 1px solid #ccc; - overflow: auto; - padding: 6px 10px; - border-radius: 3px; -} -pre code { - margin: 0; - padding: 0; - border: 0; -} -pre.code::before { - content: "📋 Copy!"; - float: right; - border: 1px solid #ccc; - border-radius: 3px; -} -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; - margin-right: 10vw; - } - div.notification { - float: right; - margin: 10px; - } -} diff --git a/global-config-overlay.rsc b/global-config-overlay.rsc index 5bfc3031..9afacebd 100644 --- a/global-config-overlay.rsc +++ b/global-config-overlay.rsc @@ -1,12 +1,12 @@ # Overlay for global configuration by RouterOS Scripts -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # global configuration, custom overlay # https://rsc.eworm.de/#editing-configuration # Copy relevant configuration from global-config, paste and modify it here. -# https://rsc.eworm.de/main/global-config.rsc +# https://rsc.eworm.de/global-config.rsc # End of global-config-overlay diff --git a/global-config.rsc b/global-config.rsc index 25254123..86d528aa 100644 --- a/global-config.rsc +++ b/global-config.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: global-config -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # global configuration @@ -275,9 +275,8 @@ # /_()_\ Things *will* break! # # load custom settings from overlay and snippets -:foreach Script in=([ /system/script/find where name~"^global-config\\.d/." ], \ - [ /system/script/find where name="global-config-overlay" ], \ - [ /system/script/find where name~"^global-config-overlay\\.d/." ]) do={ +:foreach Script in=([ /system/script/find where name="global-config-overlay" ], \ + [ /system/script/find where name~"^global-config-overlay.d/" ]) do={ :onerror Err { /system/script/run $Script; } do={ diff --git a/global-functions.rsc b/global-functions.rsc index 3b5db905..98bc306c 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: global-functions -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # Michael Gisbers # https://rsc.eworm.de/COPYING.md # @@ -61,8 +61,6 @@ :global MAX; :global MIN; :global MkDir; -:global NetMask4; -:global NetMask6; :global NotificationFunctions; :global ParseDate; :global ParseKeyValueStore; @@ -106,15 +104,11 @@ # 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={ @@ -127,10 +121,7 @@ :return false; } - :local CertSettings [ /certificate/settings/get ]; - :if ((($CertSettings->"builtin-trust-anchors") = "trusted" || \ - ($CertSettings->"builtin-trust-store") ~ $UseFor || \ - ($CertSettings->"builtin-trust-store") = "all") && \ + :if (([ /certificate/settings/get ]->"builtin-trust-anchors") = "trusted" && \ [[ :parse (":return [ :len [ /certificate/builtin/find where common-name=\"" . $CommonName . "\" ] ]") ]] > 0) do={ :return true; } @@ -168,6 +159,7 @@ :global ScriptUpdatesBaseUrl; :global ScriptUpdatesUrlSuffix; + :global CertificateAvailable; :global CertificateNameByCN; :global CleanName; :global FetchUserAgentStr; @@ -240,16 +232,9 @@ # multiply given character(s) :set CharacterMultiply do={ - :local Str [ :tostr $1 ]; - :local Num [ :tonum $2 ]; - - :if ($Num = 0) do={ - :return ""; - } - :local Return ""; - :for I from=1 to=$Num do={ - :set Return ($Return . $Str); + :for I from=1 to=$2 do={ + :set Return ($Return . $1); } :return $Return; } @@ -411,7 +396,7 @@ :return true; } - :if ([ $CertificateAvailable "ISRG Root X1" "fetch" ] = false) do={ + :if ([ $CertificateAvailable "ISRG Root X1" ] = false) do={ $LogPrint error $0 ("Downloading required certificate failed."); :return false; } @@ -480,7 +465,7 @@ :local Error [ :tostr $3 ]; :global IfThenElse; - :global LogPrint; + :global LogPrint; :if ($ExitOK = "false") do={ $LogPrint error $Name ([ $IfThenElse ([ :pick $Name 0 1 ] = "\$") \ @@ -525,11 +510,7 @@ $RmDir $DirName; :return false; } - - :if ([ $WaitForFile $FileName 5s ] = false) do={ - $LogPrint debug $0 ("The file downloaded from " . $Url . " did not show up."); - :return false; - } + $WaitForFile $FileName; :local FileSize [ /file/get $FileName size ]; :local Return ""; @@ -550,16 +531,10 @@ :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/" . [ $IfThenElse ($CommitId != "unknown") \ - ("; " . $CommitInfo . "/" . [ :pick $CommitId 0 8 ]) ] . ")"); + :return ("User-Agent: Mikrotik/" . $Resource->"version" . " " . \ + $Resource->"architecture-name" . " " . $Caller . "/Fetch (https://rsc.eworm.de/)"); } # check for existence of file, optionally with type @@ -657,7 +632,7 @@ } :do { - :if ([ $CertificateAvailable "GTS Root R4" "fetch" ] = false) do={ + :if ([ $CertificateAvailable "GTS Root R4" ] = false) do={ $LogPrint warning $0 ("Downloading required certificate failed."); :error false; } @@ -1015,43 +990,6 @@ :return true; } -# return an IPv4 netmask for CIDR -:set NetMask4 do={ - :local CIDR [ :tonum $1 ]; - - :return ((255.255.255.255 << (32 - $CIDR)) & 255.255.255.255); -} - -# return an IPv6 netmask for CIDR -:set NetMask6 do={ - :local FuncName $0; - :local CIDR [ :tostr $1 ]; - - :global IfThenElse; - :global MAX; - :global MIN; - - :global NetMask6Cache; - - :if ([ :typeof ($NetMask6Cache->$CIDR) ] = "ip6") do={ - :return ($NetMask6Cache->$CIDR); - } - - :if ([ :typeof $NetMask6Cache ] = "nothing") do={ - :set NetMask6Cache ({}); - } - - :local Mask ""; - :for I from=0 to=7 do={ - :set Mask ($Mask . \ - [ :convert from=num to=hex (0xffff - (0xffff >> [ :tonum [ $MIN [ $MAX ($CIDR - (16 * $I)) 0 ] 16 ] ])) ] . \ - [ $IfThenElse ($I < 7) ":" ]); - } - :set Mask [ :toip6 $Mask ]; - :set ($NetMask6Cache->$CIDR) $Mask; - :return $Mask; -} - # prepare NotificationFunctions array :if ([ :typeof $NotificationFunctions ] != "array") do={ :set NotificationFunctions ({}); @@ -1265,7 +1203,7 @@ :global SymbolForNotification; :global ValidateSyntax; - :if ([ $CertificateAvailable "ISRG Root X2" "fetch" ] = false) do={ + :if ([ $CertificateAvailable "ISRG Root X2" ] = false) do={ $LogPrint warning $0 ("Downloading certificate failed, trying without."); } @@ -1316,7 +1254,7 @@ } :if ([ :len ($ScriptInfo->"certificate") ] > 0) do={ - :if ([ $CertificateAvailable ($ScriptInfo->"certificate") "fetch" ] = false) do={ + :if ([ $CertificateAvailable ($ScriptInfo->"certificate") ] = false) do={ $LogPrint warning $0 ("Downloading certificate failed, trying without."); } } @@ -1333,19 +1271,9 @@ } } 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; - :error false; - } - :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; } @@ -1683,7 +1611,6 @@ :set SymbolByUnicodeName do={ :local Name [ :tostr $1 ]; - :global EitherOr; :global LogPrintOnce; :global SymbolsExtra; @@ -1715,7 +1642,6 @@ "mobile-phone"="\F0\9F\93\B1"; "pushpin"="\F0\9F\93\8C"; "scissors"="\E2\9C\82"; - "scroll"="\F0\9F\93\9C"; "smiley-partying-face"="\F0\9F\A5\B3"; "smiley-smiling-face"="\E2\98\BA"; "smiley-winking-face-with-tongue"="\F0\9F\98\9C"; @@ -1726,19 +1652,12 @@ "white-heavy-check-mark"="\E2\9C\85" }, $SymbolsExtra); - :local Magic [ :pick [ /system/clock/get date ] 4 10 ]; - :local Special { - "information-04-01"="\F0\9F\9A\BB"; - "large-orange-circle-04-01"="\F0\9F\8D\8A"; - "large-orange-circle-10-31"="\F0\9F\8E\83"; - "large-red-circle-04-01"="\F0\9F\8D\92" }; - :if ([ :len ($Symbols->$Name) ] = 0) do={ $LogPrintOnce warning $0 ("No symbol available for name '" . $Name . "'!"); :return ""; } - :return ([ $EitherOr ($Special->($Name . $Magic)) ($Symbols->$Name) ] . "\EF\B8\8F"); + :return (($Symbols->$Name) . "\EF\B8\8F"); } # return symbol for notification @@ -1907,7 +1826,7 @@ } # load modules -:foreach Script in=[ /system/script/find where name ~ "^(global-functions\\.d|mod)/." ] do={ +:foreach Script in=[ /system/script/find where name ~ "^mod/." ] do={ :local ScriptVal [ /system/script/get $Script ]; :if ([ $ValidateSyntax ($ScriptVal->"source") ] = true) do={ :onerror Err { @@ -1920,15 +1839,6 @@ } } -# 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" . \ diff --git a/global-wait.rsc b/global-wait.rsc index 746974e7..23b56298 100644 --- a/global-wait.rsc +++ b/global-wait.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: global-wait -# Copyright (c) 2020-2026 Christian Hesse +# Copyright (c) 2020-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/gps-track.rsc b/gps-track.rsc index fb403e65..6a090bfe 100644 --- a/gps-track.rsc +++ b/gps-track.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: gps-track -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/hotspot-to-wpa-cleanup.capsman.rsc b/hotspot-to-wpa-cleanup.capsman.rsc index 585c7924..e4ac9678 100644 --- a/hotspot-to-wpa-cleanup.capsman.rsc +++ b/hotspot-to-wpa-cleanup.capsman.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: hotspot-to-wpa-cleanup.capsman -# Copyright (c) 2021-2026 Christian Hesse +# Copyright (c) 2021-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: lease-script, order=80 diff --git a/hotspot-to-wpa-cleanup.template.rsc b/hotspot-to-wpa-cleanup.template.rsc index 0aac42fe..d51e1d03 100644 --- a/hotspot-to-wpa-cleanup.template.rsc +++ b/hotspot-to-wpa-cleanup.template.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: hotspot-to-wpa-cleanup%TEMPL% -# Copyright (c) 2021-2026 Christian Hesse +# Copyright (c) 2021-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: lease-script, order=80 diff --git a/hotspot-to-wpa-cleanup.wifi.rsc b/hotspot-to-wpa-cleanup.wifi.rsc index 6803a449..8bb2631b 100644 --- a/hotspot-to-wpa-cleanup.wifi.rsc +++ b/hotspot-to-wpa-cleanup.wifi.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: hotspot-to-wpa-cleanup.wifi -# Copyright (c) 2021-2026 Christian Hesse +# Copyright (c) 2021-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # provides: lease-script, order=80 diff --git a/hotspot-to-wpa.capsman.rsc b/hotspot-to-wpa.capsman.rsc index cbe0a791..8977cee1 100644 --- a/hotspot-to-wpa.capsman.rsc +++ b/hotspot-to-wpa.capsman.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: hotspot-to-wpa.capsman -# Copyright (c) 2019-2026 Christian Hesse +# Copyright (c) 2019-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/hotspot-to-wpa.template.rsc b/hotspot-to-wpa.template.rsc index 4169d6de..c5d977d1 100644 --- a/hotspot-to-wpa.template.rsc +++ b/hotspot-to-wpa.template.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: hotspot-to-wpa%TEMPL% -# Copyright (c) 2019-2026 Christian Hesse +# Copyright (c) 2019-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/hotspot-to-wpa.wifi.rsc b/hotspot-to-wpa.wifi.rsc index d90be359..6a97e460 100644 --- a/hotspot-to-wpa.wifi.rsc +++ b/hotspot-to-wpa.wifi.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: hotspot-to-wpa.wifi -# Copyright (c) 2019-2026 Christian Hesse +# Copyright (c) 2019-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/ip-addr-bridge.rsc b/ip-addr-bridge.rsc index 0f2bf8ab..68ff4a41 100644 --- a/ip-addr-bridge.rsc +++ b/ip-addr-bridge.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: ip-addr-bridge -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # enable or disable ip addresses based on bridge port state diff --git a/ipsec-to-dns.rsc b/ipsec-to-dns.rsc index 90a8215c..1b5ed133 100644 --- a/ipsec-to-dns.rsc +++ b/ipsec-to-dns.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: ipsec-to-dns -# Copyright (c) 2021-2026 Christian Hesse +# Copyright (c) 2021-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/ipv6-update.rsc b/ipv6-update.rsc index 0cbb2dc0..580a426c 100644 --- a/ipv6-update.rsc +++ b/ipv6-update.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: ipv6-update -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/lease-script.rsc b/lease-script.rsc index 7f9eaa97..ab449568 100644 --- a/lease-script.rsc +++ b/lease-script.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: lease-script -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/leds-day-mode.rsc b/leds-day-mode.rsc index d2341bfd..7344fde7 100644 --- a/leds-day-mode.rsc +++ b/leds-day-mode.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: leds-day-mode -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # enable LEDs diff --git a/leds-night-mode.rsc b/leds-night-mode.rsc index 87094fad..8bd028e7 100644 --- a/leds-night-mode.rsc +++ b/leds-night-mode.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: leds-night-mode -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # disable LEDs diff --git a/leds-toggle-mode.rsc b/leds-toggle-mode.rsc index b6118513..b55e3514 100644 --- a/leds-toggle-mode.rsc +++ b/leds-toggle-mode.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: leds-toggle-mode -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # toggle LEDs mode diff --git a/log-forward.rsc b/log-forward.rsc index 96edc11d..be7eff7b 100644 --- a/log-forward.rsc +++ b/log-forward.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: log-forward -# Copyright (c) 2020-2026 Christian Hesse +# Copyright (c) 2020-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 @@ -95,7 +95,7 @@ :set LogForwardRateLimit ($LogForwardRateLimit + 10); $SendNotification2 ({ origin=$ScriptName; \ - subject=([ $SymbolForNotification ("memo" . [ $IfThenElse ($Warning = true) ",warning-sign" ]) ] . \ + subject=([ $SymbolForNotification [ $IfThenElse ($Warning = true) "warning-sign" "memo" ] ] . \ "Log Forwarding"); \ message=("The log on " . $Identity . " contains " . [ $IfThenElse ($Count = 1) "this message" \ ("these " . $Count . " messages") ] . " after " . [ /system/resource/get uptime ] . " uptime." . \ diff --git a/mod/bridge-port-to.rsc b/mod/bridge-port-to.rsc index 7046ff86..93eedcef 100644 --- a/mod/bridge-port-to.rsc +++ b/mod/bridge-port-to.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: mod/bridge-port-to -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/mod/bridge-port-vlan.rsc b/mod/bridge-port-vlan.rsc index 65c11fce..6deee994 100644 --- a/mod/bridge-port-vlan.rsc +++ b/mod/bridge-port-vlan.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: mod/bridge-port-vlan -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/mod/inspectvar.rsc b/mod/inspectvar.rsc index 63f35ba1..fc1b366f 100644 --- a/mod/inspectvar.rsc +++ b/mod/inspectvar.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: mod/inspectvar -# Copyright (c) 2020-2026 Christian Hesse +# Copyright (c) 2020-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 @@ -36,7 +36,7 @@ :global CharacterMultiply; - :return ([ $CharacterMultiply " " ($Level * 2) ] . "-" . $Prefix . "-> " . $Value); + :return ([ $CharacterMultiply " " $Level ] . "-" . $Prefix . "-> " . $Value); } :local TypeOf [ :typeof $Input ]; diff --git a/mod/ipcalc.rsc b/mod/ipcalc.rsc index 93ea8a30..eacff6d9 100644 --- a/mod/ipcalc.rsc +++ b/mod/ipcalc.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: mod/ipcalc -# Copyright (c) 2020-2026 Christian Hesse +# Copyright (c) 2020-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 @@ -34,34 +34,20 @@ # calculate and return netmask, network, min host, max host and broadcast :set IPCalcReturn do={ :local Input [ :tostr $1 ]; - - :global NetMask4; - :global NetMask6; - - :local Address [ :pick $Input 0 [ :find $Input "/" ] ]; + :local Address [ :toip [ :pick $Input 0 [ :find $Input "/" ] ] ]; :local Bits [ :tonum [ :pick $Input ([ :find $Input "/" ] + 1) [ :len $Input ] ] ]; - :local Mask; - :local One; - :if ([ :typeof [ :toip $Address ] ] = "ip") do={ - :set Address [ :toip $Address ]; - :set Mask [ $NetMask4 $Bits ]; - :set One 0.0.0.1; - } else={ - :set Address [ :toip6 $Address ]; - :set Mask [ $NetMask6 $Bits ]; - :set One ::1; - } + :local Mask ((255.255.255.255 << (32 - $Bits)) & 255.255.255.255); - :local Return ({ + :local Return { "address"=$Address; "netmask"=$Mask; "networkaddress"=($Address & $Mask); "networkbits"=$Bits; "network"=(($Address & $Mask) . "/" . $Bits); - "hostmin"=(($Address & $Mask) | $One); - "hostmax"=(($Address | ~$Mask) ^ $One); + "hostmin"=(($Address & $Mask) | 0.0.0.1); + "hostmax"=(($Address | ~$Mask) ^ 0.0.0.1); "broadcast"=($Address | ~$Mask); - }); + } :return $Return; } diff --git a/mod/notification-email.rsc b/mod/notification-email.rsc index 5f45e663..ad9762a3 100644 --- a/mod/notification-email.rsc +++ b/mod/notification-email.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: mod/notification-email -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 @@ -101,11 +101,8 @@ $LogPrint warning $0 ("File '" . $File . "' does not exist, can not attach."); } } - :do { - /tool/e-mail/send from=[ $EMailGenerateFrom ] to=($Message->"to") \ - cc=($Message->"cc") subject=($Message->"subject") \ - body=($Message->"body") file=$Attach; - } on-error={ } + /tool/e-mail/send from=[ $EMailGenerateFrom ] to=($Message->"to") cc=($Message->"cc") \ + subject=($Message->"subject") body=($Message->"body") file=$Attach; :local Wait true; :do { :delay 1s; @@ -132,7 +129,7 @@ } :if ($AllDone = true && $QueueLen = [ :len $EmailQueue ]) do={ - /system/scheduler/remove [ find where name="_FlushEmailQueue" ]; + /system/scheduler/remove $Scheduler; :set EmailQueue; :return true; } diff --git a/mod/notification-gotify.rsc b/mod/notification-gotify.rsc index 464b4272..d8eafbe0 100644 --- a/mod/notification-gotify.rsc +++ b/mod/notification-gotify.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: mod/notification-gotify -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # Leonardo David Monteiro # https://rsc.eworm.de/COPYING.md # diff --git a/mod/notification-matrix.rsc b/mod/notification-matrix.rsc index 5203e0fb..e9b42a0d 100644 --- a/mod/notification-matrix.rsc +++ b/mod/notification-matrix.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: mod/notification-matrix -# Copyright (c) 2013-2026 Michael Gisbers +# Copyright (c) 2013-2025 Michael Gisbers # Christian Hesse # https://rsc.eworm.de/COPYING.md # diff --git a/mod/notification-ntfy.rsc b/mod/notification-ntfy.rsc index 03a2d420..71140209 100644 --- a/mod/notification-ntfy.rsc +++ b/mod/notification-ntfy.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: mod/notification-ntfy -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 @@ -109,7 +109,7 @@ :onerror Err { :if ($Server = "ntfy.sh") do={ - :if ([ $CertificateAvailable "ISRG Root X1" "fetch" ] = false) do={ + :if ([ $CertificateAvailable "ISRG Root X1" ] = false) do={ $LogPrint warning $0 ("Downloading required certificate failed."); :error false; } diff --git a/mod/notification-telegram.rsc b/mod/notification-telegram.rsc index 959924f0..2eb90e12 100644 --- a/mod/notification-telegram.rsc +++ b/mod/notification-telegram.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: mod/notification-telegram -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 @@ -21,7 +21,6 @@ :global TelegramQueue; :global TelegramMessageIDs; - :global CertificateAvailable; :global IsFullyConnected; :global LogPrint; @@ -30,11 +29,6 @@ :return false; } - :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={ - $LogPrint warning $0 ("Downloading required certificate failed."); - :return false; - } - :local AllDone true; :local QueueLen [ :len $TelegramQueue ]; @@ -72,7 +66,7 @@ :global CertificateAvailable; :global LogPrint; - :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={ + :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ $LogPrint warning $0 ("Downloading required certificate failed."); :return false; } @@ -197,7 +191,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" "fetch" ] = false) do={ + :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ $LogPrint warning $0 ("Downloading required certificate failed."); :error false; } diff --git a/mod/scriptrunonce.rsc b/mod/scriptrunonce.rsc index 0242b16e..1d6aaf1f 100644 --- a/mod/scriptrunonce.rsc +++ b/mod/scriptrunonce.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: mod/scriptrunonece -# Copyright (c) 2020-2026 Christian Hesse +# Copyright (c) 2020-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/mod/ssh-keys-import.rsc b/mod/ssh-keys-import.rsc index fb0cc0fe..8bea64ee 100644 --- a/mod/ssh-keys-import.rsc +++ b/mod/ssh-keys-import.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: mod/ssh-keys-import -# Copyright (c) 2020-2026 Christian Hesse +# Copyright (c) 2020-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.16 diff --git a/mode-button.rsc b/mode-button.rsc index b7a7b85f..d82f8995 100644 --- a/mode-button.rsc +++ b/mode-button.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: mode-button -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/netwatch-dns.rsc b/netwatch-dns.rsc index c55f09e5..9e2f9bcf 100644 --- a/netwatch-dns.rsc +++ b/netwatch-dns.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: netwatch-dns -# Copyright (c) 2022-2026 Christian Hesse +# Copyright (c) 2022-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.16 @@ -19,6 +19,7 @@ :global CertificateAvailable; :global EitherOr; :global IsDNSResolving; + :global IsTimeSync; :global LogPrint; :global LogPrintOnce; :global ParseKeyValueStore; @@ -72,6 +73,13 @@ :local DohCurrent [ /ip/dns/get use-doh-server ]; :local DohServers ({}); + + :if ([ :len $DohCurrent ] > 0 && [ $IsDNSResolving ] = false && [ $IsTimeSync ] = false) do={ + $LogPrint info $ScriptName ("Time is not sync, disabling DoH: " . $DohCurrent); + /ip/dns/set use-doh-server=""; + :set DohCurrent ""; + } + :foreach Host in=[ /tool/netwatch/find where comment~"\\bdoh\\b" status="up" ] do={ :local HostVal [ /tool/netwatch/get $Host ]; :local HostInfo [ $ParseKeyValueStore ($HostVal->"comment") ]; @@ -86,8 +94,8 @@ :set ($HostInfo->"doh-url") ("https://" . [ $EitherOr $HostName ($HostVal->"host") ] . "/dns-query"); } - :if ($DohCurrent = $HostInfo->"doh-url" && [ $IsDNSResolving ] = true) do={ - $LogPrint debug $ScriptName ("Current DoH server is still up and resolving: " . $DohCurrent); + :if ($DohCurrent = $HostInfo->"doh-url") do={ + $LogPrint debug $ScriptName ("Current DoH server is still up: " . $DohCurrent); :set ExitOK true; :error true; } @@ -97,14 +105,14 @@ } :if ([ :len $DohCurrent ] > 0) do={ - $LogPrint info $ScriptName ("Current DoH server is down or not resolving, disabling: " . $DohCurrent); + $LogPrint info $ScriptName ("Current DoH server is down, disabling: " . $DohCurrent); /ip/dns/set use-doh-server=""; /ip/dns/cache/flush; } :foreach DohServer in=$DohServers do={ :if ([ :len ($DohServer->"doh-cert") ] > 0) do={ - :if ([ $CertificateAvailable ($DohServer->"doh-cert") "dns" ] = false) do={ + :if ([ $CertificateAvailable ($DohServer->"doh-cert") ] = false) do={ $LogPrint warning $ScriptName ("Downloading certificate failed, trying without."); } } diff --git a/netwatch-notify.rsc b/netwatch-notify.rsc index d4a9123f..1fcc2034 100644 --- a/netwatch-notify.rsc +++ b/netwatch-notify.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: netwatch-notify -# Copyright (c) 2020-2026 Christian Hesse +# Copyright (c) 2020-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/news-and-changes.rsc b/news-and-changes.rsc index 53f3e7b6..dbfb1b9b 100644 --- a/news-and-changes.rsc +++ b/news-and-changes.rsc @@ -1,5 +1,5 @@ # News, changes and migration by RouterOS Scripts -# Copyright (c) 2019-2026 Christian Hesse +# Copyright (c) 2019-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md :global IDonate; diff --git a/ospf-to-leds.rsc b/ospf-to-leds.rsc index 10d35307..26f8aa37 100644 --- a/ospf-to-leds.rsc +++ b/ospf-to-leds.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: ospf-to-leds -# Copyright (c) 2020-2026 Christian Hesse +# Copyright (c) 2020-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/packages-update.rsc b/packages-update.rsc index b0bf5478..379e818e 100644 --- a/packages-update.rsc +++ b/packages-update.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: packages-update -# Copyright (c) 2019-2026 Christian Hesse +# Copyright (c) 2019-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/ppp-on-up.rsc b/ppp-on-up.rsc index bb09c856..f16d73f3 100644 --- a/ppp-on-up.rsc +++ b/ppp-on-up.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: ppp-on-up -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/sms-action.rsc b/sms-action.rsc index 35f4cfa7..47e19223 100644 --- a/sms-action.rsc +++ b/sms-action.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: sms-action -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/sms-forward.rsc b/sms-forward.rsc index e3d2d2e7..feb640e5 100644 --- a/sms-forward.rsc +++ b/sms-forward.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: sms-forward -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # Anatoly Bubenkov # https://rsc.eworm.de/COPYING.md # @@ -68,8 +68,8 @@ $LogPrint warning $ScriptName ("Failed to remove message: " . $Err); } } else={ - :set Messages ($Messages . "\n\n" . [ $SymbolForNotification "incoming-envelope" ] . \ - "On " . $SmsVal->"timestamp" . " type " . $SmsVal->"type" . ":\n" . $SmsVal->"message"); + :set Messages ($Messages . "\n\nOn " . $SmsVal->"timestamp" . \ + " type " . $SmsVal->"type" . ":\n" . $SmsVal->"message"); :foreach Hook in=$SmsForwardHooks do={ :if ($Phone~($Hook->"allowed-number") && ($SmsVal->"message")~($Hook->"match")) do={ :if ([ $ValidateSyntax ($Hook->"command") ] = true) do={ diff --git a/super-mario-theme.rsc b/super-mario-theme.rsc index 318f1d9c..726c5267 100644 --- a/super-mario-theme.rsc +++ b/super-mario-theme.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: super-mario-theme -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # play Super Mario theme diff --git a/telegram-chat.rsc b/telegram-chat.rsc index 1c949e8f..7f7b7a79 100644 --- a/telegram-chat.rsc +++ b/telegram-chat.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: telegram-chat -# Copyright (c) 2023-2026 Christian Hesse +# Copyright (c) 2023-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 @@ -61,7 +61,7 @@ :set TelegramRandomDelay 0; } - :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" "fetch" ] = false) do={ + :if ([ $CertificateAvailable "Go Daddy Root Certificate Authority - G2" ] = false) do={ $LogPrint warning $ScriptName ("Downloading required certificate failed."); :set ExitOK true; :error false; diff --git a/unattended-lte-firmware-upgrade.rsc b/unattended-lte-firmware-upgrade.rsc index 6f1ac024..237c2d83 100644 --- a/unattended-lte-firmware-upgrade.rsc +++ b/unattended-lte-firmware-upgrade.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: unattended-lte-firmware-upgrade -# Copyright (c) 2018-2026 Christian Hesse +# Copyright (c) 2018-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/update-gre-address.rsc b/update-gre-address.rsc index cde6aa0a..dd7d63e4 100644 --- a/update-gre-address.rsc +++ b/update-gre-address.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: update-gre-address -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # https://rsc.eworm.de/COPYING.md # # requires RouterOS, version=7.15 diff --git a/update-tunnelbroker.rsc b/update-tunnelbroker.rsc index ee7f6f9c..9057e1e4 100644 --- a/update-tunnelbroker.rsc +++ b/update-tunnelbroker.rsc @@ -1,6 +1,6 @@ #!rsc by RouterOS # RouterOS script: update-tunnelbroker -# Copyright (c) 2013-2026 Christian Hesse +# Copyright (c) 2013-2025 Christian Hesse # Michael Gisbers # https://rsc.eworm.de/COPYING.md # @@ -28,7 +28,7 @@ :error false; } - :if ([ $CertificateAvailable "Starfield Root Certificate Authority - G2" "fetch" ] = false) do={ + :if ([ $CertificateAvailable "Starfield Root Certificate Authority - G2" ] = false) do={ $LogPrint error $ScriptName ("Downloading required certificate failed."); :set ExitOK true; :error false;