capsman-download-packages: get info from log

Relying on older packages in local storage may be problematic due to
size constraints. Let's check the log for required packages.

(cherry picked from commit c4a5f8787a)
This commit is contained in:
Christian Hesse 2022-03-22 22:33:46 +01:00
parent 0695c99318
commit d21cd2271f
2 changed files with 22 additions and 12 deletions

View file

@ -53,6 +53,25 @@ $WaitFullyConnected;
}
}
:if ($Updated = false && [ / system resource get uptime ] < 2m) do={
$LogPrintExit2 info $0 ("No packages downloaded, yet. Delaying for logs.") false;
:delay 2m;
}
:foreach Log in=[ / log find where topics=({"caps", "error"}) \
message~("upgrade status: failed, failed to download file '.*-" . $InstalledVersion . "-.*\\.npk', no such file") ] do={
:local Message [ / log get $Log message ];
:local Package [ :pick $Message \
([ :find $Message "'" ] + 1) \
[ :find $Message ("-" . $InstalledVersion . "-") ] ];
:local Arch [ :pick $Message \
([ :find $Message ("-" . $InstalledVersion . "-") ] + 2 + [ :len $InstalledVersion ]) \
[ :find $Message ".npk" ] ];
:if ([ $DownloadPackage $Package $InstalledVersion $Arch $PackagePath ] = true) do={
:set Updated true;
}
}
:if ($Updated = true) do={
:if ([ :len [ / system script find where name="capsman-rolling-upgrade" ] ] > 0) do={
/ system script run capsman-rolling-upgrade;

View file

@ -26,18 +26,9 @@ Optionally add a scheduler to run after startup:
/ system scheduler add name=capsman-download-packages on-event="/ system script run capsman-download-packages;" start-time=startup;
Only packages available in older version are downloaded. For initial setup
place the required packages to CAPsMAN package path (see
`/ caps-man manager`). The packages can be downloaded from device with
function `$DownloadPackage`, use something like this to download latest
packages to directory `routeros`:
$DownloadPackage system "" arm routeros;
$DownloadPackage security "" arm routeros;
[...]
$DownloadPackage system "" mipsbe routeros;
$DownloadPackage security "" mipsbe routeros;
[...]
Packages available in local storage in older version are downloaded
unconditionally. The script tries to download missing packages by guessing
from system log.
Usage and invocation
--------------------