Compare commits

...

24 commits

Author SHA1 Message Date
Christian Hesse
c3428b6a2e global-functions: set and fix global scheduler automatically...
... and also adjust README and INITIAL-COMMANDS.
2025-11-13 20:22:56 +01:00
Christian Hesse
6e57826bbe contrib/commitinfo: support updating the commit info 2025-11-13 19:34:10 +01:00
Christian Hesse
576f41fc86 global-functions: $FetchUserAgentStr: add commit info in user agent string 2025-11-13 16:07:28 +01:00
Christian Hesse
a9076f760d Merge branch 'rsc-eworm-de' into next 2025-11-13 16:07:28 +01:00
Christian Hesse
cb82d9b271 Merge branch 'contrib-template' into next 2025-11-13 16:07:28 +01:00
Christian Hesse
0a4b963c26 doc/mod/scriptrunonce: get script from rsc.eworm.de 2025-11-13 16:07:28 +01:00
Christian Hesse
b4c3f6c58f contrib/logo-color: drop width & height properties for images 2025-11-13 16:07:28 +01:00
Christian Hesse
fbeb1b53bb contrib/template-wifi: split off from Makefile 2025-11-13 16:07:28 +01:00
Christian Hesse
f3e5ba5024 INITIAL-COMMANDS: install from rsc.eworm.de 2025-11-13 16:07:28 +01:00
Christian Hesse
ff05d2e95d contrib/logo-color: place screenshots below each other...
... not side by side.
2025-11-13 16:07:28 +01:00
Christian Hesse
0215c54b4f contrib/template-local: split off from Makefile 2025-11-13 16:07:28 +01:00
Christian Hesse
e4eaa31a87 README: install from rsc.eworm.de 2025-11-13 16:07:28 +01:00
Christian Hesse
7c950b5bc2 general/style: make the blockquote darker 2025-11-13 16:07:28 +01:00
Christian Hesse
04fdbf17e7 contrib/template-capsman: split off from Makefile 2025-11-13 16:07:28 +01:00
Christian Hesse
5c7d7e017d fw-addr-lists.d/allow: use rsc.eworm.de in the list 2025-11-13 16:07:28 +01:00
Christian Hesse
6e4e3a50e5 Merge branch 'contrib-html-head-foot' into next 2025-11-13 16:07:28 +01:00
Christian Hesse
324a778671 fw-addr-lists.d/{allow,block}: use short url rsc.eworm.de 2025-11-13 16:07:28 +01:00
Christian Hesse
af340720cd Makefile: clean up and add phony targets 2025-11-13 16:07:28 +01:00
Christian Hesse
b07f155021 contrib/html: add a footer 2025-11-13 16:07:28 +01:00
Christian Hesse
22803175ed Merge branch 'contrib-html' into next 2025-11-13 16:07:28 +01:00
Christian Hesse
13d8e406a1 contrib/notification: add a head with eworm, QR code and caption 2025-11-13 16:07:28 +01:00
Christian Hesse
18782cf247 contrib/Makefile: hide the hint on broken site 2025-11-13 16:07:28 +01:00
Christian Hesse
6cae963934 contrib/logo-color: add a head with eworm, QR code and caption 2025-11-13 16:07:28 +01:00
Christian Hesse
4da39b9cbc contrib/html: add a head with eworm, QR code and caption 2025-11-13 16:07:28 +01:00
21 changed files with 152 additions and 44 deletions

View file

@ -17,7 +17,7 @@ Initial commands
Run the complete base installation: Run the complete base installation:
{ {
:local BaseUrl "https://git.eworm.de/cgit/routeros-scripts/plain/"; :local BaseUrl "https://rsc.eworm.de/main/";
:local CertCommonName "ISRG Root X2"; :local CertCommonName "ISRG Root X2";
:local CertFileName "ISRG-Root-X2.pem"; :local CertFileName "ISRG-Root-X2.pem";
:local CertFingerprint "69729b8e15a86efc177a57afb7171dfc64add28c2fca8cf1507e34453ccb1470"; :local CertFingerprint "69729b8e15a86efc177a57afb7171dfc64add28c2fca8cf1507e34453ccb1470";
@ -45,9 +45,6 @@ Run the complete base installation:
}; };
:put "Loading configuration and functions..."; :put "Loading configuration and functions...";
/system/script { run global-config; run global-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={ :if ([ :len [ /certificate/find where fingerprint=$CertFingerprint ] ] > 0) do={
:put "Renaming certificate by its common-name..."; :put "Renaming certificate by its common-name...";
:global CertificateNameByCN; :global CertificateNameByCN;

View file

@ -2,38 +2,43 @@
# template scripts -> final scripts # template scripts -> final scripts
# markdown files -> html files # markdown files -> html files
CAPSMAN = $(wildcard *.capsman.rsc) ALL_RSC := $(wildcard *.rsc */*.rsc)
LOCAL = $(wildcard *.local.rsc) GEN_RSC := $(wildcard *.capsman.rsc *.local.rsc *.wifi.rsc)
WIFI = $(wildcard *.wifi.rsc)
MARKDOWN = $(wildcard *.md doc/*.md doc/mod/*.md) MARKDOWN := $(wildcard *.md doc/*.md doc/mod/*.md)
HTML = $(MARKDOWN:.md=.html) HTML := $(MARKDOWN:.md=.html)
all: $(CAPSMAN) $(LOCAL) $(WIFI) $(HTML) checksums.json DATE ?= $(shell date --rfc-email)
VERSION ?= $(shell git symbolic-ref --short HEAD 2>/dev/null)/$(shell git rev-list --count HEAD 2>/dev/null)/$(shell git rev-parse --short=8 HEAD 2>/dev/null)
export DATE VERSION
.PHONY: all checksums commitinfo docs rsc clean
all: checksums docs rsc
checksums: checksums.json
checksums.json: contrib/checksums.sh $(ALL_RSC)
contrib/checksums.sh > $@
commitinfo:
contrib/commitinfo.sh
docs: $(HTML)
%.html: %.md general/style.css contrib/html.sh contrib/html.sh.d/head.html %.html: %.md general/style.css contrib/html.sh contrib/html.sh.d/head.html
contrib/html.sh $< > $@ contrib/html.sh $< > $@
%.capsman.rsc: %.template.rsc Makefile rsc: $(GEN_RSC)
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!' \
< $< > $@
%.local.rsc: %.template.rsc Makefile %.capsman.rsc: %.template.rsc contrib/template-capsman.sh
sed -e '/\/caps-man\//d' -e '/\/interface\/wifi\//d' -e 's|%TEMPL%|.local|' \ contrib/template-capsman.sh $< > $@
-e '/^# NOT \/interface\/wireless\/ #$$/,/^# NOT \/interface\/wireless\/ #$$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< $< > $@
%.wifi.rsc: %.template.rsc Makefile %.local.rsc: %.template.rsc contrib/template-local.sh
sed -e '/\/caps-man\//d' -e '/\/interface\/wireless\//d' -e 's|%TEMPL%|.wifi|' \ contrib/template-local.sh $< > $@
-e '/^# NOT \/interface\/wifi\/ #$$/,/^# NOT \/interface\/wifi\/ #$$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< $< > $@
checksums.json: contrib/checksums.sh *.rsc */*.rsc %.wifi.rsc: %.template.rsc contrib/template-wifi.sh
contrib/checksums.sh > $@ contrib/template-wifi.sh $< > $@
clean: clean:
rm -f $(HTML) checksums.json rm -f $(HTML) checksums.json

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -87,7 +87,7 @@ If you intend to download the scripts from a
different location (for example from github.com) install the corresponding different location (for example from github.com) install the corresponding
certificate chain. certificate chain.
/tool/fetch "https://git.eworm.de/cgit/routeros-scripts/plain/certs/ISRG-Root-X2.pem" dst-path="isrg-root-x2.pem"; /tool/fetch "https://rsc.eworm.de/main/certs/ISRG-Root-X2.pem" dst-path="isrg-root-x2.pem";
![screenshot: download certs](README.d/01-download-certs.avif) ![screenshot: download certs](README.d/01-download-certs.avif)
@ -125,16 +125,16 @@ date and time is set correctly!
Now let's download the main scripts and add them in configuration on the fly. Now let's download the main scripts and add them in configuration on the fly.
:foreach Script in={ "global-config"; "global-config-overlay"; "global-functions" } do={ /system/script/add name=$Script owner=$Script source=([ /tool/fetch check-certificate=yes-without-crl ("https://git.eworm.de/cgit/routeros-scripts/plain/" . $Script . ".rsc") output=user as-value]->"data"); }; :foreach Script in={ "global-config"; "global-config-overlay"; "global-functions" } do={ /system/script/add name=$Script owner=$Script source=([ /tool/fetch check-certificate=yes-without-crl ("https://rsc.eworm.de/main/" . $Script . ".rsc") output=user as-value]->"data"); };
![screenshot: import scripts](README.d/04-import-scripts.avif) ![screenshot: import scripts](README.d/04-import-scripts.avif)
And finally load configuration and functions and add the scheduler. And finally run configuration and functions. This will also add the
scheduler for loading at system startup automatically.
/system/script { run global-config; run global-functions; }; /system/script { run global-config; run global-functions; };
/system/scheduler/add name="global-scripts" start-time=startup on-event="/system/script { run global-config; run global-functions; }";
![screenshot: run and schedule scripts](README.d/05-run-and-schedule-scripts.avif) ![screenshot: run and schedule scripts](README.d/05-run-scripts.avif)
> 💡️ **Hint**: You see complaints regarding syntax errors? Most likely the > 💡️ **Hint**: You see complaints regarding syntax errors? Most likely the
> RouterOS on your device is too old. Check for updates! > RouterOS on your device is too old. Check for updates!

View file

@ -7,4 +7,7 @@ HTML := $(wildcard *.html)
all: docs all: docs
docs: $(HTML) docs: $(HTML)
sed -i '/href=/s|\.md|\.html|' $(HTML) sed -i \
-e '/href=/s|\.md|\.html|' \
-e '/blockquote/s|/\*! display \*/|display: none;|' \
$(HTML)

6
contrib/commitinfo.sh Executable file
View file

@ -0,0 +1,6 @@
#!/bin/sh
sed -i \
-e "/^:global CommitId/c :global CommitId \"${COMMITID:-unknown}\";" \
-e "/^:global CommitInfo/c :global CommitInfo \"${COMMITINFO:-unknown}\";" \
global-functions.rsc

View file

@ -8,6 +8,8 @@ sed \
-e "s|__TITLE__|$(head -n1 "${1}")|" \ -e "s|__TITLE__|$(head -n1 "${1}")|" \
-e "s|__STYLE__|$(realpath --relative-to="${RELTO}" general/style.css)|" \ -e "s|__STYLE__|$(realpath --relative-to="${RELTO}" general/style.css)|" \
-e "s|__LOGO__|$(realpath --relative-to="${RELTO}" logo.png)|" \ -e "s|__LOGO__|$(realpath --relative-to="${RELTO}" logo.png)|" \
-e "s|__EWORM__|$(realpath --relative-to="${RELTO}" general/eworm-meadow.avif)|" \
-e "s|__QR_CODE__|$(realpath --relative-to="${RELTO}" general/qr-code.png)|" \
< "${0}.d/head.html" < "${0}.d/head.html"
markdown -f toc,idanchor "${1}" | sed \ markdown -f toc,idanchor "${1}" | sed \
@ -16,4 +18,7 @@ markdown -f toc,idanchor "${1}" | sed \
-e '/<h[1234] /s|-2c-||g' -e '/<h[1234] /s|--26-amp-3b-||g' \ -e '/<h[1234] /s|-2c-||g' -e '/<h[1234] /s|--26-amp-3b-||g' \
-e '/The above link may be broken on code hosting sites/s|blockquote|blockquote style="display: none;"|' -e '/The above link may be broken on code hosting sites/s|blockquote|blockquote style="display: none;"|'
printf '</body></html>' sed \
-e "s|__DATE__|${DATE:-$(date --rfc-email)}|" \
-e "s|__VERSION__|${VERSION:-unknown}|" \
< "${0}.d/foot.html"

View file

@ -0,0 +1,4 @@
<p class="foot">RouterOS Scripts documentation generated on <i>__DATE__</i> for <i>__VERSION__</i></p>
</body></html>

View file

@ -4,3 +4,12 @@
<link rel="stylesheet" type="text/css" href="__STYLE__"> <link rel="stylesheet" type="text/css" href="__STYLE__">
<link rel="icon" type="image/png" href="__LOGO__"> <link rel="icon" type="image/png" href="__LOGO__">
</head><body> </head><body>
<table><tr>
<td><img src="__EWORM__" alt="eworm on meadow" /></td>
<td><img src="__QR_CODE__" alt="QR code: rsc.eworm.de" /></td>
<td class="head"><span class="top">RouterOS Scripts</span><br />
<span class="bottom">a collection of scripts for MikroTik RouterOS</span></td>
</tr></table>
<hr />

View file

@ -6,6 +6,14 @@
<script src="logo-color.d/script.js"></script> <script src="logo-color.d/script.js"></script>
</head><body> </head><body>
<table><tr>
<td><img src="../general/eworm-meadow.avif" alt="eworm on meadow" /></td>
<td><img src="../general/qr-code.png" alt="QR code: rsc.eworm.de" /></td>
<td class="head"><span class="top">RouterOS Scripts</span><br />
<span class="bottom">a collection of scripts for MikroTik RouterOS</span></td>
</tr></table>
<hr />
<h1>Logo Color Changer</h1> <h1>Logo Color Changer</h1>
<p><a href="../README.md">⬅️ Go back to main README</a></p> <p><a href="../README.md">⬅️ Go back to main README</a></p>
@ -29,9 +37,9 @@ something that differentiates? Color it!</p>
<p>Then right-click, click "<i>Take Screenshot</i>" and finally select the <p>Then right-click, click "<i>Take Screenshot</i>" and finally select the
logo and download it.</p> logo and download it.</p>
<p><img src="logo-color.d/browser-01.avif" width=533 height=482 alt="Screenshot Browser 01"> <p><img src="logo-color.d/browser-01.avif" alt="Screenshot Browser 01"></p>
<img src="logo-color.d/browser-02.avif" width=533 height=482 alt="Screenshot Browser 02"> <p><img src="logo-color.d/browser-02.avif" alt="Screenshot Browser 02"></p>
<img src="logo-color.d/browser-03.avif" width=533 height=482 alt="Screenshot Browser 03"></p> <p><img src="logo-color.d/browser-03.avif" alt="Screenshot Browser 03"></p>
<p>(This example is with <p>(This example is with
<a href="https://www.mozilla.org/de/firefox/new/">Firefox</a>. The workflow <a href="https://www.mozilla.org/de/firefox/new/">Firefox</a>. The workflow

View file

@ -6,6 +6,14 @@
<script src="notification.d/script.js"></script> <script src="notification.d/script.js"></script>
</head><body> </head><body>
<table><tr>
<td><img src="../general/eworm-meadow.avif" alt="eworm on meadow" /></td>
<td><img src="../general/qr-code.png" alt="QR code: rsc.eworm.de" /></td>
<td class="head"><span class="top">RouterOS Scripts</span><br />
<span class="bottom">a collection of scripts for MikroTik RouterOS</span></td>
</tr></table>
<hr />
<h1>Notification Generator</h1> <h1>Notification Generator</h1>
<p><a href="../README.md">⬅️ Go back to main README</a></p> <p><a href="../README.md">⬅️ Go back to main README</a></p>

11
contrib/template-capsman.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
set -e
sed \
-e '/\/interface\/wifi\//d' \
-e '/\/interface\/wireless\//d' \
-e 's|%TEMPL%|.capsman|' \
-e '/^# NOT \/caps-man\/ #$/,/^# NOT \/caps-man\/ #$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< "${1}"

11
contrib/template-local.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
set -e
sed \
-e '/\/caps-man\//d' \
-e '/\/interface\/wifi\//d' \
-e 's|%TEMPL%|.local|' \
-e '/^# NOT \/interface\/wireless\/ #$/,/^# NOT \/interface\/wireless\/ #$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< "${1}"

11
contrib/template-wifi.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
set -e
sed \
-e '/\/caps-man\//d' \
-e '/\/interface\/wireless\//d' \
-e 's|%TEMPL%|.wifi|' \
-e '/^# NOT \/interface\/wifi\/ #$/,/^# NOT \/interface\/wifi\/ #$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< "${1}"

View file

@ -48,7 +48,7 @@ Usage and invocation
The function `$ScriptRunOnce` expects an URL (or name if The function `$ScriptRunOnce` expects an URL (or name if
`ScriptRunOnceBaseUrl` is given) pointing to a script as parameter. `ScriptRunOnceBaseUrl` is given) pointing to a script as parameter.
$ScriptRunOnce https://git.eworm.de/cgit/routeros-scripts/plain/doc/mod/scriptrunonce.d/hello-world.rsc; $ScriptRunOnce https://rsc.eworm.de/main/doc/mod/scriptrunonce.d/hello-world.rsc;
![ScriptRunOnce](scriptrunonce.d/scriptrunonce.avif) ![ScriptRunOnce](scriptrunonce.d/scriptrunonce.avif)

View file

@ -1,3 +1,3 @@
# an ip address list for use with fw-addr-lists script # an ip address list for use with fw-addr-lists script
# https://git.eworm.de/cgit/routeros-scripts/about/doc/fw-addr-lists.md # https://rsc.eworm.de/doc/fw-addr-lists.md
git.eworm.de rsc.eworm.de

View file

@ -1,5 +1,5 @@
# an ip address list for use with fw-addr-lists script # an ip address list for use with fw-addr-lists script
# https://git.eworm.de/cgit/routeros-scripts/about/doc/fw-addr-lists.md # https://rsc.eworm.de/doc/fw-addr-lists.md
# example.net # example.net
93.184.216.34 93.184.216.34

BIN
general/eworm-meadow.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View file

@ -18,7 +18,7 @@ a:hover {
blockquote { blockquote {
border-left: 4px solid #ccc; border-left: 4px solid #ccc;
padding: 0 10px; padding: 0 10px;
color: #777; color: #555;
} }
code { code {
margin: 0 2px; margin: 0 2px;
@ -43,6 +43,10 @@ img.logo {
float: left; float: left;
border-radius: 50%; border-radius: 50%;
} }
p.foot {
color: #777;
text-align: center;
}
p.heading { p.heading {
margin: 0px; margin: 0px;
font-weight: bold; font-weight: bold;
@ -68,6 +72,18 @@ pre code {
span.link { span.link {
color: #863600; 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) { @media only screen and (orientation: landscape) {
body { body {
margin-left: 10vw; margin-left: 10vw;

View file

@ -539,10 +539,16 @@
:set FetchUserAgentStr do={ :set FetchUserAgentStr do={
:local Caller [ :tostr $1 ]; :local Caller [ :tostr $1 ];
:global CommitId;
:global CommitInfo;
:global IfThenElse;
:local Resource [ /system/resource/get ]; :local Resource [ /system/resource/get ];
:return ("User-Agent: Mikrotik/" . $Resource->"version" . " " . \ :return ("User-Agent: Mikrotik/" . $Resource->"version" . " " . $Resource->"architecture-name" . \
$Resource->"architecture-name" . " " . $Caller . "/Fetch (https://rsc.eworm.de/)"); " " . $Caller . "/Fetch (https://rsc.eworm.de/" . [ $IfThenElse ($CommitId != "unknown") \
("; " . $CommitInfo . "/" . [ :pick $CommitId 0 8 ]) ] . ")");
} }
# check for existence of file, optionally with type # check for existence of file, optionally with type
@ -1894,6 +1900,14 @@
} }
} }
:if ([ :len [ /system/scheduler/find where name="global-scripts" ] ] = 0) do={
/system/scheduler/add name="global-scripts" start-time=startup;
}
:local OnEvent "/system/script { run global-config; run global-functions; }";
:if ([ /system/scheduler/get "global-scripts" on-event ] != $OnEvent) do={
/system/scheduler/set "global-scripts" on-event=$OnEvent;
}
# Log success # Log success
:local Resource [ /system/resource/get ]; :local Resource [ /system/resource/get ];
$LogPrintOnce info $ScriptName ("Loaded on " . $Resource->"board-name" . \ $LogPrintOnce info $ScriptName ("Loaded on " . $Resource->"board-name" . \