-#!rsc by Vados
-# RouterOS script: AM-setup
-# Script comment: Script for setup routeros script 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 "LF";
-#: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;
- };
-
-:local MkTmpfs do={
- :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];
- :if ([ :len $TmpFs ] = 1) do={
- :if ([ /disk/get $TmpFs disabled ] = true) do={
- :log info ("The tmpfs is disabled, enabling.");
- /disk/enable $TmpFs;
- }
- :return true;
- }
- :log info ("Try to removing directory 'tmpfs'.");
- :do {
- :retry {
- /file/remove tmpfs;
- :return true;
- } delay=100ms max=10;
- } on-error={ }
-# $RmDir "tmpfs";
- :onerror Err {
- /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/get total-memory ] / 3);
- :do {
- :retry {
- /file/get tmpfs;
- :return true;
- } delay=222ms max=10;
- } on-error={ }
- } do={
- :log warning ("Creating disk of type tmpfs failed: " . $Err);
- :return false;
- }
-# :return true;
-}
-:if ($tmpfs = true) do={
- :put "Tmpfs variable is true. Checking for tmpfs/scripts directory...";
- :if ([/file find name="tmpfs/scripts"] != "") do={
- :log info ($0 . "Directory tmpfs/scripts exsist.");
- :return $true;
- } else={
- :log warning ($0 . "Directory tmpfs/scripts does't exsist.");
- :if ([ $MkTmpfs ] = false) do={
- :log error ($0 . "Directory tmpfs is not created!");
- :return false;
- } else={
- :onerror Err {
- /file/add type="directory" name=/tmpfs/scripts;
- :do {
- :retry {
- /file/get /tmpfs/scripts;
- :return true;
- } delay=100ms max=10;
- } on-error={ }
- } do={
- :log warning ($0 . "Making directory 'scripts' failed: " . $Err);
- :return false;
- }
-# :return true;
-# [ /file/get $FileName ]
- }
-# :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;
- }
-}
+#!rsc by Vados\r
+# RouterOS script: AM-setup\r
+# Script comment: Script for setup routeros script 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
+\r
+:global ScriptUpdatesCRLF "LF";\r
+#:if ($ScriptUpdatesCRLF != false) do={\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
+#}\r
+\r
+# /import verbose=no $ScriptName\r
+:global SetupScript [ :jobname ];\r
+:global RemoveMe;\r
+:global RunOnce;\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
+\r
+:local MkTmpfs do={\r
+ :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r
+ :if ([ :len $TmpFs ] = 1) do={\r
+ :if ([ /disk/get $TmpFs disabled ] = true) do={\r
+ :log info ("The tmpfs is disabled, enabling.");\r
+ /disk/enable $TmpFs;\r
+ }\r
+ :return true;\r
+ }\r
+ :log info ("Try to removing directory 'tmpfs'.");\r
+ :do {\r
+ :retry {\r
+ /file/remove tmpfs;\r
+ :return true;\r
+ } delay=100ms max=10;\r
+ } on-error={ }\r
+# $RmDir "tmpfs";\r
+ :onerror Err {\r
+ /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/get total-memory ] / 3);\r
+ :do {\r
+ :retry {\r
+ /file/get tmpfs;\r
+ :return true;\r
+ } delay=222ms max=10;\r
+ } on-error={ }\r
+ } do={\r
+ :log warning ("Creating disk of type tmpfs failed: " . $Err);\r
+ :return false;\r
+ }\r
+# :return true;\r
+}\r
+:if ($tmpfs = true) do={\r
+ :put "Tmpfs variable is true. Checking for tmpfs/scripts directory...";\r
+ :if ([/file find name="tmpfs/scripts"] != "") do={\r
+ :log info ($0 . "Directory tmpfs/scripts exsist.");\r
+ :return $true;\r
+ } else={\r
+ :log warning ($0 . "Directory tmpfs/scripts does't exsist.");\r
+ :if ([ $MkTmpfs ] = false) do={\r
+ :log error ($0 . "Directory tmpfs is not created!");\r
+ :return false;\r
+ } else={\r
+ :onerror Err {\r
+ /file/add type="directory" name=/tmpfs/scripts;\r
+ :do {\r
+ :retry {\r
+ /file/get /tmpfs/scripts;\r
+ :return true;\r
+ } delay=100ms max=10;\r
+ } on-error={ }\r
+ } do={\r
+ :log warning ($0 . "Making directory 'scripts' failed: " . $Err);\r
+ :return false;\r
+ }\r
+# :return true;\r
+# [ /file/get $FileName ]\r
+ }\r
+# :log error ($0 . "Directory tmpfs/scripts does not exsist. Remove global variable tmpfs!");\r
+# :global tmpfs (a);\r
+# return false;\r
+ }\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