From a80a5692d9647adf259274ebce26bc9858d54ec7 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 28 Jun 2026 08:21:27 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 28 08:21:27. --- .../20260628/20260628082117-Binary.backup | Bin 0 -> 176216 bytes MikroGig/20260628/20260628082117-Config.rsc | 2770 +++++++++++++++++ .../20260628/20260628082117-Diff-Config.rsc | 131 + 3 files changed, 2901 insertions(+) create mode 100644 MikroGig/20260628/20260628082117-Binary.backup create mode 100644 MikroGig/20260628/20260628082117-Config.rsc create mode 100644 MikroGig/history/20260628/20260628082117-Diff-Config.rsc diff --git a/MikroGig/20260628/20260628082117-Binary.backup b/MikroGig/20260628/20260628082117-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..255360558ff69bd17b061fc7640e526a481b4acb GIT binary patch literal 176216 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

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