From 6f0d49f3ba23a08604efdede2f654e766e43acce Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 28 Jun 2026 08:01:22 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 28 08:01:22. --- .../20260628/20260628080114-Binary.backup | Bin 0 -> 169683 bytes MikroGig/20260628/20260628080114-Config.rsc | 2762 +++++++++++++++++ .../20260628/20260628080114-Diff-Config.rsc | 10 + 3 files changed, 2772 insertions(+) create mode 100644 MikroGig/20260628/20260628080114-Binary.backup create mode 100644 MikroGig/20260628/20260628080114-Config.rsc create mode 100644 MikroGig/history/20260628/20260628080114-Diff-Config.rsc diff --git a/MikroGig/20260628/20260628080114-Binary.backup b/MikroGig/20260628/20260628080114-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..cf30ac713867dde5402f13d5511f1c989bddd89a GIT binary patch literal 169683 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
  • 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�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�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\"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" +add dont-require-permissions=no name=awg2-webui owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + :put \"Download image, and save him to usb1/tmp\"\r\ + \n#/tool/fetch url=\"https://ros.vados.ru/docker/awg2-webui-arm.tar\" dst-\ + path=usb1/tmp/awg2-webui.tar\r\ + \n\r\ + \n:put \"1. Create veth interface\"\r\ + \n/interface veth add name=veth-awg address=10.9.9.2/24 gateway=10.9.9.1\r\ + \n\r\ + \n:put \"2. Create bridge and add veth\"\r\ + \n/interface bridge add name=br-awg\r\ + \n/interface bridge port add bridge=br-awg interface=veth-awg\r\ + \n\r\ + \n:put \"3. Assign IP to bridge\"\r\ + \n/ip address add address=10.9.9.1/24 interface=br-awg\r\ + \n\r\ + \n:put \"4. NAT: masquerade container traffic\"\r\ + \n/ip firewall nat add chain=srcnat src-address=10.9.9.0/24 action=masquer\ + ade\r\ + \n\r\ + \n:put \"5. Port forward: UDP 443 \? container (AmneziaWG QUIC mimicry)\"\ + \r\ + \n/ip firewall nat add chain=dstnat protocol=udp dst-port=443 \\\r\ + \n action=dst-nat to-addresses=10.9.9.2 to-ports=55055 in-interface=eth\ + er1\r\ + \n\r\ + \n:put \"6. Port forward: HTTPS 9443 \? container Web UI\"\r\ + \n/ip firewall nat add chain=dstnat protocol=tcp dst-port=9443 \\\r\ + \n action=dst-nat to-addresses=10.9.9.2 to-ports=443 in-interface=ether\ + 1\r\ + \n\r\ + \n:put \"Create environment list..\"\r\ + \n/container envs add list=awgui-env key=WEB_USER value=vados\r\ + \n/container envs add list=awgui-env key=WEB_PASS value=zoomzoomrulezz\r\ + \n/container envs add list=awgui-env key=SECRET_KEY value=RanDomSecret32Sy\ + mboLs2325272931q\r\ + \n/container envs add list=awgui-env key=AWG_ENDPOINT value=10.30.30.10:44\ + 3\r\ + \n\r\ + \n:put \"Load and start container...\"\r\ + \n/container add file=usb1/tmp/awg2-webui.tar \\\r\ + \n interface=veth-awg \\\r\ + \n root-dir=usb1/docker/awg2-webui \\\r\ + \n envlist=awgui-env \\\r\ + \n start-on-boot=yes \\\r\ + \n logging=yes\r\ + \n\r\ + \n:put \"Start...\"\r\ + \n/container start 0\r\ + \n\r\ + \n:put \"Verify...\"\r\ + \n/container print\r\ + \n\r\ + \n:put \"Should show: status=running\"\r\ + \n\r\ + \n/log print where topics~\"container\"\r\ + \n\r\ + \n:put \"Should show: AWG started, nginx running\"\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/container config +set layer-dir=/usb1/docker memory-high=2048.0KiB memory-max=2048.0KiB \ + registry-url=https://registry-1.docker.io tmpdir=/tmp username=amsternl +/disk settings +set auto-media-interface=lo +/interface bridge port +add bridge=Bridge-LAN interface=ether1 +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +add bridge=*D interface=*C +add bridge=*F interface=*E +add bridge=*11 interface=*10 +add bridge=*13 interface=*12 +add bridge=br-awg interface=veth-awg +/ip neighbor discovery-settings +set discover-interface-list=Internet +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface detect-internet +set detect-interface-list=static internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +add interface=ether1 list=Internet +add interface=Bridge-LAN list=LAN +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.86/24 interface=ether1 network=10.30.30.0 +add address=10.9.9.1/24 interface=br-awg network=10.9.9.0 +/ip dns +set allow-remote-requests=yes servers=10.30.30.33,109.107.177.79 +/ip firewall nat +add action=masquerade chain=srcnat src-address=10.9.9.0/24 +# in/out-interface matcher not possible when interface (ether1) is slave - use master instead (Bridge-LAN) +add action=dst-nat chain=dstnat dst-port=443 in-interface=ether1 protocol=udp \ + to-addresses=10.9.9.2 to-ports=55055 +# in/out-interface matcher not possible when interface (ether1) is slave - use master instead (Bridge-LAN) +add action=dst-nat chain=dstnat dst-port=9443 in-interface=ether1 protocol=\ + tcp to-addresses=10.9.9.2 to-ports=443 +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add check-gateway=ping disabled=no distance=2 dst-address=0.0.0.0/0 gateway=\ + ether1 routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add forced-ip=109.107.177.79 interface=*A type=external +add interface=lo type=internal +add interface=wlan2 type=internal +add interface=wlan1 type=internal +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Amsterdam +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=10.30.30.81 +add address=10.30.30.10 +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com diff --git a/MikroGig/history/20260628/20260628080114-Diff-Config.rsc b/MikroGig/history/20260628/20260628080114-Diff-Config.rsc new file mode 100644 index 0000000..5203148 --- /dev/null +++ b/MikroGig/history/20260628/20260628080114-Diff-Config.rsc @@ -0,0 +1,10 @@ +2631a2632,2633 +> /container mounts +> add dst=/etc/amnezia/amneziawg list=awg0.conf src=/usb1/wg +2642,2645d2643 +< add bridge=*D interface=*C +< add bridge=*F interface=*E +< add bridge=*11 interface=*10 +< add bridge=*13 interface=*12 +2655a2654 +> add interface=*B list=WAN -- 2.52.0