Another question from a user came in over email that was generic enough to warrant a reply here for further discussion. Essentially the question relates to how to handle updates when using a combination of full image and application (or other incremental update module) updates.
Obviously when installing, for instance, app-v2, on top of full-v1, then you need to consider how to roll the app update back into your full golden master image so that future devices can be provisioned to match. There are a couple of strategies I can envision here.
Do nothing. This basically means when you provision new devices, you will also need to explicitly do all the application based updates on top of the golden master to ensure the devices are in sync. This can work for small device fleets with only a small number of updates but it can quickly become unwieldy. Additionally, it doesn’t necessarily account for future updates to the golden master which we all know are coming as issues are discovered in upstream project.
Keep the golden master updated with all the application updates as they are made. This may be difficult depending on your build tooling, number of developers, and number of updates. The big advantage here is that you always have an up-to-date golden master that can be provisioned onto new devices in a single step. With a little thought in your build tooling, this can be simplified but you will need to plan up front. This is one of the big advantages of using a build system of some sort.
A hybrid of the above where you update the golden master on a less frequent basis.
Additionally, assuming you are using mender-convert, there are basically two workflows for full image updates that will have interactions with the above:
Do all your work on a non-mender-integrated device and then run mender-convert when you want to generate the next round of full system updates. In this case the non-mender-integrated system is your golden master which is then post-processed with mender-convert to generate the OTA artifact.
Do all your work on a live device that already has Mender integrated using mender-convert, and then use the new Mender snapshotting feature to create an OTA artifact directly from the live device. Full details of this feature are here: https://docs.mender.io/2.3/artifacts/snapshots
We’d love to hear from other users how they are handling the workflows with both full image and incremental updates.