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