We have a server-side app running Linux Debian. We plan to distribute the app as VM images (e.g. ovf images that can be later imported to VMware ESX servers)
Our major concern is how to organize updates of our app. I think this is more complex than just replace our app with a new version. A new version of the app may require a new version of some Linux libraries or tools (say, new libstdc++ or libssl or new grep) It may even need an entire upgrade of Linux system.
Of course the upgrade process should need as little user involvement as possible. The most straightforward is to invoke 'apt upgrade' as a pre-upgrade step for the app. But I find this approach fragile because:
- if the system part of the upgrade succeeds and the app-part of the upgrade fails it will leave us with a potentially broken system
- if the system part of the upgrade breaks half-way this will leave up with a potentially broken system
- Internet connection is required for 'apt upgrade' and the friends, which is not always the case
Therefor I am looking for a way to bundle our app together with Linux (having all needed libs and tooling) and push this to our users. This way the entire bundle will be installed on a secondary partition and will be activated after reboot. I like this 'all-in-one' approach very much since this way we have full control over what we ship and can also implement rollbacks in case something goes wrong during an update (just switch back to the original partition).
What I am looking for are the existing technologies to implement such upgrades with 'os+app' bundles Or at least keywords hints to google for them. I am interested in Linux Debian 8 in particular.