From d221eebe01ebc24e90deb03a53b97047983d852d Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 26 Jun 2026 06:41:50 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 26 06:41:50. --- .../20260626/20260626064146-Binary.backup | Bin 0 -> 165338 bytes MikroGig/20260626/20260626064146-Config.rsc | 2689 +++++++++++++++++ .../20260626/20260626064146-Diff-Config.rsc | 14 + 3 files changed, 2703 insertions(+) create mode 100644 MikroGig/20260626/20260626064146-Binary.backup create mode 100644 MikroGig/20260626/20260626064146-Config.rsc create mode 100644 MikroGig/history/20260626/20260626064146-Diff-Config.rsc diff --git a/MikroGig/20260626/20260626064146-Binary.backup b/MikroGig/20260626/20260626064146-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..e72e2d683f28b3c18ca6fffb1741107741c60d37 GIT binary patch literal 165338 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

ThAYpnf}cK*zzAe+Nba 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≷AK1rWWCwvxGO=Mu=rhKszO!$FkIfJm#=a+6-WM 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 w7Wt-+`P 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 literal 0 HcmV?d00001 diff --git a/MikroGig/20260626/20260626064146-Config.rsc b/MikroGig/20260626/20260626064146-Config.rsc new file mode 100644 index 0000000..309764b --- /dev/null +++ b/MikroGig/20260626/20260626064146-Config.rsc @@ -0,0 +1,2689 @@ +# 2026-06-26 05:41:46 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=wlan1 ] country=belarus disabled=no mode=ap-bridge \ + ssid=vados wps-mode=disabled +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] country=belarus disabled=no mode=ap-bridge \ + 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 +/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 +/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 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 +/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/20260626064146-Diff-Config.rsc b/MikroGig/history/20260626/20260626064146-Diff-Config.rsc new file mode 100644 index 0000000..0a3f732 --- /dev/null +++ b/MikroGig/history/20260626/20260626064146-Diff-Config.rsc @@ -0,0 +1,14 @@ +18,20d17 +< /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 +2569,2570d2565 +< /disk settings +< set auto-media-interface=lo +2603d2597 +< add address=172.18.20.1/30 interface=docker-awg-veth network=172.18.20.0 +2606,2609d2599 +< /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 -- 2.52.0