Apply preexisting provides to compiled mender uefiimg image

Hello, I am trying to generate a yocto image with preexisting provides for the mender client. I need this as I have to deploy custom update module artifacts with certain depends fields matching provides preexisting on the device. There is a MENDER_ARTIFACT_PROVIDES yocto variable available but this only adds the provides information to the mender artifact but not the compiled image. Or is there a way to modify (add new / change existing) the existing provides field during runtime? Does anyone have any suggestions on how to accomplish this?

Any thoughts please ? @kacf

Hi @GowthamSK,

indeed, this should probably be added here. We’ll look into possible implications and let you know. Thanks for bringing this up!

Greetz,
Josef

Note that the artifact_info file is deprecated, and support for it will be removed soon. Unfortunately it is not possible to have pre-existing provides data on the device after the first flash. The easiest way to resolve it is just to create an artifact which installs a dummy file in /tmp using the single-file update type, and which has all of the requires provides fields.

In the future we expect this problem to be resolved by this feature. I can’t say exactly when it will be resolved, but it has received some attention lately, so I’m hopeful.

I am trying to create a custom update module feature for the mender client using which I intend to update the firmware images in the system. The board might have multiple firmware images or a single firmware image. Each of these firmware images has its own version information. Now the custom artifact for this can have a single firmware image or multiple firmware images to be updated. My initial plan was to use the provides and depends field for the artifact to make sure that the server deploys the artifact only to the boards which are running older versions of the firmware image than what is provided by the artifact. But currently as discussed here, there is no support to have pre-existing provides on the board. Apart from the dummy file installation in /tmp, can you please tell me if there is there any other mender feature existing that can be used for this use case?

Thanks for your response @kacf. So the mender provides is stored in an LMDB database in the data partition which is available as mender-store file in the rootfs. Is it possible to edit this database during runtime using mender client? If so, I can create the provides I need after every boot.

I think you only need it upon the first boot. If so, one thing you can try is to put a dummy artifact, like the one I mentioned earlier, somewhere on the data filesystem, and then make a systemd service file which you enable at boot, which installs this artifact using mender install <ARTIFACT>. Then remove the artifact, and make the service dependent on its existence, so it won’t run more than once. This essentially replicates what MEN-2582 will do.

Thanks for your response @kacf