Audit/store information about software downloads from Torizon Cloud on the device | SOTA | Aktualizr

Hi there,

I have a small problem to solve and i’m trying to figure a way to do this. My problem is that I need to audit and register every download (SOTA) that is fired from the Torizon Cloud on the device itself, this is I need to register all the operations of update and their result. This can be a log, a db or a simple file, one important thing is that it must not volatile, e.g., for instance if it is a log file it cannot rotate. I have searched on the documentation and tried to understand how the Aktualizr works and how the audit functionality work. But all that I can find is that it logs all the operations for the system logs (journalctl) and that a db ( /var/sota/storage) is used to store some information, but I try to open but it seems empty on most of the fields.

Do you have any suggestion on how to achieve this or there is already something on the Torizon OS that enables this and I’m missing it?
I know that from the Torizon Cloud I can audit the updates that were made to the device, but I need this information on the device itself.

Hardware info

HW model: Toradex Apalis iMX8QP V1.1 on Apalis Evaluation Board
Toradex version: 0049 V1.1C
Processor arch: aarch64
VS Code version: 1.92.2
Plugin TorizonCore Builder version: 0.0.12

Thanks in advance for your help.
Best regards,
André

Technical Support apalis torizon imx8

Greetings @af-silva,

To better understand your requirements. Could you elaborate on what information you need exactly from each download? And do you need every download transaction that happens?

At the time of writing there is no good non-volatile mechanism that records every single download event that Aktualizr performs. The best there is, is the trace logging of Aktualizr which logs, in detail every download event. But this is of course volatile unless you explicitly enable persistent logging for the device. But persistent logging can be quite harsh on the flash due to all the writes to disk.

Also depending on what you exactly need, this can be quite complicated to track. For things like OSTree based updates, this involves hundreds of individual file download operations.

Best Regards,
Jeremias

Hi @jeremias.tx

First and foremost thanks for the quick response.
My main objective is that every update to the software stack on the device, i.e., the containers running on the device, must be tracked.
So, when i configure a new stack our update any image on the docker-compose.yaml and push it to the torizon cloud and schedule it to be updated on the device, the torizon cloud registers this and starts the update, and also registers if the update failed or succeeded. What I need is this information to also be stored on the device, specifically the information about the image names, versions and hash’s.
Lets assume the Use Case of an audit to the software running on the device, I can do it through the cloud platform, but if I need to audit the device itself do guarantee that all operations happen has expected and their result right now I can’t, since the logs for this are volatile.
The basic information I need is about the images downloaded, i.e., version, hash, timestamp. For what I was trying to figure, the Aktualizr service uses some of this information to check if every thing goes has expected after each update, and if the metadata from the update corresponds to what was received during the update, if it fails it rollback to the previous software stack.

I hope you understand what I’m trying to explain. And sorry about the long text.

Okay, so I think I misunderstood your original request then.

All you care about is the result/information of the software that gets updated during the update process. You don’t actually want to know about every download itself correct?

Keep in mind the update client, Aktualizr downloads many things that aren’t actually the new software itself. So you don’t care about those other downloads right? You just want the end result of the update.

Am I understanding you correctly now?

If that’s the case the sql.db (/var/sota/sql.db) used by Aktualizr should record every installation event, even if the installation failed. For a brief example, there’s a utility on Torizon OS that gives a brief summary of the contents of the sql.db:

torizon@apalis-imx8-06738453:~$ sudo aktualizr-info
Device ID: b2ddae22-e7c7-42b0-946d-ebb4f8324696
Primary ECU serial ID: 171cda6f3a6abe24441f07b95221e2378a8bf034d5223621557d4e03418eb1f3
Primary ECU hardware ID: apalis-imx8
Secondaries:
1) serial ID: 0a6c653c0d341f62863d317282c62348e1fb904bcb93e45e195dfe6b8671dd28
   hardware ID: apalis-imx8-bootloader
   no details about installed nor pending images
2) serial ID: c524d5f96d1a87cbf89565e1c62bba2bc73c34c56001e3bcca0e6fdc0f397399
   hardware ID: docker-compose
   installed image hash: 362a9a1763dcac8d424aaf4bd0eee194a094aa4f84c4f6d0cf7f21dc1895813b
   installed image filename: hello-world-95d6c403bb9c642f79005331e1c9e30a
   correlation id: urn:here-ota:mtu:ea3fffd0-4ce3-40ec-b447-9059da53200f
Provisioned on server: yes
Fetched metadata: yes
Current Primary ECU running version: 86648d68fec30477fa8b89b222e1fddc74711a1a90b4b0240183ddff88b7cdb4

This information here is extracted directly from the sql.db Aktualizr uses. So for the compose secondary, you have the hash of the compose file, the filename which is a combination of the <package-name>-<package-version> of this update package as it was uploaded to the server. It does not display a timestamp, but you can probably get this by digging into the sql.db further.

Now keep in mind for a docker-compose update, our update system only tracks and updates the compose file itself. It does not manage the container images referenced by the compose file. This is why the sql.db only has the hash and version information of the compose file specifically.

Does this somewhat help with what you need?

A small aside. It’s not suggested to be interacting with sql.db as a long term solution. Since the information here is what Aktualizr uses for consistency in it’s operations, opening it in another process/application can be risky as any change/corruption of the data in the sql.db will cause unforseen effects with Aktualizr and the entire update process.

Best Regards,
Jeremias

Hi Jeremias,

Responding to your questions.

What I want to know is the success/failure of the update but also the software versions that were installed. Ideally I would want to know the docker image that was installed and their version, but I will try to see if knowing the docker-compose is enough.

When you say many things I assume you are referring to docker-compose, bootloader and os-image… In my particular case I want to monitor/audit the installation of new software stacks, this is, the docker compose execution and download info of each image through time. I know that the journalctl holds this information but also it logs alot more things that I don’t care for this particular case. What would be the “perfect” scenario would be to known which software stack was installed (docker-compose), its version or hash, which images were downloaded and their version and status (installed, failed) and when it happen (timestamp) thought out the life-span of the board, even if this log is to be stored in a external flash. (I don’t expect to have downloads at a frequency that would burn the flash or exhaust the space).

In short, the main requirement is to have a way to monitor and audit specifically the download of new software (docker images, os image, booltolad) to the board, in some ways like we have on the Torizon Cloud Portal, but that this information would be stored locally and permanently until some intentionally action would take place lime manually house keeping the logs aka audit.

Regarding the database, we will not interact with third-party (our) software, I just need to known that if I need to audit the device I have a place where I can check the information I need, in this case I can stop the Aktualizr service and audit the database…

Hope this is some how more clear now.
Thanks again for your help, I will look better at the database.

When you say many things I assume you are referring to docker-compose, bootloader and os-image…

No not exactly. Say you are doing a docker-compose update. Aktualizr is downloading dozens of other metadata and other information that is not the docker-compose file. That goes for any update performed. That is why I’m saying you probably don’t care about that other stuff, you just want to know about the docker-compose file that was downloaded. Am I correct?

Okay, so there is no ideal mechanism to get you what you want at the moment. If you want a detailed installation result, the best we have at the moment is to parse the journalctl logs of Aktualizr. If you turn the logs up to trace level like so: Aktualizr - Modifying the Settings of Torizon Update Client | Toradex Developer Center

Then there is a detailed installation report that gets produced and sent to the server after each update. The full installation report is printed in the logs as well at trace level.

Example:

Installation report
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]: put request body:{
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:         "signatures" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:         [
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                 {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         "keyid" : "171cda6f3a6abe24441f07b95221e2378a8bf034d5223621557d4e03418eb1f3",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         "method" : "rsassa-pss",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         "sig" : "YJLYOhZpC/RCjHKu03xVFUwnN9sLj9YHmbSrKXNA7da6m+JjiJhxhLOtvp+f5y7+9yijPolI7TS68GoRgec7kHF4Nb8iGMVFvC7uqMTxUljmGChcCwyO2yKA54DPj8IO5zXSxvrSQMeVeqAeiX0RRSg1Jt7un2H7l33R1hUBsUo9nGeScqOWOR2EkWcERYjYAH+X02iiOE0L/xsNZjTEoqPDFbGJ4Fo75F4UwL1k8lZNa7DDWNMRdSf3jagDtkt5xKZ793aDcjE/2RQjJs18zPLVWhnPfc9E9RrUMSRQNX45ucx9M9Wd7iBwMmoSMDdCYf/6B6tCp44BhbPmijOfdw=="
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                 }
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:         ],
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:         "signed" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                 "ecu_version_manifests" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                 {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         "0a6c653c0d341f62863d317282c62348e1fb904bcb93e45e195dfe6b8671dd28" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 "signatures" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 [
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "keyid" : "0a6c653c0d341f62863d317282c62348e1fb904bcb93e45e195dfe6b8671dd28",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "method" : "rsassa-pss",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "sig" : "I5g7FI7M2Tz++/Xdcc6PWyGS/p1koaqG6cvcqfzDyZqiDrt1WaZ/bENtx7hpNcAhVYOAxNmWqqbEP2mb3QZp3YFr8Q/+/TeeO7/j5qfAa70Pz9MSTwukmFhI2If3PKoDu0Y5icvW8A3cCTC6e7aL1pJrPpRDDMQ7juc+wRFVEYZKbXeLDWeVdGfXb3dG/f098F4CaM0nyfnQwl/0FUHZQCafoumh+xJYWZs3nSCnK6c8A6yMeVqglxZCqRpthvhe1DX/Hcn9IvD/bvw/s5OBY61dyXCeG0OWAmavA3y4Oi3Q1ZmCEuoQyHUBYmOC3vX8EBUpG6QI+pilDOBfU9cc8w=="
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         }
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 ],
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 "signed" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "attacks_detected" : "",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "ecu_serial" : "0a6c653c0d341f62863d317282c62348e1fb904bcb93e45e195dfe6b8671dd28",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "installed_image" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "fileinfo" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         "hashes" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                                 "sha256" : "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         },
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         "length" : 0
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 },
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "filepath" : "noimage"
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         },
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "previous_timeserver_time" : "1970-01-01T00:00:00Z",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "timeserver_time" : "1970-01-01T00:00:00Z"
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 }
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         },
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         "171cda6f3a6abe24441f07b95221e2378a8bf034d5223621557d4e03418eb1f3" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 "signatures" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 [
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "keyid" : "171cda6f3a6abe24441f07b95221e2378a8bf034d5223621557d4e03418eb1f3",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "method" : "rsassa-pss",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "sig" : "HZ94pj4Op3M8KKmaSqU49dou/QGQ8jMOHL4U7ghA43vYc77IvgOzi9NZFCSnQSVyTrQq400MFHpNMOCAwzgdCYr8JfDt7DCt5zQGSy0OAWZe6g4vfvjB5cz1IG6hOTuYOCCIiY4F3Mf2ESQicT9Z8uS9JNzKsrm6TCMUYtBMdecFkUYPtVImRaSKEjE2ZiYMtU/3oHFU2r/ZvT5+I+fzeRkh40L2dHMTVTaBUWcoJKgxF7OIucHDcvft/W2GV3ts2f5h9z0d3XrW8YAN29Kl9hIneuf2I8+kiAvqa+uBfeGUFGw8YSTNrABv4toVm7SjucNe1sGakvZUpHgd1BokUA=="
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         }
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 ],
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 "signed" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "attacks_detected" : "",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "ecu_serial" : "171cda6f3a6abe24441f07b95221e2378a8bf034d5223621557d4e03418eb1f3",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "installed_image" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "fileinfo" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         "hashes" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                                 "sha256" : "86648d68fec30477fa8b89b222e1fddc74711a1a90b4b0240183ddff88b7cdb4"
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         },
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         "length" : 0
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 },
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "filepath" : "unknown"
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         },
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "previous_timeserver_time" : "1970-01-01T00:00:00Z",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "report_counter" : "7",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "timeserver_time" : "1970-01-01T00:00:00Z"
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 }
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         },
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         "c524d5f96d1a87cbf89565e1c62bba2bc73c34c56001e3bcca0e6fdc0f397399" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 "signatures" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 [
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "keyid" : "c524d5f96d1a87cbf89565e1c62bba2bc73c34c56001e3bcca0e6fdc0f397399",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "method" : "rsassa-pss",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "sig" : "NJp1exbCV6UQ0HTDVYlx9+wxE5yuf7UCpOAG/2LvI4gRZYdNX6Ri8A8135RYCvP2M1XOQOtpWANN9wLixHZG78mL8nHWb9bZn94TdHkQAIkrHyjWUIzR3iQ/IA1hW/lJrlOionUeMTycF4uy9i6JfedbANPXCglH/5JyGwMh2xRHAGHRxviCdJfbI5L9KUuy/sq++LsySkq3ZOJRy2X55JsoPsNkjVZ8i0GlkBJcDgLLFz4H6ZHzmJDgwJ5KIfAf2U2DkQDhcdSs7a6bQk4YIAJB/4BRTaWFabfJh04ggGg+0ioT6AuqN3UVs5X5NBdbPRjlY7PyJ2r5QxQRHqs72g=="
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         }
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 ],
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 "signed" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "attacks_detected" : "",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "ecu_serial" : "c524d5f96d1a87cbf89565e1c62bba2bc73c34c56001e3bcca0e6fdc0f397399",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "installed_image" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "fileinfo" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         "hashes" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                                 "sha256" : "37d9a8b49d8160d3fba70349598f92ffb476a2aa89cb9edc446818c26ae63a8f"
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         },
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         "length" : 99
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 },
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "filepath" : "update-tests-1.0"
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         },
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "previous_timeserver_time" : "1970-01-01T00:00:00Z",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "timeserver_time" : "1970-01-01T00:00:00Z"
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 }
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         }
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                 },
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                 "installation_report" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                 {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         "content_type" : "application/vnd.com.here.otac.installationReport.v1",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         "report" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 "correlation_id" : "urn:here-ota:mtu:36c702a9-05d4-4242-b640-0a187f42ae64",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 "items" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 [
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "ecu" : "c524d5f96d1a87cbf89565e1c62bba2bc73c34c56001e3bcca0e6fdc0f397399",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 "result" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         "code" : "OK",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         "description" : "",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                         "success" : true
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                                 }
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         }
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 ],
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 "raw_report" : "Installation succesful",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 "result" :
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 {
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "code" : "OK",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "description" : "Device has been successfully installed",
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                         "success" : true
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                                 }
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                         }
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                 },
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:                 "primary_ecu_serial" : "171cda6f3a6abe24441f07b95221e2378a8bf034d5223621557d4e03418eb1f3"
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]:         }
Sep 13 17:41:45 apalis-imx8-06738453 aktualizr-torizon[1361]: }

These logs should have what you want. They’re timestamped, have the package-name and version, the hash, and the result of the update. The only thing you need to know is which ECU serial corresponds to what component.

With my example, you can see the ECU with the serial c524d5f96d1a87cbf89565e1c62bba2bc73c34c56001e3bcca0e6fdc0f397399 was updated. On my device this corresponds to the docker-compose component, this is unique per device but it should be apparent via the logs. So, this component was updated successfully, the hash of the installed component (docker-compose file) is 37d9a8b49d8160d3fba70349598f92ffb476a2aa89cb9edc446818c26ae63a8f. The file name of the update is update-tests-1.0 meaning the package name was update-tests and the version was 1.0.

This is as detailed of an installation report as is available. Of course you’ll need to have a way to parse and filter the logs you want. Fluent-bit could be helpful as a parser for systemd, and it can output the filtered information to a file.

Best Regards,
Jeremias