From fa26b832559c6a7bfc19f878bbb867f2981734e1 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 01:00:03 +0300 Subject: [PATCH] Backup for MikroNUC created successfully at May 05 01:00:03. --- .../20260505/20260505010001-Binary.backup | Bin 0 -> 383620 bytes MikroNUC/20260505/20260505010001-Config.rsc | 4848 +++++++++++++++++ .../20260505/20260505010001-Diff-Config.rsc | 1166 ++++ 3 files changed, 6014 insertions(+) create mode 100644 MikroNUC/20260505/20260505010001-Binary.backup create mode 100644 MikroNUC/20260505/20260505010001-Config.rsc create mode 100644 MikroNUC/history/20260505/20260505010001-Diff-Config.rsc diff --git a/MikroNUC/20260505/20260505010001-Binary.backup b/MikroNUC/20260505/20260505010001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..5a3f5c0bd1332deb3032e9505cabfcd94b43e2b2 GIT binary patch literal 383620 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 Bo+^Sa}6=L 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≻1T$QZPrU;oDo}&m%ixB?1ktkM8sh%BlgA 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 literal 0 HcmV?d00001 diff --git a/MikroNUC/20260505/20260505010001-Config.rsc b/MikroNUC/20260505/20260505010001-Config.rsc new file mode 100644 index 0000000..743ebd7 --- /dev/null +++ b/MikroNUC/20260505/20260505010001-Config.rsc @@ -0,0 +1,4848 @@ +# 2026-05-05 01:00:01 by RouterOS 7.22.1 +# system id = NmJcEM+8XAP +# +/caps-man channel +add band=2ghz-g/n extension-channel=disabled frequency=2422 name=2G-3 \ + reselect-interval=20m save-selected=yes +add band=5ghz-a/n/ac extension-channel=XXXX frequency=5660 name=5G-5660 \ + save-selected=yes +add band=5ghz-a/n/ac extension-channel=XXXXXXXX frequency=5160,5200,5280 \ + name=5G-5160-5280 reselect-interval=30m save-selected=yes +add band=5ghz-n/ac extension-channel=XXXX frequency=5180 name=5G-36 \ + reselect-interval=30m save-selected=yes +add band=5ghz-n/ac extension-channel=XXXX frequency=5200 name=5G-40 \ + reselect-interval=30m save-selected=yes +add band=5ghz-n/ac extension-channel=XXXX frequency=5220 name=5G-44 \ + reselect-interval=30m save-selected=yes +add band=5ghz-n/ac extension-channel=XXXX frequency=5240 name=5G-48 \ + reselect-interval=30m save-selected=yes +add band=2ghz-g/n extension-channel=disabled frequency=2442 name=2G-7 \ + reselect-interval=20m save-selected=yes +add band=2ghz-g/n extension-channel=disabled frequency=2462 name=2G-11 \ + reselect-interval=20m save-selected=yes +/interface bridge +add name=Bridge-DOC +add name=Bridge-LAN port-cost-mode=short +/interface ethernet +set [ find default-name=ether1 ] disable-running-check=no name=ether2 +/interface veth +add address=172.18.20.6/30 container-mac-address=00:00:00:00:00:00 dhcp=no \ + gateway=172.18.20.5 gateway6="" name=docker-xray-vless-veth +add address=10.10.10.10/24 container-mac-address=5C:26:FE:05:6F:12 dhcp=no \ + gateway=10.10.10.1 gateway6="" mac-address=5C:26:FE:05:6F:11 name=veth1 +/caps-man datapath +add bridge=Bridge-LAN client-to-client-forwarding=yes local-forwarding=yes \ + name=xs-DataPath +add bridge=Bridge-LAN client-to-client-forwarding=yes local-forwarding=yes \ + name=DataPath +/caps-man security +add authentication-types=wpa2-psk encryption=aes-ccm group-encryption=aes-ccm \ + group-key-update=30m name=xs-Sec +add authentication-types=wpa2-psk encryption=aes-ccm group-encryption=aes-ccm \ + group-key-update=30m name=WPA2 +/caps-man configuration +add channel.band=2ghz-b/g/n country=no_country_set datapath=xs-DataPath mode=\ + ap name=xs-2G rx-chains=0,1,2,3 security=xs-Sec ssid=vados tx-chains=\ + 0,1,2,3 +add channel.band=5ghz-a/n/ac country=no_country_set datapath=xs-DataPath \ + installation=any mode=ap name=xs-5G rx-chains=0,1,2,3 security=xs-Sec \ + ssid=vados5g tx-chains=0,1,2,3 +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX .frequency=2422,2442,2462 .reselect-interval=20m country=belarus \ + datapath=DataPath datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes hw-protection-mode=rts-cts installation=any name=2G \ + rx-chains=0,1,2,3 security=WPA2 ssid=vados tx-chains=0,1,2,3 +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX .frequency=5180,5200,5220,5240,5260 .reselect-interval=20m \ + .skip-dfs-channels=yes country=belarus datapath=DataPath \ + datapath.client-to-client-forwarding=yes .local-forwarding=yes \ + hw-protection-mode=rts-cts installation=any name=5G security=WPA2 ssid=\ + vados5g +/disk +add slot=tmpfs tmpfs-max-size=715827882 type=tmpfs +/interface list +add include=dynamic,static name=LAN +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroMIC +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=P1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=test owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#:local ScriptName [ :jobname ];\r\ + \n:local expSrc;\r\ + \n:local FileName;\r\ + \n:local FilePath;\r\ + \n:local DirPath \"tmpfs/\";\r\ + \n:global WaitForFile;\r\ + \n:global IfThenElse;\r\ + \n\r\ + \n:foreach Script in=([ /system/script find where name~\"Amster-GlobalConf\ + *\" ]) do={\r\ + \n:local ScriptVal [ /system/script/get \$Script ];\r\ + \n\r\ + \n:local expName [ (\$ScriptVal->\"name\") ];\r\ + \n#[/system/script get \$expScript name];\r\ + \n:delay 2s;\r\ + \n\r\ + \n:set expSrc [/system/script print where name=\$expName];\r\ + \n/system/script print where name=\$expName;\r\ + \n#[:put [/system/script get \$expScript source]];\r\ + \n:put [\$expSrc];\r\ + \n:delay 2s;\r\ + \n:set FileName \$expName;\r\ + \n:set FilePath (\$DirPath . \$FileName);\r\ + \n\r\ + \n#:log warning \"\\n----------------------\\n\\\$expSrc = \$expSrc\\n____\ + ______________________________\";\r\ + \n:log info \"\\n\\\$FileName = '\$FileName'\";\r\ + \n:log info \"\\n\\\$FilePath = \$FilePath\";\r\ + \n#:log warning {/system/script/get source=[/system/script/get \$expScript\ + \_source];};\r\ + \n\r\ + \n#\$[/system script get [/system script find name=\"\$FileName\"] source]\ + \r\ + \n\r\ + \n#:local gettingScript \"\$FileName\";\r\ + \n#:execute script=\"[[:parse \\\"[:parse { :put (\"\$[/system script get \ + [/system script find name=\$FileName] source]\"); } \\\"]]\"; \\\r\ + \n\r\ + \n#:execute script={:put \"[:parse \\\"[:parse [/system/script get [/syste\ + m/script find name=\$gettingScript] source];\\\"]]\";} \\\r\ + \n# file=(\$FilePath . \".rsc\\00\");\r\ + \n:do {\r\ + \n:local fName (\$FilePath . \".rsc\");\r\ + \n#:delay 3s;\r\ + \n#/file add name=\$fName;\r\ + \n:put [:tostr [\$expSrc]];\r\ + \n/file set \$fName contents=[:put [\$expSrc]];\r\ + \n:delay 3s;\r\ + \n\$WaitForFile \$fName;\r\ + \n(\$FilePath . \".rsc\");\r\ + \n#:delay 2s;\r\ + \n\r\ + \n} on-error={\r\ + \n:log error \"\\nERROR \\\$FilePath = \$FilePath\";\r\ + \n}\r\ + \n#\$WaitForFile (\$FilePath . \".rsc\");\r\ + \n#:execute script={ :put [/system/script get [:put \$FileName] source]; }\ + ;\r\ + \n#/system/script export \$Sscript file=\$FilePath;\r\ + \n#/system/script/export [:put [/system/script/get \$expScript source]] fi\ + le=\$FilePath;\r\ + \n#:execute script={ :put [/system/script/get \$expScript source]; } \\\r\ + \n\r\ + \n#:log warning \"\\n\\\$expScript = \$expScript\";\r\ + \n# \\\r\ + \n# file=(\$FilePath . \".rsc\\00\");\r\ + \n#script={:put [/system/script/get \$FileName source];} file=(\$FilePath\ + \_. \".rsc\\00\");\r\ + \n#/system script export \$src file=(\$FilePath . \$FileName);\r\ + \n}\r\ + \n\r\ + \n:log warning \"\\nComplete!\";\r\ + \n\r\ + \n # :execute script={ :put [ /system/script/get Amster-GlobalConfig sou\ + rce ]; } \\\r\ + \n # file=(\$FilePath . \".conf\\00\");\r\ + \n # \$WaitForFile (\$FilePath . \".conf\");\r\ + \n # :onerror Err {\r\ + \n # /tool/fetch upload=yes url=(\$BackupUploadUrl . \"/\" . \$FileName\ + \_. \".conf\") \\\r\ + \n # user=\$BackupUploadUser password=\$BackupUploadPass src-path=(\ + \$FilePath . \".conf\");\r\ + \n # :set ConfigFile [ /file/get (\$FilePath . \".conf\") ];\r\ + \n # :set (\$ConfigFile->\"name\") (\$FileName . \".conf\");\r\ + \n " +add dont-require-permissions=no name=test1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n#:local runningVer [:find [/system/resource/get version] \"(\"];\r\ + \n\r\ + \n:local runningChannel;\r\ + \n:local runningVersion;\r\ + \n:local ParseCustom;\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n \r\ + \n:global runningChannel [\$ParseCustom [/system/resource/get version] \"(\ + \" \")\" 1];\r\ + \n:log warning [\$runningChannel];\r\ + \n:set runningVersion [\$ParseCustom [/system/resource/get version] \" \" \ + \")\" 2];\r\ + \n:log warning [\$runningVersion];\r\ + \n\r\ + \n\r\ + \n\r\ + \n# :if ([:len \$open] = 0) do={\r\ + \n# :log error \"\$SMP Could not extract installed OS channel from vers\ + ion string: `\$runningOsAndChannel`.\";\r\ + \n# :error \"\$SMP error, check logs\";\r\ + \n# }\r\ + \n# :local rest [:pick \$runningOsAndChannel (\$open+1) [:len \$runningOs\ + AndChannel]];\r\ + \n# :local close [:find \$rest \")\"];\r\ + \n# :local channel [:pick \$rest 0 \$close];\r\ + \n# :return \$channel;\r\ + \n#}" +add dont-require-permissions=no name=01-Amster-Init-Script owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="# Amster Initial Script\r\ + \n#\r\ + \n#:global GlobalEnvRemove true; /system/script {run Amster-GlobalEnvRemov\ + e; };\r\ + \n#:delay 1s;\r\ + \n:#global ReloadGlobal true; \r\ + \n\r\ + \n:global AmScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global defOwner \"vados\";\r\ + \n:global AmFirstRun;\r\ + \n\r\ + \n:set AmFirstRun do={\r\ + \n :global AmScriptsUrl;\r\ + \n :global defOwner;\r\ + \n #:global ParseKeyValueStore;\r\ + \n #:local AmUpdCRLF true;\r\ + \n #:local IfThenElse;\r\ + \n #:set IfThenElse do={:if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1\ + \_] = true) do={:return \$2}; :return \$3}\r\ + \n #/certificate/settings/set builtin-trust-store=fetch;\r\ + \n #/tool/fetch \"\$scriptsUrl/certs/Root-YE.pem\" dst-path=\"root-ye.p\ + em\";\r\ + \n #/certificate/import file-name=\"root-ye.pem\" passphrase=\"\";\r\ + \n # For basic verification we rename the certificate and print it by f\ + ingerprint. Make sure exactly this one certificate (\"Root-YE\") is shown.\ + \r\ + \n #/certificate/set name=\"Root-YE\" [ find where common-name=\"Root Y\ + E\" ];\r\ + \n #/certificate/print proplist=name,fingerprint where fingerprint=\"e1\ + 4ffcad5b0025731006caa43a121a22d8e9700f4fb9cf852f02a708aa5d5666\";\r\ + \n #:log info \"\\nAmScriptsUrl = \$AmScriptsUrl\";\r\ + \n :local Scripts {\r\ + \n \"Amster-GlobalConfig\"\r\ + \n \"Amster-GlobalFunc\";\r\ + \n# \"Amster-SFTP-backup\"\r\ + \n# \"Amster-BkpEmail-and-upd\";\r\ + \n };\r\ + \n# /system/script/set owner=(\$ScriptVal->\"name\") \\\r\ + \n# source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRLF \$S\ + ourceNew ] \$Script;\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$defOwner source=([ /too\ + l/fetch (\"\$AmScriptsUrl\" . \$Script . \".rsc\") output=user as-value ]-\ + >\"data\");\r\ + \n /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$\ + Script;\r\ + \n };\r\ + \n /system/script { run Amster-GlobalConfig; run Amster-GlobalFunc; }\r\ + \n}\r\ + \n:global AmUpdRun;\r\ + \n:set AmUpdRun do={\r\ + \n #:local UpdScript [ :tostr \$1 ];\r\ + \n #:global ParseKeyValueStore;\r\ + \n :global AmScriptsUrl;\r\ + \n :global defOwner;\r\ + \n :local Scripts {\r\ + \n# \"Amster-GlobalConfig\"\r\ + \n# \"Amster-GlobalFunc\"\r\ + \n# \"Amster-GlobalRemove\"\r\ + \n \"Amster-backup-SFTP\"\r\ + \n \"Amster-SFTP-backup\"\r\ + \n \"Amster-BkpEmail-and-upd\"\r\ + \n \"Amster-TG-Bot\"\r\ + \n \"Amster-TG-Notification\";\r\ + \n };\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :put \"updating \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$defOwner source=([ /too\ + l/fetch (\"\$AmScriptsUrl\" . \$Script . \".rsc\") output=user as-value ]-\ + >\"data\");\r\ + \n /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$\ + Script;\r\ + \n };\r\ + \n# /system/script/add name=\$Script owner=\$AmOwner source=([ /tool/fe\ + tch check-certificate=yes-without-crl (\"\$AmScriptsUrl\" . \$Script . \".\ + rsc\") output=user as-value ]->\"data\"); };\r\ + \n}\r\ + \n\r\ + \n\$AmFirstRun;\r\ + \n#\$AmUpdRun;\r\ + \n\r\ + \n#\$setUpdExist;\r\ + \n#:global setUpdExist;\r\ + \n#:global ParseKeyValueStore;\r\ + \n#:set setUpdExist do={\r\ + \n#:do {\r\ + \n#:global ParseKeyValueStore;\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\\r\?\\n#comment=*\" ] do={\r\ + \n# :local ScriptVal [ /system/script/get \$Script ];\r\ + \n# :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"#comment\"\ + ) ];\r\ + \n# :local scriptName (\$ScriptVal->\"name\");\r\ + \n#:log warning (\"\\n\\\$scriptName = \". \$scriptName);\r\ + \n#: log warning (\"\\n\\\$ScriptInfo = \". \$ScriptInfo);\r\ + \n# }\r\ + \n#} on-error={}\r\ + \n#}\r\ + \n#\$name;\$owner;\$policy;\$dont-require-permissions;\$last-started;\$run\ + -count;\$source;\$invalid;\$comment;\$.id;\$.nextid;\$.dead;\$.about;\r\ + \n#;(evl / (evl /docommand=;(evl / (evl /foreachcounter=\$Script;do=;(evl \ + / (evl /localname=\$ScriptVal;value=(evl (evl /system/script/getnumber=\$S\ + cript))) (evl /localname=\$ScriptInfo;value=(evl (<%% \$ParseKeyValueStore\ + \_(> \$ParseKeyValueStore);(-> \$ScriptVal comment)))) (evl /localname=\$s\ + criptName) (evl /setname=\$scriptName;value=(-> #\$ScriptVal name)) (evl /\ + log/errormessage=(. \r\ + \n# \$ ScriptInfo = \$ScriptInfo)));in=(evl (evl /system/script/findwhere\ + =\$name;\$owner;\$policy;\$dont-require-permissions;\$last-started;\$run-c\ + ount;\$source;\$invalid;\$comment;\$.id;\$.nextid;\$.dead;\$.about;(~ \$so\ + urce (. ^#!rsc by Vados \r\ + \n# \? \r\ + \n#));5))));on-error=;(evl /)))\r\ + \n" +add dont-require-permissions=no name="Download cAP's Packages" owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="# +------------------------------+\r\ + \n# | |\r\ + \n# | Mikrotik RouterOS Scripts |\r\ + \n# | _Download cAP's Packages_ |\r\ + \n# | |\r\ + \n# +------------------------------+\r\ + \n# https://github.com/sebastian13/mikrotik-routeros-scripts\r\ + \n#\r\ + \n\r\ + \n# Set a directory path providing the required space\r\ + \n# Add a microSD card https://wiki.mikrotik.com/wiki/Manual:System/Disks\ + \r\ + \n# or setup a RAM-Disk via '/disk/add type=tmpfs tmpfs-max-size=20M slot=\ + ram'\r\ + \n:local dir \"/tmpfs/capsman-packages\";\r\ + \n\r\ + \n\r\ + \n# Set Package Path if required, set policy to none if using 'upgrade-cap\ + s' script\r\ + \n/interface/wifi/capsman/set package-path=\$dir upgrade-policy=none;\r\ + \n/caps-man/manager/set package-path=\$dir upgrade-policy=none;\r\ + \n#require-same-version;\r\ + \n\r\ + \n:local installed [/system package get value-name=version [find where nam\ + e=\"routeros\"]]\r\ + \n\r\ + \n# Delete old downloads\r\ + \n# /file/remove [ find type=package name~\"capsman*\" ]\r\ + \n\r\ + \n# Starting from RouterOS version 7.13, drivers for older wireless and 60\ + GHz interfaces are\r\ + \n# part of the separate \"wireless\" package. The existing \"wifiwave2\" \ + package has been divided\r\ + \n# into distinct packages: \"wifi-qcom\" and \"wifi-qcom-ac\".\r\ + \n# RouterOS >=7.12 is required to upgrade to 7.13.\r\ + \n# https://forum.mikrotik.com/viewtopic.php\?t=202423\r\ + \n\r\ + \n:foreach architecture in={ \"arm\";\r\ + \n# \"arm64\";\r\ + \n \"x86_64\";\r\ + \n \"mipsbe\"} do={\r\ + \n :foreach package in={ \"routeros\";\r\ + \n# \"wifi-qcom-ac\";\r\ + \n# \"wifi-qcom\";\r\ + \n \"wireless\"} do={ :do {\r\ + \n :put \"\"\r\ + \n :put \"Download \$package \$installed for \$architecture\"\r\ + \n /tool fetch mode=https \\\r\ + \n url=\"https://download.mikrotik.com/routeros/\$installed/\$packa\ + ge-\$installed-\$architecture.npk\" \\\r\ + \n dst-path=\"\$dir/\$package-\$installed-\$architecture.npk\"\r\ + \n } on-error={ :put \"Error downloading the file. On a 404, note t\ + hat the package may not exist for the specified architecture!\" }\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/612/a9497a83\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 00:40:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\r\ + \n#\r\ + \n#root.mnuc.backuper\r\ + \n\r\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\r\ + \n#:local Script AM-GlobalConfig;\r\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\r\ + \n#/usb1/mikro_bak_rsa.pub\r\ + \n#:local FetchFile AM-DOHCert.rsc\r\ + \n\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\r\ + \n:global MkDir;\r\ + \n\r\ + \n:local FetchFile Binary.backup\r\ + \n:local localDir \"[usb1]/scripts/\";\r\ + \n\r\ + \n\$MkDir \$localDir;\r\ + \n\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\r\ + \n" +add dont-require-permissions=yes name=MkTmpfs owner=vados policy=\ + ftp,read,write,policy,test,sniff,sensitive source=\ + ":global MkDir;\r\ + \n\r\ + \n\$MkDir /usb1/tmpfs;" +add dont-require-permissions=no name=CreateContainer owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":\ + local contIF \"veth1\";\r\ + \n:local contIP \"10.10.10.10/24\";\r\ + \n:local contGW \"10.10.10.1\";\r\ + \n#/interface/veth/add name=\$contIF address=\$contIP gateway=\$contGW;\r\ + \n:local contBridgeIF \"Bridge-DOC\";\r\ + \n:local contBridgeIP \"10.10.10.1/24\";\r\ + \n/interface/bridge/add name=\$contBridgeIF;\r\ + \n/ip/address/add address=\$contBridgeIP interface=\$contBridgeIF;\r\ + \n/interface/bridge/port/add bridge=\$contBridgeIF interface=\$contIF;\r\ + \n/container/config/set ram-high=768M registry-url=https://registry-1.dock\ + er.io tmpdir=sata1/tmp\r\ + \n" +add dont-require-permissions=no name=carkeeperbot owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + container/mounts/add list=carkeeper_configs/.profile src=sata1/carkeeper/c\ + onfigs/.profile dst=/root/.ashrc;\r\ + \n/container/mounts/add list=carkeeper_configs/php.ini src=sata1/carkeeper\ + /configs/php.ini dst=/etc/php82/php.ini;\r\ + \n#/container/mounts/add list=carkeeper_configs src=sata1/carkeeper/config\ + s dst=/configs;\r\ + \n/container/mounts/add list=carkeeper_app src=sata1/carkeeper/app dst=/ap\ + p;\r\ + \n/container/mounts/add list=carkeeper_scripts src=sata1/carkeeper/scripts\ + \_dst=/scripts;\r\ + \n/container/mounts/add list=carkeeper_configs/sshd_config src=sata1/carke\ + eper/configs/sshd_config dst=/etc/ssh/sshd_config;\r\ + \n\r\ + \n/container/mounts/add list=carkeeper_tmp src=sata1/carkeeper/tmp dst=/va\ + r/tmp;\r\ + \n/container/mounts/add list=carkeeper_sync src=sata1/carkeeper/sync dst=/\ + var/sync;\r\ + \n" +add comment="Enable or disable ip addresses based on bridge port state" \ + dont-require-permissions=no name=mod/AM-IPbridge owner=mod/AM-IPbridge \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: mod/AM-IPbridge\r\ + \n# Script comment: Enable or disable ip addresses based on bridge port st\ + ate\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"SystemScheduler for script: \" . \$ScriptName . \" is NO\ + T SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Fake Bridges\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:foreach Bridge in=[ /interface/bridge/find ] do={\r\ + \n :local BrName [ /interface/bridge/get \$Bridge name ];\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName ] ] > \ + 0) do={\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName and \ + inactive=no ] ] = 0) do={\r\ + \n /ip/address/disable [ find where !dynamic interface=\$BrName ];\r\ + \n } else={\r\ + \n /ip/address/enable [ find where !dynamic interface=\$BrName ];\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Use Telegram to chat with your Router and send commands" \ + dont-require-permissions=no name=mod/AM-TG-Bot owner=mod/AM-TG-Bot \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: mod/AM-TG-Bot\r\ + \n# Script comment: Use Telegram to chat with your Router and send command\ + s\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global Identity;\r\ + \n :global TelegramChatActive;\r\ + \n :global TelegramChatGroups;\r\ + \n :global TelegramChatId;\r\ + \n :global TelegramChatIdsTrusted;\r\ + \n :global TelegramChatOffset;\r\ + \n :global TelegramChatRunTime;\r\ + \n :global TelegramMessageIDs;\r\ + \n :global TelegramRandomDelay;\r\ + \n :global TelegramTokenId;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global EscapeForRegEx;\r\ + \n :global FileExists;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global LogPrintVerbose;\r\ + \n :global MAX;\r\ + \n :global MIN;\r\ + \n :global MkDir;\r\ + \n :global RandomDelay;\r\ + \n :global RmDir;\r\ + \n :global ScriptLock;\r\ + \n :global SendTelegram2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global WaitForFile;\r\ + \n :global WaitFullyConnected;\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n \$WaitFullyConnected;\r\ + \n\r\ + \n :if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) \ + do={\r\ + \n /system/scheduler/add start-time=startup interval=30s name=\$ScriptN\ + ame on-event=\"/system/script/run \$ScriptName;\" comment=\"Telegram Chat \ + Bot\";\r\ + \n }\r\ + \n :if ([ :typeof \$TelegramChatOffset ] != \"array\") do={\r\ + \n :set TelegramChatOffset { 0; 0; 0 };\r\ + \n }\r\ + \n :if ([ :typeof \$TelegramRandomDelay ] != \"num\") do={\r\ + \n :set TelegramRandomDelay 0;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Go Daddy Root Certificate Authority - \ + G2\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Downloading required certificate \ + failed.\");\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n \$RandomDelay \$TelegramRandomDelay;\r\ + \n\r\ + \n :local Data false;\r\ + \n :for I from=1 to=4 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :onerror Err {\r\ + \n :set Data ([ /tool/fetch check-certificate=yes-without-crl outpu\ + t=user \\\r\ + \n (\"https://api.telegram.org/bot\" . \$TelegramTokenId . \"/get\ + Updates\?offset=\" . \\\r\ + \n \$TelegramChatOffset->0 . \"&allowed_updates=%5B%22message%22%\ + 5D\") as-value ]->\"data\");\r\ + \n :set TelegramRandomDelay [ \$MAX 0 (\$TelegramRandomDelay - 1) ]\ + ;\r\ + \n } do={\r\ + \n :if (\$I < 4) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Fetch failed, \" . \$I . \". \ + try: \" . \$Err);\r\ + \n :set TelegramRandomDelay [ \$MIN 15 (\$TelegramRandomDelay + 5\ + ) ];\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed getting updates.\");\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local JSON [ :deserialize from=json value=\$Data ];\r\ + \n :local UpdateID 0;\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :foreach Update in=(\$JSON->\"result\") do={\r\ + \n :set UpdateID (\$Update->\"update_id\");\r\ + \n \$LogPrintVerbose debug \$ScriptName (\"Update \" . \$UpdateID . \":\ + \_\" . [ :serialize to=json \$Update ]);\r\ + \n\r\ + \n :local Message (\$Update->\"message\");\r\ + \n :local IsAnyReply ([ :typeof (\$Message->\"reply_to_message\") ] = \ + \"array\");\r\ + \n :local IsMyReply (\$TelegramMessageIDs->[ :tostr (\$Message->\"reply\ + _to_message\"->\"message_id\") ]);\r\ + \n :if ((\$IsMyReply = 1 || \$TelegramChatOffset->0 > 0 || \$Uptime > 5\ + m) && \$UpdateID >= \$TelegramChatOffset->2) do={\r\ + \n :local Trusted false;\r\ + \n :local Chat (\$Message->\"chat\");\r\ + \n :local From (\$Message->\"from\");\r\ + \n :local Command (\$Message->\"text\");\r\ + \n :local ThreadId [ \$IfThenElse (\$Message->\"is_topic_message\") (\ + \$Message->\"message_thread_id\") \"\" ];\r\ + \n\r\ + \n :foreach IdsTrusted in=(\$TelegramChatId, \$TelegramChatIdsTrusted\ + ) do={\r\ + \n :if (\$From->\"id\" = \$IdsTrusted || \\\r\ + \n \$From->\"username\" = \$IdsTrusted || \\\r\ + \n \$Chat->\"id\" = \$IdsTrusted) do={\r\ + \n :set Trusted true;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Trusted = true) do={\r\ + \n :local Done false;\r\ + \n :if (\$Command = \"\?\") do={\r\ + \n \$LogPrint info \$ScriptName (\"Sending notice for update \" .\ + \_\$UpdateID . \".\");\r\ + \n \$SendTelegram2 ({ origin=\$ScriptName; chatid=(\$Chat->\"id\"\ + ); silent=true; \\\r\ + \n replyto=(\$Message->\"message_id\"); threadid=\$ThreadId; \\\ + \r\ + \n subject=([ \$SymbolForNotification \"speech-balloon\" ] . \"\ + Telegram Chat\"); \\\r\ + \n message=([ \$IfThenElse ([ :len (\$From->\"first_name\") ] >\ + \_0) (\"Hello \" . (\$From->\"first_name\") . \"!\\n\\n\") ] . \\\r\ + \n \"Online\" . [ \$IfThenElse \$TelegramChatActive \" (and a\ + ctive!)\" ] . \", awaiting your commands!\") });\r\ + \n :set Done true;\r\ + \n }\r\ + \n :if (\$Done = false && [ :pick \$Command 0 1 ] = \"!\") do={\r\ + \n :if (\$Command ~ (\"^! *(\" . [ \$EscapeForRegEx \$Identity ] \ + . \"|@\" . \$TelegramChatGroups . \")\\\$\")) do={\r\ + \n :set TelegramChatActive true;\r\ + \n } else={\r\ + \n :set TelegramChatActive false;\r\ + \n }\r\ + \n \$LogPrint info \$ScriptName (\"Now \" . [ \$IfThenElse \$Tele\ + gramChatActive \"active\" \"passive\" ] . \\\r\ + \n \" from update \" . \$UpdateID . \"!\");\r\ + \n :set Done true;\r\ + \n }\r\ + \n :if (\$Done = false && (\$IsMyReply = 1 || (\$IsAnyReply = false\ + \_&& \\\r\ + \n \$TelegramChatActive = true)) && [ :len \$Command ] > 0) do\ + ={\r\ + \n :if ([ \$ValidateSyntax \$Command ] = true) do={\r\ + \n :local State \"\";\r\ + \n :local File (\"tmpfs/telegram-chat/\" . [ \$GetRandom20CharA\ + lNum 6 ]);\r\ + \n :if ([ \$MkDir \"tmpfs/telegram-chat\" ] = false) do={\r\ + \n \$LogPrint error \$ScriptName (\"Failed creating directory\ + !\");\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n \$LogPrint info \$ScriptName (\"Running command from update \ + \" . \$UpdateID . \": \" . \$Command);\r\ + \n :execute script=(\":do {\\n\" . \$Command . \"\\n} on-error=\ + { /file/add name=\\\"\" . \$File . \".failed\\\" };\" . \\\r\ + \n \"/file/add name=\\\"\" . \$File . \".done\\\"\") file=(\$\ + File . \"\\00\");\r\ + \n :if ([ \$WaitForFile (\$File . \".done\") [ \$EitherOr \$Tel\ + egramChatRunTime 20s ] ] = false) do={\r\ + \n :set State ([ \$SymbolForNotification \"warning-sign\" ] .\ + \_\"The command did not finish, still running in background.\\n\\n\");\r\ + \n }\r\ + \n :if ([ \$FileExists (\$File . \".failed\") ] = true) do={\r\ + \n :set State ([ \$SymbolForNotification \"cross-mark\" ] . \ + \"The command failed with an error!\\n\\n\");\r\ + \n }\r\ + \n :local Content ([ /file/read chunk-size=32768 file=\$File as\ + -value ]->\"data\");\r\ + \n \$SendTelegram2 ({ origin=\$ScriptName; chatid=(\$Chat->\"id\ + \"); silent=true; \\\r\ + \n replyto=(\$Message->\"message_id\"); threadid=\$ThreadId; \ + \\\r\ + \n subject=([ \$SymbolForNotification \"speech-balloon\" ] . \ + \"Telegram Chat\"); \\\r\ + \n message=([ \$SymbolForNotification \"gear\" ] . \"Command:\ + \\n\" . \$Command . \"\\n\\n\" . \\\r\ + \n \$State . [ \$IfThenElse ([ :len \$Content ] > 0) \\\r\ + \n ([ \$SymbolForNotification \"memo\" ] . \"Output:\\n\" .\ + \_\$Content) \\\r\ + \n ([ \$SymbolForNotification \"memo\" ] . \"No output.\") \ + ]) });\r\ + \n \$RmDir \"tmpfs/telegram-chat\";\r\ + \n } else={\r\ + \n \$LogPrint info \$ScriptName (\"The command from update \" .\ + \_\$UpdateID . \" failed syntax validation!\");\r\ + \n \$SendTelegram2 ({ origin=\$ScriptName; chatid=(\$Chat->\"id\ + \"); silent=false; \\\r\ + \n replyto=(\$Message->\"message_id\"); threadid=\$ThreadId; \ + \\\r\ + \n subject=([ \$SymbolForNotification \"speech-balloon\" ] . \ + \"Telegram Chat\"); \\\r\ + \n message=([ \$SymbolForNotification \"gear\" ] . \"Command:\ + \\n\" . \$Command . \"\\n\\n\" . \\\r\ + \n [ \$SymbolForNotification \"cross-mark\" ] . \"The comma\ + nd failed syntax validation!\") });\r\ + \n }\r\ + \n }\r\ + \n } else={\r\ + \n :local MessageText (\"Received a message from untrusted contact \ + \" . \\\r\ + \n [ \$IfThenElse ([ :len (\$From->\"username\") ] = 0) \"without\ + \_username\" (\"'\" . \$From->\"username\" . \"'\") ] . \\\r\ + \n \" (ID \" . \$From->\"id\" . \") in update \" . \$UpdateID . \ + \"!\");\r\ + \n :if (\$Command ~ (\"^! *\" . [ \$EscapeForRegEx \$Identity ] . \ + \"\\\$\")) do={\r\ + \n \$LogPrint warning \$ScriptName \$MessageText;\r\ + \n \$SendTelegram2 ({ origin=\$ScriptName; chatid=(\$Chat->\"id\"\ + ); silent=false; \\\r\ + \n replyto=(\$Message->\"message_id\"); threadid=\$ThreadId; \\\ + \r\ + \n subject=([ \$SymbolForNotification \"speech-balloon\" ] . \"\ + Telegram Chat\"); \\\r\ + \n message=(\"You are not trusted.\") });\r\ + \n } else={\r\ + \n \$LogPrint info \$ScriptName \$MessageText;\r\ + \n }\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Already handled update \" . \$Upd\ + ateID . \".\");\r\ + \n }\r\ + \n }\r\ + \n :set TelegramChatOffset ([ :pick \$TelegramChatOffset 1 3 ], \\\r\ + \n [ \$IfThenElse (\$UpdateID >= \$TelegramChatOffset->2) (\$UpdateID +\ + \_1) (\$TelegramChatOffset->2) ]);\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Script send Notifications in Telegram" dont-require-permissions=\ + no name=mod/AM-TG-Notifications owner=mod/AM-TG-Notifications policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: mod/AM-TG-Notifications\r\ + \n# Script comment: Script send Notifications in Telegram\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:global FlushTelegramQueue;\r\ + \n:global GetTelegramChatId;\r\ + \n:global NotificationFunctions;\r\ + \n:global PurgeTelegramQueue;\r\ + \n:global SendTelegram;\r\ + \n:global SendTelegram2;\r\ + \n# flush telegram queue\r\ + \n:set FlushTelegramQueue do={ :onerror Err {\r\ + \n :global TelegramQueue;\r\ + \n :global TelegramMessageIDs;\r\ + \n :global CertificateAvailable;\r\ + \n :global IsFullyConnected;\r\ + \n :global LogPrint;\r\ + \n :if ([ \$IsFullyConnected ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"System is not fully connected, not flushing.\ + \");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$CertificateAvailable \"Go Daddy Root Certificate Authority - \ + G2\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\"\ + );\r\ + \n :return false;\r\ + \n }\r\ + \n :local AllDone true;\r\ + \n :local QueueLen [ :len \$TelegramQueue ];\r\ + \n :if ([ :len [ /system/scheduler/find where name=\"_FlushTelegramQueue\ + \" ] ] > 0 && \$QueueLen = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Flushing Telegram messages from scheduler,\ + \_but queue is empty.\");\r\ + \n }\r\ + \n :foreach Id,Message in=\$TelegramQueue do={\r\ + \n :if ([ :typeof \$Message ] = \"array\" ) do={\r\ + \n :onerror Err {\r\ + \n :local Data ([ /tool/fetch check-certificate=yes-without-crl out\ + put=user http-method=post \\\r\ + \n (\"https://api.telegram.org/bot\" . (\$Message->\"tokenid\") .\ + \_\"/sendMessage\") \\\r\ + \n http-data=(\$Message->\"http-data\") as-value ]->\"data\");\r\ + \n :set (\$TelegramQueue->\$Id);\r\ + \n :set (\$TelegramMessageIDs->[ :tostr ([ :deserialize from=json v\ + alue=\$Data ]->\"result\"->\"message_id\") ]) 1;\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Sending queued Telegram message failed: \ + \" . \$Err);\r\ + \n :set AllDone false;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$AllDone = true && \$QueueLen = [ :len \$TelegramQueue ]) do={\r\ + \n /system/scheduler/remove [ find where name=\"_FlushTelegramQueue\" ]\ + ;\r\ + \n :set TelegramQueue;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n# get the chat id\r\ + \n:set GetTelegramChatId do={ :onerror Err {\r\ + \n :global TelegramTokenId;\r\ + \n :global CertificateAvailable;\r\ + \n :global LogPrint;\r\ + \n :if ([ \$CertificateAvailable \"Go Daddy Root Certificate Authority - \ + G2\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\"\ + );\r\ + \n :return false;\r\ + \n }\r\ + \n :local Data;\r\ + \n :onerror Err {\r\ + \n :set Data ([ /tool/fetch check-certificate=yes-without-crl output=us\ + er \\\r\ + \n (\"https://api.telegram.org/bot\" . \$TelegramTokenId . \"/getUpd\ + ates\?offset=0\" . \\\r\ + \n \"&allowed_updates=%5B%22message%22%5D\") as-value ]->\"data\");\ + \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Fetching data failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :local JSON [ :deserialize from=json value=\$Data ];\r\ + \n :local Count [ :len (\$JSON->\"result\") ];\r\ + \n :if (\$Count = 0) do={\r\ + \n \$LogPrint info \$0 (\"No message received.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local Message (\$JSON->\"result\"->(\$Count - 1)->\"message\");\r\ + \n \$LogPrint info \$0 (\"The chat id is: \" . (\$Message->\"chat\"->\"id\ + \"));\r\ + \n :if ((\$Message->\"is_topic_message\") = true) do={\r\ + \n \$LogPrint info \$0 (\"The thread id is: \" . (\$Message->\"message_\ + thread_id\"));\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n# send notification via telegram - expects one array argument\r\ + \n:set (\$NotificationFunctions->\"telegram\") do={\r\ + \n :local Notification \$1;\r\ + \n :global Identity;\r\ + \n :global IdentityExtra;\r\ + \n :global TelegramChatId;\r\ + \n :global TelegramChatIdOverride;\r\ + \n :global TelegramMessageIDs;\r\ + \n :global TelegramQueue;\r\ + \n :global TelegramThreadId;\r\ + \n :global TelegramThreadIdOverride;\r\ + \n :global TelegramTokenId;\r\ + \n :global TelegramTokenIdOverride;\r\ + \n :global CertificateAvailable;\r\ + \n :global CharacterReplace;\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ProtocolStrip;\r\ + \n :global SymbolForNotification;\r\ + \n :global UrlEncode;\r\ + \n :local EscapeMD do={\r\ + \n :local Text [ :tostr \$1 ];\r\ + \n :local Mode [ :tostr \$2 ];\r\ + \n :local Excl [ :tostr \$3 ];\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :local Chars {\r\ + \n \"body\"={ \"\\\\\"; \"`\" };\r\ + \n \"plain\"={ \"_\"; \"*\"; \"[\"; \"]\"; \"(\"; \")\"; \"~\"; \"`\"\ + ; \">\";\r\ + \n \"#\"; \"+\"; \"-\"; \"=\"; \"|\"; \"{\"; \"}\"; \".\"; \ + \"!\" };\r\ + \n }\r\ + \n :foreach Char in=(\$Chars->\$Mode) do={\r\ + \n :if ([ :typeof [ :find \$Excl \$Char ] ] = \"nil\") do={\r\ + \n :set Text [ \$CharacterReplace \$Text \$Char (\"\\\\\" . \$Char)\ + \_];\r\ + \n }\r\ + \n }\r\ + \n :if (\$Mode = \"body\") do={:return (\"```\\n\" . \$Text . \"\\n```\ + \")}\r\ + \n :return \$Text;\r\ + \n }\r\ + \n :local ChatId [ \$EitherOr (\$Notification->\"chatid\") \\\r\ + \n [ \$EitherOr (\$TelegramChatIdOverride->(\$Notification->\"origin\")\ + ) \$TelegramChatId ] ];\r\ + \n :local ThreadId [ \$EitherOr (\$Notification->\"threadid\") \\\r\ + \n [ \$EitherOr (\$TelegramThreadIdOverride->(\$Notification->\"origin\ + \")) \\\r\ + \n [ \$IfThenElse ([ :len (\$TelegramChatIdOverride->(\$Notification->\ + \"origin\")) ] = 0) \$TelegramThreadId ] ] ];\r\ + \n :local TokenId [ \$EitherOr (\$TelegramTokenIdOverride->(\$Notificatio\ + n->\"origin\")) \$TelegramTokenId ];\r\ + \n :if ([ :len \$TokenId ] = 0 || [ :len \$ChatId ] = 0) do={:return fals\ + e}\r\ + \n :if ([ :typeof \$TelegramMessageIDs ] = \"nothing\") do={:set Telegram\ + MessageIDs ({})}\r\ + \n :local Truncated false;\r\ + \n :local Text (\"*__\" . [ \$EscapeMD (\"[\" . \$IdentityExtra . \$Ident\ + ity . \"] \" . \\\r\ + \n (\$Notification->\"subject\")) \"plain\" ] . \"__*\\n\\n\");\r\ + \n :local LenSubject [ :len \$Text ];\r\ + \n :local LenMessage [ :len (\$Notification->\"message\") ];\r\ + \n :local LenLink ([ :len (\$Notification->\"link\") ] * 2);\r\ + \n :local LenSum (\$LenSubject + \$LenMessage + \$LenLink);\r\ + \n :if (\$LenSum > 3968) do={\r\ + \n :set Text (\$Text . [ \$EscapeMD ([ :pick (\$Notification->\"message\ + \") 0 (3840 - \$LenSubject - \$LenLink) ] . \"...\") \"body\" ]);\r\ + \n :set Truncated true;\r\ + \n } else={:set Text (\$Text . [ \$EscapeMD (\$Notification->\"message\")\ + \_\"body\" ])}\r\ + \n :if (\$LenLink > 0) do={\r\ + \n :set Text (\$Text . \"\\n\" . [ \$SymbolForNotification \"link\" ] .\ + \_\\\r\ + \n \"[\" . [ \$EscapeMD [ \$ProtocolStrip (\$Notification->\"link\") \ + ] \"plain\" ] . \"]\" . \\\r\ + \n \"(\" . [ \$EscapeMD (\$Notification->\"link\") \"plain\" ] . \")\ + \");\r\ + \n }\r\ + \n :if (\$Truncated = true) do={\r\ + \n :set Text (\$Text . \"\\n\" . [ \$SymbolForNotification \"scissors\"\ + \_] . \\\r\ + \n [ \$EscapeMD (\"The message was too long and has been truncated, c\ + ut off _\" . \\\r\ + \n ((\$LenSum - [ :len \$Text ]) * 100 / \$LenSum) . \"%_!\") \"plain\ + \" \"_\" ]);\r\ + \n }\r\ + \n :local HTTPData (\"chat_id=\" . \$ChatId . \"&disable_notification=\" \ + . (\$Notification->\"silent\") . \\\r\ + \n \"&reply_to_message_id=\" . (\$Notification->\"replyto\") . \"&mes\ + sage_thread_id=\" . \$ThreadId . \\\r\ + \n \"&disable_web_page_preview=true&parse_mode=MarkdownV2\");\r\ + \n :onerror Err {\r\ + \n :if ([ \$CertificateAvailable \"Go Daddy Root Certificate Authority \ + - G2\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Data ([ /tool/fetch check-certificate=yes-without-crl output=\ + user http-method=post \\\r\ + \n (\"https://api.telegram.org/bot\" . \$TokenId . \"/sendMessage\") \ + \\\r\ + \n http-data=(\$HTTPData . \"&text=\" . [ \$UrlEncode \$Text ]) as-va\ + lue ]->\"data\");\r\ + \n :set (\$TelegramMessageIDs->[ :tostr ([ :deserialize from=json value\ + =\$Data ]->\"result\"->\"message_id\") ]) 1;\r\ + \n } do={\r\ + \n \$LogPrint info \$0 (\"Failed sending Telegram notification: \" . \$\ + Err . \" - Queuing...\");\r\ + \n :if ([ :typeof \$TelegramQueue ] = \"nothing\") do={:set TelegramQue\ + ue ({})}\r\ + \n :set Text (\$Text . \"\\n\" . [ \$SymbolForNotification \"alarm-cloc\ + k\" ] . \\\r\ + \n [ \$EscapeMD (\"This message was queued since _\" . [ /system/cloc\ + k/get date ] . \\\r\ + \n \" \" . [ /system/clock/get time ] . \"_ and may be obsolete.\") \ + \"plain\" \"_\" ]);\r\ + \n :set (\$TelegramQueue->[ :len \$TelegramQueue ]) { tokenid=\$TokenId\ + ;\r\ + \n http-data=(\$HTTPData . \"&text=\" . [ \$UrlEncode \$Text ]) };\r\ + \n :if ([ :len [ /system/scheduler/find where name=\"_FlushTelegramQueu\ + e\" ] ] = 0) do={\r\ + \n /system/scheduler/add name=\"_FlushTelegramQueue\" interval=1m sta\ + rt-time=startup \\\r\ + \n on-event=(\":global FlushTelegramQueue; \\\$FlushTelegramQueue;\ + \");\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# purge the Telegram queue\r\ + \n:set PurgeTelegramQueue do={\r\ + \n :global TelegramQueue;\r\ + \n /system/scheduler/remove [ find where name=\"_FlushTelegramQueue\" ];\ + \r\ + \n :set TelegramQueue;\r\ + \n}\r\ + \n# send notification via telegram - expects at least two string arguments\ + \r\ + \n:set SendTelegram do={ :onerror Err {\r\ + \n :global SendTelegram2;\r\ + \n \$SendTelegram2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3; sil\ + ent=\$4 });\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n# send notification via telegram - expects one array argument\r\ + \n:set SendTelegram2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n (\$NotificationFunctions->\"telegram\") (\"\\\$NotificationFunctions->\ + \\\"telegram\\\"\") \$Notification;\r\ + \n}\r\ + \n" +add dont-require-permissions=no name=testIfThenElseAndEitherOr owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source=":local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:local ExitError;\r\ + \n#:local IfThenElse;\r\ + \n#:local EitherOr;\r\ + \n\r\ + \n:local one 11;\r\ + \n:local two 8;\r\ + \n#:log warning ([ \$IfThenElse (\$one != 0) \$one \$two ]);\r\ + \n:local Test; # [ :totime \"22s\" ];\r\ + \n\r\ + \n:local IfThenElse do={:if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] \ + = true) do={:return \$2}; :return \$3;}\r\ + \n:local EitherOr do={\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:if ((\$1 != 0) = true) do={:retur\ + n \$1} else={:return \$2};}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:if ((\$1 > 0s) = true) do={:retu\ + rn \$1} else={:return \$2};}\r\ + \n :if ([ :len [ :tostr \$1 ] ] > 0) do={:return \$1} else={:return \$2};\ + \r\ + \n}\r\ + \n\r\ + \n:log warning ([ \$IfThenElse (\$one != 0) \$one \$two ]);\r\ + \n\r\ + \n:set Test [ \$EitherOr \$Test \"\" ];\r\ + \n:log warning (\"\\\$ Test = \" . \$Test);\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :local IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n\r\ + \n#:log warning ([ \$IfThenElse (\$one != 0) \$one \$two ]);\r\ + \n\r\ + \n:set ExitOK true;\r\ + \n\$ExitError \$ExitOK \$ScriptName \"Err test custom\";" +add comment="Update and Backup send notification to EMail" \ + dont-require-permissions=no name=AM-Backup-UpdateEmail owner=\ + AM-Backup-UpdateEmail policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Backup-UpdateEmail\r\ + \n# Script comment: Update and Backup send notification to EMail\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version>=6.43.7\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Updated: 15/04/2025\r\ + \n# Website: https://github.com/beeyev\r\ + \n# Notification e-mail (Make sure you have configured Email settings in T\ + ools -> Email)\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:local IfThenElse do={:if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] \ + = true) do={:return \$2}; :return \$3;}\r\ + \n:local EitherOr do={\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:if ((\$1 != 0) = true) do={:retur\ + n \$1} else={:return \$2};}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:if ((\$1 > 0s) = true) do={:retu\ + rn \$1} else={:return \$2};}\r\ + \n :if ([ :len [ :tostr \$1 ] ] > 0) do={:return \$1} else={:return \$2};\ + \r\ + \n}\r\ + \n:local ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :if (\$ExitOK = \"false\") do={:log error (\$Name [ \$IfThenElse ([ :p\ + ick \$Name 0 1 ] = \"\\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);}\r\ + \n}\r\ + \n\r\ + \n:global LogPrint;\r\ + \n:global EditSchedulers;\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n:local SchedInterval \"7d\";\r\ + \n:local SchedStartTime \"03:41:27\";\r\ + \n:local SchedComment \"Every 7 Day Check For Update and Backup send notif\ + ication to EMail.\";\r\ + \n\r\ + \n# Function to add or edit schedulers for scripts, to ensure they are set\ + \_up correctly\r\ + \n# How to use:\r\ + \n# Call this function with the following parameters:\r\ + \n# 1. \$1 - Scheduler name (usually same as script name) [*]\r\ + \n# 2. \$2 - Interval (e.g. \"1d\" (default is \"1d\")) [**]\r\ + \n# 3. \$3 - Start Time (e.g. \"00:00:00\", default is current time) [**]\ + \r\ + \n# 4. \$4 - Comment (optional, default: \"Scheduler for script: \")\ + \_[**]\r\ + \n# 5. \$5 - On Event command (e.g. \"/system/script { run ; }\" (de\ + fault is \"/system/script { run \$SchedName; }\")) [**]\r\ + \n# 6. \$6 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ + ff,sensitive,romon\" (default is the same)) [**]\r\ + \n# 7. \$7 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ + *]\r\ + \n# Notes:\r\ + \n# * - Scheduler name is required, and is used to identify the scheduler\ + \_to create or edit. It is usually the same as the script name (\$ScriptNa\ + me).\r\ + \n# ** - If optional parameters are not provided, default values will be u\ + sed.\r\ + \n# This allows for quick setup with minimal parameters, while still \ + providing flexibility for customization.\r\ + \n# Example usage:\r\ + \n# :if ([ \$EditSchedulers \"my-script\" ] = false) do={:set ExitOK false\ + ; :error true;}\r\ + \n# :if ([ \$EditSchedulers \"my-script\" \"1d\" \"03:41:27\" \"My custom \ + scheduler comment\" false false \"jan/01/1970\" ] = false) do={:set ExitOK\ + \_false; :error true;}\r\ + \n\r\ + \n:set EditSchedulers do={\r\ + \n :local SchedName [ :tostr \$1 ];\r\ + \n :if ([ :len \$SchedName ] = 0) do={ :return false; }\r\ + \n :local Interval [ :tostr \$2 ];\r\ + \n :if ([ :len \$Interval ] = 0) do={ :set Interval \"1d\"; }\r\ + \n :local StartTime [ :tostr \$3 ];\r\ + \n :if ([ :len \$StartTime ] = 0) do={ :set StartTime [/system/clock/get \ + time]; }\r\ + \n :local Comment [ :tostr \$4 ];\r\ + \n :if ([ :len \$Comment ] = 0) do={ :set Comment \"Scheduler for script:\ + \_\$SchedName\"; }\r\ + \n :local OnEvent [ :tostr \$5 ];\r\ + \n :if ([ :len \$OnEvent ] = 0) do={ :set OnEvent \"/system/script { run \ + \$SchedName; }\"; }\r\ + \n :local Policy [ :tostr \$6 ];\r\ + \n :if ([ :len \$Policy ] = 0) do={ :set Policy \"ftp,reboot,read,write,p\ + olicy,test,password,sniff,sensitive,romon\"; }\r\ + \n :local StartDate [ :tostr \$7 ];\r\ + \n :if ([ :len \$StartDate ] = 0) do={ :set StartDate [/system/clock/get \ + date]; }\r\ + \n\r\ + \n :onerror Err {\r\ + \n # Check if scheduler exists, if not - create it\r\ + \n :if ([ :len [ /system/scheduler/find where name=\$SchedName ] ] = 0)\ + \_do={\r\ + \n :log warning (\$SchedName . \"System Scheduler for script: \" . \$\ + SchedName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add comment=\$Comment interval=\$Interval name=\ + \$SchedName on-event=\$OnEvent policy=\$Policy start-date=\$StartDate star\ + t-time=\$StartTime;\r\ + \n }\r\ + \n # Check if scheduler parameters are correct, if not - fix them\r\ + \n :if ([ /system/scheduler/get \$SchedName comment ] != \$Comment) do=\ + {\r\ + \n /system/scheduler/set \$SchedName comment=\$Comment;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName interval ] != \$Interval) d\ + o={\r\ + \n /system/scheduler/set \$SchedName interval=\$Interval;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName on-event ] != \$OnEvent) do\ + ={\r\ + \n /system/scheduler/set \$SchedName on-event=\$OnEvent;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName policy ] != \$Policy) do={\ + \r\ + \n /system/scheduler/set \$SchedName policy=\$Policy;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-date ] != \$StartDate\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-date=\$StartDate;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-time ] != \$StartTime\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-time=\$StartTime;\r\ + \n }\r\ + \n } do={:log error (\$SchedName . \"Failed to add/modify scheduler for '\ + \" . \$SchedName . \"' failed: \" . \$Err); :return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:if ([ \$EditSchedulers \$ScriptName \$SchedInterval \$SchedStartTime \$\ + SchedComment ] = false) do={\r\ + \n :log error (\$ScriptName . \"Failed to add/modify scheduler for \" . \ + \$ScriptName . \"!\");\r\ + \n :set ExitOK true;\r\ + \n :error true;\r\ + \n}\r\ + \n\r\ + \n# Local Function CheckOSUpdateMode\r\ + \n:local CheckOSUpdateMode;\r\ + \n:set CheckOSUpdateMode do={\r\ + \n :local NewMode [ :tostr \$1 ];\r\ + \n :if ([ :len \$NewMode ] = 0) do={\r\ + \n :log error (\$0 . \"/nFunction /\$CheckOSUpdateMode received empty v\ + alue!\");\r\ + \n :return false;\r\ + \n :error true;\r\ + \n }\r\ + \n\r\ + \n :global BackupAndUpdateMode;\r\ + \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ + \n :if (\$NewMode != \$BackupAndUpdateMode && \$NewMode = \"updateOnce\")\ + \_do={\r\ + \n :set BackupAndUpdateMode [ :tostr \$NewMode ];\r\ + \n :log info (\$0 . \"/nOk. /\$BackupAndUpdateMode set to: '\" . \$NewM\ + ode . \"'.\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds\ + .\");\r\ + \n :delay 5;\r\ + \n /system/script { run \$ScriptName; };\r\ + \n } else={\r\ + \n :log warning (\$0 . \"/nFunction /\$CheckOSUpdateMode received value: \ + '\" . \$NewMode . \"', but is may be only \\\"updateOnce\\\"!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n :error false;\r\ + \n}\r\ + \n\r\ + \n# :if ([ :len [ /system/scheduler/find where name=\"running-from-backup\ + -partition\" ] ] > 0) do={\r\ + \n# \$LogPrint warning \$ScriptName (\"Running from backup partition, r\ + efusing to act.\");\r\ + \n# :set ExitOK true;\r\ + \n# :error false;\r\ + \n# }\r\ + \n\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n:global forceBackup;\r\ + \n:global BackupPassword;\r\ + \n:global BackupSens;\r\ + \n:global updateChannel;\r\ + \n\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n# Installs patch updates only (BackupAndUpdateMode = \"osupdate\").\r\ + \n# Works for `stable` and `long-term` channels.\r\ + \n# Updates only if MAJOR.MINOR match (e.g. 6.43.2 > 6.43.6 allowed, 6.44.\ + 1 skipped).\r\ + \n# Sends info if a newer (non-patch) version is found.\r\ + \n:local installOnlyPatchUpdates false;\r\ + \n:local scriptVersion \"26.04.30\";\r\ + \n:local copyrightUrl \"https://www.github.com/vados-dev/\";\r\ + \n#Script messages prefix\r\ + \n:local SMP \"BkpAndUpdate:\";\r\ + \n\r\ + \n:local exitErrorMessage \"\$SMP script stopped due to an error. Please c\ + heck logs for more details.\";\r\ + \n:log info \"\\n\\n\$SMP Script \\\"Mikrotik RouterOS automatic backup & \ + update\\\" v.\$scriptVersion started.\";\r\ + \n:log info \"\$SMP Script Mode: `\$BackupAndUpdateMode`, Update channel: \ + `\$updateChannel`, Force backup: `\$forceBackup`, Install only patch updat\ + es: `\$installOnlyPatchUpdates`\";\r\ + \n\r\ + \n## vv FUNCTIONS vv ##\r\ + \n:global WaitCheckUpdates; \$WaitCheckUpdates;\r\ + \n:global MiniDateTimeStamp;\r\ + \n:local MDTSFix [\$MiniDateTimeStamp];\r\ + \n:global Identity;\r\ + \n:global IdentityShort;\r\ + \n:global devBoardName;\r\ + \n:global runningVersion;\r\ + \n:global runningChannel;\r\ + \n:global devModel;\r\ + \n:global devRbSerialNumber;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n\r\ + \n# Checks if two RouterOS version strings differ only by the patch versio\ + n\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.2.4\"] # Output: true\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.3.1\"] # Output: false\r\ + \n:local FuncIsPatchUpdateOnly do={\r\ + \n :local ver1 \$1;\r\ + \n :local ver2 \$2;\r\ + \n # Extract the major and minor components from a version\r\ + \n :local extractMajorMinor do={\r\ + \n :local ver \$1;\r\ + \n :local dot1 [:find \$ver \".\"];\r\ + \n :if (\$dot1 = -1) do={:return \$ver}\r\ + \n :local major [:pick \$ver 0 \$dot1];\r\ + \n :local rest [:pick \$ver (\$dot1 + 1) [:len \$ver]];\r\ + \n :local dot2 [:find \$rest \".\"];\r\ + \n :local minor \$rest;\r\ + \n :if (\$dot2 >= 0) do={:set minor [:pick \$rest 0 \$dot2]}\r\ + \n :return (\$major . \".\" . \$minor);\r\ + \n }\r\ + \n\r\ + \n# Compare the major and minor components of both version strings\r\ + \n:if ([\$extractMajorMinor \$ver1] = [\$extractMajorMinor \$ver2]) do={:r\ + eturn true}\r\ + \n :return false;\r\ + \n}\r\ + \n# Creates backups and returns array of names\r\ + \n# Possible arguments:\r\ + \n# \$1 - file name, without extension\r\ + \n# \$2 - password (optional)\r\ + \n# \$3 - sensitive data in config (optional, default: false)\r\ + \n# Example:\r\ + \n#:put [\$FuncCreateBackups \$backupName]\r\ + \n:local FuncCreateBackups do={\r\ + \n :local backupName [ :tostr \$1 ];\r\ + \n :local BackPass \$2;\r\ + \n :local BackSens \$3;\r\ + \n\r\ + \n #Script messages prefix\r\ + \n :local SMP \"BkpAndUpdate:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` started, input:\ + \_`\$backupName`\");\r\ + \n\r\ + \n # validate required parameter: backupName\r\ + \n :if ([:typeof \$backupName] != \"str\" or [:len \$backupName] = 0) do=\ + {\r\ + \n :log error \"\$SMP parameter 'backupName' is required and must be a \ + non-empty string\";\r\ + \n# :log warning \"\$SMP parameter '\\\$backupName' is required and mus\ + t be a non-empty string.\\nI set '\\\$backupName' to 'default-backup'\";\r\ + \n# :set \$backupName \"default-backup\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n\r\ + \n :local backupFileSys \"\$backupName.backup\";\r\ + \n :local backupFileConfig \"\$backupName.rsc\";\r\ + \n :local backupNames {\$backupFileSys;\$backupFileConfig};\r\ + \n\r\ + \n ## Perform system backup\r\ + \n :if ([:len \$BackPass] = 0) do={\r\ + \n :log info (\"\$SMP starting backup without password, backup name: `\ + \$backupName`\");\r\ + \n /system backup save dont-encrypt=yes name=\$backupName;\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting backup with password, backup name: `\$ba\ + ckupName`\");\r\ + \n /system backup save password=\$BackPass name=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP system backup created: `\$backupFileSys`\");\r\ + \n ## Export config file\r\ + \n :if (\$BackSens = true) do={\r\ + \n :log info (\"\$SMP starting export config with sensitive data, backu\ + p name: `\$backupName`\");\r\ + \n # Since RouterOS v7 it needs to be explicitly set that we want to ex\ + port sensitive data\r\ + \n :if ([:pick [/system resource get version] 0 1] < 7) do={\r\ + \n :execute \"/export compact terse file=\$backupName\";\r\ + \n } else={\r\ + \n :execute \"/export compact show-sensitive terse file=\$backupName\ + \";\r\ + \n }\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting export config without sensitive data, ba\ + ckup name: `\$backupName`\");\r\ + \n /export compact hide-sensitive terse file=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP Config export complete: `\$backupFileConfig`\");\r\ + \n :log info (\"\$SMP Waiting a little to ensure backup files are written\ + \");\r\ + \n :delay 20;\r\ + \n :if ([:len [/file find name=\$backupFileSys]] > 0) do={\r\ + \n :log info (\"\$SMP system backup file successfully saved to the file\ + \_system: `\$backupFileSys`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP system backup was not created, file does not exi\ + st: `\$backupFileSys`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :if ([:len [/file find name=\$backupFileConfig]] > 0) do={\r\ + \n :log info (\"\$SMP config backup file successfully saved to the file\ + \_system: `\$backupFileConfig`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP config backup was not created, file does not exi\ + st: `\$backupFileConfig`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` finished. Creat\ + ed backups, system: `\$backupFileSys`, config: `\$backupFileConfig`\")\r\ + \n :return \$backupNames;\r\ + \n}\r\ + \n# Sends an email\r\ + \n# Parameters:\r\ + \n# \$1 - to (email address)\r\ + \n# \$2 - subject\r\ + \n# \$3 - body\r\ + \n# \$4 - file attachments (optional; pass \"\" if not needed)\r\ + \n#\r\ + \n# Example:\r\ + \n# \$FuncSendEmailSafe \"admin@domain.com\" \"Backup Done\" \"Backup comp\ + lete.\" \"backup1.backup\"\r\ + \n:local FuncSendEmailSafe do={\r\ + \n :global EmailGeneralTo;\r\ + \n :local emailSubject \$2;\r\ + \n :local emailBody \$3;\r\ + \n :local emailAttachments \$4;\r\ + \n :local SMP \"Bkp&Upd:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info \"\$SMP Attempting to send email to `\$EmailGeneralTo`\";\r\ + \n # SAFETY: wait for any previously queued email to finish\r\ + \n :local waitTimeoutPre 60;\r\ + \n :local waitCounterPre 0;\r\ + \n :while (([/tool e-mail get last-status] = \"resolving-dns\" or [/tool \ + e-mail get last-status] = \"in-progress\")) do={\r\ + \n :if (\$waitCounterPre >= \$waitTimeoutPre) do={\r\ + \n :log error \"\$SMP Email send aborted: previous send did not compl\ + ete after \$waitTimeoutPre seconds\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info \"\$SMP Waiting for previous email to finish (status: \$[/\ + tool e-mail get last-status])...\";\r\ + \n :delay 1; \r\ + \n :set waitCounterPre (\$waitCounterPre + 1);\r\ + \n }\r\ + \n # Send the email\r\ + \n :do {\r\ + \n /tool e-mail send to=\$EmailGeneralTo subject=\$emailSubject body=\$\ + emailBody file=\$emailAttachments;\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Email send command failed to execute. Check logs \ + and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n # Wait for send status to change from \"in-progress\" / \"resolving-dn\ + s\"\r\ + \n :local waitTimeout 60;\r\ + \n :local waitCounter 0;\r\ + \n :local emailStatus \"\";\r\ + \n :log info \"\$SMP Waiting for email to be sent, timeout in `\$waitTime\ + out` seconds...\";\r\ + \n :while (\$waitCounter < \$waitTimeout) do={\r\ + \n :set emailStatus [/tool e-mail get last-status];\r\ + \n :if (\$emailStatus != \"in-progress\" and \$emailStatus != \"resolvi\ + ng-dns\") do={\r\ + \n :log info \"\$SMP Email send status received: \$emailStatus\";\r\ + \n # exit loop\r\ + \n :set waitCounter \$waitTimeout;\r\ + \n } else={:delay 1; :set waitCounter (\$waitCounter + 1)}\r\ + \n }\r\ + \n # Final decision based on last status\r\ + \n :if (\$emailStatus = \"succeeded\") do={\r\ + \n :log info \"\$SMP Email successfully sent to `\$EmailGeneralTo`\";\ + \r\ + \n } else={\r\ + \n :log error \"\$SMP Email failed to send. Status: `\$emailStatus`. Ch\ + eck logs for more details and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n# Global variable to track current update step\r\ + \n# They need to be initialized here first to be available in the script\r\ + \n:global buGlobalVarTargetOsVersion;\r\ + \n:global buGlobalVarScriptStep;\r\ + \n:local scriptStep \$buGlobalVarScriptStep;\r\ + \n:do {\r\ + \n /system/script/environment remove buGlobalVarScriptStep;\r\ + \n} on-error={}\r\ + \n:if ([:len \$scriptStep] = 0) do={\r\ + \n :set scriptStep 1;\r\ + \n}\r\ + \n## ^^ FUNCTIONS ^^ ##\r\ + \n#\r\ + \n# Initial validation\r\ + \n## Check email settings\r\ + \n:if ([:len \$EmailGeneralTo] < 3) do={\r\ + \n :log error (\"\$SMP Parameter `\\\$EmailGeneralTo` is not set, or cont\ + ains invalid value. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Values will be defined later in the script\r\ + \n:local emailServer \"\";\r\ + \n:local emailFromAddress [/tool e-mail get from];\r\ + \n:log info \"\$SMP Validating email settings...\";\r\ + \n:do {\r\ + \n :set emailServer [/tool e-mail get server];\r\ + \n} on-error={\r\ + \n # This is a workaround for the RouterOS v7.12 and older versions\r\ + \n :set emailServer [/tool e-mail get address];\r\ + \n}\r\ + \n:if (\$emailServer = \"0.0.0.0\") do={\r\ + \n :log error (\"\$SMP Email server address is not correct: `\$emailServe\ + r`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n:if ([:len \$emailFromAddress] < 3) do={\r\ + \n :log error (\"\$SMP Email configuration FROM address is not correct: `\ + \$emailFromAddress`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Script mode validation\r\ + \n:if (\$BackupAndUpdateMode != \"backup\" and \$BackupAndUpdateMode != \"\ + osupdate\" and \$BackupAndUpdateMode != \"updateOnce\" and \$BackupAndUpda\ + teMode != \"osnotify\") do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$BackupAndUpdateMode` is not \ + set, or contains invalid value: `\$BackupAndUpdateMode`. Script stopped.\"\ + );\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Update channel validation\r\ + \n:if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\" \ + and \$updateChannel != \"testing\" and \$updateChannel != \"development\")\ + \_do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$updateChannel` is not set, o\ + r contains invalid value: `\$updateChannel`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Verify if script is set to install patch updates and if the update cha\ + nnel is valid\r\ + \n:if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \"\ + updateOnce\") and \$installOnlyPatchUpdates = true) do={\r\ + \n :if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\ + \") do={\r\ + \n :log error (\"\$SMP Patch-only updates enabled, but update channel `\ + \$updateChannel` is invalid. Only `stable` and `long-term` are supported. \ + Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n \r\ + \n :if (\$runningChannel != \"stable\" and \$runningChannel != \"long-ter\ + m\") do={\r\ + \n :log error (\"\$SMP Script is set to install only patch updates, but\ + \_the installed RouterOS version is not from `stable` or `long-term` chann\ + el: `\$runningChannel`. Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n#\r\ + \n\r\ + \n:local rawTime [/system clock get time];\r\ + \n:local rawDate [/system clock get date];\r\ + \n\r\ + \n:local deviceOsVerAndChannelRunning [/system/resource/get version];\r\ + \n\r\ + \n:local backupNameTemplate (\"backup_v\" . \$runningVersion . \"_\" .\ + \_\$runningChannel . \"_\" . \$MDTSFix);\r\ + \n:local backupNameBeforeUpdate (\$backupNameTemplate . \"_before_update\"\ + );\r\ + \n:local backupNameAfterUpdate (\$backupNameTemplate . \"_after_update\")\ + ;\r\ + \n\r\ + \n## Email body template\r\ + \n:local mailSubjectPrefix \"\$SMP Device - `\$IdentityShort`\";\r\ + \n:local mailBodyCopyright \"Mikrotik RouterOS automatic backup & update \ + (ver. \$scriptVersion) \\n\$copyrightUrl\";\r\ + \n:local changelogUrl \"Check RouterOS changelog: https://mikrotik.com\ + /download/changelogs/\";\r\ + \n:local mailBodyDeviceInfo \"\";\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"Device information:\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\n-------------------\ + --\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nName: \$Identity\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nModel: \$devModel\"\ + );\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBoard: \$devBoardNa\ + me\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nSerial number: \$de\ + vRbSerialNumber\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterOS version: v\ + \$deviceOsVerAndChannelRunning\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBuild time: \$[/sys\ + tem/resource/get build-time]\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW Avai\ + lable: \$ROsVerAvail\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nDevice date-time: \ + \$rawDate \$rawTime (\$[/system/clock/get time-zone-name ])\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nUptime: \$[/system/\ + resource/get uptime]\");\r\ + \n## IP address detection\r\ + \n:if ([ \$DevInfoIncludeIP ] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress [ \$GetPubIp ];\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP address\ + : \" . \$PublicIpAddress . \".\");\r\ + \n :log info \"\$SMP Public IP address detected: \$PublicIpAddress\";\r\ + \n} \r\ + \n\r\ + \n:local mailAttachments [:toarray \"\"];\r\ + \n:if (\$scriptStep = 1 or \$scriptStep = 3) do={\r\ + \n :if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP Waiting for one minute before continuing to the f\ + inal step.\");\r\ + \n :delay 1m;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n## STEP 1: Create backups, check for new RouterOS, and send email\r\ + \n## Steps 2\C3\A23 run only if auto-update is enabled and a new version i\ + s available\r\ + \n:if (\$scriptStep = 1) do={\r\ + \n :global BackupPassword;\r\ + \n :global BackupSens;\r\ + \n :local isNewOsUpdateAvailable false;\r\ + \n :local isLatestOsAlreadyInstalled true;\r\ + \n :local isOsNeedsToBeUpdated false;\r\ + \n :local isUpdateCheckSucceeded false;\r\ + \n :local isEmailNeedsToBeSent false;\r\ + \n :local mailSubjectPartAction \"\";\r\ + \n :local mailPtBodyAction \"\";\r\ + \n :local mailPtSubjectBackup \"\";\r\ + \n :local mailPtBodyBackup \"\";\r\ + \n # Checking for new version\r\ + \n :if (\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"osnotify\" or \$BackupAndUpdateMode = \"updateOnce\") do={\r\ + \n :log info (\"\$SMP Setting update channel to `\$updateChannel`\");\r\ + \n /system/package/update/set channel=\$updateChannel;\r\ + \n :log info (\"\$SMP Checking for new RouterOS version. Current instal\ + led version is: `\$runningVersion`\");\r\ + \n \$LogPrint debug \$ScriptName (\"Checking for updates...\");\r\ + \n \r\ + \n# /system/package/update/check-for-updates without-paging as-value;\ + \r\ + \n# /system/package/update check-for-updates;\r\ + \n :delay 5s;\r\ + \n :set PkgUpdStatus [ /system/package/update/get status ];\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :set ROsVerAvail [/system/package/update/get latest-version];\r\ + \n }\r\ + \n\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :log info (\"\$SMP New RouterOS version is available: `\$ROsVerAva\ + il`\");\r\ + \n :set isNewOsUpdateAvailable true;\r\ + \n :set isLatestOsAlreadyInstalled false;\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"New RouterOS available\";\r\ + \n :set mailPtBodyAction \"New RouterOS version is available, curren\ + t version: v\$runningVersion, new version: v\$ROsVerAvail. \\n\$changelogU\ + rl\";\r\ + \n } else={\r\ + \n :if (\$PkgUpdStatus = \"System is already up to date\") do={\r\ + \n :log info (\"\$SMP No new RouterOS version is available, the lat\ + est version is already installed: `v\$runningVersion`\");\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set mailSubjectPartAction \"No os update available\";\r\ + \n :set mailPtBodyAction \"No new RouterOS version is available, t\ + he latest version is already installed: `v\$runningVersion`\";\r\ + \n } else={\r\ + \n :log error (\"\$SMP Failed to check for new RouterOS version. Pa\ + ckage check status: `\$PkgUpdStatus`\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"Error unable to check new os versio\ + n\";\r\ + \n :set mailPtBodyAction \"An error occurred while checking for a \ + new RouterOS version.\\nStatus returned: `\$PkgUpdStatus`\\n\\nPlease revi\ + ew the logs on the device for more details and verify internet connectivit\ + y.\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n # Checking if the script needs to install new os version\r\ + \n :if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"updateOnce\") and \$isNewOsUpdateAvailable = true) do={\r\ + \n :if (\$installOnlyPatchUpdates = true) do={\r\ + \n :if ([\$FuncIsPatchUpdateOnly \$runningVersion \$ROsVerAvail] = tr\ + ue) do={\r\ + \n :log info \"\$SMP New RouterOS version is available, and it is a\ + \_patch update. Current version: v\$runningVersion, new version: v\$ROsVer\ + Avail\";\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n } else={\r\ + \n :log info \"\$SMP The script will not install this update, becau\ + se it is not a patch update. Current version: v\$runningVersion, new versi\ + on: v\$ROsVerAvail\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThis update wil\ + l not be installed, because the script is set to install only patch update\ + s.\");\r\ + \n }\r\ + \n } else={\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n }\r\ + \n }\r\ + \n # Checking If the script needs to create a backup\r\ + \n :if (\$forceBackup = true or \$BackupAndUpdateMode = \"backup\" or \$i\ + sOsNeedsToBeUpdated = true) do={\r\ + \n :log info (\"\$SMP Starting backup process.\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :local backupName \$backupNameTemplate;\r\ + \n # This means it's the first step where we create a backup before the\ + \_update process\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :set backupName \$backupNameBeforeUpdate;\r\ + \n #Email body if the purpose of the script is to update the device\r\ + \n :set mailSubjectPartAction \"Update preparation\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThe update proces\ + s for device '\$Identity' is scheduled to upgrade RouterOS from version v.\ + \$runningVersion to version v.\$ROsVerAvail (Update channel: \$updateChann\ + el)\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nPlease note: The \ + update will proceed only after a successful backup.\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nA final report wi\ + th detailed information will be sent once the update process is completed.\ + \");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nIf you do not rec\ + eive a second email within the next 10 minutes, there may be an issue. Ple\ + ase check your device logs for further information.\");\r\ + \n }\r\ + \n :do {\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupName \$BackupPas\ + sword \$BackupSens];\r\ + \n :set mailPtSubjectBackup \"Backup created\";\r\ + \n :set mailPtBodyBackup \"System backups have been successfully crea\ + ted and attached to this email.\";\r\ + \n } on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :set mailPtSubjectBackup \"Backup failed\";\r\ + \n :set mailPtBodyBackup \"The script failed to create backups. Pleas\ + e check device logs for more details.\";\r\ + \n :log warning \"\$SMP Backup creation failed. Update process will b\ + e canceled if automatic update is enabled\";\r\ + \n }\r\ + \n }\r\ + \n :if (\$isEmailNeedsToBeSent = true) do={\r\ + \n :log info \"\$SMP Preparing to send email...\";\r\ + \n :local mailStep1Subject \$mailSubjectPrefix;\r\ + \n :local mailStep1Body \"\";\r\ + \n # subject\r\ + \n :if (\$mailSubjectPartAction != \"\") do={:set mailStep1Subject (\$\ + mailStep1Subject . \" - \" . \$mailSubjectPartAction)}\r\ + \n :if (\$mailPtSubjectBackup != \"\") do={:set mailStep1Subject (\$ma\ + ilStep1Subject . \" - \" . \$mailPtSubjectBackup)}\r\ + \n # body\r\ + \n :if (\$mailPtBodyAction != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyAction . \"\\n\\n\")}\r\ + \n :if (\$mailPtBodyBackup != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyBackup . \"\\n\\n\")}\r\ + \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n__\ + ________\\n\" . \$mailBodyCopyright);\r\ + \n :set mailStep1Body (\$mailStep1Body . \"\\n[*** TEST START ***]\\n\\\ + \$DeviceInfo: \" . [ \$DeviceInfo ] . \"\\n[*** TEST END ***]\\n\");\r\ + \n # Send email with backups\r\ + \n :do {\$FuncSendEmailSafe \$EmailGeneralTo \$mailStep1Subject \$mailS\ + tep1Body \$mailAttachments} on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :log error \"\$SMP The script will not proceed with the update pro\ + cess, because the email was not sent.\";\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2s;\r\ + \n }\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :global OldMode;\r\ + \n :log info \"\$SMP everything is ready to install new RouterOS, going\ + \_to start the update process and reboot the device.\";\r\ + \n :do {\r\ + \n :local nextStep 2;\r\ + \n :if (\$isCloudHostedRouter = true) do={\r\ + \n :log info \"\$SMP The device is a cloud hosted router, the secon\ + d step updating the Routerboard firmware will be skipped.\";\r\ + \n :set nextStep 3;\r\ + \n }\r\ + \n :local scheduledCommand (\":delay 5s; /system/scheduler remove BKP\ + UPD-NEXT-BOOT-TASK; \\\r\ + \n :global buGlobalVarScriptStep \$nextStep; :global buGlobalVarTarg\ + etOsVersion \\\"\$ROsVerAvail\\\"; \\\r\ + \n :delay 10s; /system/script { run \$ScriptName; }\");\r\ + \n /system/scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\$schedu\ + ledCommand start-time=startup interval=0;\r\ + \n /system/package/update install;\r\ + \n } on-error={\r\ + \n # Failed to install new os version, remove the task and variables\ + \r\ + \n :do {\r\ + \n /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\r\ + \n :set BackupAndUpdateMode \$OldMode;\r\ + \n :delay 2;\r\ + \n :do {\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \"ERROR Remove\ + \_global variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n# :if ([ :len \$OldMode ] > 0) do={\r\ + \n# :do {\r\ + \n# :global OldMode (a);\r\ + \n# } on-error={\r\ + \n# :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Re\ + move global variable \\\$OldMode failed!\");\r\ + \n# }\r\ + \n# }\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Pleas\ + e check device logs for more details. \\\r\ + \n \\nAnd Failed to remove task and variables! Check it!\";\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove \ + task and global variables!\");\r\ + \n }\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Please \ + check device logs for more details.\";\r\ + \n :local mailUpdateErrorSubject (\$mailSubjectPrefix . \" - Update f\ + ailed\");\r\ + \n :local mailUpdateErrorBody \"The script was unable to install new \ + RouterOS version. Please check device logs for more details.\";\r\ + \n # Send email with error\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailUpdateErrorSubject \$ma\ + ilUpdateErrorBody \"\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n## STEP 2: (Post-reboot) Upgrade RouterBOARD firmware\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und\r\ + \n:if (\$scriptStep = 2) do={\r\ + \n :log info \"\$SMP The script is in the second step, updating Routerboa\ + rd firmware.\";\r\ + \n :log info \"\$SMP Upgrading routerboard firmware from v.\$deviceRbCurr\ + entFw to v.\$deviceRbUpgradeFw\";\r\ + \n /system routerboard upgrade;\r\ + \n :delay 2;\r\ + \n :log info \"\$SMP routerboard upgrade process was completed, going to \ + reboot in a moment!\";\r\ + \n ## Set task to send final report on the next boot\r\ + \n /system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\":delay 2; \ + :global buGlobalVarScriptStep 3; \\\r\ + \n :global buGlobalVarTargetOsVersion \\\"\$buGlobalVarTargetOsVersion\\\ + \"; :delay 10s; /system/script { run \$ScriptName; }; \\ \r\ + \n :delay 5s; /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\" start-ti\ + me=startup interval=0;\r\ + \n :delay 2;\r\ + \n /system reboot;\r\ + \n}\r\ + \n\r\ + \n## STEP 3: Final report (after second reboot, with delay).\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und.\r\ + \n:if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP The script is in the third step, sending final repo\ + rt.\");\r\ + \n :local targetOsVersion \$buGlobalVarTargetOsVersion;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTargetOsV\ + ersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove glob\ + al variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$OldMode ] != 0) do={\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"OldMode\"];\r\ + \n :global OldMode (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR! Remove\ + \_global variable \\\$OldMode failed!\");\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$targetOsVersion] = 0) do={\r\ + \n :log warning \"\$SMP Something is wrong, the script was unable to ge\ + t the target updated OS version from the global variable.\";\r\ + \n }\r\ + \n :local mailStep3Subject \$mailSubjectPrefix;\r\ + \n :local mailStep3Body \"\";\r\ + \n :if (\$targetOsVersion = \$runningVersion) do={\r\ + \n :log info \"\$SMP Successfully verified new RouterOS version: target\ + : `\$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update completed - \ + Backup created\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"RouterOS and routerboard upg\ + rade process was completed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\nNew RouterOS version: v.\ + \$targetOsVersion, routerboard firmware: v.\$deviceRbCurrentFw\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\n\$changelogUrl\\nBackups \ + of the upgraded system are in the attachment of this email.\\n\\n\$mailBod\ + yDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupNameAfterUpdate \$\ + BackupPassword \$BackupSens];\r\ + \n } else={\r\ + \n :log error \"\$SMP Failed to verify new RouterOS version: target: `\ + \$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update failed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"The script was unable to ver\ + ify that the new RouterOS version was installed, target version: `\$target\ + OsVersion`, current version: `\$runningVersion`\\nCheck device logs for mo\ + re details.\\n\\n\$mailBodyDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n }\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailStep3Subject \$mailStep3Bod\ + y \$mailAttachments;\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2;\r\ + \n }\r\ + \n :log info (\"\$SMP Final report email sent successfully, and the scrip\ + t has finished.\");\r\ + \n}\r\ + \n:log info (\"\$SMP the script has finished, script step: `\$scriptStep` \ + \\n\\n\");\r\ + \n\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add dont-require-permissions=no name=testGetPubIP owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":\ + global DevInfoIncludeIP;\r\ + \n:global CharacterReplace;\r\ + \n:global EscapeForRegEx;\r\ + \n:global UrlEncode;\r\ + \n\r\ + \n:if ([ \$DevInfoIncludeIP ] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local Char (\"\\n\\r\");\r\ + \n :local PublicIpAddress [\$GetPubIp];\r\ + \n# :if ([ :pick \$PublicIpAddress ([ :len \$PublicIpAddress ] - 2) ] = \ + \"\\n\") do={:error true}; :set error falseon-error={:set PublicIpAddress \ + (\$PublicIpAddress . Char)};\r\ + \n#:if ([ :pick \$PublicIpAddress ([ :len \$PublicIpAddress ] - 1) ] = \"/\ + n\") do={\r\ + \n#:log warning \"N is = //n\"; \r\ + \n# :set PublicIpAddress [ \$CharacterReplace \$PublicIpAddress \$Char \"\ + \" ];\r\ + \n#}\r\ + \n# :set PublicIpAddress [ \$UrlEncode \$PublicIpAddress ];\r\ + \n#:local IpLen ([ :len \$PublicIpAddress ] -1);\r\ + \n#:set PublicIpAddress [:pick \$PublicIpAddress 0 \$IpLen];\r\ + \n :log warning \"Public IP address detected: \$PublicIpAddress , len = \ + \$IpLen\";\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/app settings +set auto-update=yes disk=sata1 lan-bridge=Bridge-LAN registry-mirrors="https:/\ + /reg.vados.ru:5000/:https://reg.vados.ru/,https://registry-1.docker.io" +/caps-man aaa +set called-format=ssid +/caps-man access-list +add action=reject allow-signal-out-of-range=10s disabled=no interface=all \ + signal-range=-120..-80 ssid-regexp="" +add action=accept allow-signal-out-of-range=10s disabled=no interface=all \ + signal-range=-79..120 ssid-regexp="" +/caps-man manager +# bad package path +set ca-certificate=CAPsMAN-CA-51B25E507D07 certificate=CAPsMAN-51B25E507D07 \ + enabled=yes package-path=/tmpfs/capsman-packages +/caps-man manager interface +set [ find default=yes ] forbid=yes +add disabled=no interface=Bridge-LAN +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=g,gn,b \ + master-configuration=2G name-format=prefix-identity name-prefix=2G +add action=create-dynamic-enabled hw-supported-modes=an,ac,a \ + master-configuration=5G name-format=prefix-identity name-prefix=5G +add action=create-dynamic-enabled disabled=yes hw-supported-modes=ac,an,a \ + master-configuration=2G name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled disabled=yes hw-supported-modes=an \ + master-configuration=5G name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store=fetch crl-download=yes crl-use=yes +/container config +set layer-dir=/sata1 registry-url=https://reg.vados.ru tmpdir=/ramstorage \ + username=amster-dev +/container envs +add key=ENV list=carkeeperbot_envs value=/root/.ashrc +add key=PATH list=carkeeperbot_envs value=\ + /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +add key=PORT list=carkeeperbot_envs value="\${SSH_PORT}" +add key=SSH_PORT list=carkeeperbot_envs value=8222 +/container mounts +add dst=/app list=carkeeper_app src=/sata1/carkeeper/app +add dst=/configs list=carkeeper_configs src=/sata1/carkeeper/configs +add dst=/root/.ashrc list=carkeeper_configs/.profile src=\ + /sata1/carkeeper/configs/.profile +add dst=/etc/php82/php.ini list=carkeeper_configs/php.ini src=\ + /sata1/carkeeper/configs/php.ini +add dst=/etc/ssh/sshd_config list=carkeeper_configs/sshd_config src=\ + /sata1/carkeeper/configs/sshd_config +add dst=/scripts list=carkeeper_scripts src=/sata1/carkeeper/scripts +add dst=/var/sync list=carkeeper_sync src=/sata1/carkeeper/sync +add dst=/var/tmp list=carkeeper_tmp src=/sata1/carkeeper/tmp +/interface bridge port +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-DOC interface=veth1 +add bridge=Bridge-LAN interface=LAN +add bridge=Bridge-LAN interface=dynamic +/ipv6 settings +set disable-ipv6=yes disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=LAN internet-interface-list=LAN lan-interface-list=\ + LAN wan-interface-list=LAN +/interface wifi capsman +set package-path=/tmpfs/capsman-packages upgrade-policy=none +/ip address +add address=10.30.30.10/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.10.10.1/24 disabled=yes interface=Bridge-DOC network=\ + 10.10.10.0 +add address=172.18.20.5/30 disabled=yes interface=docker-xray-vless-veth \ + network=172.18.20.4 +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set disabled=yes interface=Bridge-LAN \ + lease-script=lease-script lease-time=10m name=nucDHCP server-address=\ + 10.30.30.10 +/ip dns +set allow-remote-requests=yes doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=10.30.30.81 verify-doh-cert=yes +/ip firewall filter +add action=accept chain=input +add action=accept chain=output +add action=accept chain=forward comment="Comment of the rule" disabled=yes +/ip firewall mangle +# docker-xray-vless-veth not ready +add action=change-mss chain=forward new-mss=1360 out-interface=\ + docker-xray-vless-veth protocol=tcp tcp-flags=syn tcp-mss=1420-65535 +/ip firewall nat +# docker-xray-vless-veth not ready +add action=masquerade chain=srcnat out-interface=docker-xray-vless-veth +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip route +add disabled=no dst-address=0.0.0.0/0 gateway=10.30.30.81 routing-table=main +/ip service +set ftp disabled=yes +set www disabled=yes +set ssh port=2222 +set www-ssl port=4443 +set api disabled=yes +set api-ssl disabled=yes +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both password-authentication=no \ + publickey-authentication-options=verify-required strong-crypto=yes +/ip upnp +set allow-disable-external-interface=yes enabled=yes +/ipv6 firewall address-list +add address=2400:cb00::/32 list=CLOUDFLARE-IP-Address +add address=2606:4700::/32 list=CLOUDFLARE-IP-Address +add address=2803:f800::/32 list=CLOUDFLARE-IP-Address +add address=2405:b500::/32 list=CLOUDFLARE-IP-Address +add address=2405:8100::/32 list=CLOUDFLARE-IP-Address +add address=2a06:98c0::/29 list=CLOUDFLARE-IP-Address +add address=2c0f:f248::/32 list=CLOUDFLARE-IP-Address +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system gps +set set-system-time=yes +/system identity +set name=MikroNUC +/system note +set show-at-login=no +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes +/system ntp client servers +add address=10.30.30.81 +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Fake Bridges" interval=1d name=\ + mod/AM-IPbridge on-event="/system/script/run mod/AM-IPbridge;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Telegram Chat Bot" interval=30s name=mod/AM-TG-Bot on-event=\ + "/system/script/run mod/AM-TG-Bot;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment=\ + "Every 7 Day Check For Update and Backup send notification to EMail." \ + interval=1w name=AM-Backup-UpdateEmail on-event=\ + "/system/script { run AM-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-30 start-time=03:41:27 +/tool e-mail +set certificate-verification=no from=MikroNUC port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool netwatch +add disabled=yes down-script=\ + ":local msg \"Host MikroYellow is DOWN\";\r\ + \n\$TGSendMessage \$msg;" host=10.30.30.86 http-codes="" interval=10s \ + test-script="" type=simple up-script=\ + ":global TGSendMessage;\r\ + \n\$TGSendMessage \"Host MikroYellow is UP\";" +/user aaa +set accounting=no diff --git a/MikroNUC/history/20260505/20260505010001-Diff-Config.rsc b/MikroNUC/history/20260505/20260505010001-Diff-Config.rsc new file mode 100644 index 0000000..1e92e2e --- /dev/null +++ b/MikroNUC/history/20260505/20260505010001-Diff-Config.rsc @@ -0,0 +1,1166 @@ +443c443 +< \n:global tmpfs false;\r\ +--- +> \n:global tmpfs true;\r\ +469,474c469,470 +< \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ +< ] != 1) do={\r\ +< \n :error \"Something is wrong with your certificates!\";\r\ +< \n } else={\r\ +< \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ +< \_\\\r\ +--- +> \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \ +> \\\r\ +479,485c475,485 +< \n :put \"Importing certificate...\";\r\ +< \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ +< ame) dst-path=\$CertFileName as-value;\r\ +< \n :delay 1s;\r\ +< \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ +< \n :delay 1s;\r\ +< \n };\r\ +--- +> \n :put \"Importing certificate...\";\r\ +> \n \r\ +> \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ +> ath=\$CertFileName as-value;\r\ +> \n :delay 1s;\r\ +> \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ +> \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ +> ] ] != 1) do={\r\ +> \n :error \"Something is wrong with your certificates!\";\r\ +> \n };\r\ +> \n :delay 1s;\r\ +617d616 +< \n:global Identity [ /system identity get name ];\r\ +683,684c682 +< \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ +< \");\r\ +--- +> \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\r\ +819c817 +< \n:global CommitId \"main/612/a9497a83\";\r\ +--- +> \n:global CommitId \"main/348/e201dbb4\";\r\ +822c820 +< r: root, in 00:40:03 05.05.2026.\";\r\ +--- +> r: root, in 04:50:02 01.05.2026.\";\r\ +825c823 +< \n:global GlobalConfVersion 140;\r\ +--- +> \n:global GlobalConfVersion 138;\r\ +887a886 +> \n:global ExitError;\r\ +898,899d896 +< \n:global GetRandom20CharHex;\r\ +< \n:global GetRandomNumber;\r\ +935,938c932 +< \n:global ExitError;\r\ +< \n:global ExitOnError;\r\ +< \n\r\ +< \n:global FetchHugeFiles;\r\ +--- +> \n:global FetchLargeFiles;\r\ +940d933 +< \n:global FileExists;\r\ +951a945 +> \n :global LogPrint;\r\ +957c951 +< \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ +--- +> \n \$LogPrint debug \$0 (\"\\\$isInfo = \" . \$isInfo); \r\ +963c957,958 +< \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ +--- +> \n \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ +> \r\ +964a960 +> \n\r\ +968c964,966 +< \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ +--- +> \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ +> \n\r\ +> \n\r\ +970c968 +< \n :log info (\$0 . \" Checking for updates...\");\r\ +--- +> \n \$LogPrint debug \$0 (\"Checking for updates...\");\r\ +974c972 +< \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ +--- +> \n \$LogPrint debug \$0 (\"\\\$StatusPkg = \" . \$StatusPkg);\r\ +979c977 +< \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ +--- +> \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ +981c979 +< \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ +--- +> \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ +998a997 +> \n\r\ +1001a1001 +> \n\r\ +1004a1005 +> \n\r\ +1011a1013 +> \n\r\ +1023a1026 +> \n\r\ +1040a1044 +> \n\r\ +1212d1215 +< \n\r\ +1219,1223d1221 +< \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ +< \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ +< \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ +< \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ +< \n\r\ +1294a1293,1323 +> \n# !!! The function is not ready !!!\r\ +> \n:global FetchHttpInfo do={\r\ +> \n :local Mac [ :tostr \$1 ];\r\ +> \n :global CertificateAvailable;\r\ +> \n :global IsMacLocallyAdministered;\r\ +> \n :global LogPrint;\r\ +> \n :local Url \"https://api.macvendors.com/\";\r\ +> \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ +> y administered\";}\r\ +> \n :do {\r\ +> \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ +> o={\r\ +> \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ +> \");\r\ +> \n :error false;\r\ +> \n }\r\ +> \n :local Vendor ([ /tool/fetch \r\ +> \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ +> \n :return \$Vendor;\r\ +> \n } on-error={\r\ +> \n :onerror Err {\r\ +> \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ +> as-value;\r\ +> \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ +> );\r\ +> \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ +> rr); }\r\ +> \n :return \"unknown vendor\";\r\ +> \n }\r\ +> \n}\r\ +> \n\r\ +1392d1420 +< \n\r\ +1393a1422,1423 +> \n :global EitherOr;\r\ +> \n :global LogPrint;\r\ +1395,1399c1425 +< \n\r\ +< \n :if ([ :len \$UseFor ] = 0) do={\r\ +< \n :log warning (\$0 . \"The intended use is undefined!\");\r\ +< \n :set UseFor \"undefined\";\r\ +< \n }\r\ +--- +> \n :set UseFor [ \$EitherOr \$UseFor \"undefined\" ];\r\ +1403,1404c1429,1430 +< \n :log warning (\$0 . \"This system has low free flash space but \" . \ +< \\\r\ +--- +> \n \$LogPrint warning \$0 (\"This system has low free flash space but \ +> \" . \\\r\ +1408c1434 +< \n :log warning (\$0 . \"No CommonName given!\");\r\ +--- +> \n \$LogPrint warning \$0 (\"No CommonName given!\");\r\ +1422,1426c1448,1451 +< \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ +< \"' not available.\");\r\ +< \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ +< \n :return false;\r\ +< \n }\r\ +--- +> \n \$LogPrint info \$0 (\"Certificate with CommonName '\" . \$CommonNam\ +> e . \"' not available.\");\r\ +> \n :if ([ \$CertificateDownload \$CommonName ] = false) do={:return fal\ +> se}\r\ +1430,1431c1455,1456 +< \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ +< \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ +--- +> \n \$LogPrint info \$0 (\"There are \" . \$CertCount . \" Certificates \ +> with CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ +1442,1446c1467,1470 +< \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ +< is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ +< \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ +< \n :return false;\r\ +< \n }\r\ +--- +> \n \$LogPrint info \$0 (\"Certificate chain for '\" . \$CommonName . \ +> \"' is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ +> \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={:return fal\ +> se}\r\ +1456,1457c1480,1481 +< \n :global ScriptUpdatesBaseUrl;\r\ +< \n :global ScriptUpdatesUrlSuffix;\r\ +--- +> \n :global GlobalScriptsUrl;\r\ +> \n :global GlobalScriptsUrlSuffix;\r\ +1460a1485 +> \n :global LogPrint;\r\ +1463,1466c1488,1491 +< \n\r\ +< \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ +< \r\ +< \n \"CommonName '\" . \$CommonName . \"'.\");\r\ +--- +> \n \r\ +> \n \$LogPrint info \$0 (\"Downloading and importing certificate with Comm\ +> onName '\" . \$CommonName . \"'.\");\r\ +> \n \r\ +1469,1473c1494,1497 +< \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ +< -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ +< \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ +< sUrlSuffix) \\\r\ +< \n dst-path=\$FileName as-value;\r\ +--- +> \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ +> \_\$FetchUserAgentStr \$0 ] }) \\\r\ +> \n (\$GlobalScriptsUrl . \"certs/\" . \$FileName . \$GlobalScriptsUrl\ +> Suffix) dst-path=\$FileName as-value;\r\ +1476,1477c1500,1501 +< \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ +< e '\" . \$CommonName . \\\r\ +--- +> \n \$LogPrint warning \$0 (\"Failed downloading certificate with Common\ +> Name '\" . \$CommonName . \\\r\ +1480d1503 +< \n :local CertSettings [ /certificate/settings/get ];\r\ +1482,1492c1505,1507 +< \_] ] = 0 && \\\r\ +< \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ +< || \\\r\ +< \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ +< \\\r\ +< \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ +< \r\ +< \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ +< \_Root X1\" ] ] > 0)) do={\r\ +< \n :log error (\$0 . \" Required certificate is not available.\");\ +< \r\ +--- +> \_] ] = 0) do={\r\ +> \n \$LogPrint error \$0 (\"Required certificate is not available.\"\ +> );\r\ +1495,1499c1510,1514 +< \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ +< er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ +< \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ +< n ({ \$CommonName }) ] \\\r\ +< \n dst-path=\$FileName as-value;\r\ +--- +> \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ +> \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ +> \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ +> ({ \$CommonName }) ] \\\r\ +> \n dst-path=\$FileName as-value;\r\ +1506,1507c1521,1522 +< \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ +< e '\" . \$CommonName . \"'!\");\r\ +--- +> \n \$LogPrint warning \$0 (\"Failed downloading certificate with Comm\ +> onName '\" . \$CommonName . \"'!\");\r\ +1510a1526 +> \n\r\ +1513a1530 +> \n\r\ +1518,1519c1535,1536 +< \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ +< e . \"' still unavailable!\");\r\ +--- +> \n \$LogPrint warning \$0 (\"Certificate with CommonName '\" . \$Common\ +> Name . \"' still unavailable!\");\r\ +1531a1549 +> \n :global LogPrint;\r\ +1535c1553 +< \n :log warning (\$0 .\" No matching certificate found.\");\r\ +--- +> \n \$LogPrint warning \$0 (\"No matching certificate found.\");\r\ +1552,1561c1570,1577 +< \n:set FileExists do={\r\ +< \n :local FileName [ :tostr \$1 ];\r\ +< \n :local Type [ :tostr \$2 ];\r\ +< \n :global FileGet;\r\ +< \n :local FileVal [ \$FileGet \$FileName ];\r\ +< \n :if (\$FileVal = false) do={ :return false; }\r\ +< \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ +< \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ +< \_true; }\r\ +< \n :return false;\r\ +--- +> \n:set FetchUserAgentStr do={\r\ +> \n :local Caller [ :tostr \$1 ];\r\ +> \n :global IfThenElse;\r\ +> \n :local Resource [ /system/resource/get ];\r\ +> \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ +> \_\$Resource->\"architecture-name\" . \\\r\ +> \n \" \" . \$Caller . \"/Fetch (https://amster.vados.ru/; main/3419/3ee\ +> 19780)\");\r\ +1604,1615d1619 +< \n:set CleanFilePath do={\r\ +< \n :local Path [ :tostr \$1 ];\r\ +< \n :global CharacterReplace;\r\ +< \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ +< \"//\" \"/\" ]; }\r\ +< \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ +< n \$Path ] ]; }\r\ +< \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ +< :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ +< \n :return \$Path;\r\ +< \n}\r\ +< \n\r\ +1630a1635,1640 +> \n:set GetRandomNumber do={\r\ +> \n :global EitherOr;\r\ +> \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ +> \r\ +> \n}\r\ +> \n\r\ +1670,1681d1679 +< \n:set ExitOnError do={\r\ +< \n :local Name [ :tostr \$1 ];\r\ +< \n :local Error [ :tostr \$2 ];\r\ +< \n :global IfThenElse;\r\ +< \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ +< \\\$\") \\\r\ +< \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ +< r\" . \\\r\ +< \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ +< rror) \".\" ]);\r\ +< \n}\r\ +< \n\r\ +1732,1734c1730 +< \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ +< \n :return false;\r\ +< \n }\r\ +--- +> \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={:return false}\r\ +1736,1737c1732 +< \n :do {\r\ +< \n :set FileVal [ /file/get \$FileName ];\r\ +--- +> \n :do {:set FileVal [ /file/get \$FileName ];\r\ +1745c1740,1741 +< \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ +--- +> \n :global LogPrint;\r\ +> \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ +1747,1762c1743,1749 +< \n :if (\$DirVal = false) do={\r\ +< \n :log debug (\$0 . \" ... which does not exist.\");\r\ +< \n :return true;\r\ +< \n };\r\ +< \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ +< \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ +< ory.\");\r\ +< \n :return false;\r\ +< \n };\r\ +< \n :onerror Err {\r\ +< \n /file/remove \$DirName;\r\ +< \n } do={\r\ +< \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ +< : \" . \$Err);\r\ +< \n :return false;\r\ +< \n };\r\ +--- +> \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ +> exist.\"); :return true};\r\ +> \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ +> Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ +> \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ +> ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ +> \r\ +1769c1756,1757 +< \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ +--- +> \n :global LogPrint;\r\ +> \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ +1771,1774c1759,1760 +< \n :if (\$FileVal = false) do={\r\ +< \n :log debug (\$0 . \" ... which does not exist.\");\r\ +< \n :return true;\r\ +< \n }\r\ +--- +> \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ +> \_exist.\"); :return true}\r\ +1777,1780c1763,1764 +< \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ +< \r\ +< \n :return false;\r\ +< \n }\r\ +--- +> \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ +> ); :return false}\r\ +1783,1786c1767,1768 +< \n } do={\r\ +< \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ +< \_. \$Err); :return false;\r\ +< \n }\r\ +--- +> \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ +> led: \" . \$Err); :return false}\r\ +1796c1778 +< \n\r\ +--- +> \n :global LogPrint;\r\ +1802c1784 +< \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ +--- +> \n \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ +1807c1789 +< \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ +--- +> \n \$LogPrint info \$0 (\"Creating disk of type tmpfs.\");\r\ +1814,1815c1796,1797 +< \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ +< Err);\r\ +--- +> \n \$LogPrint warning \$0 (\"Creating disk of type tmpfs failed: \" .\ +> \_\$Err);\r\ +1824c1806 +< \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ +--- +> \n \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ +1827c1809 +< \n :log debug (\$0 . \" ... which already exists.\");\r\ +--- +> \n \$LogPrint debug \$0 (\"... which already exists.\");\r\ +1839,1840c1821,1822 +< \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ +< \" . \$Err);\r\ +--- +> \n \$LogPrint warning \$0 (\"Making directory '\" . \$Path . \"' failed\ +> : \" . \$Err);\r\ +1878a1861,1872 +> \n:set CleanFilePath do={\r\ +> \n :local Path [ :tostr \$1 ];\r\ +> \n :global CharacterReplace;\r\ +> \n :while (\$Path ~ \"//\") do={:set \$Path [ \$CharacterReplace \$Path \ +> \"//\" \"/\" ]};\r\ +> \n :if ([ :pick \$Path 0 ] = \"/\") do={:set Path [ :pick \$Path 1 [ :len\ +> \_\$Path ] ]};\r\ +> \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={:set Path [ :\ +> pick \$Path 0 ([ :len \$Path ] - 1) ]};\r\ +> \n :return \$Path;\r\ +> \n}\r\ +> \n\r\ +1921a1916 +> \n :global LogPrint;\r\ +1925c1920,1921 +< \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ +--- +> \n \$LogPrint error \$0 (\"No valid RouterOS version: \" . \$Required);\ +> \r\ +1931,1932c1927,1928 +< \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ +< 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ +--- +> \n \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ +> er 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ +1940,1952d1935 +< \n\r\ +< \n:set ValidateSyntax do={\r\ +< \n :local Code [ :tostr \$1 ];\r\ +< \n :global LogPrint;\r\ +< \n :onerror Err {\r\ +< \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ +< \n } do={\r\ +< \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ +< \n :return false;\r\ +< \n }\r\ +< \n :return true;\r\ +< \n}\r\ +< \n\r\ +1984d1966 +< \n\r\ +1989a1972 +> \n :global LogPrint;\r\ +2056,2057c2039,2040 +< \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ +< ist!\");\r\ +--- +> \n \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ +> \_exist!\");\r\ +2066,2067c2049,2050 +< \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ +< t . \"', resetting!\");\r\ +--- +> \n \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ +> ript . \"', resetting!\");\r\ +2094d2076 +< \n\r\ +2101d2082 +< \n\r\ +2110d2090 +< \n\r\ +2113a2094 +> \n :global LogPrint;\r\ +2159,2160c2140,2141 +< \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ +< '!\");\r\ +--- +> \n \$LogPrint warning \$0 (\"No symbol available for name '\" . \$Name \ +> . \"'!\");\r\ +2166d2146 +< \n\r\ +2178d2157 +< \n\r\ +2200c2179,2189 +< \n\r\ +--- +> \n:set ValidateSyntax do={\r\ +> \n :local Code [ :tostr \$1 ];\r\ +> \n :global LogPrint;\r\ +> \n :onerror Err {\r\ +> \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ +> \n } do={\r\ +> \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ +> \n :return false;\r\ +> \n }\r\ +> \n :return true;\r\ +> \n}\r\ +2205d2193 +< \n\r\ +2213d2200 +< \n\r\ +2255,2343c2242,2249 +< \n# Description of parameters:\r\ +< \n# \$1 - script name for logging and user agent\r\ +< \n# \$2 - url to fetch from\r\ +< \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ +< \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ +< tps-only\", \"http-only\"\r\ +< \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ +< \_\"background-and-https-only\",\r\ +< \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ +< background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ +< and-http-only\",\r\ +< \n# \"background-and-keep-broken-and-no-redirects\")\r\ +< \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ +< \"post\", \"put\", \"patch\", \"delete\")\r\ +< \n#:set FetchLargeFiles do={\r\ +< \n# :local RunName [:tostr \$1];\r\ +< \n# :local fetchUrl [:tostr \$2];\r\ +< \n# :local fetchFile [:tostr \$3];\r\ +< \n# :local CheckCert [:tostr \$4];\r\ +< \n# :local fetchMode [:tostr \$5];\r\ +< \n# :local fetchMethod [:tostr \$6];\r\ +< \n# :local tmpName;\r\ +< \n# :global CleanName;\r\ +< \n# :global FetchUserAgentStr;\r\ +< \n# :global GetRandom20CharAlNum;\r\ +< \n# :global IfThenElse;\r\ +< \n# :global LogPrint;\r\ +< \n# :global MkDir;\r\ +< \n# :global RmDir;\r\ +< \n# :global RmFile;\r\ +< \n# :global WaitForFile;\r\ +< \n#\r\ +< \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ +< without-crl\" ];\r\ +< \n#\r\ +< \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ +< \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ +< \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ +< \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ +< e . \"!\");\r\ +< \n# :return false;\r\ +< \n# }\r\ +< \n#\r\ +< \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ +< -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ +< \n# :local Url (\$fetchUrl . \$fetchFile);\r\ +< \n# :onerror Err {\r\ +< \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ +< \_\\\r\ +< \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ +< e;\r\ +< \n# } do={\r\ +< \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ +< \n# \$RmFile \$FileName;\r\ +< \n# }\r\ +< \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ +< ' - \" . \$Err);\r\ +< \n# \$RmDir \$DirName;\r\ +< \n# :return false;\r\ +< \n# }\r\ +< \n#\r\ +< \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ +< \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ +< \"' did not show up.\");\r\ +< \n# :return false;\r\ +< \n# }\r\ +< \n# \r\ +< \n# :local FileSize [ /file/get \$FileName size ];\r\ +< \n# :local Return \"\";\r\ +< \n# :local VarSize 0;\r\ +< \n# :while (\$VarSize != \$FileSize) do={\r\ +< \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ +< 2768 file=\$FileName as-value ]->\"data\"));\r\ +< \n# :set FileSize [ /file/get \$FileName size ];\r\ +< \n# :set VarSize [ :len \$Return ];\r\ +< \n# :if (\$VarSize > \$FileSize) do={\r\ +< \n# :delay 100ms;\r\ +< \n# }\r\ +< \n# }\r\ +< \n## \$RmFile \$FileName;\r\ +< \n# \$RmDir \$DirName;\r\ +< \n# :return \$Return;\r\ +< \n#}\r\ +< \n\r\ +< \n:set FetchHugeFiles do={\r\ +< \n :local ScriptName [ :tostr \$1 ];\r\ +< \n :local Url [ :tostr \$2 ];\r\ +< \n :local CheckCert [ :tostr \$3 ];\r\ +< \n\r\ +--- +> \n:set FetchLargeFiles do={\r\ +> \n :local ScriptName [:tostr \$1];\r\ +> \n :local fetchUrl [:tostr \$2];\r\ +> \n :local CheckCert [:tostr \$3];\r\ +> \n :local fetchMode [:tostr \$4];\r\ +> \n :local fetchMethod [:tostr \$5];\r\ +> \n :local FetchString \"undefined\";\r\ +> \n \r\ +2356c2262,2266 +< \n\r\ +--- +> \n #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ +> ode=\" . \$fetchMode)] ];\r\ +> \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ +> \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\r\ +> \n \r\ +2362d2271 +< \n\r\ +2365,2367c2274,2284 +< \n :onerror Err {\r\ +< \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ +< \\\r\ +--- +> \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ +> ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ +> \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ +> \n :onerror Err {\r\ +> \n :set FetchString (\"/tool/fetch \" . \\\r\ +> \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ +> \_. \$fetchMethod . \"\\\" \")] . \\\r\ +> \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ +> \_. \"\\\") \" . \\\r\ +> \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ +> e . \" \")] . \\\r\ +2369c2286,2291 +< lue;\r\ +--- +> lue);\r\ +> \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ +> \n :put [\$FetchString];\r\ +> \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ +> fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ +> \_\$ScriptName ] }) as-value];\r\ +2374,2375c2296,2297 +< \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ +< \_. \$Err);\r\ +--- +> \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ +> \_- \" . \$Err);\r\ +2379d2300 +< \n\r\ +2381,2382c2302,2303 +< \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ +< \_not show up.\");\r\ +--- +> \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ +> \" did not show up.\");\r\ +2385d2305 +< \n\r\ +2402,2413d2321 +< \n:set FetchUserAgentStr do={\r\ +< \n :local Caller [ :tostr \$1 ];\r\ +< \n :global GlobalScriptsUrl;\r\ +< \n :global CommitBrief;\r\ +< \n :global IfThenElse;\r\ +< \n :local Resource [ /system/resource/get ];\r\ +< \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ +< \_\$Resource->\"architecture-name\" . \\\r\ +< \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ +< CommitBrief ] . \")\");\r\ +< \n}\r\ +< \n\r\ +2732,2734c2640,2641 +< \n} do={\r\ +< \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ +< \n} }\r\ +--- +> \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ +> \n}\r\ +2736,2746c2643,2653 +< \n# load modules\r\ +< \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ +< ns\\\\.d|mod)/.\" ] do={\r\ +< \n :local ScriptVal [ /system/script/get \$Script ];\r\ +< \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ +< \n :onerror Err {\r\ +< \n /system/script/run \$Script;\r\ +< \n } do={\r\ +< \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ +< ailed to run: \" . \$Err);\r\ +< \n }\r\ +--- +> \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ +> \n:set GlobalEnvRemove do={\r\ +> \n :local doRmEnv [ :tostr \$1 ];\r\ +> \n :global GlobalScriptsUrl;\r\ +> \n :local ScriptsUrl;\r\ +> \n :global LogPrint;\r\ +> \n :if (\$doRmEnv != \"True\") do={\r\ +> \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ +> rue\\\" for confirm to remove global environment variables!\");\r\ +> \n :return [];\r\ +> \n :error true; \r\ +2748,2749c2655,2663 +< \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ +< led syntax validation, skipping.\");\r\ +--- +> \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ +> \n :delay 5;\r\ +> \n :foreach var in=[/system/script/environment print as-value] do={/sy\ +> stem/script/environment remove (\$var->\".id\")}\r\ +> \n :delay 5;\r\ +> \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ +> \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ +> \n :return [];\r\ +> \n :error false;\r\ +2757c2671 +< \n:local Comment \"Every Day Set Global Environment Variables\";\r\ +--- +> \n:local Comment \"Setup Global Environment for scripts\";\r\ +2781a2696,2700 +> \n#:local Resource [ /system/resource/get ];\r\ +> \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ +> . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ +> \".\");\r\ +> \n\r\ +2786a2706,2708 +> \n# signal we are ready\r\ +> \n:set GlobalFuncReady true;\r\ +> \n:set ExitOK true;\r\ +2792,2794c2714 +< \n # signal we are ready\r\ +< \n:set GlobalFuncReady true;\r\ +< \n:set ExitOK true;\r\ +--- +> \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ +2796,2799c2716,2718 +< \n:log info (\$0 . \"Global configs ready!\");\r\ +< \n} do={\r\ +< \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ +< \n}\r\ +--- +> \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ +> \n# log the successful load of the script, or an error if it failed\r\ +> \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ +4399,4404c4318,4351 +< \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ +< e ] . \"/\");\r\ +< \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ +< \n :local ListsIndex \"index.lst\";\r\ +< \n :local AddrListsTimeOut 1d;\r\ +< \n :local CheckCerts false;\r\ +--- +> \n :local FwAddrListsUrl (\$GlobalScriptsUrl . \"fw-addr-lists.d/\");\r\ +> \n\r\ +> \n :local FwAddrLists {\r\ +> \n \"allow\"={\r\ +> \n { url=(\$FwAddrListsUrl . \"allow\");\r\ +> \n cert=\"ISRG Root X2\"; timeout=1w };\r\ +> \n };\r\ +> \n \"block\"={\r\ +> \n { url=(\$FwAddrListsUrl . \"block\");\r\ +> \n cert=\"ISRG Root X2\" };\r\ +> \n# { url=\"https://raw.githubusercontent.com/stamparm/ipsum/refs/hea\ +> ds/master/levels/4.txt\";\r\ +> \n# # higher level (decrease the numerical value) for more addresses, \ +> and vice versa\r\ +> \n# cert=\"ISRG Root X1\" };\r\ +> \n# { url=\"https://www.dshield.org/block.txt\"; cidr=\"/24\";\r\ +> \n# cert=\"GTS Root R4\" };\r\ +> \n# { url=\"https://lists.blocklist.de/lists/strongips.txt\";\r\ +> \n# cert=\"GTS Root R4\" };\r\ +> \n# { url=\"https://www.spamhaus.org/drop/drop_v4.json\";\r\ +> \n# cert=\"GTS Root R4\" };\r\ +> \n# { url=\"https://www.spamhaus.org/drop/drop_v6.json\";\r\ +> \n# cert=\"GTS Root R4\" };\r\ +> \n };\r\ +> \n# \"mikrotik\"={\r\ +> \n# { url=(\$FwAddrListsUrl . \"mikrotik\");\r\ +> \n# cert=\"ISRG Root X2\"; timeout=1w };\r\ +> \n# };\r\ +> \n \"FuckRKN\"={\r\ +> \n { url=(\$FwAddrListsUrl . \"FuckRKN\");\r\ +> \n cert=\"ISRG Root X2\"; timeout=1w };\r\ +> \n };\r\ +> \n };\r\ +> \n :local FwAddrListTimeOut 1d;\r\ +4408c4355 +< \n :global FetchHugeFiles;\r\ +--- +> \n :global FetchHuge;\r\ +4411a4359 +> \n\r\ +4432c4380 +< \n \r\ +--- +> \n \r\ +4438,4451c4386,4391 +< \n :local ListComment (\"managed by \" . \$ScriptName);\r\ +< \n :local Url (\$ListsUrl . \$ListsIndex);\r\ +< \n :local tmpIndex false;\r\ +< \n\r\ +< \n :for I from=1 to=5 do={\r\ +< \n :if (\$tmpIndex = false) do={\r\ +< \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ +< kCerts ] ];\r\ +< \n :if (\$tmpIndex = false && \$I < 5) do={\r\ +< \n :log warning (\$ScriptName . \" Failed downloading address-list \ +< index, \" . \$I . \". try from: \" . \$Url);\r\ +< \n :delay ((\$I * \$I) . \"s\");\r\ +< \n }\r\ +< \n }\r\ +--- +> \n :if ([ :len [ /log/find where topics=({\"script\"; \"warning\"}) \\\r\ +> \n message=(\"\\\$LogPrint: The message is already in log, scripting \ +> subsystem may have crashed before!\") ] ] > 0) do={\r\ +> \n :log warning (\$ScriptName . \" Scripting subsystem may have crashed\ +> , possibly caused by us. Delaying!\");\r\ +> \n :delay 5m;\r\ +4453,4463d4392 +< \n :if (\$tmpIndex = false) do={\r\ +< \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ +< x from: \" . \$Url);\r\ +< \n :set tmpIndex \"\";\r\ +< \n }\r\ +< \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ +< \n :local filebody [/file/get \$ReadFile contents];\r\ +< \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ +< ptions=dsv.plain] do={\r\ +< \n :log error \$fwList;\r\ +< \n}\r\ +4464a4394 +> \n :local ListComment (\"managed by \" . \$ScriptName);\r\ +4466,4482c4396 +< \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ +< options=dsv.plain ] do={\r\ +< \n :set List (\$List->0);\r\ +< \n :local ListName;\r\ +< \n :local Delim [ \$FindDelim \$List ];\r\ +< \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ +< \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ +< \_. \$List);\r\ +< \n :if ([ :len \$List ] = 0) do={\r\ +< \n :log error (\$ScriptName . \" Failed parsing address-list index en\ +< try: \" . \$List);\r\ +< \n } else={\r\ +< \n :set ListName [ :pick \$List 0 \$Delim ];\r\ +< \n }\r\ +< \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ +< \_. \$ListName . \" - Ok.\");\r\ +< \n :local ListUrl (\$ListsUrl . \$ListName);\r\ +--- +> \n :foreach FwListName,FwList in=\$FwAddrLists do={\r\ +4489,4490d4402 +< \n :local Data false;\r\ +< \n :local TimeOut \$AddrListTimeOut;\r\ +4492,4499c4404,4417 +< \n :for I from=1 to=5 do={\r\ +< \n :if (\$Data = false) do={\r\ +< \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ +< eckCerts ] ];\r\ +< \n :if (\$Data = false && \$I < 5) do={\r\ +< \n :log warning (\$ScriptName . \" Failed downloading for list '\ +< \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ +< \n :delay ((\$I * \$I) . \"s\");\r\ +--- +> \n :foreach List in=\$FwList do={\r\ +> \n :local CheckCertificate false;\r\ +> \n :local Data false;\r\ +> \n :local TimeOut [ \$EitherOr [ :totime (\$List->\"timeout\") ] \$Fw\ +> AddrListTimeOut ];\r\ +> \n\r\ +> \n :if ([ :len (\$List->\"cert\") ] > 0) do={\r\ +> \n :set CheckCertificate true;\r\ +> \n :if ([ \$CertificateAvailable (\$List->\"cert\") \"fetch\" ] = f\ +> alse) do={\r\ +> \n :log warning (\$ScriptName . \" Downloading required certifica\ +> te (\" . \$FwListName . \\\r\ +> \n \" / \" . \$List->\"url\" . \") failed, trying anyway.\");\ +> \r\ +4502d4419 +< \n }\r\ +4504,4513c4421,4434 +< \n :if (\$Data = false) do={\r\ +< \n :set Data \"\";\r\ +< \n :set Failure true;\r\ +< \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ +< \$ListName . \"' from: \" . \$ListUrl);\r\ +< \n } else={\r\ +< \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ +< \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ +< \$ListUrl);\r\ +< \n }\r\ +--- +> \n :for I from=1 to=5 do={\r\ +> \n :if (\$Data = false) do={\r\ +> \n :set Data [ :tolf [ \$FetchHuge \$ScriptName (\$List->\"url\")\ +> \_\$CheckCertificate ] ];\r\ +> \n :if (\$Data = false) do={\r\ +> \n :if (\$I < 5) do={\r\ +> \n :log debug (\$ScriptName . \" Failed downloading for list \ +> '\" . \$FwListName . \\\r\ +> \n \"', \" . \$I . \". try from: \" . \$List->\"url\");\r\ +> \n :delay ((\$I * \$I) . \"s\");\r\ +> \n }\r\ +> \n }\r\ +> \n }\r\ +> \n }\r\ +4515,4524c4436,4441 +< \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ +< tions=dsv.plain ] do={\r\ +< \n :set Line (\$Line->0);\r\ +< \n :local Address;\r\ +< \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ +< \_] - 1) ] = \"}\") do={\r\ +< \n :do {\r\ +< \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ +< dr\") ];\r\ +< \n } on-error={ }\r\ +--- +> \n :if (\$Data = false) do={\r\ +> \n :set Data \"\";\r\ +> \n :set Failure true;\r\ +> \n :log warning (\$ScriptName . \" Failed downloading for list '\" \ +> . \$FwListName . \\\r\ +> \n \"' from: \" . \$List->\"url\");\r\ +4525a4443,4459 +> \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ +> um [ :len \$Data ] 1024 ] . \\\r\ +> \n \"B for list '\" . \$FwListName . \"' from: \" . \$List->\"u\ +> rl\");\r\ +> \n }\r\ +> \n\r\ +> \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv \ +> options=dsv.plain ] do={\r\ +> \n :set Line (\$Line->0);\r\ +> \n :local Address;\r\ +> \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Li\ +> ne ] - 1) ] = \"}\") do={\r\ +> \n :do {\r\ +> \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"\ +> cidr\") ];\r\ +> \n } on-error={ }\r\ +> \n } else={\r\ +4528,4544d4461 +< \n }\r\ +< \n :do {\r\ +< \n :local Branch;\r\ +< \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ +< .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ +< \n :local Net \$Address;\r\ +< \n :local CIDR 32;\r\ +< \n :local Slash [ :find \$Address \"/\" ];\r\ +< \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ +< \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ +< \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ +< \_];\r\ +< \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ +< R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ +< \n }\r\ +< \n :set Branch [ \$GetBranch \$Address ];\r\ +< \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ +4546,4554c4463,4479 +< \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ +< \?\\\$\") do={\r\ +< \n :local Net \$Address;\r\ +< \n :local CIDR 128;\r\ +< \n :local Slash [ :find \$Address \"/\" ];\r\ +< \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ +< \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ +< \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ +< \_];\r\ +--- +> \n :do {\r\ +> \n :local Branch;\r\ +> \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\ +> \\.[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ +> \n :local Net \$Address;\r\ +> \n :local CIDR 32;\r\ +> \n :local Slash [ :find \$Address \"/\" ];\r\ +> \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ +> \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ +> \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ +> \_] ];\r\ +> \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$C\ +> IDR ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ +> \n }\r\ +> \n :set Branch [ \$GetBranch \$Address ];\r\ +> \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ +> \n :error true;\r\ +4556,4567c4481,4506 +< \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ +< \" . \$CIDR);\r\ +< \n :set Branch [ \$GetBranch \$Address ];\r\ +< \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ +< \n }\r\ +< \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ +< o={\r\ +< \n :set Branch [ \$GetBranch \$Address ];\r\ +< \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ +< \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ +< \n }\r\ +< \n } on-error={ }\r\ +--- +> \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3\ +> })\?\\\$\") do={\r\ +> \n :local Net \$Address;\r\ +> \n :local CIDR 128;\r\ +> \n :local Slash [ :find \$Address \"/\" ];\r\ +> \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ +> \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ +> \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address\ +> \_] ];\r\ +> \n }\r\ +> \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \ +> \"/\" . \$CIDR);\r\ +> \n :set Branch [ \$GetBranch \$Address ];\r\ +> \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ +> \n :error true;\r\ +> \n }\r\ +> \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\")\ +> \_do={\r\ +> \n :set Branch [ \$GetBranch \$Address ];\r\ +> \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ +> \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ +> \n :error true;\r\ +> \n }\r\ +> \n } on-error={:log error (\$ScriptName . \" Failed parsing address\ +> : \" . \$Line->0);}\r\ +> \n }\r\ +4569d4507 +< \n \r\ +4572c4510 +< \n list=\$ListName comment=\$ListComment ] do={\r\ +--- +> \n list=\$FwListName comment=\$ListComment ] do={\r\ +4578,4581c4516,4519 +< \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ +< ress . \\\r\ +< \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ +< \");\r\ +--- +> \n :log debug (\$ScriptName . \" Renewing IPv4 address \" . \$Addre\ +> ss . \\\r\ +> \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ +> .\");\r\ +4587,4589c4525,4527 +< \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ +< ddress . \\\r\ +< \n \" from list '\" . \$ListName . \".\");\r\ +--- +> \n :log debug (\$ScriptName . \" Removing IPv4 address \" . \$Add\ +> ress . \\\r\ +> \n \" from list '\" . \$FwListName . \".\");\r\ +4597c4535 +< \n list=\$ListName comment=\$ListComment ] do={\r\ +--- +> \n list=\$FwListName comment=\$ListComment ] do={\r\ +4603,4606c4541,4544 +< \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ +< ress . \\\r\ +< \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ +< \");\r\ +--- +> \n :log debug (\$ScriptName . \" Renewing IPv6 address \" . \$Addre\ +> ss . \\\r\ +> \n \" in list '\" . \$FwListName . \"' with \" . \$TimeOut . \"\ +> .\");\r\ +4612,4614c4550,4552 +< \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ +< ddress . \\\r\ +< \n \" from list '\" . \$ListName . \".\");\r\ +--- +> \n :log debug (\$ScriptName . \" Removing IPv6 address \" . \$Add\ +> ress . \\\r\ +> \n \" from list '\" . \$FwListName .\".\");\r\ +4622,4623c4560,4561 +< \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ +< );\r\ +--- +> \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ +> \r\ +4625,4628c4563,4566 +< \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ +< ss . \\\r\ +< \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ +< \");\r\ +--- +> \n :log debug (\$ScriptName . \" Adding IPv4 address \" . \$Address\ +> \_. \\\r\ +> \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ +> .\");\r\ +4630,4631c4568,4569 +< \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ +< mment \\\r\ +--- +> \n /ip/firewall/address-list/add list=\$FwListName comment=\$List\ +> Comment \\\r\ +4637c4575 +< \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ +--- +> \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ +4643,4644c4581,4582 +< \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ +< );\r\ +--- +> \n :log debug (\$ScriptName . \" Handling branch: \" . \$BranchName);\ +> \r\ +4646,4649c4584,4587 +< \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ +< ss . \\\r\ +< \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ +< \");\r\ +--- +> \n :log debug (\$ScriptName . \" Adding IPv6 address \" . \$Address\ +> \_. \\\r\ +> \n \" to list '\" . \$FwListName . \"' with \" . \$Timeout . \"\ +> .\");\r\ +4651,4652c4589,4590 +< \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ +< Comment \\\r\ +--- +> \n /ipv6/firewall/address-list/add list=\$FwListName comment=\$Li\ +> stComment \\\r\ +4658c4596 +< \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ +--- +> \n \" to list '\" . \$FwListName . \"': \" . \$Err);\r\ +4663c4601 +< \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ +--- +> \n :log info (\$ScriptName . \" list: \" . \$FwListName . \\\r\ +4814c4752 +< add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ +--- +> add comment="Setup Global Environment for scripts" name=AM-SetGlobalEnv \ -- 2.52.0