-#!rsc by Vados\r
-# RouterOS script: AM-setup\r
-# Script comment: Script for setup routeros scrypt system\r
-# Copyright (c) 2005-2026 Vados <vados@vados.ru>\r
-#\r
-#\r
-# requires RouterOS, version=7.19\r
-# requires device-mode, fetch\r
-#\r
-# :local ScriptName [ :jobname ];\r
-# Additional commands:\r
-#\r
-# For scripts:\r
-#:global NewScript "script_name"; \r
-#:global GlobalScriptsUrl "https://ros.vados.ru/";\r
-#/system/script/add name=$NewScript owner=$NewScript source=([/tool/fetch check-certificate=yes-without-crl ($GlobalScriptsUrl . $ScriptAdd . ".rsc") output=user as-value ]->"data");\r
-#:global NewScript (a);\r
-#:global ScriptInstallUpdate; $ScriptInstallUpdate;\r
-#\r
-# For run from terminal:\r
-#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch check-certificate=yes-without-crl "https://ros.vados.ru/AM-setup.rsc" output=user as-value ]->"data");\r
-#\r
-#:foreach Script in=[ /system/script/find where source~"^#!rsc by Vados" ] do={\r
-# if ($ScriptUpdatesCRLF = true) do={\r
-# /system/script/set source=[ :tocrlf [ get $Script source ] ] $Script;\r
-# } else={\r
-# /system/script/set source=[ :tolf [ get $Script source ] ] $Script;\r
-# }\r
-#}\r
-# /import verbose=no $ScriptName\r
-:global SetupScript [ :jobname ];\r
-:global RemoveMe;\r
-:global InitSetup true;\r
-:global tmpfs true;\r
-\r
-{\r
- :local RmMe [:tobool $1];\r
-\r
- :global GlobalScriptsUrl;\r
- :global SetupScript;\r
- :global RemoveMe;\r
- :global InitSetup;\r
- :global tmpfs;\r
- \r
- :local CertCommonName "Root YE";\r
- :local CertFileName "Root-YE.pem";\r
- :local CertFingerprint "e14ffcad5b0025731006caa43a121a22d8e9700f4fb9cf852f02a708aa5d5666";\r
-\r
- :if ($SetupScript = false) do={\r
- :global SetupScript "AM-setup";\r
- }\r
- :if ($RemoveMe != false) do={\r
- :set RemoveMe true;\r
- }\r
-\r
- :log warning ("\n\$GlobalScriptsUrl = " . $GlobalScriptsUrl);\r
- \r
- :local CertSettings [ /certificate/settings/get ];\r
- :if (!((($CertSettings->"builtin-trust-anchors") = "trusted" || \\r
- ($CertSettings->"builtin-trust-store") ~ "fetch" || \\r
- ($CertSettings->"builtin-trust-store") = "all") && \\r
- [ :len [ /certificate/builtin/find where common-name=$CertCommonName ] ] > 0)) do={\r
- :put "Importing certificate...";\r
- \r
- /tool/fetch ($GlobalScriptsUrl . "certs/" . $CertFileName) dst-path=$CertFileName as-value;\r
- :delay 1s;\r
- /certificate/import file-name=$CertFileName passphrase="";\r
- :if ([ :len [ /certificate/find where fingerprint=$CertFingerprint ] ] != 1) do={\r
- :error "Something is wrong with your certificates!";\r
- };\r
- :delay 1s;\r
- };\r
- :put "Thr tmpfs variable is true. Checking for tmpfs/scripts directory...";\r
- :if ($tmpfs = true && [/file find name="tmpfs/scripts"] != "") do={\r
- :log debug ($0 . "Directory tmpfs/scripts exsist.");\r
- :return $true;\r
- } else={\r
- :log error ($0 . "Directory tmpfs/scripts does not exsist. Remove global variable tmpfs!");\r
- :global tmpfs (a);\r
- return false;\r
-}\r
- :put "Renaming AM-GlobalConfig, if exists...";\r
- :local ConfOldName ("AM-GlobalConfig-" . [ /system/clock/get date ] . [ /system/clock/get time ] . ".rsc");\r
- /system/script/set name=$ConfOldName [ find where name="AM-GlobalConfig" ];\r
- :foreach Script in={ "AM-GlobalConfig"; "AM-GlobalFunc" } do={\r
- :put "Installing $Script...";\r
- /system/script/remove [ find where name=$Script ];\r
- /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
- \r
- /system/script run $Script;\r
- :delay 2s;\r
- };\r
-\r
- :if ([ :len [ /certificate/find where fingerprint=$CertFingerprint ] ] > 0) do={\r
- :put "Renaming certificate by its common-name...";\r
- :global CertificateNameByCN;\r
- $CertificateNameByCN $CertFingerprint;\r
- };\r
-\r
- :if ($RemoveMe = true) do={\r
- :put "Add Scheduler for remove this script...";\r
- :local OnEvent (":delay 30s;\n" . "/system/script/remove [ find where name=\"$SetupScript\" ];\n" . \\r
- ":delay 2s;\n" . "/system/scheduler/remove [ find where name=\"_RemoveSetup\" ];\n" . \\r
- ":delay 2s;\n" . ":global RemoveMe (a);\n");\r
- :local Comment "_RemoveSetup tmp scheduler for remove setup script.";\r
- /system/scheduler/add name="_RemoveSetup" comment=$Comment start-time=startup interval=30s on-event=$OnEvent;\r
- :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
- }\r
- :delay 1;\r
- :put "Loading configuration and functions...";\r
- :do { \r
- :global ScriptInstallUpdate; $ScriptInstallUpdate;\r
- :put "Normal removing temporary global environment variables.";\r
- :global SetupScript (a);\r
- :global InitSetup (a);\r
- :global RemoveMe (a);\r
- } on-error={\r
- :local ErrorMsg "Loading configuration and functions error!";\r
- :log error ($0 . $ErrorMsg . :error);\r
- :error $ErrorMsg;\r
- }\r
-}\r
+#!rsc by Vados
+# RouterOS script: AM-setup
+# Script comment: Script for setup routeros scrypt system
+# Copyright (c) 2005-2026 Vados <vados@vados.ru>
+#
+#
+# requires RouterOS, version=7.19
+# requires device-mode, fetch
+#
+# :local ScriptName [ :jobname ];
+# Additional commands:
+#
+# For scripts:
+#:global NewScript "script_name";
+#:global GlobalScriptsUrl "https://ros.vados.ru/";
+#/system/script/add name=$NewScript owner=$NewScript source=([/tool/fetch check-certificate=yes-without-crl ($GlobalScriptsUrl . $ScriptAdd . ".rsc") output=user as-value ]->"data");
+#:global NewScript (a);
+#:global ScriptInstallUpdate; $ScriptInstallUpdate;
+#
+# For run from terminal:
+#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch check-certificate=yes-without-crl "https://ros.vados.ru/AM-setup.rsc" output=user as-value ]->"data");
+#
+:global ScriptUpdatesCRLF true;
+if ($ScriptUpdatesCRLF != false) do={
+:foreach Script in=[ /system/script/find where source~"^#!rsc by Vados" ] do={
+ if ($ScriptUpdatesCRLF = true) do={
+ /system/script/set source=[ :tocrlf [ get $Script source ] ] $Script;
+ } else={
+ /system/script/set source=[ :tolf [ get $Script source ] ] $Script;
+ }
+}
+}
+# /import verbose=no $ScriptName
+:global SetupScript [ :jobname ];
+:global RemoveMe;
+:global RunOnce;
+:global InitSetup true;
+:global tmpfs true;
+
+{
+ :local RmMe [:tobool $1];
+
+ :global GlobalScriptsUrl;
+ :global SetupScript;
+ :global RemoveMe;
+ :global InitSetup;
+ :global tmpfs;
+
+ :local CertCommonName "Root YE";
+ :local CertFileName "Root-YE.pem";
+ :local CertFingerprint "e14ffcad5b0025731006caa43a121a22d8e9700f4fb9cf852f02a708aa5d5666";
+
+ :if ($SetupScript = false) do={
+ :global SetupScript "AM-setup";
+ }
+ :if ($RemoveMe != false) do={
+ :set RemoveMe true;
+ }
+
+ :log warning ("\n\$GlobalScriptsUrl = " . $GlobalScriptsUrl);
+
+ :local CertSettings [ /certificate/settings/get ];
+ :if (!((($CertSettings->"builtin-trust-anchors") = "trusted" || \
+ ($CertSettings->"builtin-trust-store") ~ "fetch" || \
+ ($CertSettings->"builtin-trust-store") = "all") && \
+ [ :len [ /certificate/builtin/find where common-name=$CertCommonName ] ] > 0)) do={
+ :put "Importing certificate...";
+
+ /tool/fetch ($GlobalScriptsUrl . "certs/" . $CertFileName) dst-path=$CertFileName as-value;
+ :delay 1s;
+ /certificate/import file-name=$CertFileName passphrase="";
+ :if ([ :len [ /certificate/find where fingerprint=$CertFingerprint ] ] != 1) do={
+ :error "Something is wrong with your certificates!";
+ };
+ :delay 1s;
+ };
+ :put "Thr tmpfs variable is true. Checking for tmpfs/scripts directory...";
+ :if ($tmpfs = true && [/file find name="tmpfs/scripts"] != "") do={
+ :log debug ($0 . "Directory tmpfs/scripts exsist.");
+ :return $true;
+ } else={
+ :log error ($0 . "Directory tmpfs/scripts does not exsist. Remove global variable tmpfs!");
+ :global tmpfs (a);
+ return false;
+}
+ :put "Renaming AM-GlobalConfig, if exists...";
+ :local ConfOldName ("AM-GlobalConfig-" . [ /system/clock/get date ] . [ /system/clock/get time ] . ".rsc");
+ /system/script/set name=$ConfOldName [ find where name="AM-GlobalConfig" ];
+ :foreach Script in={ "AM-GlobalConfig"; "AM-GlobalFunc" } do={
+ :put "Installing $Script...";
+ /system/script/remove [ find where name=$Script ];
+ /system/script/add name=$Script owner=$Script source=([ /tool/fetch check-certificate=yes-without-crl url=($GlobalScriptsUrl . $Script . ".rsc") output=user as-value ]->"data");
+
+ /system/script run $Script;
+ :delay 2s;
+ };
+
+ :if ([ :len [ /certificate/find where fingerprint=$CertFingerprint ] ] > 0) do={
+ :put "Renaming certificate by its common-name...";
+ :global CertificateNameByCN;
+ $CertificateNameByCN $CertFingerprint;
+ };
+
+ :if ($RemoveMe = true) do={
+ :put "Add Scheduler for remove this script...";
+ :local OnEvent (":delay 30s;\n" . "/system/script/remove [ find where name=\"$SetupScript\" ];\n" . \
+ ":delay 2s;\n" . "/system/scheduler/remove [ find where name=\"_RemoveSetup\" ];\n" . \
+ ":delay 2s;\n" . ":global RemoveMe (a);\n");
+ :local Comment "_RemoveSetup tmp scheduler for remove setup script.";
+ /system/scheduler/add name="_RemoveSetup" comment=$Comment start-time=startup interval=30s on-event=$OnEvent;
+ :log warning ($0 . "\nI've done everything, and now I'm tired... I'm leaving.\nThere will be an error below, this is normal.");
+ }
+ :delay 1;
+ :put "Loading configuration and functions...";
+ :do {
+ :global ScriptInstallUpdate; $ScriptInstallUpdate;
+ :put "Normal removing temporary global environment variables.";
+ :global SetupScript (a);
+ :global InitSetup (a);
+ :global RemoveMe (a);
+ } on-error={
+ :local ErrorMsg "Loading configuration and functions error!";
+ :log error ($0 . $ErrorMsg . :error);
+ :error $ErrorMsg;
+ }
+}