From 446700ae697bb27505991d970faadc2bc6abf07d Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 3 Jul 2026 01:03:01 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jul 03 01:03:01. --- .../20260703/20260703010257-Binary.backup | Bin 0 -> 182688 bytes MikroGig/20260703/20260703010257-Config.rsc | 3128 +++++++++++++++++ .../20260703/20260703010257-Diff-Config.rsc | 28 + 3 files changed, 3156 insertions(+) create mode 100644 MikroGig/20260703/20260703010257-Binary.backup create mode 100644 MikroGig/20260703/20260703010257-Config.rsc create mode 100644 MikroGig/history/20260703/20260703010257-Diff-Config.rsc diff --git a/MikroGig/20260703/20260703010257-Binary.backup b/MikroGig/20260703/20260703010257-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..9b253aa542cc0388673f64a82d770a1dfb9b1393 GIT binary patch literal 182688 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
    LIO>ZD5>f*L?PNrsmjcqTg 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

    _fHs=$PiB1h`^TI4*b=Gyd<_T&7 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%0DJ70iUJ(Mio%}G8iUjU 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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/728/bebacfc7\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 11:00:05 30.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\"\ + \n#/tool/fetch url=\"https://ros.vados.ru/docker/awg2-webui-arm.tar\" dst-\ + path=usb1/tmp/awg2-webui.tar\ + \n\ + \n:put \"1. Create veth interface\"\ + \n/interface veth add name=veth-awg address=10.9.9.2/24 gateway=10.9.9.1\ + \n\ + \n:put \"2. Create bridge and add veth\"\ + \n/interface bridge add name=br-awg\ + \n/interface bridge port add bridge=br-awg interface=veth-awg\ + \n\ + \n:put \"3. Assign IP to bridge\"\ + \n/ip address add address=10.9.9.1/24 interface=br-awg\ + \n\ + \n:put \"4. NAT: masquerade container traffic\"\ + \n/ip firewall nat add chain=srcnat src-address=10.9.9.0/24 action=masquer\ + ade\ + \n\ + \n:put \"5. Port forward: UDP 443 \? container (AmneziaWG QUIC mimicry)\"\ + \n/ip firewall nat add chain=dstnat protocol=udp dst-port=443 \\\ + \n action=dst-nat to-addresses=10.9.9.2 to-ports=55055 in-interface=eth\ + er1\ + \n\ + \n:put \"6. Port forward: HTTPS 9443 \? container Web UI\"\ + \n/ip firewall nat add chain=dstnat protocol=tcp dst-port=9443 \\\ + \n action=dst-nat to-addresses=10.9.9.2 to-ports=443 in-interface=ether\ + 1\ + \n\ + \n:put \"Create environment list..\"\ + \n/container envs add list=awgui-env key=WEB_USER value=vados\ + \n/container envs add list=awgui-env key=WEB_PASS value=zoomzoomrulezz\ + \n/container envs add list=awgui-env key=SECRET_KEY value=RanDomSecret32Sy\ + mboLs2325272931q\ + \n/container envs add list=awgui-env key=AWG_ENDPOINT value=10.30.30.10:44\ + 3\ + \n\ + \n:put \"Load and start container...\"\ + \n/container add file=usb1/tmp/awg2-webui.tar interface=veth-awg hostname=\ + awg2-webui \\\ + \nroot-dir=usb1/awg2-webui envlist=awgui-env start-on-boot=yes logging=yes\ + \_shm-size=4M\ + \n\ + \n:put \"Start...\"\ + \n/container start 0\ + \n\ + \n:put \"Verify...\"\ + \n/container print\ + \n\ + \n:put \"Should show: status=running\"\ + \n\ + \n/log print where topics~\"container\"\ + \n\ + \n:put \"Should show: AWG started, nginx running\"\ + \n" +add comment=awg-VDSina dont-require-permissions=no name=awg-VDSina-uninstall \ + owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n\ + \n :local prevDNS \"\"\ + \n\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg-VDSina-\ + env\" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n\ + \n :local storageDisk \"disk1\"\ + \n\ + \n :do { :set storageDisk [/container/envs/get [find where list=\"awg-VDS\ + ina-env\" key=\"AWG_STORAGE\"] value] } on-error={}\ + \n\ + \n :local prevTmpdir \"\"\ + \n\ + \n :if (\$storageDisk != \"disk1\") do={\ + \n\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg-VD\ + Sina-env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n\ + \n }\ + \n\ + \n /ip/route/remove [find where comment=awg-VDSina-tunnel]\ + \n\ + \n /ip/route/remove [find where comment=awg-VDSina-dns]\ + \n\ + \n /container/stop [find where interface=veth-awg-VDSina]\ + \n\ + \n :delay 7s\ + \n\ + \n /container/remove [find where interface=veth-awg-VDSina]\ + \n\ + \n /container/envs/remove [find where list=\"awg-VDSina-env\"]\ + \n\ + \n :if (\$prevDNS != \"\") do={\ + \n\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n\ + \n }\ + \n\ + \n :if (\$storageDisk != \"disk1\") do={\ + \n\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n\ + \n }\ + \n\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg-VDSina\"]\ + \n\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.75.208/30\"]\ + \n\ + \n /ip/address/remove [find where address=\"172.19.75.209/30\"]\ + \n\ + \n /interface/veth/remove [find where name=\"veth-awg-VDSina\"]\ + \n\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg-VDSin\ + a\"]\ + \n\ + \n /ip/address/remove [find where interface=\"wg-awg-VDSina\"]\ + \n\ + \n /interface/wireguard/remove [find where name=\"wg-awg-VDSina\"]\ + \n\ + \n :do { /file/remove [find where name~\"awg-VDSina.+tar\"] } on-error={}\ + \n\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/awg-VDSina\")]\ + \_} on-error={}\ + \n\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/ru_ranges_time\ + out.rsc\")] } on-error={}\ + \n\ + \n :if (\$storageDisk != \"disk1\") do={\ + \n\ + \n :do { /file/remove [find where name~(\$storageDisk . \"/pull\")] } o\ + n-error={}\ + \n\ + \n }\ + \n\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n\ + \n /system/script/remove [find where name=awg-VDSina-uninstall]\ + \n\ + \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=200.0MiB memory-max=2048.0KiB \ + registry-url=https://registry-1.docker.io tmpdir=/usb1/pull 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 +/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 wireguard peers +add allowed-address=0.0.0.0/0 endpoint-address=172.19.75.210 endpoint-port=\ + 51820 interface=wg-awg-VDSina name=peer4 persistent-keepalive=10s \ + public-key="o5IgCl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=" +/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=172.19.75.209/30 interface=veth-awg-VDSina network=172.19.75.208 +add address=10.9.0.2 interface=wg-awg-VDSina network=10.9.0.2 +/ip dns +set allow-remote-requests=yes servers=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 +add action=masquerade chain=srcnat src-address=172.19.75.208/30 +/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 +add comment=awg-VDSina-dns distance=1 dst-address=109.107.177.79/32 gateway=\ + wg-awg-VDSina +/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 +add comment=Generator name=awg-VDSina on-event="# ============================\ + ================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v2)\r\ + \n# 2026-07-01 00:03:43\r\ + \n# ============================================================\r\ + \n\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Auto-detect storage\r\ + \n:global awgDisk \"disk1\"\r\ + \n{\r\ + \n :local usbFree 0\r\ + \n :do { :set usbFree [/disk/get [find where mount-point=\"usb1\"] free] \ + } on-error={}\r\ + \n :if (\$usbFree > 0) do={\r\ + \n :set awgDisk \"usb1\"\r\ + \n :put (\"Using USB: usb1 (\" . (\$usbFree / 1048576) . \" MB free)\")\ + \r\ + \n } else={\r\ + \n :if ([:len [/disk/find where slot=\"usb1\"]] > 0) do={\r\ + \n :put \"USB found but not mounted. Format as ext4\?\"\r\ + \n :put \"Press 'y' to confirm:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n /disk/format-drive usb1 file-system=ext4 label=usb1\r\ + \n :delay 3s\r\ + \n :do { :set usbFree [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$usbFree > 0) do={\r\ + \n :set awgDisk \"usb1\"\r\ + \n } else={ :put \"Format failed, using disk1\" }\r\ + \n } else={ :put \"Using disk1\" }\r\ + \n } else={ :put \"No USB, using disk1\" }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall script\r\ + \n/system/script/add name=awg-VDSina-uninstall comment=awg-VDSina source={\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg-VDSina-\ + env\" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local storageDisk \"disk1\"\r\ + \n :do { :set storageDisk [/container/envs/get [find where list=\"awg-VDS\ + ina-env\" key=\"AWG_STORAGE\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg-VD\ + Sina-env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n }\r\ + \n /ip/route/remove [find where comment=awg-VDSina-tunnel]\r\ + \n /ip/route/remove [find where comment=awg-VDSina-dns]\r\ + \n /container/stop [find where interface=veth-awg-VDSina]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg-VDSina]\r\ + \n /container/envs/remove [find where list=\"awg-VDSina-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n }\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg-VDSina\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.75.208/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.75.209/30\"]\r\ + \n /interface/veth/remove [find where name=\"veth-awg-VDSina\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg-VDSin\ + a\"]\r\ + \n /ip/address/remove [find where interface=\"wg-awg-VDSina\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg-VDSina\"]\r\ + \n :do { /file/remove [find where name~\"awg-VDSina.+tar\"] } on-error={}\ + \r\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/awg-VDSina\")]\ + \_} on-error={}\r\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/ru_ranges_time\ + out.rsc\")] } on-error={}\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n :do { /file/remove [find where name~(\$storageDisk . \"/pull\")] } o\ + n-error={}\r\ + \n }\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n /system/script/remove [find where name=awg-VDSina-uninstall]\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg-VDSina address=172.19.75.210/30 gatewa\ + y=172.19.75.209\r\ + \n/ip/address/add address=172.19.75.209/30 interface=veth-awg-VDSina\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.7\ + 5.208/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg-VDSina private-key=\"QCMsDU98Gm+nhn\ + kYRcAN/dyczDYHOLsX3PfBRFjWBF4=\" listen-port=14710 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg-VDSina public-key=\"o5Ig\ + Cl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=\" preshared-key=\"b39T9K2/LR8vNtY\ + AZw+sLRze6yGlS3EaZhAa7wiFB20=\" endpoint-address=172.19.75.210 endpoint-po\ + rt=51820 allowed-address=0.0.0.0/0 persistent-keepalive=10\r\ + \n/ip/address/add address=10.9.0.2/32 interface=wg-awg-VDSina\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_LISTEN value=\":51820\"\ + \r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_REMOTE value=\"109.107.1\ + 77.79:55055\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JC value=\"9\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JMIN value=\"105\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JMAX value=\"920\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S1 value=\"90\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S2 value=\"136\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H1 value=\"472437748-472\ + 438637\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H2 value=\"707808381-707\ + 809250\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H3 value=\"1609078552-16\ + 09079495\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H4 value=\"1012329484-10\ + 12329741\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_SERVER_PUB value=\"o5IgC\ + l1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_CLIENT_PUB value=[/inter\ + face/wireguard/get [find name=wg-awg-VDSina] public-key]\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S3 value=\"45\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S4 value=\"27\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I3 value=\"\ + \"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I4 value=\"\"\ + \r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I5 value=\"\"\r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g-VDSina-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=109.107.177.79\r\ + \n/ip/route/add dst-address=109.107.177.79/32 gateway=wg-awg-VDSina distan\ + ce=1 comment=awg-VDSina-dns\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_STORAGE value=\$awgDisk\ + \r\ + \n:if (\$awgDisk != \"disk1\") do={\r\ + \n :local tmpPath (\$awgDisk . \"/pull\")\r\ + \n /container/envs/add list=awg-VDSina-env key=AWG_PREV_TMPDIR value=[/co\ + ntainer/config/get tmpdir]\r\ + \n /container/config set tmpdir=\$tmpPath memory-high=200M\r\ + \n}\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={ :set file (\"awg-proxy-arm\" . \$suffix . \ + \".tar.gz\") }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath \$file\r\ + \n :if (\$awgDisk != \"disk1\") do={\r\ + \n :set filePath (\$awgDisk . \"/pull/\" . \$file)\r\ + \n :do { /file/make-directory (\$awgDisk . \"/pull\") } on-error={}\r\ + \n }\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0) do={\r\ + \n :local freeStorage 0\r\ + \n :if (\$awgDisk = \"disk1\") do={\r\ + \n :set freeStorage [/system/resource/get free-hdd-space]\r\ + \n } else={\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\$awgDis\ + k] free] } on-error={}\r\ + \n }\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n } else={\r\ + \n :put (\"File already exists: \" . \$filePath)\r\ + \n }\r\ + \n :local rootDir (\$awgDisk . \"/awg-VDSina\")\r\ + \n /container/add file=\$filePath interface=veth-awg-VDSina envlist=awg-V\ + DSina-env hostname=awg-VDSina root-dir=\$rootDir logging=no start-on-boot=\ + yes comment=awg-VDSina\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg-VDSina] shm-size=4M\"] }\r\ + \n /file/remove \$filePath\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg-VDSina]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg-VDSina\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 109.107.177.79 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 109.107.177.79 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg-VDSina \ + comment=awg-VDSina-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg-VDSina\ + \_comment=awg-VDSina-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg-VDSina-tunnel dst-\ + address=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg-VDSina-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg-VDSina-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-07-01 start-time=02:03:59 +/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/20260703/20260703010257-Diff-Config.rsc b/MikroGig/history/20260703/20260703010257-Diff-Config.rsc new file mode 100644 index 0000000..0596c8b --- /dev/null +++ b/MikroGig/history/20260703/20260703010257-Diff-Config.rsc @@ -0,0 +1,28 @@ +2726a2727,2753 +> /container envs +> add key=AWG_CLIENT_PUB list=awg-VDSina-env value=\ +> "pEKNAHuN+yRImhmL0pISjPy/kts2vE4e2TRpFa7Kdkk=" +> add key=AWG_H1 list=awg-VDSina-env value=472437748-472438637 +> add key=AWG_H2 list=awg-VDSina-env value=707808381-707809250 +> add key=AWG_H3 list=awg-VDSina-env value=1609078552-1609079495 +> add key=AWG_H4 list=awg-VDSina-env value=1012329484-1012329741 +> add key=AWG_I1 list=awg-VDSina-env value=\ +> "" +> add key=AWG_I2 list=awg-VDSina-env value="" +> add key=AWG_I3 list=awg-VDSina-env value="" +> add key=AWG_I4 list=awg-VDSina-env value="" +> add key=AWG_I5 list=awg-VDSina-env value="" +> add key=AWG_JC list=awg-VDSina-env value=9 +> add key=AWG_JMAX list=awg-VDSina-env value=920 +> add key=AWG_JMIN list=awg-VDSina-env value=105 +> add key=AWG_LISTEN list=awg-VDSina-env value=:51820 +> add key=AWG_PREV_DNS list=awg-VDSina-env value=10.30.30.33,109.107.177.79 +> add key=AWG_PREV_TMPDIR list=awg-VDSina-env value=/tmp +> add key=AWG_REMOTE list=awg-VDSina-env value=109.107.177.79:55055 +> add key=AWG_S1 list=awg-VDSina-env value=90 +> add key=AWG_S2 list=awg-VDSina-env value=136 +> add key=AWG_S3 list=awg-VDSina-env value=45 +> add key=AWG_S4 list=awg-VDSina-env value=27 +> add key=AWG_SERVER_PUB list=awg-VDSina-env value=\ +> "o5IgCl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=" +> add key=AWG_STORAGE list=awg-VDSina-env value=usb1 -- 2.52.0