From ee9ca7820d0ab63e9e81c14a461139d6374dff99 Mon Sep 17 00:00:00 2001 From: Anton Gerasimov Date: Mon, 8 Oct 2018 12:19:53 +0200 Subject: Add contributor/reviewer checklist --- CONTRIBUTING.adoc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index 93a0815..b719d30 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -3,3 +3,15 @@ We welcome pull requests from anyone. The master branch is the primary branch for development, and if you wish to add new functionality, it probably belongs there. We attempt to maintain recent previous branches and welcome bug fixes and backports for those. Currently, the actively maintained branches are sumo, rocko, and pyro. Previously, morty was also a stable branch, but it has not been updated or actively maintained for a while. If you are developing with meta-updater, it may be helpful to read the README and other documentation for link:README.adoc[this repo], https://github.com/advancedtelematic/aktualizr[aktualizr], and the https://github.com/advancedtelematic/updater-repo/[updater-repo], particularly the sections about development and debugging. + +== Contributor checklist + +* OTA-enabled build succeeds at least for one platform, the resulted image boots. This check is absolutely necessary for every pull request unless it only touches documentation. +* If your change is touching platform code (like `classes/sota_.bbclass`), please check build and update on this particular platform. +* oe-selftest succeeds. To test meta-updater, run `oe-selftest -r updater` from a build directory with `MACHINE` set to `qemux86-64`. +* Updates are forwards- and backwards-compatible. You should be able to update an OTA-enabled build before the change is applied to the version with change applied and vice versa. One should pay double attention to the compatibility when bootloader code is affected. + +We understand that making all these tests might be overly tedious taking in account build times in Yocto. Please add a comment to your PR describing the tests you've made. + +== Approval +PR approval should be accompanied by a comment describing what tests have been made by the reviewer. -- cgit v1.2.3-54-g00ecf From 7479d1b8ee4379f5822100d4337628cf520760f2 Mon Sep 17 00:00:00 2001 From: Patrick Vacek Date: Thu, 4 Oct 2018 16:45:16 +0200 Subject: aktualizr: remove example-interface. --- lib/oeqa/selftest/cases/updater.py | 9 +-------- recipes-sota/aktualizr/aktualizr_git.bb | 4 +--- recipes-sota/config/aktualizr-example-interface.bb | 21 --------------------- recipes-sota/config/files/30-example-interface.toml | 2 -- 4 files changed, 2 insertions(+), 34 deletions(-) delete mode 100644 recipes-sota/config/aktualizr-example-interface.bb delete mode 100644 recipes-sota/config/files/30-example-interface.toml diff --git a/lib/oeqa/selftest/cases/updater.py b/lib/oeqa/selftest/cases/updater.py index 38bdcbf..b555d92 100644 --- a/lib/oeqa/selftest/cases/updater.py +++ b/lib/oeqa/selftest/cases/updater.py @@ -150,8 +150,6 @@ class AutoProvTests(OESelftestTestCase): self.meta_qemu = None self.append_config('MACHINE = "qemux86-64"') self.append_config('SOTA_CLIENT_PROV = " aktualizr-auto-prov "') - # Test aktualizr-example-interface package. - self.append_config('IMAGE_INSTALL_append = " aktualizr-examples aktualizr-example-interface "') self.qemu, self.s = qemu_launch(machine='qemux86-64') def tearDownLocal(self): @@ -185,12 +183,6 @@ class AutoProvTests(OESelftestTestCase): self.assertTrue(ran_ok, 'aktualizr-info failed: ' + stderr.decode() + stdout.decode()) verifyProvisioned(self, machine) - # Test aktualizr-example-interface package. - stdout, stderr, retcode = self.qemu_command('aktualizr-info') - self.assertIn(b'hardware ID: example1', stdout, - 'Legacy secondary initialization failed: ' + stderr.decode() + stdout.decode()) - self.assertIn(b'hardware ID: example2', stdout, - 'Legacy secondary initialization failed: ' + stderr.decode() + stdout.decode()) class ManualControlTests(OESelftestTestCase): @@ -562,6 +554,7 @@ class HsmTests(OESelftestTestCase): verifyProvisioned(self, machine) + class SecondaryTests(OESelftestTestCase): @classmethod def setUpClass(cls): diff --git a/recipes-sota/aktualizr/aktualizr_git.bb b/recipes-sota/aktualizr/aktualizr_git.bb index 29164ed..f9ddbb4 100755 --- a/recipes-sota/aktualizr/aktualizr_git.bb +++ b/recipes-sota/aktualizr/aktualizr_git.bb @@ -26,7 +26,7 @@ SRC_URI = " \ file://aktualizr-secondary.socket \ file://aktualizr-serialcan.service \ " -SRCREV = "512ad74c0b5339ca7775d8c9461b565a9e6ff5b3" +SRCREV = "6b0114e4fad0619d16ed2063e8ff10e3fb8500f2" BRANCH ?= "master" S = "${WORKDIR}/git" @@ -97,8 +97,6 @@ FILES_${PN} = " \ FILES_${PN}-examples = " \ ${libdir}/sota/demo_secondary.json \ - ${bindir}/example-interface \ - ${bindir}/isotp-test-interface \ ${bindir}/hmi_stub \ " diff --git a/recipes-sota/config/aktualizr-example-interface.bb b/recipes-sota/config/aktualizr-example-interface.bb deleted file mode 100644 index ac75352..0000000 --- a/recipes-sota/config/aktualizr-example-interface.bb +++ /dev/null @@ -1,21 +0,0 @@ -SUMMARY = "Aktualizr example interface" -DESCRIPTION = "Aktualizr example interface for legacy secondaries" -HOMEPAGE = "https://github.com/advancedtelematic/aktualizr" -SECTION = "base" -LICENSE = "MPL-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MPL-2.0;md5=815ca599c9df247a0c7f619bab123dad" - -SRC_URI = " \ - file://30-example-interface.toml \ - " - -do_install_append () { - install -m 0700 -d ${D}${libdir}/sota/conf.d - install -m 0644 ${WORKDIR}/30-example-interface.toml ${D}${libdir}/sota/conf.d/30-example-interface.toml -} - -FILES_${PN} = " \ - ${libdir}/sota/conf.d/30-example-interface.toml \ - " - -# vim:set ts=4 sw=4 sts=4 expandtab: diff --git a/recipes-sota/config/files/30-example-interface.toml b/recipes-sota/config/files/30-example-interface.toml deleted file mode 100644 index fc4e9ec..0000000 --- a/recipes-sota/config/files/30-example-interface.toml +++ /dev/null @@ -1,2 +0,0 @@ -[uptane] -legacy_interface = "/usr/bin/example-interface" -- cgit v1.2.3-54-g00ecf From f6ff676f507bdad1f5f0fd0638d882e46acc5e32 Mon Sep 17 00:00:00 2001 From: Patrick Vacek Date: Tue, 9 Oct 2018 09:34:27 +0200 Subject: aktualizr: remove BUILD_ISTOP flag. --- recipes-sota/aktualizr/aktualizr_git.bb | 1 - 1 file changed, 1 deletion(-) diff --git a/recipes-sota/aktualizr/aktualizr_git.bb b/recipes-sota/aktualizr/aktualizr_git.bb index f9ddbb4..751f529 100755 --- a/recipes-sota/aktualizr/aktualizr_git.bb +++ b/recipes-sota/aktualizr/aktualizr_git.bb @@ -48,7 +48,6 @@ EXTRA_OECMAKE = "-DWARNING_AS_ERROR=OFF \ -DAKTUALIZR_VERSION=${PV} \ -DBUILD_LOAD_TESTS=OFF" EXTRA_OECMAKE_append_class-target = " -DBUILD_OSTREE=ON \ - -DBUILD_ISOTP=ON \ ${@bb.utils.contains('SOTA_CLIENT_FEATURES', 'hsm', '-DBUILD_P11=ON', '', d)} " EXTRA_OECMAKE_append_class-native = " -DBUILD_SOTA_TOOLS=ON \ -DBUILD_OSTREE=OFF \ -- cgit v1.2.3-54-g00ecf From 2e3740d5359f1689491257b32abc069db85095bd Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Tue, 9 Oct 2018 14:32:17 +0200 Subject: ostree: drop libgsystem dependency OSTree removed libgsystem dependency since v2016.8. Drop it from the OSTree recipe too. Signed-off-by: Stefan Agner --- recipes-sota/ostree/ostree_git.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes-sota/ostree/ostree_git.bb b/recipes-sota/ostree/ostree_git.bb index 501d636..3e3c951 100644 --- a/recipes-sota/ostree/ostree_git.bb +++ b/recipes-sota/ostree/ostree_git.bb @@ -15,7 +15,7 @@ S = "${WORKDIR}/git" BBCLASSEXTEND = "native" -DEPENDS += "attr bison-native libarchive libcap glib-2.0 gpgme libgsystem fuse e2fsprogs curl xz" +DEPENDS += "attr bison-native libarchive libcap glib-2.0 gpgme fuse e2fsprogs curl xz" DEPENDS += "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}" RDEPENDS_${PN}-dracut = "bash" -- cgit v1.2.3-54-g00ecf From 4e686a4099c341e89b9a3c4a3b2757bfbd6e48f5 Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Tue, 9 Oct 2018 14:33:02 +0200 Subject: libgsystem: drop recipe OSTree does not use libgsystem as a dependency any longer. Drop the recipe too. Signed-off-by: Stefan Agner --- recipes-support/libgsystem/libgsystem_git.bb | 40 ---------------------------- 1 file changed, 40 deletions(-) delete mode 100644 recipes-support/libgsystem/libgsystem_git.bb diff --git a/recipes-support/libgsystem/libgsystem_git.bb b/recipes-support/libgsystem/libgsystem_git.bb deleted file mode 100644 index e2b362f..0000000 --- a/recipes-support/libgsystem/libgsystem_git.bb +++ /dev/null @@ -1,40 +0,0 @@ -SUMMARY = "GIO-based library, targeted primarily for use by operating system components" -LICENSE = "GPLv2+" -LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2" - -SRC_URI = "gitsm://github.com/GNOME/libgsystem.git" -SRCREV="d606bec68ddfea78de4b03c3f3568afb71bdc1ce" - -S = "${WORKDIR}/git" - -inherit autotools-brokensep gobject-introspection - -DEPENDS += "attr glib-2.0 pkgconfig libcap gtk-doc-native gpgme" -RDEPENDS_${PN} = "xz " -RDEPENDS_${PN}_append = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', ' systemd', '', d)}" - -RDEPENDS_${PN}_remove_class-native = "systemd-native" - -BBCLASSEXTEND = "native" - -export STAGING_INCDIR -export STAGING_LIBDIR - -do_configure() { - #NOCONFIGURE=true ./autogen.sh - autoreconf -vfi - oe_runconf -} - -do_compile_prepend() { - export BUILD_SYS="${BUILD_SYS}" - export HOST_SYS="${HOST_SYS}" -} - -FILES_${PN} += " \ - ${datadir} \ - ${datadir}/gir-1.0 \ - ${datadir}/gir-1.0/GSystem-1.0.gir \ - ${libdir}/girepository-1.0/ \ - ${libdir}/girepository-1.0/GSystem-1.0.typelib \ -" -- cgit v1.2.3-54-g00ecf From 1244dd5704885f2e5f739a2331b2ebbc01ad2cfe Mon Sep 17 00:00:00 2001 From: Patrick Vacek Date: Tue, 9 Oct 2018 17:28:55 +0200 Subject: CONTRIBUTING.adoc: Add rebasing requirement. --- CONTRIBUTING.adoc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index b719d30..73fc3c3 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -6,12 +6,14 @@ If you are developing with meta-updater, it may be helpful to read the README an == Contributor checklist -* OTA-enabled build succeeds at least for one platform, the resulted image boots. This check is absolutely necessary for every pull request unless it only touches documentation. -* If your change is touching platform code (like `classes/sota_.bbclass`), please check build and update on this particular platform. +* OTA-enabled build succeeds at least for one platform, the resulted image boots, and an update can be installed. This check is absolutely necessary for every pull request unless it only touches documentation. +* If your change touches platform code (like `classes/sota_.bbclass`), please check building and updating on this particular platform. * oe-selftest succeeds. To test meta-updater, run `oe-selftest -r updater` from a build directory with `MACHINE` set to `qemux86-64`. * Updates are forwards- and backwards-compatible. You should be able to update an OTA-enabled build before the change is applied to the version with change applied and vice versa. One should pay double attention to the compatibility when bootloader code is affected. +* The patch/branch should be based on the latest version of the target branch. This may mean that rebasing is necessary if other PRs are merged before yours is approved. -We understand that making all these tests might be overly tedious taking in account build times in Yocto. Please add a comment to your PR describing the tests you've made. +We understand that completing all these tasks might be overly tedious due to build times in Yocto. Please add a comment to your PR describing the tests you've done. == Approval -PR approval should be accompanied by a comment describing what tests have been made by the reviewer. + +PR approval should be accompanied by a comment describing what tests have been done by the reviewer. -- cgit v1.2.3-54-g00ecf From 508ba8019ffb4a9d4d3e68fffcd7b284df757c44 Mon Sep 17 00:00:00 2001 From: Patrick Vacek Date: Wed, 10 Oct 2018 11:28:42 +0200 Subject: Fix README formatting. Apparently linebreaks matter. --- README.adoc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.adoc b/README.adoc index 8b761b6..aadad2d 100644 --- a/README.adoc +++ b/README.adoc @@ -200,14 +200,16 @@ oe-selftest --run-tests updater For more information about oe-selftest, including details about how to run individual test modules or classes, please refer to the https://wiki.yoctoproject.org/wiki/Oe-selftest[Yocto Project wiki]. == Manual provisoning + As described in <> section you can set `SOTA_DEPLOY_CREDENTIALS` to `0` to prevent deploying credentials to the built `wic` image. In this case you get a generic image that you can use e.g. on a production line to flash a series of devices. The cost of this approach is that this image is half-baked and should be provisioned before it can connect to the backend. -Provisioning procedure depends on your provisioning recipe, i.e. the value of `SOTA_CLIENT_PROV` (equal to `aktualizr-auto-prov` by default). +Provisioning procedure depends on your provisioning recipe, i.e. the value of `SOTA_CLIENT_PROV` (equal to `aktualizr-auto-prov` by default): + * For `aktualizr-auto-prov` put your `credentials.zip` to `/var/sota/sota_provisioning_credentials.zip` on the filesystem of a running device. If you have the filesystem of our device mounted to your build machine, prefix all paths with `/ostree/deploy/poky` as in `/ostree/deploy/poky/var/sota/sota_provisioning_credentials.zip`. * For `aktualizr-ca-implicit-prov` -** put URL to the used backend (together with protocol prefix and port number) to `/var/sota/gateway.url`. If you're using HERE OTA Connect, you can find the URL in `autoprov.url` file in your credentials archive. -** put client certificate, private key and root CA certificate (for the *server*, not for the *device*) to `/var/sota/import/client.pem`, `/var/sota/import/pkey.pem` and `/var/sota/import/root.crt` respectively. +** put URL to the backend server (together with protocol prefix and port number) at `/var/sota/gateway.url`. If you're using HERE OTA Connect, you can find the URL in the `autoprov.url` file in your credentials archive. +** put client certificate, private key and root CA certificate (for the *server*, not for the *device*) at `/var/sota/import/client.pem`, `/var/sota/import/pkey.pem` and `/var/sota/import/root.crt` respectively. * For `aktualizr-hsm-prov` -** put URL to the used backend (together with protocol prefix and port number) to `/var/sota/gateway.url`. If you're using HERE OTA Connect, you can find the URL in `autoprov.url` file in your credentials archive. -** put root CA certificate (for the *server*, not for the *device*) to `/var/sota/import/root.crt`. +** put URL to the server backend (together with protocol prefix and port number) at `/var/sota/gateway.url`. If you're using HERE OTA Connect, you can find the URL in the `autoprov.url` file in your credentials archive. +** put root CA certificate (for the *server*, not for the *device*) at `/var/sota/import/root.crt`. ** put client certificate and private key to slots 1 and 2 of the PKCS#11-compatible device. -- cgit v1.2.3-54-g00ecf From 3e25670bbcb3bb9a8edc60d886ad2a359d5adcf7 Mon Sep 17 00:00:00 2001 From: Laurent Bonnans Date: Thu, 25 Oct 2018 13:49:59 +0200 Subject: Update aktualizr example secondary config path --- recipes-sota/aktualizr/aktualizr_git.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/recipes-sota/aktualizr/aktualizr_git.bb b/recipes-sota/aktualizr/aktualizr_git.bb index 751f529..2a28cab 100755 --- a/recipes-sota/aktualizr/aktualizr_git.bb +++ b/recipes-sota/aktualizr/aktualizr_git.bb @@ -26,7 +26,7 @@ SRC_URI = " \ file://aktualizr-secondary.socket \ file://aktualizr-serialcan.service \ " -SRCREV = "6b0114e4fad0619d16ed2063e8ff10e3fb8500f2" +SRCREV = "ad771bc77a8ec28f94a7da11d7d9a70f555e1ba5" BRANCH ?= "master" S = "${WORKDIR}/git" @@ -57,7 +57,7 @@ EXTRA_OECMAKE_append_class-native = " -DBUILD_SOTA_TOOLS=ON \ do_install_append () { rm -fr ${D}${libdir}/systemd - rm -f ${D}${libdir}/sota/sota.toml # Only needed for the Debian package + rm -f ${D}${libdir}/sota/conf.d/sota.toml # Only needed for the Debian package install -d ${D}${libdir}/sota install -m 0644 ${S}/config/sota_autoprov.toml ${D}/${libdir}/sota/sota_autoprov.toml install -m 0644 ${S}/config/sota_autoprov_primary.toml ${D}/${libdir}/sota/sota_autoprov_primary.toml @@ -95,7 +95,7 @@ FILES_${PN} = " \ " FILES_${PN}-examples = " \ - ${libdir}/sota/demo_secondary.json \ + ${libdir}/sota/secondaries/demo_secondary.json \ ${bindir}/hmi_stub \ " -- cgit v1.2.3-54-g00ecf From 55a50542450ad7f9457055a18bffbd3064f99ff8 Mon Sep 17 00:00:00 2001 From: Laurent Bonnans Date: Thu, 25 Oct 2018 16:47:02 +0200 Subject: Remove aktualizr hacks related to ubuntu support --- recipes-sota/aktualizr/aktualizr_git.bb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/recipes-sota/aktualizr/aktualizr_git.bb b/recipes-sota/aktualizr/aktualizr_git.bb index 2a28cab..916ab4b 100755 --- a/recipes-sota/aktualizr/aktualizr_git.bb +++ b/recipes-sota/aktualizr/aktualizr_git.bb @@ -26,7 +26,8 @@ SRC_URI = " \ file://aktualizr-secondary.socket \ file://aktualizr-serialcan.service \ " -SRCREV = "ad771bc77a8ec28f94a7da11d7d9a70f555e1ba5" + +SRCREV = "39acfec48d1cb91e7621c818ac177f6d3c73fecc" BRANCH ?= "master" S = "${WORKDIR}/git" @@ -56,8 +57,6 @@ EXTRA_OECMAKE_append_class-native = " -DBUILD_SOTA_TOOLS=ON \ -DGARAGE_SIGN_SHA256=${GARAGE_SIGN_SHA256}" do_install_append () { - rm -fr ${D}${libdir}/systemd - rm -f ${D}${libdir}/sota/conf.d/sota.toml # Only needed for the Debian package install -d ${D}${libdir}/sota install -m 0644 ${S}/config/sota_autoprov.toml ${D}/${libdir}/sota/sota_autoprov.toml install -m 0644 ${S}/config/sota_autoprov_primary.toml ${D}/${libdir}/sota/sota_autoprov_primary.toml @@ -95,7 +94,6 @@ FILES_${PN} = " \ " FILES_${PN}-examples = " \ - ${libdir}/sota/secondaries/demo_secondary.json \ ${bindir}/hmi_stub \ " -- cgit v1.2.3-54-g00ecf From 5a6f0efa37c4bfd9ee76f0ed99c16e758449df1e Mon Sep 17 00:00:00 2001 From: Patrick Vacek Date: Mon, 29 Oct 2018 11:59:13 +0100 Subject: aktualizr: Remove implicit_writer. It is now unused. Bump to the latest version as well. --- lib/oeqa/selftest/cases/updater.py | 4 +--- recipes-sota/aktualizr/aktualizr_git.bb | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/oeqa/selftest/cases/updater.py b/lib/oeqa/selftest/cases/updater.py index b555d92..715a137 100644 --- a/lib/oeqa/selftest/cases/updater.py +++ b/lib/oeqa/selftest/cases/updater.py @@ -102,9 +102,6 @@ class AktualizrToolsTests(OESelftestTestCase): logger.info('Running bitbake to build aktualizr-native tools') bitbake('aktualizr-native') - def test_implicit_writer_help(self): - akt_native_run(self, 'aktualizr_implicit_writer --help') - def test_cert_provider_help(self): akt_native_run(self, 'aktualizr_cert_provider --help') @@ -228,6 +225,7 @@ class ManualControlTests(OESelftestTestCase): self.assertIn(b'Fetched metadata: yes', stdout, 'Aktualizr should have run' + stderr.decode() + stdout.decode()) + class RpiTests(OESelftestTestCase): def setUpLocal(self): diff --git a/recipes-sota/aktualizr/aktualizr_git.bb b/recipes-sota/aktualizr/aktualizr_git.bb index 916ab4b..50a9f16 100755 --- a/recipes-sota/aktualizr/aktualizr_git.bb +++ b/recipes-sota/aktualizr/aktualizr_git.bb @@ -27,7 +27,7 @@ SRC_URI = " \ file://aktualizr-serialcan.service \ " -SRCREV = "39acfec48d1cb91e7621c818ac177f6d3c73fecc" +SRCREV = "3c1c77c005fc1f872f1e12080528ed6f8a32bbf3" BRANCH ?= "master" S = "${WORKDIR}/git" @@ -100,7 +100,6 @@ FILES_${PN}-examples = " \ FILES_${PN}-host-tools = " \ ${bindir}/aktualizr-repo \ ${bindir}/aktualizr_cert_provider \ - ${bindir}/aktualizr_implicit_writer \ ${bindir}/garage-deploy \ ${bindir}/garage-push \ ${libdir}/sota/sota_autoprov.toml \ -- cgit v1.2.3-54-g00ecf From 55fef35b5c81dd3aeb030edbd609b915e2b27f80 Mon Sep 17 00:00:00 2001 From: Patrick Vacek Date: Tue, 30 Oct 2018 11:48:49 +0100 Subject: Fix typos. --- CONTRIBUTING.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index 73fc3c3..3d0f14d 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -6,7 +6,7 @@ If you are developing with meta-updater, it may be helpful to read the README an == Contributor checklist -* OTA-enabled build succeeds at least for one platform, the resulted image boots, and an update can be installed. This check is absolutely necessary for every pull request unless it only touches documentation. +* OTA-enabled build succeeds for at least one platform, the resulting image boots, and an update can be installed. This check is absolutely necessary for every pull request unless it only touches documentation. * If your change touches platform code (like `classes/sota_.bbclass`), please check building and updating on this particular platform. * oe-selftest succeeds. To test meta-updater, run `oe-selftest -r updater` from a build directory with `MACHINE` set to `qemux86-64`. * Updates are forwards- and backwards-compatible. You should be able to update an OTA-enabled build before the change is applied to the version with change applied and vice versa. One should pay double attention to the compatibility when bootloader code is affected. -- cgit v1.2.3-54-g00ecf