@@ -43,6 +43,7 @@ F: package/flutter-pi/
F: package/flutter-sdk-bin/
F: package/ivi-homescreen/
F: package/libutempter/
+F: package/mender-update-modules/
F: package/tllist/
F: support/testing/tests/package/test_flutter.py
@@ -2852,6 +2852,7 @@ menu "System tools"
source "package/mender/Config.in"
source "package/mender-connect/Config.in"
source "package/mender-grubenv/Config.in"
+ source "package/mender-update-modules/Config.in"
source "package/mfoc/Config.in"
source "package/moby-buildkit/Config.in"
source "package/mokutil/Config.in"
new file mode 100644
@@ -0,0 +1,156 @@
+config BR2_PACKAGE_MENDER_UPDATE_MODULES
+ bool "mender-update-modules"
+ depends on BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS
+ depends on BR2_INSTALL_LIBSTDCPP
+ depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # boost-log
+ depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS # boost-log
+ depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # boost-log
+ depends on BR2_USE_MMU # libglib2
+ depends on BR2_USE_WCHAR # libglib2
+ select BR2_PACKAGE_HOST_MENDER_ARTIFACT
+ select BR2_PACKAGE_MENDER
+ help
+ community supported Update Modules. An Update Module is an
+ extension to the Mender client for supporting a new type of
+ software update, such as a package manager, container,
+ bootloader or even updates of nearby microcontrollers.
+ An Update Module can be tailored to a specific device or
+ environment (e.g. update a proprietary bootloader), or be
+ more general-purpose (e.g. install a set of .deb packages.).
+
+ https://github.com/mendersoftware/mender-update-modules
+
+if BR2_PACKAGE_MENDER_UPDATE_MODULES
+
+config BR2_PACKAGE_MENDER_UPDATE_MODULES_DFU
+ bool "DFU"
+ depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb
+ select BR2_PACKAGE_DFU_UTIL
+ help
+ The DFU Update Module is able to update peripheral devices
+ connected to the device running Mender.
+ Example use-cases:
+ - Deploy firmware updates to peripheral devices using the
+ USB Device Firmware Update (DFU) protocol
+
+ https://github.com/mendersoftware/mender-update-modules/tree/master/dfu
+
+config BR2_PACKAGE_MENDER_UPDATE_MODULES_DIR_OVERLAY
+ bool "dir-overlay"
+ help
+ The Directory Overlay Update Module installs a user defined
+ file tree structure into a given destination directory in the
+ target.
+
+ Before the deploy into the destination folder on the device,
+ the Update Module will take a backup copy of the current
+ contents, allowing restore of it using the rollback mechanism
+ of the Mender client if something goes wrong. The Update
+ Module will also delete the current installed content that was
+ previously installed using the same module, this means that
+ each deployment is self contained and there is no residues
+ left on the system from the previous deployment.
+
+ Example use-cases:
+ - Deploy root filesystem overlays
+
+ https://github.com/mendersoftware/mender-update-modules/tree/master/dir-overlay
+
+config BR2_PACKAGE_MENDER_UPDATE_MODULES_DIRTY
+ bool "dirty"
+ help
+ The dirty Update Module: modify your device state without
+ installing an artifact
+ Example use-cases:
+ - You have a specific action on the device that you want to
+ run multiple times
+
+ - You want to avoid re-creating artifacts just for the sake
+ of a new version/name
+
+ - You don't want the artifact the show up in the list of
+ installed artifacts
+
+ - The module will always fail the update process, which
+ means it can never be marked as installed. So it can be
+ attempted any number of times without having to recreate
+ newly versioned artifacts.
+
+ https://github.com/mendersoftware/mender-update-modules/tree/master/dirty
+
+config BR2_PACKAGE_MENDER_UPDATE_MODULES_IPK
+ bool "ipk"
+ select BR2_PACKAGE_OPKG
+ help
+ The IPK Update Module allows opkg-based packages to be
+ installed on a device
+
+ Example use-cases:
+ - Deploy any ipk package
+
+ https://github.com/mendersoftware/mender-update-modules/tree/master/ipk
+
+config BR2_PACKAGE_MENDER_UPDATE_MODULES_REBOOT
+ bool "reboot"
+ help
+ The reboot Update Module: reboot your device remotely.
+
+ Example use-cases:
+ - Something went wrong and you have to reboot your device
+ remotely, and all access to the device you have is Mender.
+
+config BR2_PACKAGE_MENDER_UPDATE_MODULES_ROOTFS_VERSION_CHECK
+ bool "rootfs version check"
+ depends on BR2_TOOLCHAIN_HAS_THREADS # python3
+ depends on !BR2_STATIC_LIBS # python3
+ select BR2_PACKAGE_PYTHON3
+ help
+ The rootfs-version-check Update Module implements a full image
+ update with additional checks to protect against replay
+ attacks.
+
+ This is functionally equivalent to the built-in full image
+ update with an extra check to ensure the artifact name
+ follows a specific format and that installing "older" images
+ is rejected. For this reference implementaton, we simply use
+ a numeric identifier and ensure that it is larger than the
+ version installed. For actual device fleet use, you may need
+ to customize this based on your artifact naming scheme.
+
+ Example use-cases:
+ - Deploy root filesystem updates and ensure only newer
+ artifacts are installed
+
+ https://github.com/mendersoftware/mender-update-modules/tree/master/rootfs-version-check
+
+comment "rootfs version check needs a toolchain w/ threads"
+ depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS
+
+config BR2_PACKAGE_MENDER_UPDATE_MODULES_SWU
+ bool "swupdate"
+ depends on !BR2_STATIC_LIBS
+ depends on BR2_TOOLCHAIN_HAS_SYNC_4 # swupdate
+ select BR2_PACKAGE_JQ
+ select BR2_PACKAGE_SWUPDATE
+ help
+ The SWU Update Module allows deploying an SWUpdate-based
+ artifact to the device.
+
+ Example use-cases:
+ - Extend an existing platform using SWUpdate with OTA.
+
+ https://github.com/mendersoftware/mender-update-modules/tree/master/swu
+
+comment "swupdate support needs a toolchain w/ dynamic library"
+ depends on BR2_TOOLCHAIN_HAS_SYNC_4
+ depends on BR2_STATIC_LIBS
+
+endif
+
+comment "mender-update-modules needs a toolchain w/ C++, NPTL, wchar, not affected by GCC bug 64735"
+ depends on BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS
+ depends on BR2_USE_MMU
+ depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
+ depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735
+ depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \
+ !BR2_TOOLCHAIN_HAS_THREADS_NPTL
new file mode 100644
@@ -0,0 +1,3 @@
+# Locally calculated
+sha256 433279210d1f2c429ff9bcb595ef3c0d9c9a46a1daa397196edc6758b7a822aa mender-update-modules-662b237b9a09ddadbe82daeac4181be3e0cfbd4a.tar.gz
+sha256 d0f406b04e7901e6b4076bdf5fd20f9d7f04fc41681069fd8954413ac6295688 LICENSE
new file mode 100644
@@ -0,0 +1,63 @@
+################################################################################
+#
+# mender-update-modules
+#
+################################################################################
+
+MENDER_UPDATE_MODULES_VERSION = 662b237b9a09ddadbe82daeac4181be3e0cfbd4a
+MENDER_UPDATE_MODULES_SITE = $(call github,mendersoftware,mender-update-modules,$(MENDER_UPDATE_MODULES_VERSION))
+MENDER_UPDATE_MODULES_LICENSE = Apache-2.0
+MENDER_UPDATE_MODULES_LICENSE_FILES = LICENSE
+MENDER_UPDATE_MODULES_DEPENDENCIES = host-mender-artifact mender
+
+ifeq ($(BR2_PACKAGE_MENDER_UPDATE_MODULES_DFU),y)
+MENDER_UPDATE_MODULES_MODULES += dfu
+endif
+
+ifeq ($(BR2_PACKAGE_MENDER_UPDATE_MODULES_DIR_OVERLAY),y)
+MENDER_UPDATE_MODULES_MODULES += dir-overlay
+endif
+
+ifeq ($(BR2_PACKAGE_MENDER_UPDATE_MODULES_DIRTY),y)
+MENDER_UPDATE_MODULES_MODULES += dirty
+endif
+
+ifeq ($(BR2_PACKAGE_MENDER_UPDATE_MODULES_IPK),y)
+MENDER_UPDATE_MODULES_MODULES += ipk
+endif
+
+ifeq ($(BR2_PACKAGE_MENDER_UPDATE_MODULES_REBOOT),y)
+MENDER_UPDATE_MODULES_MODULES += reboot
+define MENDER_UPDATE_MODULES_INSTALL_MENDER_REBOOT_GEN
+ $(INSTALL) -D -m 0755 $(@D)/reboot/reboot-gen \
+ $(HOST_DIR)/bin/reboot-artifact-gen
+endef
+MENDER_UPDATE_MODULES_POST_INSTALL_TARGET_HOOKS += MENDER_UPDATE_MODULES_INSTALL_MENDER_REBOOT_GEN
+endif
+
+ifeq ($(BR2_PACKAGE_MENDER_UPDATE_MODULES_ROOTFS_VERSION_CHECK),y)
+MENDER_UPDATE_MODULES_DEPENDENCIES += python3
+MENDER_UPDATE_MODULES_MODULES += rootfs-version-check
+define MENDER_UPDATE_MODULES_INSTALL_MENDER_COMPARE_VERSIONS
+ $(INSTALL) -D -m 0755 $(@D)/rootfs-version-check/mender-compare-versions \
+ $(TARGET_DIR)/usr/bin/mender-compare-versions
+endef
+MENDER_UPDATE_MODULES_POST_INSTALL_TARGET_HOOKS += MENDER_UPDATE_MODULES_INSTALL_MENDER_COMPARE_VERSIONS
+endif
+
+ifeq ($(BR2_PACKAGE_MENDER_UPDATE_MODULES_SWU),y)
+MENDER_UPDATE_MODULES_MODULES += swu
+endif
+
+define MENDER_UPDATE_MODULES_INSTALL_TARGET_CMDS
+ $(foreach f,$(MENDER_UPDATE_MODULES_MODULES), \
+ $(INSTALL) -D -m 0775 $(@D)/$(f)/module/$(f) \
+ $(TARGET_DIR)/usr/share/mender/modules/v3/$(f); \
+ if [ -d $(@D)/$(f)/module-artifact-gen ]; then \
+ $(INSTALL) -D -m 0775 $(@D)/$(f)/module-artifact-gen/$(f)-artifact-gen \
+ $(HOST_DIR)/bin/$(f)-artifact-gen; \
+ fi; \
+ )
+endef
+
+$(eval $(generic-package))
Contains community supported Update Modules. An Update Module is an extension to the Mender client for supporting a new type of software update, such as a package manager, container, bootloader or even updates of nearby microcontrollers. An Update Module can be tailored to a specific device or environment (e.g. update a proprietary bootloader), or be more general-purpose (e.g. install a set of .rpm packages.). Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com> --- DEVELOPERS | 1 + package/Config.in | 1 + package/mender-update-modules/Config.in | 156 ++++++++++++++++++ .../mender-update-modules.hash | 3 + .../mender-update-modules.mk | 63 +++++++ 5 files changed, 224 insertions(+) create mode 100644 package/mender-update-modules/Config.in create mode 100644 package/mender-update-modules/mender-update-modules.hash create mode 100644 package/mender-update-modules/mender-update-modules.mk