From 95d581a9c4341d5a0a38efbe773105795d66c2e5 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 1 Jul 2026 02:40:35 +0300 Subject: [PATCH] Backup for MikroNUC created successfully at Jul 01 02:40:35. --- .../20260701/20260701024001-Binary.backup | Bin 0 -> 374447 bytes MikroNUC/20260701/20260701024001-Config.rsc | 5247 +++++++++++++++++ .../20260701/20260701024001-Diff-Config.rsc | 138 + 3 files changed, 5385 insertions(+) create mode 100644 MikroNUC/20260701/20260701024001-Binary.backup create mode 100644 MikroNUC/20260701/20260701024001-Config.rsc create mode 100644 MikroNUC/history/20260701/20260701024001-Diff-Config.rsc diff --git a/MikroNUC/20260701/20260701024001-Binary.backup b/MikroNUC/20260701/20260701024001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..d89cd8acd3a7a8e22d2334984c667973f9821050 GIT binary patch literal 374447 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

%j`8IBCP5Q^qoP` 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�Uf8D;<$hT6jMy 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⋘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

0A`oh7D4KwG;rF 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%0Ay(TVOish@jDu^amxW`$Th7UQbhKs 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

v-manMq$J_|m57Yn`A57?_bA$~|MA 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

@hH6x-DZ`#hu``rRl59*D=YH(aR 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 LTgQB+wp?DJY6FfV literal 0 HcmV?d00001 diff --git a/MikroNUC/20260701/20260701024001-Config.rsc b/MikroNUC/20260701/20260701024001-Config.rsc new file mode 100644 index 0000000..60287da --- /dev/null +++ b/MikroNUC/20260701/20260701024001-Config.rsc @@ -0,0 +1,5247 @@ +# 2026-07-01 02:40:20 by RouterOS 7.23.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=BridgeLAN +add name=awg-bridge +/interface ethernet +set [ find default-name=ether1 ] disable-running-check=no +/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 +/disk +add slot=ram tmpfs-max-size=100000000 type=tmpfs +/interface list +add include=dynamic,static name=LAN +add exclude=LAN name=WAN +add exclude=LAN include=WAN name=Internet +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroMIC +/iot wiliot servers +set *1 address=mqtt.us-east-2.prod.wiliot.cloud name="Wiliot US East" +/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 +/routing table +add disabled=no fib name=to-awg +/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 \"container\";\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 Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\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 UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \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\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 (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\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 };\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 :local Script \"mod/AM-Certs-By-Ident\";\r\ + \n \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/fetch \ + check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".\ + rsc\") output=user as-value ]->\"data\");\r\ + \n /system/script run \$Script;\r\ + \n :global tmpAddCerts;\r\ + \n :while ([ \$tmpAddCerts ] = true) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n :delay 1s;\r\ + \n :put \"Removing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\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 (a);\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 (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\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/729/f42d43ae\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 00:05:03 01.07.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 MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\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 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 :local mikro [ :tobool \$1 ];\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 :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\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: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={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\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="#\ + \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\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \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\";\ + \n#:local Script AM-GlobalConfig;\ + \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\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \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\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 warning (\$ScriptName . \" Downloaded \" . [ \$HumanReadableN\ + um [ :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" +add dont-require-permissions=no name=awg-env owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + container/envs/add list=awg-proxy-env key=AWG_LISTEN value=\":55055\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_REMOTE value=\"109.107.17\ + 7.79:55055\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_JC value=\"9\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_JMIN value=\"105\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_JMAX value=\"920\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_S1 value=\"90\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_S2 value=\"136\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_S3 value=\"45\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_S4 value=\"27\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_H1 value=\"472437748-4724\ + 38637\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_H2 value=\"707808381-7078\ + 09250\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_H3 value=\"1609078552-160\ + 9079495\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_H4 value=\"1012329484-101\ + 2329741\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_I1 value=\"\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_I2 value=\"\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_I3 value=\"\ + \"\ + \n/container/envs/add list=awg-proxy-env key=AWG_I4 value=\"\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_I5 value=\"\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_SERVER_PUB value=\"o5IgCl\ + 1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=\"\ + \n/container/envs/add list=awg-proxy-env key=AWG_CLIENT_PUB value=[/interf\ + ace/wireguard/get [find name=wg-awg-proxy] public-key]" +add dont-require-permissions=no name=awg-container-add owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + container/add file=sata1/tmp/awg-proxy-amd64.tar.gz interface=veth-awg-pro\ + xy envlist=awg-proxy-env \\\ + \n hostname=awg-proxy root-dir=sata1/awg-proxy logging=yes shm-size=4M \ + start-on-boot=yes\ + \n/container/start [find where tag~\"awg-proxy\"]" +add dont-require-permissions=yes name=awg2-webui owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":\ + put \"Download image, and save him to usb1/tmp\"\ + \n/tool/fetch url=\"https://ros.vados.ru/docker/awg2-webui-chr.tar\" dst-p\ + ath=sata1/tmp/awg2-webui.tar\ + \n\ + \n:put \"1. Create veth interface\"\ + \n/interface veth add name=veth-awg address=10.9.9.2/24 gateway=10.9.9.1\ + \n\ + \n:put \"2. Create bridge and add veth\"\ + \n/interface bridge add name=br-awg\ + \n/interface bridge port add bridge=br-awg interface=veth-awg\ + \n\ + \n:put \"3. Assign IP to bridge\"\ + \n/ip address add address=10.9.9.1/24 interface=br-awg\ + \n\ + \n:put \"4. NAT: masquerade container traffic\"\ + \n/ip firewall nat add chain=srcnat src-address=10.9.9.0/24 action=masquer\ + ade\ + \n\ + \n:put \"5. Port forward: UDP 443 \? container (AmneziaWG QUIC mimicry)\"\ + \n/ip firewall nat add chain=dstnat protocol=udp dst-port=443 action=dst-n\ + at to-addresses=10.9.9.2 to-ports=55055 in-interface=ether1\ + \n\ + \n:put \"6. Port forward: HTTPS 9443 \? container Web UI\"\ + \n/ip firewall nat add chain=dstnat protocol=tcp dst-port=9443 action=dst-\ + nat to-addresses=10.9.9.2 to-ports=443 in-interface=ether1\ + \n\ + \n:put \"Create environment list..\"\ + \n/container envs add list=awgui-env key=WEB_USER value=vados\ + \n/container envs add list=awgui-env key=WEB_PASS value=zoomzoomrulezz\ + \n/container envs add list=awgui-env key=SECRET_KEY value=RanDomSecret32Sy\ + mboLs2325272931q\ + \n/container envs add list=awgui-env key=AWG_ENDPOINT value=10.30.30.10:44\ + 3\ + \n\ + \n:put \"Load and start container...\"\ + \n/container add file=sata1/tmp/awg2-webui.tar interface=veth-awg hostname\ + =awg2-webui \\\ + \nroot-dir=sata1/awg2-webui layer-dir=sata1/docker/awg2-webu/ envlist=awgu\ + i-env start-on-boot=yes logging=yes shm-size=4M\ + \n\ + \n:put \"Start...\"\ + \n/container start 0\ + \n\ + \n:put \"Verify...\"\ + \n/container print\ + \n\ + \n:put \"Should show: status=running\"\ + \n\ + \n/log print where topics~\"container\"\ + \n\ + \n:put \"Should show: AWG started, nginx running\"\ + \n" +add dont-require-permissions=no name=awg-proxy-go-Client owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n:put \"[::::::::::::::: START :::::::::::::::]\"\ + \n:put \"\"\ + \n:put \"Add ram disk tmpfs\"\ + \n#/disk add type=tmpfs tmpfs-max-size=100M slot=ram\ + \n\ + \n:put \"veth and network:\"\ + \n /interface/bridge add name=docker port-cost-mode=short\ + \n /ip/address/add address=192.168.100.1/24 interface=docker\ + \n\ + \n /interface/veth add address=192.168.100.3/24 gateway=192.168.100.1 name\ + =awg-proxy-go-client\ + \n /interface/bridge/port add bridge=docker interface=awg-proxy-go-client\ + \n\ + \n:put \"add config-client.json\"\ + \n/file/add name=sata1/mounts/awg-proxy-go/config-client.json\ + \n/container/mounts/add src=sata1/mounts/awg-proxy-go/config-client.json d\ + st=/app/config.json list=awgcfg-client\ + \n\ + \n#:put \"Download image, and save him to sata1/tmp/awgproxy-0.0.1-0034-am\ + d64.tar.gz\"\ + \n#/tool/fetch url=\"https://ros.vados.ru/amneziawg/img/awgproxy-0.0.1-003\ + 4-amd64.tar.gz\" dst-#path=\"tmp/awgproxy-0.0.1-0034-amd64.tar.gz\"\ + \n\ + \n:put \"Add container\"\ + \n/container/add file=\"usb1/dst/awgproxy-0.0.1-0036-amd64.tar\" interface\ + =awg-proxy-go-client hostname=awg-proxy-go-client root-dir=sata1/awg-proxy\ + -client logging=yes start-on-boot=yes workdir=sata1/docker/ name=\"awg-pro\ + xy-go-client\" mountlists=awgcfg-client\ + \n\ + \n:put \"Start container\"\ + \n#/container/start awg-proxy-go-client\ + \n\ + \n:put \"Add user:\"\ + \n /user/add address=192.168.100.2 group=write name=awg-proxy-go password=\ + peskar55\ + \n\ + \n:put \"Add forwarding port web-ui\"\ + \n /ip firewall nat add action=dst-nat chain=dstnat dst-port=8089 in-inter\ + face=ether1 protocol=tcp to-addresses=192.168.100.3 to-port=8088\ + \n\ + \n:put \"Add native WireGuard-server wg-awg, add address.\"\ + \n /interface/wireguard/add name=wg-awg-client\ + \n /ip/address/add address=172.17.0.1/24 interface=wg-awg-client\ + \n\ + \n:put \"\"\ + \n:put \"[::::::::::::::: END :::::::::::::::]\"\ + \n" +add comment=awg2wg dont-require-permissions=no name=awg2wg-uninstall owner=\ + Manager policy=ftp,read,write,policy source="\r\ + \n :put \"Uninstalling AmneziaWG...\"\r\ + \n :log info \"Uninstalling AmneziaWG...\"\r\ + \n /ip/route/remove [find where comment=awg2wg-tunnel]\r\ + \n :do { /tool/netwatch/remove [find where comment=Monitor-AWG2WG] } on-e\ + rror={}\r\ + \n :do { /ip/route/remove [find where comment=Monitor-AWG2WG] } on-error=\ + {}\r\ + \n /container/stop [find where interface=veth-awg2wg]\r\ + \n :delay 7s\r\ + \n /interface/list/member/remove [find where interface=wg-awg2wg]\r\ + \n /container/remove [find where interface=veth-awg2wg]\r\ + \n /container/envs/remove [find where list=\"awg2wg-env\"]\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg2wg\"]\r\ + \n /ip/address/remove [find where address=\"172.20.0.1/30\"]\r\ + \n /interface/veth/remove [find where name=\"veth-awg2wg\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg2wg\"]\ + \r\ + \n /ip/address/remove [find where interface=\"wg-awg2wg\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg2wg\"]\r\ + \n :do { /file/remove [find where name~\"awg2wg.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"disk1/awg2wg\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n /system/script/remove [find where name=awg2wg-uninstall]\r\ + \n" +add dont-require-permissions=no name=amneziawg-mikrotik-c owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global imagesPath \"amneziawg/img/\";\ + \n:local Image \"awg-proxy-amd64-7.20-Docker.tar.gz\";\ + \n\ + \n:global DstDir \"sata1/dst/\";\ + \n\ + \n:local Url=(\$GlobalScriptsUrl . \$ImagesPath . \$Image);\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n" +add comment=Generator dont-require-permissions=no name=awg-VDSina owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="# ============================================================\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v2)\ + \n# 2026-06-30 22:08:12\ + \n# ============================================================\ + \n\ + \n# 0. Check prerequisites\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\ + \n :error \"Usage: /system/device-mode/update container=yes\"\ + \n}\ + \n\ + \n# Auto-detect storage\ + \n:global awgDisk \"disk1\"\ + \n{\ + \n :local usbFree 0\ + \n :do { :set usbFree [/disk/get [find where mount-point=\"usb1\"] free] \ + } on-error={}\ + \n :if (\$usbFree > 0) do={\ + \n :set awgDisk \"usb1\"\ + \n :put (\"Using USB: usb1 (\" . (\$usbFree / 1048576) . \" MB free)\")\ + \n } else={\ + \n :if ([:len [/disk/find where slot=\"usb1\"]] > 0) do={\ + \n :put \"USB found but not mounted. Format as ext4\?\"\ + \n :put \"Press 'y' to confirm:\"\ + \n :local key [/terminal/inkey timeout=30]\ + \n :if (\$key = 121 || \$key = 89) do={\ + \n /disk/format-drive usb1 file-system=ext4 label=usb1\ + \n :delay 3s\ + \n :do { :set usbFree [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\ + \n :if (\$usbFree > 0) do={\ + \n :set awgDisk \"usb1\"\ + \n } else={ :put \"Format failed, using disk1\" }\ + \n } else={ :put \"Using disk1\" }\ + \n } else={ :put \"No USB, using disk1\" }\ + \n }\ + \n}\ + \n\ + \n# 1. Uninstall script\ + \n/system/script/add name=awg-VDSina-uninstall comment=awg-VDSina source={\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n :local prevDNS \"\"\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg-VDSina-\ + env\" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n :local storageDisk \"disk1\"\ + \n :do { :set storageDisk [/container/envs/get [find where list=\"awg-VDS\ + ina-env\" key=\"AWG_STORAGE\"] value] } on-error={}\ + \n :local prevTmpdir \"\"\ + \n :if (\$storageDisk != \"disk1\") do={\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg-VD\ + Sina-env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n }\ + \n /ip/route/remove [find where comment=awg-VDSina-tunnel]\ + \n /ip/route/remove [find where comment=awg-VDSina-dns]\ + \n /container/stop [find where interface=veth-awg-VDSina]\ + \n :delay 7s\ + \n /container/remove [find where interface=veth-awg-VDSina]\ + \n /container/envs/remove [find where list=\"awg-VDSina-env\"]\ + \n :if (\$prevDNS != \"\") do={\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n }\ + \n :if (\$storageDisk != \"disk1\") do={\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n }\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg-VDSina\"]\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.75.208/30\"]\ + \n /ip/address/remove [find where address=\"172.19.75.209/30\"]\ + \n /interface/veth/remove [find where name=\"veth-awg-VDSina\"]\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg-VDSin\ + a\"]\ + \n /ip/address/remove [find where interface=\"wg-awg-VDSina\"]\ + \n /interface/wireguard/remove [find where name=\"wg-awg-VDSina\"]\ + \n :do { /file/remove [find where name~\"awg-VDSina.+tar\"] } on-error={}\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/awg-VDSina\")]\ + \_} on-error={}\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/ru_ranges_time\ + out.rsc\")] } on-error={}\ + \n :if (\$storageDisk != \"disk1\") do={\ + \n :do { /file/remove [find where name~(\$storageDisk . \"/pull\")] } o\ + n-error={}\ + \n }\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n /system/script/remove [find where name=awg-VDSina-uninstall]\ + \n}\ + \n\ + \n# 2. Network infrastructure\ + \n/interface/veth/add name=veth-awg-VDSina address=172.19.75.210/30 gatewa\ + y=172.19.75.209\ + \n/ip/address/add address=172.19.75.209/30 interface=veth-awg-VDSina\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.7\ + 5.208/30\ + \n\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \n/interface/wireguard/add name=wg-awg-VDSina private-key=\"4CHyNhbOs923/E\ + yNDguMXJXdghL2I3UyzXPwrANVgHs=\" listen-port=14710 disabled=yes\ + \n/interface/wireguard/peers/add interface=wg-awg-VDSina public-key=\"o5Ig\ + Cl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=\" preshared-key=\"RNvF7T1cg5tyXcY\ + QnD9N5BEp6e20vVJQTv0GMjyvHU0=\" endpoint-address=172.19.75.210 endpoint-po\ + rt=51820 allowed-address=0.0.0.0/0 persistent-keepalive=10\ + \n/ip/address/add address=10.9.0.3/32 interface=wg-awg-VDSina\ + \n\ + \n# 4. Container environment variables\ + \n/container/envs/add list=awg-VDSina-env key=AWG_LISTEN value=\":51820\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_REMOTE value=\"109.107.1\ + 77.79:55055\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JC value=\"9\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JMIN value=\"105\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JMAX value=\"920\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S1 value=\"90\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S2 value=\"136\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H1 value=\"472437748-472\ + 438637\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H2 value=\"707808381-707\ + 809250\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H3 value=\"1609078552-16\ + 09079495\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H4 value=\"1012329484-10\ + 12329741\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_SERVER_PUB value=\"o5IgC\ + l1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_CLIENT_PUB value=[/inter\ + face/wireguard/get [find name=wg-awg-VDSina] public-key]\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S3 value=\"45\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S4 value=\"27\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I1 value=\"\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I2 value=\"\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I3 value=\"\ + \"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I4 value=\"\"\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I5 value=\"\"\ + \n\ + \n# 5. DNS\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g-VDSina-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\ + \n# NOTE: replaces existing DNS configuration\ + \n/ip/dns/set servers=109.107.177.79\ + \n/ip/route/add dst-address=109.107.177.79/32 gateway=wg-awg-VDSina distan\ + ce=1 comment=awg-VDSina-dns\ + \n\ + \n# 6. Download, create and start container\ + \n/container/envs/add list=awg-VDSina-env key=AWG_STORAGE value=\$awgDisk\ + \n:if (\$awgDisk != \"disk1\") do={\ + \n :local tmpPath (\$awgDisk . \"/pull\")\ + \n /container/envs/add list=awg-VDSina-env key=AWG_PREV_TMPDIR value=[/co\ + ntainer/config/get tmpdir]\ + \n /container/config set tmpdir=\$tmpPath memory-high=200M\ + \n}\ + \n{\ + \n :local arch [/system/resource/get architecture-name]\ + \n :local ver [/system/resource/get version]\ + \n :local dotPos [:find \$ver \".\"]\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\ + \n :local endPos [:find \$rest \".\"]\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\ + \n :local suffix \"\"\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\ + \n :local file \"\"\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\ + \n :if (\$arch = \"arm\") do={ :set file (\"awg-proxy-arm\" . \$suffix . \ + \".tar.gz\") }\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\ + \n :local filePath \$file\ + \n :if (\$awgDisk != \"disk1\") do={\ + \n :set filePath (\$awgDisk . \"/pull/\" . \$file)\ + \n :do { /file/make-directory (\$awgDisk . \"/pull\") } on-error={}\ + \n }\ + \n :if ([:len [/file/find where name=\$filePath]] = 0) do={\ + \n :local freeStorage 0\ + \n :if (\$awgDisk = \"disk1\") do={\ + \n :set freeStorage [/system/resource/get free-hdd-space]\ + \n } else={\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\$awgDis\ + k] free] } on-error={}\ + \n }\ + \n :if (\$freeStorage < 262144) do={\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\ + \n :error \"Insufficient disk space\"\ + \n }\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \n } else={\ + \n :put (\"File already exists: \" . \$filePath)\ + \n }\ + \n :local rootDir (\$awgDisk . \"/awg-VDSina\")\ + \n /container/add file=\$filePath interface=veth-awg-VDSina envlist=awg-V\ + DSina-env hostname=awg-VDSina root-dir=\$rootDir logging=no start-on-boot=\ + yes comment=awg-VDSina\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg-VDSina] shm-size=4M\"] }\ + \n /file/remove \$filePath\ + \n :local freeMem [/system/resource/get free-memory]\ + \n :if (\$freeMem < 16777216) do={\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\ + \n }\ + \n /container/start [find where interface=veth-awg-VDSina]\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\ + \n :put \"Waiting for container to start...\"\ + \n :delay 5s\ + \n /interface/wireguard/enable wg-awg-VDSina\ + \n :put \"WireGuard interface enabled\"\ + \n :put \"Installation complete!\"\ + \n :put \"Ping test: 109.107.177.79 via AmneziaWG tunnel. repeat 10 times\ + \"\ + \n /ping 109.107.177.79 count=10 interval=1\ + \n :put \"\"\ + \n :put \"======= NEXT STEPS =======\"\ + \n :put \"\"\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\ + \n :put \"\"\ + \n :put \" Route a single host:\"\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg-VDSina \ + comment=awg-VDSina-tunnel\"\ + \n :put \"\"\ + \n :put \" Route a subnet:\"\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg-VDSina\ + \_comment=awg-VDSina-tunnel\"\ + \n :put \"\"\ + \n :put \" Remove a route:\"\ + \n :put \" /ip/route/remove [find where comment=awg-VDSina-tunnel dst-\ + address=8.8.8.8/32]\"\ + \n :put \"\"\ + \n :put \" Show all tunnel routes:\"\ + \n :put \" /ip/route/print where comment=awg-VDSina-tunnel\"\ + \n :put \"\"\ + \n :put \" Uninstall:\"\ + \n :put \" /system/script/run awg-VDSina-uninstall\"\ + \n :put \"=========================\"\ + \n}\ + \n\ + \n# 7. Verification\ + \n# /container/print\ + \n# /interface/wireguard/print\ + \n# /interface/wireguard/peers/print\ + \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" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/app +set cinny firewall-redirects=8094:80:tcp:web +set goaway container-command-lines=goaway:none:docker.io/pommee/goaway:latest +set home-assistant container-command-lines=\ + home-assistant:none:lscr.io/linuxserver/homeassistant +set n8n firewall-redirects=5678:5678:tcp:web +set nextcloud container-command-lines="db:none:docker.io/postgres:17,redis:non\ + e:docker.io/valkey/valkey:/bin/sh -c 'valkey-server --port 6379 --appendon\ + ly yes --requirepass \$VALKEY_PASSWORD',server:none:docker.io/nextcloud:ap\ + ache" +set pihole environment="pihole:FTLCONF_dns_listeningMode=all,pihole:FTLCONF_we\ + bserver_api_password=password" +set redlib firewall-redirects=8087:8080:tcp:web +set solr container-command-lines=solr:none:docker.io/solr:latest +set uptime-kuma container-command-lines=\ + uptime-kuma:none:docker.io/louislam/uptime-kuma:1 +/app settings +set auto-update=yes disk=*7 lan-bridge=*3 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 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 +/caps-man datapath +add bridge=*3 client-to-client-forwarding=yes local-forwarding=yes name=\ + xs-DataPath +add bridge=*3 client-to-client-forwarding=yes local-forwarding=yes name=\ + DataPath +/caps-man manager +set ca-certificate=CAPsMAN-CA-51B25E507D07 certificate=CAPsMAN-51B25E507D07 \ + enabled=yes require-peer-certificate=yes +/caps-man manager interface +set [ find default=yes ] forbid=yes +add disabled=no interface=*100 +/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 crl-store=system +/container config +set layer-dir=/sata1/docker/layers memory-high=200.0MiB memory-max=4096.0MiB \ + registry-url=https://registry-1.docker.io tmpdir=/sata1/tmp username=\ + amsternl +/ip smb +set enabled=no +/interface bridge port +add bridge=BridgeLAN interface=LAN +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=all internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface=ether1 list=WAN +/interface wifi cap +set discovery-interfaces=*DF +/interface wifi capsman +set package-path=/tmpfs/capsman-packages upgrade-policy=none +/ip address +add address=10.30.30.10/24 interface=BridgeLAN network=10.30.30.0 +/ip dhcp-client +add disabled=yes interface=ether1 name=client1 +/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=*3 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.33,109.107.177.79 \ + verify-doh-cert=yes +/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 check-gateway=none disabled=no distance=1 dst-address=0.0.0.0/0 gateway=\ + 10.30.30.81 routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh port=2222 +set www-ssl port=4443 +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-secure=no scep-plain=no webfig-plain=no \ + webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=*3 type=external +add interface=*B5 type=internal +/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 +/special-login +add port=serial0 +/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" disabled=yes 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" disabled=yes 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" disabled=yes 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" disabled=yes 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." \ + disabled=yes 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-06-25 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\";" +add comment=Monitor-AWG2WG down-script=\ + "/ip route disable [find comment=\"Route-AWG2WG\"]" host=9.9.9.9 \ + interval=10s packet-count=5 thr-avg=0ms thr-loss-count=4 timeout=5s type=\ + icmp up-script="/ip route enable [find comment=\"Route-AWG2WG\"]" +/user aaa +set accounting=no diff --git a/MikroNUC/history/20260701/20260701024001-Diff-Config.rsc b/MikroNUC/history/20260701/20260701024001-Diff-Config.rsc new file mode 100644 index 0000000..02f7392 --- /dev/null +++ b/MikroNUC/history/20260701/20260701024001-Diff-Config.rsc @@ -0,0 +1,138 @@ +24,25c24 +< add name=BridgeLAN +< add name=awg-bridge +--- +> add name=Bridge-LAN +27a27,32 +> /interface veth +> add address=172.19.75.210/30 container-mac-address=14:F1:95:5C:74:EC dhcp=no \ +> gateway=172.19.75.209 gateway6="" mac-address=14:F1:95:5C:74:EB name=\ +> veth-awg-VDSina +> /interface wireguard +> add listen-port=14710 mtu=1420 name=wg-awg-VDSina +32a38,42 +> /container +> add comment=awg-VDSina envlists=awg-VDSina-env file=awg-proxy-amd64.tar.gz \ +> hostname=awg-VDSina interface=veth-awg-VDSina layer-dir=\ +> /sata1/docker/layers name=awg-proxy-amd64 root-dir=/disk1/awg-VDSina \ +> shm-size=4096.0KiB start-on-boot=yes +5048a5059,5109 +> add comment=awg-VDSina dont-require-permissions=no name=awg-VDSina-uninstall \ +> owner=vados policy=\ +> ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ +> \n :put \"Uninstallimg AmneziaWG...\"\ +> \n :log info \"Uninstallimg AmneziaWG...\"\ +> \n :local prevDNS \"\"\ +> \n :do { :set prevDNS [/container/envs/get [find where list=\"awg-VDSina-\ +> env\" key=\"AWG_PREV_DNS\"] value] } on-error={}\ +> \n :local storageDisk \"disk1\"\ +> \n :do { :set storageDisk [/container/envs/get [find where list=\"awg-VDS\ +> ina-env\" key=\"AWG_STORAGE\"] value] } on-error={}\ +> \n :local prevTmpdir \"\"\ +> \n :if (\$storageDisk != \"disk1\") do={\ +> \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg-VD\ +> Sina-env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ +> \n }\ +> \n /ip/route/remove [find where comment=awg-VDSina-tunnel]\ +> \n /ip/route/remove [find where comment=awg-VDSina-dns]\ +> \n /container/stop [find where interface=veth-awg-VDSina]\ +> \n :delay 7s\ +> \n /container/remove [find where interface=veth-awg-VDSina]\ +> \n /container/envs/remove [find where list=\"awg-VDSina-env\"]\ +> \n :if (\$prevDNS != \"\") do={\ +> \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ +> \n :put (\"DNS restored to: \$prevDNS\")\ +> \n }\ +> \n :if (\$storageDisk != \"disk1\") do={\ +> \n /container/config set tmpdir=\$prevTmpdir\ +> \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ +> \n }\ +> \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg-VDSina\"]\ +> \n /ip/firewall/nat/remove [find where src-address=\"172.19.75.208/30\"]\ +> \n /ip/address/remove [find where address=\"172.19.75.209/30\"]\ +> \n /interface/veth/remove [find where name=\"veth-awg-VDSina\"]\ +> \n /interface/wireguard/peers/remove [find where interface=\"wg-awg-VDSin\ +> a\"]\ +> \n /ip/address/remove [find where interface=\"wg-awg-VDSina\"]\ +> \n /interface/wireguard/remove [find where name=\"wg-awg-VDSina\"]\ +> \n :do { /file/remove [find where name~\"awg-VDSina.+tar\"] } on-error={}\ +> \n :do { /file/remove [find where name=(\$storageDisk . \"/awg-VDSina\")]\ +> \_} on-error={}\ +> \n :do { /file/remove [find where name=(\$storageDisk . \"/ru_ranges_time\ +> out.rsc\")] } on-error={}\ +> \n :if (\$storageDisk != \"disk1\") do={\ +> \n :do { /file/remove [find where name~(\$storageDisk . \"/pull\")] } o\ +> n-error={}\ +> \n }\ +> \n :put \"Uninstall AmneziaWG Proxy complete!\"\ +> \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ +> \n /system/script/remove [find where name=awg-VDSina-uninstall]\ +> \n" +5108c5169 +< add disabled=no interface=*100 +--- +> add disabled=no interface=Bridge-LAN +5123a5185,5210 +> /container envs +> add key=AWG_CLIENT_PUB list=awg-VDSina-env value=\ +> "NAonhRSuFIrFpNKTs5X32ItcvFuO1kiJUigQZb95YlE=" +> add key=AWG_H1 list=awg-VDSina-env value=472437748-472438637 +> add key=AWG_H2 list=awg-VDSina-env value=707808381-707809250 +> add key=AWG_H3 list=awg-VDSina-env value=1609078552-1609079495 +> add key=AWG_H4 list=awg-VDSina-env value=1012329484-1012329741 +> add key=AWG_I1 list=awg-VDSina-env value=\ +> "" +> add key=AWG_I2 list=awg-VDSina-env value="" +> add key=AWG_I3 list=awg-VDSina-env value="" +> add key=AWG_I4 list=awg-VDSina-env value="" +> add key=AWG_I5 list=awg-VDSina-env value="" +> add key=AWG_JC list=awg-VDSina-env value=9 +> add key=AWG_JMAX list=awg-VDSina-env value=920 +> add key=AWG_JMIN list=awg-VDSina-env value=105 +> add key=AWG_LISTEN list=awg-VDSina-env value=:51820 +> add key=AWG_PREV_DNS list=awg-VDSina-env value=10.30.30.33,109.107.177.79 +> add key=AWG_REMOTE list=awg-VDSina-env value=109.107.177.79:55055 +> add key=AWG_S1 list=awg-VDSina-env value=90 +> add key=AWG_S2 list=awg-VDSina-env value=136 +> add key=AWG_S3 list=awg-VDSina-env value=45 +> add key=AWG_S4 list=awg-VDSina-env value=27 +> add key=AWG_SERVER_PUB list=awg-VDSina-env value=\ +> "o5IgCl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=" +> add key=AWG_STORAGE list=awg-VDSina-env value=disk1 +5127c5214,5225 +< add bridge=BridgeLAN interface=LAN +--- +> add bridge=Bridge-LAN interface=ether1 +> add bridge=Bridge-LAN interface=*104 +> add bridge=Bridge-LAN interface=*103 +> add bridge=Bridge-LAN interface=5G-MikroGig-1 +> add bridge=*107 interface=*108 +> add bridge=*109 interface=*10A +> add bridge=*10C interface=*10D +> add bridge=*10E interface=*10F +> add bridge=*110 interface=*111 +> add bridge=*112 interface=*113 +> add bridge=*114 interface=*115 +> add bridge=*116 interface=*117 +5138a5237,5240 +> /interface wireguard peers +> add allowed-address=0.0.0.0/0 endpoint-address=172.19.75.210 endpoint-port=\ +> 51820 interface=wg-awg-VDSina name=peer3 persistent-keepalive=10s \ +> public-key="o5IgCl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=" +5140c5242,5245 +< add address=10.30.30.10/24 interface=BridgeLAN network=10.30.30.0 +--- +> add address=10.30.30.10/24 interface=ether1 network=10.30.30.0 +> add address=10.9.0.3/24 interface=veth-awg-VDSina network=10.9.0.0 +> add address=172.19.75.209/30 interface=veth-awg-VDSina network=172.19.75.208 +> add address=10.9.0.3/24 interface=wg-awg-VDSina network=10.9.0.0 +5149,5150c5254,5256 +< doh-max-server-connections=20 servers=10.30.30.33,109.107.177.79 \ +< verify-doh-cert=yes +--- +> doh-max-server-connections=20 servers=109.107.177.79 verify-doh-cert=yes +> /ip firewall nat +> add action=masquerade chain=srcnat src-address=172.19.75.208/30 +5159a5266,5267 +> add comment=awg-VDSina-dns distance=1 dst-address=109.107.177.79/32 gateway=\ +> wg-awg-VDSina -- 2.52.0