From 4ca8f1bdde6330f5b63ce57351b017e2a003ce9c Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 28 Jun 2026 07:21:22 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 28 07:21:22. --- .../20260628/20260628072115-Binary.backup | Bin 0 -> 165946 bytes MikroGig/20260628/20260628072115-Config.rsc | 2688 +++++++++++++++++ .../20260628/20260628072115-Diff-Config.rsc | 23 + 3 files changed, 2711 insertions(+) create mode 100644 MikroGig/20260628/20260628072115-Binary.backup create mode 100644 MikroGig/20260628/20260628072115-Config.rsc create mode 100644 MikroGig/history/20260628/20260628072115-Diff-Config.rsc diff --git a/MikroGig/20260628/20260628072115-Binary.backup b/MikroGig/20260628/20260628072115-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..ccb3b425b25452aa148d60bffd55f978a75c5532 GIT binary patch literal 165946 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 Wyychc$DSihFu*{VU6OW^K?-_QxOt!e literal 0 HcmV?d00001 diff --git a/MikroGig/20260628/20260628072115-Config.rsc b/MikroGig/20260628/20260628072115-Config.rsc new file mode 100644 index 0000000..1daaa1a --- /dev/null +++ b/MikroGig/20260628/20260628072115-Config.rsc @@ -0,0 +1,2688 @@ +# 2026-06-28 06:21:17 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 +set [ find default-name=wlan2 ] country=belarus mode=ap-bridge name=wlan1 \ + ssid=vados wps-mode=disabled +# managed by CAPsMAN +set [ find default-name=wlan1 ] country=belarus mode=ap-bridge name=wlan2 \ + ssid=vados5g wps-mode=disabled +/interface ethernet +set [ find default-name=ether1 ] mac-address=48:8F:5A:8E:1A:BC +/interface list +add name=WAN +add name=LAN +add exclude=LAN include=WAN name=Internet +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/routing table +add disabled=no fib name=r_to_vpn +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n\r\ + \n :local UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\r\ + \n };\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :local Script \"mod/AM-Certs-By-Ident\";\r\ + \n \r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetch \ + check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".\ + rsc\") output=user as-value ]->\"data\");\r\ + \n /system/script run \$Script;\r\ + \n :global tmpAddCerts;\r\ + \n :while ([ \$tmpAddCerts ] = true) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n :delay 1s;\r\ + \n :put \"Removing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/700/f14f095d\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 22.06.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="Download custom Certificates By Routers Identity " \ + dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=\ + mod/AM-Certs-By-Ident policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Certs-By-Ident\r\ + \n# Script comment: Download custom Certificates By Routers Identity \r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n#:local ScriptName [ :jobname ];\r\ + \n#\r\ + \n# CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n:global tmpAddCerts true; \r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n:local UrlSuffix [/system/identity/get name];\r\ + \n:local UrlDir \"certs/\";\r\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\r\ + \n\r\ + \n:log error \$CertUrl;\r\ + \n\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n:global tmpAddCerts (a);\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n:global GlobalScriptsUrl;\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/container config +set layer-dir=/usb1/docker memory-high=2048.0KiB memory-max=2048.0KiB \ + registry-url=https://registry-1.docker.io tmpdir=/tmp username=amsternl +/container mounts +add dst=/etc/amnezia/amneziawg list=awg0.conf src=/usb1/wg +/disk settings +set auto-media-interface=lo +/interface bridge port +add bridge=Bridge-LAN interface=ether1 +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip neighbor discovery-settings +set discover-interface-list=Internet +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface detect-internet +set detect-interface-list=static internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface=*B 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 +add interface=ether1 list=Internet +add interface=Bridge-LAN 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=ether1 network=10.30.30.0 +/ip dns +set allow-remote-requests=yes servers=10.30.30.33,109.107.177.79 +/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=2 dst-address=0.0.0.0/0 gateway=\ + ether1 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/20260628/20260628072115-Diff-Config.rsc b/MikroGig/history/20260628/20260628072115-Diff-Config.rsc new file mode 100644 index 0000000..78aa3b6 --- /dev/null +++ b/MikroGig/history/20260628/20260628072115-Diff-Config.rsc @@ -0,0 +1,23 @@ +17a18,21 +> /interface veth +> add address=10.9.0.2/24 container-mac-address=38:50:4E:7F:CE:A1 dhcp=no \ +> gateway=10.9.0.1 gateway6="" mac-address=38:50:4E:7F:CE:A0 name=\ +> docker-awg-veth +2590c2594 +< add interface=*B list=WAN +--- +> add interface=docker-awg-veth list=WAN +2606a2611 +> add address=10.9.0.2 interface=docker-awg-veth network=10.9.0.0 +2608a2614,2621 +> /ip firewall mangle +> # docker-awg-veth not ready +> add action=change-mss chain=forward new-mss=1360 out-interface=\ +> docker-awg-veth protocol=tcp tcp-flags=syn tcp-mss=1420-65535 +> /ip firewall nat +> # docker-awg-veth not ready +> add action=masquerade chain=srcnat out-interface=docker-awg-veth \ +> routing-mark=r_to_vpn +2630a2644,2645 +> add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=docker-awg-veth \ +> routing-table=r_to_vpn scope=30 target-scope=10 -- 2.52.0