mbox series

[0/5] sysupgrade: introduce compatibility version for devices

Message ID 20200709181500.10948-1-freifunk@adrianschmutzler.de
Headers show
Series sysupgrade: introduce compatibility version for devices | expand


Adrian Schmutzler July 9, 2020, 6:14 p.m. UTC
We regularly encounter the situation that devices are subject to
changes that will make them incompatible to previous versions.
Removing SUPPORTED_DEVICES will not really be helpful in most of these
cases, as this only helps after a rename.

To solve this situation, this patchset introduces a compatibility
version for devices. It is implemented by a compat_version set for
the device and in image metadata, where old images default to 1.0.

If an incompatible change is introduced, one can increase either
the minor version (1.0->1.1) or the major version (1.0->2.0).

Minor version increment:
This will still allow sysupgrade, but require to reset config
(-n or SAVE_CONFIG=0). If sysupgrade is called without -n, a
corresponding message will be printed. If sysupgrade is called
with -n, it will just pass, with supported devices being checked
as usual. (Which will allow us to add back SUPPORTED_DEVICES for
many cases.)

Major version increment:
This is meant for potential (rare) cases where sysupgrade is
not possible at all, because it would break the device.
In this case, a warning will be printed, and -n won't help.

If image check fails because of one of the versions parts not
matching, the content of DEVICE_COMPAT_MESSAGE is printed in
addition to the generic message (if set).

For both cases, upgrade can still be forced with -F as usual.

By a small trick, this is also applied in a way that will work
sufficiently well for old devices not having the updated fwtool.sh

I hope that this will allow to improve the update experience for
incompatible changes beyond just removing SUPPORTED_DEVICES
as it has been done in the past.

This has been tested on device and appear to work.

I have no idea what this will do with LuCI...

Adrian Schmutzler (5):
  base-files: add support for compat_version on device
  base-files: fwtool: implement compatibility check for images
  base-files: fwtool: make compat_version backward compatible
  example: implement compat_version for devices

 include/image-commands.mk                     |  9 +++++--
 include/image.mk                              |  3 +++
 package/base-files/files/bin/config_generate  |  7 +++++
 .../files/lib/functions/uci-defaults.sh       |  6 +++++
 .../base-files/files/lib/upgrade/fwtool.sh    | 27 ++++++++++++++++++-
 .../generic/base-files/etc/board.d/02_network | 12 +++++++--
 target/linux/ath79/image/generic-tp-link.mk   |  3 +++
 7 files changed, 62 insertions(+), 5 deletions(-)