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