From 0577919c42ed6ed9d4cff9ba21c1b954ccec9106 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 16 Jun 2026 21:01:38 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 16 21:01:38. --- .../20260616/20260616210133-Binary.backup | Bin 0 -> 164806 bytes MikroGig/20260616/20260616210133-Config.rsc | 2679 +++++++++++++++++ .../20260616/20260616210133-Diff-Config.rsc | 248 ++ 3 files changed, 2927 insertions(+) create mode 100644 MikroGig/20260616/20260616210133-Binary.backup create mode 100644 MikroGig/20260616/20260616210133-Config.rsc create mode 100644 MikroGig/history/20260616/20260616210133-Diff-Config.rsc diff --git a/MikroGig/20260616/20260616210133-Binary.backup b/MikroGig/20260616/20260616210133-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..8e76585058b4e3e8d378c08ba22b414fbc004ead GIT binary patch literal 164806 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
    3T1?gqx1<0nr)9O0je=*5i4+$y+JX3cUsbWM;u^ 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

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