# Client reinstalls same artifact when installing two separate software components

**URL:** https://hub.mender.io/t/client-reinstalls-same-artifact-when-installing-two-separate-software-components/7749
**Category:** General Discussions
**Created:** [May 5, 2025, 10:09am UTC](https://hub.mender.io/t/client-reinstalls-same-artifact-when-installing-two-separate-software-components/7749 "2025-05-05T10:09:01Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![ericwenn](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/ericwenn/32/2482_2.png) [@ericwenn](https://hub.mender.io/u/ericwenn)
#### Post date: [May 5, 2025, 10:09am UTC](https://hub.mender.io/t/client-reinstalls-same-artifact-when-installing-two-separate-software-components/7749/1 "2025-05-05T10:09:01Z")

</div>

We are using Mender (client v5.0.1) for installing an OS and application updates (using docker-compose update-module). We noticed that Mender client will not skip the OS install if an application update has been installed after the OS was installed initially.

OS Artifact:

```json
{
             "clears_artifact_provides": [
                "artifact_group",
                "rootfs_image_checksum",
                "rootfs-image.*"
            ],
            "artifact_provides": {
                "artifact_name": "os-v0.50.0",
                "rootfs-image.checksum": "742a1bc8121b30c6f2e0af5c1153d6d679810237dc0edbb00bd0f5d163c0c5fe",
                "rootfs-image.update-module.app.mender_update_module": "app",
                "rootfs-image.update-module.app.version": "os-v0.50.0",
                "rootfs-image.update-module.directory.mender_update_module": "directory",
                "rootfs-image.update-module.directory.version": "os-v0.50.0",
                "rootfs-image.update-module.mender-configure.mender_update_module": "mender-configure",
                "rootfs-image.update-module.mender-configure.version": "os-v0.50.0",
                "rootfs-image.update-module.rootfs-image.mender_update_module": "rootfs-image",
                "rootfs-image.update-module.rootfs-image.version": "os-v0.50.0",
                "rootfs-image.update-module.single-file.mender_update_module": "single-file",
                "rootfs-image.update-module.single-file.version": "os-v0.50.0",
                "rootfs-image.version": "os-v0.50.0"
            },
}

```

Application artifact:

```json
{
            "artifact_provides": {
                "artifact_name": "app-v0.2.0",
                "data-partition.app.version": "e23967d2"
            },
            "clears_artifact_provides": [
                "data-partition.app.*"
            ],
}

```

Example when it is working as expected:

1. Install OS artifact (client will download → reboot → install) _expected_
2. Install OS artifact again (client will report already installed and skip) _expected_

Example when it is not working as expected:

1. Install OS artifact (client will download → reboot → install) _expected_
2. Install Application artifact (client will download → reboot → install) _expected_
3. Install OS artifact (client will download → reboot → install) **not expected**

* * *

I found this [issue](https://hub.mender.io/t/why-mender-enables-deployment-with-the-same-artifacts/5701) (and linked [JIRA ticket](https://northerntech.atlassian.net/browse/MEN-6096)) which indicates that this should be possible. Is there something wrong with the provides block in our artifacts?

* * *

Mender versions used:

- Client v5.0.1
- Self hosted server v6.3.1

---

<div class="post-metadata">

### Author: ![lluiscampos](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/lluiscampos/32/112_2.png) [@lluiscampos](https://hub.mender.io/u/lluiscampos)
#### Post date: [May 5, 2025, 1:09pm UTC](https://hub.mender.io/t/client-reinstalls-same-artifact-when-installing-two-separate-software-components/7749/2 "2025-05-05T13:09:43Z")

</div>

Hello @ericwenn

I don’t know what “Self hosted server v6.3.1” means, but if that is an Open Source server please note that provides and depends functionality is an Enterprise feature. Basically what it seems to be happening is that the server only knows about the artifact\_name, which is expected on an Open Source server.

---

<div class="post-metadata">

### Author: ![ericwenn](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/ericwenn/32/2482_2.png) [@ericwenn](https://hub.mender.io/u/ericwenn)
#### Post date: [May 5, 2025, 1:21pm UTC](https://hub.mender.io/t/client-reinstalls-same-artifact-when-installing-two-separate-software-components/7749/3 "2025-05-05T13:21:06Z")

</div>

@lluiscampos

Yes, I meant [open source Mender server v6.3.1](https://github.com/mendersoftware/mender-helm/releases/tag/mender-6.3.1).

Is this limitation documented anywhere? Based on the [Artifact API documentation](https://docs.mender.io/api/#management-api-deployments-schemas-artifact) I have not been able to find anything indicating that this is only for Enterprise.

---

<div class="post-metadata">

### Author: ![lluiscampos](https://yyz2.discourse-cdn.com/flex036/user_avatar/hub.mender.io/lluiscampos/32/112_2.png) [@lluiscampos](https://hub.mender.io/u/lluiscampos)
#### Post date: [May 6, 2025, 1:27pm UTC](https://hub.mender.io/t/client-reinstalls-same-artifact-when-installing-two-separate-software-components/7749/4 "2025-05-06T13:27:25Z")

</div>

@ericwenn To be honest this is not well documented - I will follow-up internally to see how we could improve it.

The nicely rendered API docs at [Mender API docs](https://docs.mender.io/api) are Enterprise only, for the OS you need to check the Git repo.

The API we need to look at is how the devices get the Artifact:

- A device talking hosted Mender or otherwise an Enterprise installation, uses this API: [Mender API docs](https://docs.mender.io/api/#device-api-deployments-v2)

- A device talking to an Open Source server will fallback to this other API: [mender-server/backend/docs/api/devices\_v1\_deployments.yaml at 52b44cdad22166593f18c95f03951860f6d2091f · mendersoftware/mender-server · GitHub](https://github.com/mendersoftware/mender-server/blob/52b44cdad22166593f18c95f03951860f6d2091f/backend/docs/api/devices_v1_deployments.yaml#L12)

Note there that only the former has `device_provides` in the API.

Lluis
