From 04d09496062736f374e5fc086fdf95faa29890a7 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 26 Jun 2026 16:02:07 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 26 16:02:07. --- .../20260626/20260626160150-Binary.backup | Bin 0 -> 168401 bytes MikroGig/20260626/20260626160150-Config.rsc | 2704 +++++++++++++++++ .../20260626/20260626160150-Diff-Config.rsc | 15 + 3 files changed, 2719 insertions(+) create mode 100644 MikroGig/20260626/20260626160150-Binary.backup create mode 100644 MikroGig/20260626/20260626160150-Config.rsc create mode 100644 MikroGig/history/20260626/20260626160150-Diff-Config.rsc diff --git a/MikroGig/20260626/20260626160150-Binary.backup b/MikroGig/20260626/20260626160150-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..51abc2ebb3bb1f30da91fd9d1ce6711bcddadefa GIT binary patch literal 168401 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 literal 0 HcmV?d00001 diff --git a/MikroGig/20260626/20260626160150-Config.rsc b/MikroGig/20260626/20260626160150-Config.rsc new file mode 100644 index 0000000..3c797f5 --- /dev/null +++ b/MikroGig/20260626/20260626160150-Config.rsc @@ -0,0 +1,2704 @@ +# 2026-06-26 15:01:53 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 memory-high=2048.0KiB registry-url=reg.vados.ru 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/20260626160150-Diff-Config.rsc b/MikroGig/history/20260626/20260626160150-Diff-Config.rsc new file mode 100644 index 0000000..0923818 --- /dev/null +++ b/MikroGig/history/20260626/20260626160150-Diff-Config.rsc @@ -0,0 +1,15 @@ +2572,2574c2572,2575 +< 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 +--- +> # download/extract error: check registry failed: SSL: ssl: no trusted CA certificate found (6) +> add hostname=amnezia interface=docker-awg-veth layer-dir="" logging=yes \ +> mountlists=awg_conf name=awg-mikrotik-arm:latest remote-image=\ +> awg-mikrotik-arm:latest root-dir=/usb1/docker/awg start-on-boot=yes +2576,2577c2577,2578 +< set memory-high=2048.0KiB registry-url=reg.vados.ru tmpdir=/tmp username=\ +< amster-dev +--- +> set memory-high=2048.0KiB registry-url=https://reg.vados.ru:5000/v2/ tmpdir=\ +> /tmp username=amster-dev -- 2.52.0