From dec1bed9a41d296deb8fec662f83faed0a6d86a3 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 26 Jun 2026 12:41:50 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 26 12:41:50. --- .../20260626/20260626124133-Binary.backup | Bin 0 -> 168412 bytes MikroGig/20260626/20260626124133-Config.rsc | 2703 +++++++++++++++++ .../20260626/20260626124133-Diff-Config.rsc | 21 + 3 files changed, 2724 insertions(+) create mode 100644 MikroGig/20260626/20260626124133-Binary.backup create mode 100644 MikroGig/20260626/20260626124133-Config.rsc create mode 100644 MikroGig/history/20260626/20260626124133-Diff-Config.rsc diff --git a/MikroGig/20260626/20260626124133-Binary.backup b/MikroGig/20260626/20260626124133-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..529fa2b6ba886b9e4abc8c0af4fbcf5dc7984dda GIT binary patch literal 168412 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
SO_4(gblg%FLG)3x<2 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∾SBMNsd5e9s$V408)Bj97Q2ix-P- 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 literal 0 HcmV?d00001 diff --git a/MikroGig/20260626/20260626124133-Config.rsc b/MikroGig/20260626/20260626124133-Config.rsc new file mode 100644 index 0000000..d76cf5d --- /dev/null +++ b/MikroGig/20260626/20260626124133-Config.rsc @@ -0,0 +1,2703 @@ +# 2026-06-26 11:41:36 by RouterOS 7.23.1 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add admin-mac=18:FD:74:6E:58:14 auto-mac=no name=Bridge-LAN port-cost-mode=\ + short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan2 ] country=belarus disabled=no mode=ap-bridge \ + name=wlan1 ssid=vados wps-mode=disabled +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan1 ] country=belarus disabled=no mode=ap-bridge \ + name=wlan2 ssid=vados5g wps-mode=disabled +/interface veth +add address=172.18.20.2/30 container-mac-address=00:00:00:00:00:00 dhcp=no \ + gateway=172.18.20.1 gateway6="" name=docker-awg-veth +/interface list +add name=WAN +add name=LAN +add exclude=LAN include=WAN name=Internet +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +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/700/f14f095d\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 22.06.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 comment="Download custom Certificates By Routers Identity " \ + dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=\ + mod/AM-Certs-By-Ident policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Certs-By-Ident\r\ + \n# Script comment: Download custom Certificates By Routers Identity \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# CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n:global tmpAddCerts true; \r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n:local UrlSuffix [/system/identity/get name];\r\ + \n:local UrlDir \"certs/\";\r\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\r\ + \n\r\ + \n:log error \$CertUrl;\r\ + \n\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n:global tmpAddCerts (a);\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n:global GlobalScriptsUrl;\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \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" +/certificate settings +set builtin-trust-store=fetch crl-store=system +/container +add file=usb1/tmp/awg-mikrotik-arm.tar hostname=amnezia interface=\ + docker-awg-veth layer-dir="" logging=yes mountlists=awg_conf name=\ + awg-mikrotik-arm root-dir=/usb1/docker/awg start-on-boot=yes +/container config +set registry-url=https://reg.vados.ru/v2 tmpdir=/tmp username=amster-dev +/container mounts +add dst=/etc/amnezia/amneziawg list=awg_conf src=/wg +/disk settings +set auto-media-interface=lo +/interface bridge port +add bridge=Bridge-LAN interface=ether1 +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip neighbor discovery-settings +set discover-interface-list=Internet +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface=Bridge-LAN list=WAN +add interface=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.86/24 interface=Bridge-LAN network=10.30.30.0 +add address=172.18.20.1/30 interface=docker-awg-veth network=172.18.20.0 +/ip dns +set servers=10.30.30.81 +/ip firewall mangle +# docker-awg-veth not ready +add action=change-mss chain=forward new-mss=1360 out-interface=\ + docker-awg-veth protocol=tcp tcp-flags=syn tcp-mss=1420-65535 +/ip firewall nat +# docker-awg-veth not ready +add action=masquerade chain=srcnat out-interface=docker-awg-veth +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add check-gateway=ping disabled=no distance=1 dst-address=0.0.0.0/0 gateway=\ + 10.30.30.81 routing-table=main scope=30 target-scope=10 +add distance=1 dst-address=0.0.0.0/0 gateway=172.18.20.2 routing-table=To-VPN +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=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=Bridge-LAN type=internal +add forced-ip=109.107.177.79 interface=*A type=external +add interface=lo type=internal +add interface=wlan2 type=internal +add interface=wlan1 type=internal +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Amsterdam +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=10.30.30.81 +add address=10.30.30.10 +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 +add address=time.google.com disabled=yes +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com diff --git a/MikroGig/history/20260626/20260626124133-Diff-Config.rsc b/MikroGig/history/20260626/20260626124133-Diff-Config.rsc new file mode 100644 index 0000000..7c32fc7 --- /dev/null +++ b/MikroGig/history/20260626/20260626124133-Diff-Config.rsc @@ -0,0 +1,21 @@ +12,13c12,13 +< set [ find default-name=wlan2 ] country=belarus disabled=no mode=ap-bridge \ +< name=wlan1 ssid=vados wps-mode=disabled +--- +> set [ find default-name=wlan1 ] country=belarus disabled=no mode=ap-bridge \ +> ssid=vados wps-mode=disabled +16,17c16,17 +< set [ find default-name=wlan1 ] country=belarus disabled=no mode=ap-bridge \ +< name=wlan2 ssid=vados5g wps-mode=disabled +--- +> set [ find default-name=wlan2 ] country=belarus disabled=no mode=ap-bridge \ +> ssid=vados5g wps-mode=disabled +2571,2574d2570 +< /container +< add file=usb1/tmp/awg-mikrotik-arm.tar hostname=amnezia interface=\ +< docker-awg-veth layer-dir="" logging=yes mountlists=awg_conf name=\ +< awg-mikrotik-arm root-dir=/usb1/docker/awg start-on-boot=yes +2576c2572 +< set registry-url=https://reg.vados.ru/v2 tmpdir=/tmp username=amster-dev +--- +> set registry-url=https://reg.vados.ru tmpdir=/tmp -- 2.52.0