From 5386b94372356188062ecefa18758da0db8e1f3e Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sat, 27 Jun 2026 12:41:27 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 27 12:41:27. --- .../20260627/20260627124123-Binary.backup | Bin 0 -> 166915 bytes MikroGig/20260627/20260627124123-Config.rsc | 2705 +++++++++++++++++ .../20260627/20260627124123-Diff-Config.rsc | 6 + 3 files changed, 2711 insertions(+) create mode 100644 MikroGig/20260627/20260627124123-Binary.backup create mode 100644 MikroGig/20260627/20260627124123-Config.rsc create mode 100644 MikroGig/history/20260627/20260627124123-Diff-Config.rsc diff --git a/MikroGig/20260627/20260627124123-Binary.backup b/MikroGig/20260627/20260627124123-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..53882abffc0ef9d487b6858aaf012f44ab1f892d GIT binary patch literal 166915 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

84a8P@cjUWP-W%aJ5dQQY2K+I0An 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 h#N2R2iOq(U+4hKOIi{5gF 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 %BnyY~S{6TUX*eKgC`uPf{a8f&yEmeXc zuT7CWDM(MECI$wpbnkz7&#pWE7F6VJ#SJavkh8c=CU-?;(fEdVD4jWFlxf2Q&320t zXWpfZAvWI;sx5_Ap^RIm5*EH}1qX}M=_XIn=%9A7WmklA2xFESbH*C>4solM+R+SRPbj*-#9TZ;5ruso7uNuG8x^$k(Tm>w#2rUC3v)iMZT zsEJl*xa5$k;H(-RAZehB)&z{&oK&Ldy-eO8gT$x&*OlRDw{ezTIW&stut{)Z?QcmM zVg7JWUV=R7EEz?QYDBc-1k_845a;E)tsBwk!X+VAeXGcFKa#e%aa-a1uUasD!`$?Z z@!P0UEO`}TgZ12PuNPpVLnJy*^7sg=n#BH>;Z{B?q(*#dR*h6mN~{oQ!0|E0VZ;y8 zIfn@~pLU_1U!p4Jqjvo9UBRe@M!_@^#0A*gQaAwvoyge(sz5S3isSwS#xBfoBG%pF zd!NC3>1iOn#mf{_wC0N51KR#^1xS&LvE@7v?S6gT7|QLR{lsguo0%2L*c|@CL=bH& zWAFkFRx%B+NNmVr&LkV*p$|PCwA?c!Wa^dnZJ-fQ6DA|Rcs@=6w&A_b#djRX=v*5k zYLoHOvL@KHU;Rm>&Z0<#F6Z#0OW<|=)~>1^{%#6pocDnraYJXgCk>?s(LMQ#NLVrw zc~8Y2KT4&q`L+e-C5YM{*s>kH%zp-w@n_~KpuXTov}%F(0)*lMnKuyhZB}IarKAs z>Dnjy{zY-e%@AaoHpt!D4|^qb6XaRXblK)QwRgVU+{PtMZ_wC~zks5hxsK>Fy`C|l z2k`AnrKW&va+8fYPAokBWOM+)GXcX-patd&w`!{79*(K&jxNT5Q7b947YAEJR#V7P zKH-T;4+4fmGGD(>HwYUhan4UyV;tN=6<_`rvtds&6~&D=Q_$r=(Y4}DvSMN%N@PE4 zq<`5Wng+50L}S|AFrWLqA)`SLogwPhm_t4KV6iuEIW3QzqeN6cnVxUx-iFn8lj~g4 z5NC8VIk-^QRmSEjIR^2TMF;5^Y5 zc}jsr=5aDM%)$M87-9_`-DEpX_1hB96j{~n$C)i@#|ojDiCOt6GGH`u>5y?|~*^aa1Kl|JCzsR=XiF1eE9O>xXWx(RD(m01Rk<$C$nJ|aD zxnX_OdtA%t2sqG+!YDLFa8&AtS2{GepaB0r0Kkxu$kl&wv2+8O!TB1T4QSF(HCn*zYSRw&Dm9zbFeub5q0UfHz2u zxh=4M>T>U!ExA~<24tTL>1t$#nA!O5rmlR9OWvo1L`UbW;_U<>9i;8{7f$)J)WSLr zeMp=msZm_N{I?jJWsng?_J^L6DZy^P7o*cgJ6R9H!ktO%-TljgfOaGF6!(JZQoyRB z4l)yR7~TzM(=9~K07uzj-3ts#QKsJCDO96xT->|(5F*=#RtC^0h{E@#_y@)9e6^D;OOGb z3dz!($r+F7=*9UM+w$>QJlcElUw=2mj;#x`X{TBM5rbPkpFcN#+EtF5Dbc~oxk zgF3p+&!(pq*P`Kw*pZO8=&8q;`Kd;W)v7UXJ3aCcFbx3+2b`Hf*!W|g5R;Jcb>ghr zF}#H`LDGQ8`(I{CYxRU!t*5%#)=-`w4C?*HtHJOhj9d>^uPCe0Db41siO^)1C#Cjr zFB7PMWpMe;dDeH;36Ex%=(N5nQql^=Wy{}(=obg}l!@qIKb?iKTwugt)0_@2cv-8| zndGk-la0E6GMay$J9E;2-keUbmBqpj;jahLiKe zwcjjFb%$@%987oEI^Yw4a5_DYS}|6Qdb0RG@2zj2sam!VcmH8}7u6lhTXo^1q`@&2 z+TU|xw&@+s?3Bp6pFPWny?!F<(8(fOefTw6G%cqW!geNULl14e-mdVYE2)JZ)YHe>NY81Kb5v7w0;vlP> zz7)s1D6&H)v6e}P03j~8YTT^fCq>~e=Rn1 zcu|GZ;LyRB0kEu?`jCU*Q9=PjGMEfp-;7@DdRL<)kWgNA>7lc7)ok$gT2@suvqLHL z5FIA#f<%upQF_va6T2q+tVA^+;WNW6EVEE{Mv63Uw_sUopzgXy)mC|(LimE zjZ97iPj>!E*XktkBc_yaV@oscrWVi?AKB)iI_Vsz%?&HN@H3H|lb?$duoZ*#gkc>A z2bf7jOG^DOTl`sKyR1}T>8M3YjQMZmX{3)=0WXbE1UTBcXb(Xat8nLEFc3yjp8nqT zv!puYk!;b_6Q{FOhaxFEs)fjLjK9k{&F&G)09{rAwzK95C5~jHUlC{_Fu(wLFR55F zBK;3$#5gA?Hs0{$a8cEE8%PaBqX0?bC{{Q^h!PLDStUyCnv&(ad77GW^ym@a&<^EX}ib*2YB{ zNsATbQ@RdP*ijodtrqH0*%rFuOfRs!%#ot)7ldlHXJ)KZrE!_jP5d(-Lq!e8S$j$B z*1!Idk~#oIqx)z1Bsb>t;ul!F{76q^LI84GBY<8#$W24em*|rx9h9JiK&jkd;5dO% z=^ds4G~q_HauIoIORXD%`Nhx)Pq5!P#dk>ekVj`G6N>@+RGh~;&aSoqQ{9Ie?iAB% zm1Gt+3ws;74Thhe8G22WZy1VY`)U;k7V92B$u_S%v`&0QX~2Ls;|ZvZFIGF5`-NUr zTeOh&K6)~GXx)4SYfw_NU2njR@^t$D(9jWK>QL$QG8KX_YN^3x<*4BPb4sV;L&xCU zD)X~rW4DcBD|WR(+L5!@+xftG5I4C!;cNyfz`&#D*~l@L|95Km5mi*3sHW zMj2-_Dg(CPx8)E4=-QVZAM;>ZbXfJVL;Ilv^jD;YpkYkz#~^vLaZ?~tIlMzYvRWexhhF68Lw8^@vly-twbHZ-!tKX`<92mP$Xjg1J z*HckC_KjB+!+V=pIr5`m)PIh|MQH`RS$hbptNTP_;I`~kW_dl35B-WvNkYVb!`#OK zk*b6UP^cG0JtDlZOx-%_1zG2`H1s1vRNVG!(KlZCju9`<(Q?ypGQbk>WI;f66fpvX zd=WCN?*j@<*D^=e^ncRiAel2F9}WcGZARfE{Uf9hkpyy?PUVU%IYq#7;g@y$AW}m{62g2ZY z@sdj5z_7H6^1LE{dC9F1LP;A<+~c6)Jw4_IDKBog2n+n44fm@%uR9^MyE3zVYqgOyDv#Y z>1F|!l=TXhXzK1|s8Na;xnX8M>1X$e(8~B0oS?ax1yoh6W08CnM5AJt<_kQ-QsQ&0 ze50x3v?D=~`zc(z7Z5IS0W@_#d$8BM&Jom7g94TZdwd5e&>Z)Y^rhnq42RCn2iliz zY=qIm^x^-iT|BVr@B+A~f;KLA+g9J_&w&w~rgT1SV*ES%V6H@yr22UUHtTJ+c(FwB z2mKw3rWS=4q6dgA=DJ*==2G8<0|pgglcS6>nx0tLqt^i_6qUX&|KZD(HM(bNZ(EGC|wjcT+6mE|o_0T*UHN4~--Y5tQb)k735rMou7rdl+t&@z?7|MyN;0q6psLDb2jLvR}rx z8QJ2SiEkV%!0aa2T=gBm5=T=?ZS*5}_V$D;F@c6c%f&>5`a|ngH~bdXJ;NaL{-=46q--(Z%(EW=@`AmPtqJ;z`bCY{nDxfGt{xqjCx?9haCQs8Ol4mvODnW6Fm30Z7A%_8=W z{oh2=Ig1VJPoV*D#cp?F^2ns(L)!~` zb=j++`Ga4zC0%?UqS<&gf8(#5D!4sawgy&D2OJvv-1#+1H_w$i^|BQ*mVX0W4V>?< zQ-G$;GlkoMy}RZ{`Xq3Eo~HLzlrqp;Cm$FW!%#@G{E%MVAG`6l;|ceAZXD9t!pL}F z(8*8nMK;xSM4Pi{%Spdj9~4Z;x?AWSnpvL9cwu*<@)rEyT^3E^g&ib> z=7hCMC{F^&w7U9rB>F>YaiOzto$ciJ!BOx(u+a&1fmt;Ok&IwzK?GIpA*QatiB2kb zJthwUy9;JTQ1_s~MKMfDKEMLR%m~5naJ`6$0bVTpOCHU_xF`G4wm-A=)($OG&K%+CY4P)ZX^uYe?sN@sIuAUDwDNKUCeH~waaHJMPtvtK(m^T*d zTlhK(M(M={=c-O1*m5KfQnV(KU`R<=8|brxJsYuDuN4poXHG`aT9*z5K8qa{=HOZ( zFS3x`0OJUf`D(P*Va9V<0)=spPHR{P-qz|wtc<(T0Zd97fyXaDVKwsXz~igiY)JY$ zY*#$kx)5)BnqX*mS1ETaF6uJNIdi9WK#utm>aNMy9W#71^%|PAa9g9<7 zED#+6-QI#jnJ)yirT)i-0^&>V*jk>6SOg*7-jeiThw2TnDFC$UjU&?~5MIrU4*QB} zLx1@BIU!6zIeAfK>=QtU%l7W#ksQUqzcQS+KRkbX8HfH()0g9S0Q`hud}?nW@z7D{KP*mCxK)^wf4_ln9) zQvI;VfMW+I6#ec+9OS~xuSfueSb8yeZc0#M zAI!H&f@(yiB4d9iIsYAr7dtxaj|XLMVqPyiK>_t5Jc;bS(c>r#ojps@?2uI*R@#c{ zW)g#}K=-~0u6@TCF}=Oi%Zj(cK}1e`7_I-!AGc$6X>aGeAVV9r*wk}GlFS)y$XGwC zGEtAvPtM&i4Rocp>Oe@ucl@@U!gfsnosKJ#7;j|;fSrlt^8QOQh?iojfH

X+aK4 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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" +/certificate settings +set builtin-trust-store=fetch crl-store=system +/container +# download/extract error: check registry failed: unsupported registry api version: +add hostname=amnezia interface=docker-awg-veth layer-dir="" logging=yes \ + mountlists=awg_conf name=awg-mikrotik-arm remote-image=awg-mikrotik-arm \ + root-dir=/usb1/docker/awg start-on-boot=yes +/container config +set memory-high=2048.0KiB registry-url=https://reg.vados.ru/v2/ tmpdir=/tmp \ + username=amster-dev +/container mounts +add dst=/etc/amnezia/amneziawg list=awg_conf src=/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=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface=Bridge-LAN list=WAN +add interface=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.86/24 interface=Bridge-LAN network=10.30.30.0 +add address=172.18.20.1/30 interface=docker-awg-veth network=172.18.20.0 +/ip dns +set servers=10.30.30.81 +/ip firewall mangle +# docker-awg-veth not ready +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 +# docker-awg-veth not ready +add action=masquerade chain=srcnat out-interface=docker-awg-veth +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add check-gateway=ping disabled=no distance=1 dst-address=0.0.0.0/0 gateway=\ + 10.30.30.81 routing-table=main scope=30 target-scope=10 +add distance=1 dst-address=0.0.0.0/0 gateway=172.18.20.2 routing-table=To-VPN +/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/20260627/20260627124123-Diff-Config.rsc b/MikroGig/history/20260627/20260627124123-Diff-Config.rsc new file mode 100644 index 0000000..bddd1f4 --- /dev/null +++ b/MikroGig/history/20260627/20260627124123-Diff-Config.rsc @@ -0,0 +1,6 @@ +2574,2575c2574,2575 +< mountlists=awg_conf name=awg-mikrotik-arm remote-image=awg-mikrotik-arm \ +< root-dir=/usb1/docker/awg start-on-boot=yes +--- +> mountlists=awg_conf name=awg-mikrotik-arm:latest remote-image=\ +> awg-mikrotik-arm:latest root-dir=/usb1/docker/awg start-on-boot=yes -- 2.52.0