Mender Configure update module

Description

An update module to manage device configuration via Mender Configure add-on. See Mender Docs for an overview of the add-on.

mender-configure is the update module responsible for fetching and reporting configuration, and requires the user to use one or multiple apply-device-config script(s) to apply the configuration on the device. See Mender Docs guide How to make an apply-device-config script for more details.

Example use-cases:

  • Setting timezone
  • Setting WiFi credentials
  • Setting firewall rules
  • Setting any user-specific configuration parameters

Specification

Specification
Module name mender-configure
Supports rollback Yes
Requires reboot Maybe(*)
Artifact generation script No(**)
Full system updater No
Source code GitHub repository
Maintainer Northern.tech

(*) It depends on the user provided apply-device-config scripts
(**) The Artifact is generated in the Mender UI

Prepare the device

This section describes how to set up your target device, i.e. the device to be updated. This will also be referred to as the device environment.

All commands outlined in this section should be run in the device environment.

Prerequisites

This Update Module has the following prerequisites for the device environment:

Install the Update Module

Follow the instructions that correspond to your device setup.

Yocto project

mender-configure is available in meta-mender releases dunfell-v2021.04 and newer. If you are using meta-mender-demo layer, the Update Module is added to your image by default together with some apply-device-config script. If not, you can add it to your image with

IMAGE_INSTALL_append = " mender-configure"

Debian family (via mender-convert)

mender-configure is available for mender-convert builds, and is enabled setting the following variable:

MENDER_ADDON_CONFIGURE_INSTALL=”y”

The specific version to install can also be configured if desired. See Mender Docs page for more information.

Debian family (standalone deb package)

mender-configure is also available in the Mender APT repository. Follow instructions in Mender Docs to install the repository in your device. Then, install mender-configure with:

sudo apt-get update
sudo apt-get install mender-configure

From source

Alternatively to all the above, it is possible to install from source. Follow these steps:

git clone -b 1.0.4 https://github.com/mendersoftware/mender-configure-module.git
cd mender-configure-module
make install

Install apply-device-config script(s)

To actually apply the configuration on your device, Mender relies on user supplied apply-device-config scripts. See Mender Docs guide How to make an apply-device-config script for a complete guide on how to write such scripts.

As an example, see the timezone script which sets the timezone of the device, according to the “timezone” key, given in the file in the first argument.

Deploy configuration updates

The configuration Artifacts are generated by the Mender Server on the fly, so no local use of mender-artifact nor other generation scripts are required. See Mender Docs for more information.

Hi there,

Thanks for this great feature. Am I right with the assumption that there is nothing speaking against deploying a configuration directly to a device group, since they are artifacts/deployments? Would it also be possible to create a kind of default config deployment mechanism that sends a config to a device receives when it gets added to a group? Or have I missed another feature that could be able to handle this?

Cheers,
Dominik

Indeed you can. The only difference is that you have to create and upload the artifact yourself, you can’t do it directly with the configuration editor.

I think you can do this with dynamic deployments, but I’m not an expert in this area, so don’t take my word for it.

1 Like

I have some small questions about the mender-configure module. My organization is considering using Mender for OTA updates for both our system and application software and I’d like to propose moving configuration over to Mender as well if it is able to be feature-complete with our current in-house solution.

  1. When I push a configuration through the hosted.mender.io frontend, the deployment succeeds and /var/lib/mender-configure/device-config.json on the device is modified. However, the frontend does not reflect the new configuration and displays the following message:
The device appears to either have an empty configuration or not to have reported a configuration yet.

It appears that the configuration state on the device does not properly make it back to the server. As a result, subsequent configuration changes will overwrite the configuration json file on the device rather than update it. My mender-client has been set up in the demo mode as advised by the starter docs if that is relevant to this situation.

  1. Does hosted.mender.io support all JSON as configuration? It appears that all values I enter are coerced to JSON strings, even valid JSON values such as the numeral 1.

I have had a positive experience so far testing Mender for OTAs and would love if we could use it for device configuration as well. Thank you for taking the time to read!

The reporting of values back to the server is supposed to be done by the /usr/share/mender/inventory/mender-inventory-mender-configure script. Can you run it manually, and look for error messages?

At the moment, only strings are supported. One workaround which has been suggested in a different thread is to embed a second JSON string inside one of the values of the primary JSON document, and then decode that. Obviously this will need some escaping of certain characters.

1 Like

Since config updates are just artifacts, I’m wondering how mender-client behaves if ArtifactVerifyKey is set to a public key file. If I understand the documentation correctly, once ArtifactVerifyKey is set, all artifacts must be signed with the corresponding private key. However, since the configuration artifact is created on the fly in Mender’s cloud it couldn’t be signed with my private key. How does this work?

It doesn’t. Configure and Signed Artifacts are mutually exclusive when using the UI. You can of course make your own signed Configure Artifact and upload that, but then it is just a normal deployment, and won’t have support through the UI.

Hello! During our testing of mender-configure, we found that if you successfully set a configuration parameter through the mender UI and then do a clean flash of the device, the parameter that was set through the mender UI is lost once the device comes back online. Is this the intended outcome?

Yes, the device is the “source of truth”. The server has the power to change the contents, but once the deployment is over, the server will obey whatever the client says that it has.

1 Like

Great! Thanks for the info!

Hello!
I have a support question regarding the mender-configure module. I have registered and activated successfully a device on the Mender Hub but when I try to initiate a configuration deployment it hangs on InProgress and the client side responds with the following error:

level=error msg="Error fetching scheduled update info: code (404)"
level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"

I am using the following mender module versions:

mender-client  2.6.1
mender-configure 1.0.3

To me the 404 doesn’t look related to mender-configure. Are you sure the server is set up correctly? Or is this Hosted Mender?

Hi @kacf,
This is a Hosted Mender. I am able to do firmware deployments, device inventory is working and IOT hub integration is also functional. The only feature that is not functioning properly is the mender-configure addon.

Hey @Chrys,

Can you please share the full Mender client logs and your device ID?

Thanks,
Fabio

Hi @tranchitella here is the mender client log.
The device id is bfc10671-24a0-480a-8b2a-b73605bfb2ff

Jun 12 14:29:58 mantis mender[4517]: time="2022-06-12T14:29:58Z" level=info msg="State transition: inventory-update [Sync] -> check-wait [Idle]"
Jun 12 14:34:58 mantis mender[4517]: time="2022-06-12T14:34:58Z" level=info msg="State transition: check-wait [Idle] -> inventory-update [Sync]"
Jun 12 14:34:58 mantis mender[4517]: time="2022-06-12T14:34:58Z" level=info msg="State transition: inventory-update [Sync] -> check-wait [Idle]"
Jun 12 14:39:58 mantis mender[4517]: time="2022-06-12T14:39:58Z" level=info msg="State transition: check-wait [Idle] -> inventory-update [Sync]"
Jun 12 14:39:58 mantis mender[4517]: time="2022-06-12T14:39:58Z" level=error msg="(request_id: ): Got unexpected HTTP status when submitting to inventory 502 server error message: <html>\r\n<head><title>502 Bad Gateway</title></head>\r\n<body>\r\n<center><h1>502 Bad Gateway</h1></center>\r\n</body>\r\n</html>\r\n"
Jun 12 14:39:58 mantis mender[4517]: time="2022-06-12T14:39:58Z" level=warning msg="Failed to refresh inventory: failed to submit inventory data: (request_id: ): Got unexpected HTTP status when submitting to inventory 502 server error message: <html>\r\n<head><title>502 Bad Gateway</title></head>\r\n<body>\r\n<center><h1>502 Bad Gateway</h1></center>\r\n</body>\r\n</html>\r\n"
Jun 12 14:39:58 mantis mender[4517]: time="2022-06-12T14:39:58Z" level=error msg="(request_id: ): Got unexpected HTTP status when submitting to inventory 502 server error message: <html>\r\n<head><title>502 Bad Gateway</title></head>\r\n<body>\r\n<center><h1>502 Bad Gateway</h1></center>\r\n</body>\r\n</html>\r\n"
Jun 12 14:39:58 mantis mender[4517]: time="2022-06-12T14:39:58Z" level=warning msg="Failed to refresh inventory: failed to submit inventory data: (request_id: ): Got unexpected HTTP status when submitting to inventory 502 server error message: <html>\r\n<head><title>502 Bad Gateway</title></head>\r\n<body>\r\n<center><h1>502 Bad Gateway</h1></center>\r\n</body>\r\n</html>\r\n"
Jun 12 14:39:58 mantis mender[4517]: time="2022-06-12T14:39:58Z" level=info msg="State transition: inventory-update [Sync] -> check-wait [Idle]"
Jun 12 14:40:26 mantis mender[4517]: time="2022-06-12T14:40:26Z" level=info msg="State transition: check-wait [Idle] -> update-check [Sync]"
...
Jun 13 10:09:58 mantis mender[4517]: time="2022-06-13T10:09:58Z" level=info msg="State transition: check-wait [Idle] -> inventory-update [Sync]"
Jun 13 10:09:58 mantis mender[4517]: time="2022-06-13T10:09:58Z" level=info msg="State transition: inventory-update [Sync] -> check-wait [Idle]"
Jun 13 10:10:26 mantis mender[4517]: time="2022-06-13T10:10:26Z" level=info msg="State transition: check-wait [Idle] -> update-check [Sync]"
Jun 13 10:10:26 mantis mender[4517]: time="2022-06-13T10:10:26Z" level=info msg="State transition: update-check [Sync] -> check-wait [Idle]"
Jun 13 10:14:58 mantis mender[4517]: time="2022-06-13T10:14:58Z" level=info msg="State transition: check-wait [Idle] -> inventory-update [Sync]"
Jun 13 10:14:58 mantis mender[4517]: time="2022-06-13T10:14:58Z" level=info msg="State transition: inventory-update [Sync] -> check-wait [Idle]"
Jun 13 10:19:58 mantis mender[4517]: time="2022-06-13T10:19:58Z" level=info msg="State transition: check-wait [Idle] -> inventory-update [Sync]"
Jun 13 10:19:58 mantis mender[4517]: time="2022-06-13T10:19:58Z" level=info msg="State transition: inventory-update [Sync] -> check-wait [Idle]"
Jun 13 10:24:58 mantis mender[4517]: time="2022-06-13T10:24:58Z" level=info msg="State transition: check-wait [Idle] -> inventory-update [Sync]"
Jun 13 10:24:58 mantis mender[4517]: time="2022-06-13T10:24:58Z" level=info msg="State transition: inventory-update [Sync] -> check-wait [Idle]"
Jun 13 10:29:58 mantis mender[4517]: time="2022-06-13T10:29:58Z" level=info msg="State transition: check-wait [Idle] -> inventory-update [Sync]"
Jun 13 10:29:58 mantis mender[4517]: time="2022-06-13T10:29:58Z" level=info msg="State transition: inventory-update [Sync] -> check-wait [Idle]"
Jun 13 10:34:58 mantis mender[4517]: time="2022-06-13T10:34:58Z" level=info msg="State transition: check-wait [Idle] -> inventory-update [Sync]"
Jun 13 10:34:58 mantis mender[4517]: time="2022-06-13T10:34:58Z" level=info msg="State transition: inventory-update [Sync] -> check-wait [Idle]"
Jun 13 10:39:58 mantis mender[4517]: time="2022-06-13T10:39:58Z" level=info msg="State transition: check-wait [Idle] -> inventory-update [Sync]"
Jun 13 10:39:59 mantis mender[4517]: time="2022-06-13T10:39:59Z" level=info msg="State transition: inventory-update [Sync] -> check-wait [Idle]"
Jun 13 10:40:26 mantis mender[4517]: time="2022-06-13T10:40:26Z" level=info msg="State transition: check-wait [Idle] -> update-check [Sync]"
Jun 13 10:40:26 mantis mender[4517]: time="2022-06-13T10:40:26Z" level=info msg="State transition: update-check [Sync] -> check-wait [Idle]"
Jun 13 10:44:58 mantis mender[4517]: time="2022-06-13T10:44:58Z" level=info msg="State transition: check-wait [Idle] -> inventory-update [Sync]"
Jun 13 10:44:58 mantis mender[4517]: time="2022-06-13T10:44:58Z" level=info msg="State transition: inventory-update [Sync] -> check-wait [Idle]"
Jun 13 10:49:20 mantis mender[4517]: time="2022-06-13T10:49:20Z" level=info msg="Forced wake-up from sleep"
Jun 13 10:49:20 mantis mender[4517]: time="2022-06-13T10:49:20Z" level=info msg="Forcing state machine to: update-check"
Jun 13 10:49:20 mantis mender[4517]: time="2022-06-13T10:49:20Z" level=info msg="State transition: check-wait [Idle] -> update-check [Sync]"
Jun 13 10:49:21 mantis mender[4517]: time="2022-06-13T10:49:21Z" level=info msg="Correct request for getting image from: https://hosted.mender.io/api/devices/v1/deployments/download/configuration/6a5af079-524e-4c90-a182-b9db09deaa22/mantis_1.0.1/bfc10671-24a0-480a-8b2a-b73605bfb2ff?tenant_id=[spoiler]60928fc7ae46a2d1a96ef34b[/spoiler]&x-men-expire=2022-06-13T11%3A04%3A21Z&x-men-signature=[spoiler]zDbFxiZ6cQy0iUFz9RIzeKgV8oYQadnYZi155uJIYAw[/spoiler] [name: configuration-6a5af079-524e-4c90-a182-b9db09deaa22; devices: [mantis_1.0.1]]"
Jun 13 10:49:21 mantis mender[4517]: time="2022-06-13T10:49:21Z" level=info msg="State transition: update-check [Sync] -> update-fetch [Download_Enter]"
Jun 13 10:49:21 mantis mender[4517]: time="2022-06-13T10:49:21Z" level=info msg="Running Mender client version: 2.6.1"
Jun 13 10:49:21 mantis mender[4517]: time="2022-06-13T10:49:21Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:49:21 mantis mender[4517]: time="2022-06-13T10:49:21Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:49:21 mantis mender[4517]: time="2022-06-13T10:49:21Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:49:21 mantis mender[4517]: time="2022-06-13T10:49:21Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:49:21 mantis mender[4517]: time="2022-06-13T10:49:21Z" level=info msg="State transition: update-fetch [Download_Enter] -> fetch-install-retry-wait [Download_Enter]"
Jun 13 10:50:21 mantis mender[4517]: time="2022-06-13T10:50:21Z" level=info msg="State transition: fetch-install-retry-wait [Download_Enter] -> update-fetch [Download_Enter]"
Jun 13 10:50:21 mantis mender[4517]: time="2022-06-13T10:50:21Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:50:21 mantis mender[4517]: time="2022-06-13T10:50:21Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:50:21 mantis mender[4517]: time="2022-06-13T10:50:21Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:50:21 mantis mender[4517]: time="2022-06-13T10:50:21Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:50:21 mantis mender[4517]: time="2022-06-13T10:50:21Z" level=info msg="State transition: update-fetch [Download_Enter] -> fetch-install-retry-wait [Download_Enter]"
Jun 13 10:51:21 mantis mender[4517]: time="2022-06-13T10:51:21Z" level=info msg="State transition: fetch-install-retry-wait [Download_Enter] -> update-fetch [Download_Enter]"
Jun 13 10:51:22 mantis mender[4517]: time="2022-06-13T10:51:22Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:51:22 mantis mender[4517]: time="2022-06-13T10:51:22Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:51:22 mantis mender[4517]: time="2022-06-13T10:51:22Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:51:22 mantis mender[4517]: time="2022-06-13T10:51:22Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:51:22 mantis mender[4517]: time="2022-06-13T10:51:22Z" level=info msg="State transition: update-fetch [Download_Enter] -> fetch-install-retry-wait [Download_Enter]"
Jun 13 10:52:22 mantis mender[4517]: time="2022-06-13T10:52:22Z" level=info msg="State transition: fetch-install-retry-wait [Download_Enter] -> update-fetch [Download_Enter]"
Jun 13 10:52:22 mantis mender[4517]: time="2022-06-13T10:52:22Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:52:22 mantis mender[4517]: time="2022-06-13T10:52:22Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:52:22 mantis mender[4517]: time="2022-06-13T10:52:22Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:52:22 mantis mender[4517]: time="2022-06-13T10:52:22Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:52:22 mantis mender[4517]: time="2022-06-13T10:52:22Z" level=info msg="State transition: update-fetch [Download_Enter] -> fetch-install-retry-wait [Download_Enter]"
Jun 13 10:54:22 mantis mender[4517]: time="2022-06-13T10:54:22Z" level=info msg="State transition: fetch-install-retry-wait [Download_Enter] -> update-fetch [Download_Enter]"
Jun 13 10:54:23 mantis mender[4517]: time="2022-06-13T10:54:23Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:54:23 mantis mender[4517]: time="2022-06-13T10:54:23Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:54:23 mantis mender[4517]: time="2022-06-13T10:54:23Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:54:23 mantis mender[4517]: time="2022-06-13T10:54:23Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:54:23 mantis mender[4517]: time="2022-06-13T10:54:23Z" level=info msg="State transition: update-fetch [Download_Enter] -> fetch-install-retry-wait [Download_Enter]"
Jun 13 10:56:23 mantis mender[4517]: time="2022-06-13T10:56:23Z" level=info msg="State transition: fetch-install-retry-wait [Download_Enter] -> update-fetch [Download_Enter]"
Jun 13 10:56:23 mantis mender[4517]: time="2022-06-13T10:56:23Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:56:23 mantis mender[4517]: time="2022-06-13T10:56:23Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:56:23 mantis mender[4517]: time="2022-06-13T10:56:23Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:56:23 mantis mender[4517]: time="2022-06-13T10:56:23Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:56:23 mantis mender[4517]: time="2022-06-13T10:56:23Z" level=info msg="State transition: update-fetch [Download_Enter] -> fetch-install-retry-wait [Download_Enter]"
Jun 13 10:58:23 mantis mender[4517]: time="2022-06-13T10:58:23Z" level=info msg="State transition: fetch-install-retry-wait [Download_Enter] -> update-fetch [Download_Enter]"
Jun 13 10:58:24 mantis mender[4517]: time="2022-06-13T10:58:24Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:58:24 mantis mender[4517]: time="2022-06-13T10:58:24Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 10:58:24 mantis mender[4517]: time="2022-06-13T10:58:24Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:58:24 mantis mender[4517]: time="2022-06-13T10:58:24Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 10:58:24 mantis mender[4517]: time="2022-06-13T10:58:24Z" level=info msg="State transition: update-fetch [Download_Enter] -> fetch-install-retry-wait [Download_Enter]"
Jun 13 11:02:24 mantis mender[4517]: time="2022-06-13T11:02:24Z" level=info msg="State transition: fetch-install-retry-wait [Download_Enter] -> update-fetch [Download_Enter]"
Jun 13 11:02:24 mantis mender[4517]: time="2022-06-13T11:02:24Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 11:02:24 mantis mender[4517]: time="2022-06-13T11:02:24Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 11:02:24 mantis mender[4517]: time="2022-06-13T11:02:24Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 11:02:24 mantis mender[4517]: time="2022-06-13T11:02:24Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 11:02:24 mantis mender[4517]: time="2022-06-13T11:02:24Z" level=info msg="State transition: update-fetch [Download_Enter] -> fetch-install-retry-wait [Download_Enter]"
Jun 13 11:06:24 mantis mender[4517]: time="2022-06-13T11:06:24Z" level=info msg="State transition: fetch-install-retry-wait [Download_Enter] -> update-fetch [Download_Enter]"
Jun 13 11:06:24 mantis mender[4517]: time="2022-06-13T11:06:24Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 11:06:24 mantis mender[4517]: time="2022-06-13T11:06:24Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 11:06:24 mantis mender[4517]: time="2022-06-13T11:06:24Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 11:06:24 mantis mender[4517]: time="2022-06-13T11:06:24Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 11:06:24 mantis mender[4517]: time="2022-06-13T11:06:24Z" level=info msg="State transition: update-fetch [Download_Enter] -> fetch-install-retry-wait [Download_Enter]"
Jun 13 11:10:24 mantis mender[4517]: time="2022-06-13T11:10:24Z" level=info msg="State transition: fetch-install-retry-wait [Download_Enter] -> update-fetch [Download_Enter]"
Jun 13 11:10:24 mantis mender[4517]: time="2022-06-13T11:10:24Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 11:10:24 mantis mender[4517]: time="2022-06-13T11:10:24Z" level=error msg="Error fetching scheduled update info: code (404)"
Jun 13 11:10:24 mantis mender[4517]: time="2022-06-13T11:10:24Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 11:10:24 mantis mender[4517]: time="2022-06-13T11:10:24Z" level=error msg="Update fetch failed: (request_id: ): error receiving scheduled update information server error message: {\"error\": {\"status_code\": 404,\"message\": \"Not Found\"}}"
Jun 13 11:10:24 mantis mender[4517]: time="2022-06-13T11:10:24Z" level=info msg="State transition: update-fetch [Download_Enter] -> fetch-install-retry-wait [Download_Enter]"

@tranchitella Let me know if the logs with --log-level debug maybe more informative for this case.

I haven’t been able to find any docs on how one would create such an artifact, how would you do this?

Apparently there is a potential bug described in an other more recent thread with the device name parser. So I consider this for now [SOLVED].