* [Buildroot] [PATCH v3 1/6] package/mender-update-modules: add banner module
@ 2026-10-28 11:33 Adam Duskett
2026-10-28 11:33 ` [Buildroot] [PATCH v3 2/6] board/mender/x86_64/readme.txt: fix documentation Adam Duskett
` (5 more replies)
0 siblings, 6 replies; 9+ messages in thread
From: Adam Duskett @ 2026-10-28 11:33 UTC (permalink / raw)
To: buildroot; +Cc: Adam Duskett, Angelo Compagnucci
Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
---
v2 -> v3: Fixed github link [Thomas]
package/mender-update-modules/Config.in | 12 ++++++++++++
.../mender-update-modules/mender-update-modules.mk | 4 ++++
2 files changed, 16 insertions(+)
diff --git a/package/mender-update-modules/Config.in b/package/mender-update-modules/Config.in
index 0c00ce2933..01439b30a4 100644
--- a/package/mender-update-modules/Config.in
+++ b/package/mender-update-modules/Config.in
@@ -16,6 +16,18 @@ config BR2_PACKAGE_MENDER_UPDATE_MODULES
if BR2_PACKAGE_MENDER_UPDATE_MODULES
+config BR2_PACKAGE_MENDER_UPDATE_MODULES_BANNER
+ bool "banner"
+ help
+ The Banner Update Module manages the system's message of
+ the day (MOTD) displayed when users log in via SSH or
+ console. It uses metadata-driven updates to change the
+ banner text without requiring any file payload, supports
+ rollback functionality, and operates without requiring
+ system reboots.
+
+ https://github.com/mendersoftware/mender-update-modules/tree/master/banner
+
config BR2_PACKAGE_MENDER_UPDATE_MODULES_DFU
bool "DFU"
depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libusb
diff --git a/package/mender-update-modules/mender-update-modules.mk b/package/mender-update-modules/mender-update-modules.mk
index c0b69de7e6..f3ea0e15cd 100644
--- a/package/mender-update-modules/mender-update-modules.mk
+++ b/package/mender-update-modules/mender-update-modules.mk
@@ -12,6 +12,10 @@ MENDER_UPDATE_MODULES_DEPENDENCIES = host-mender-artifact mender
MENDER_UPDATE_MODULES_MODULES = script
+ifeq ($(BR2_PACKAGE_MENDER_UPDATE_MODULES_BANNER),y)
+MENDER_UPDATE_MODULES_MODULES += banner
+endif
+
ifeq ($(BR2_PACKAGE_MENDER_UPDATE_MODULES_DFU),y)
MENDER_UPDATE_MODULES_MODULES += dfu
endif
--
2.56.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Buildroot] [PATCH v3 2/6] board/mender/x86_64/readme.txt: fix documentation
2026-10-28 11:33 [Buildroot] [PATCH v3 1/6] package/mender-update-modules: add banner module Adam Duskett
@ 2026-10-28 11:33 ` Adam Duskett
2026-10-28 11:33 ` [Buildroot] [PATCH v3 3/6] board/mender/x86_64: add a udev rule to create /dev/root Adam Duskett
` (4 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Adam Duskett @ 2026-10-28 11:33 UTC (permalink / raw)
To: buildroot; +Cc: Adam Duskett, Angelo Compagnucci
Starting with commit 073c81c8cd233fa6e3a7067e3542ef0f56f28621, the
${COMPATIBLE_TYPES} variable is no longer prepended to the artifact
name. Update the documentation accordingly.
Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
---
v2 -> v3: Added to the series
board/mender/x86_64/readme.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/board/mender/x86_64/readme.txt b/board/mender/x86_64/readme.txt
index 01a0254511..01cf4077b7 100644
--- a/board/mender/x86_64/readme.txt
+++ b/board/mender/x86_64/readme.txt
@@ -53,12 +53,12 @@ Optional arguments:
The login prompt will appear in the serial window.
-Tested with QEMU 4.1.1 on Fedora 31
+Tested with QEMU 10.2.2 on Fedora 44
Creating a mender-artifact
========================
-The mender artifact is created in output/images/buildroot-x86_64-1.0.mender
+The mender artifact is created in output/images/1.0.mender
You may wish to change --artifact-name=1.0 to a name that best suits your
particular needs, as this option changes the mender artifact name.
--
2.56.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Buildroot] [PATCH v3 3/6] board/mender/x86_64: add a udev rule to create /dev/root
2026-10-28 11:33 [Buildroot] [PATCH v3 1/6] package/mender-update-modules: add banner module Adam Duskett
2026-10-28 11:33 ` [Buildroot] [PATCH v3 2/6] board/mender/x86_64/readme.txt: fix documentation Adam Duskett
@ 2026-10-28 11:33 ` Adam Duskett
2026-10-28 11:33 ` [Buildroot] [PATCH v3 4/6] test_mender/post-build.sh: use /etc/mender/device_type Adam Duskett
` (3 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Adam Duskett @ 2026-10-28 11:33 UTC (permalink / raw)
To: buildroot; +Cc: Adam Duskett, Angelo Compagnucci
As /dev/root does not appear automatically, add a rule to
create /dev/root. Without this rule, even running a simple command
such as `mender -version` outputs the following warning:
```
WARN[0000] Could not resolve path link: /dev/root Attempting to continue
WARN[0000] Could not resolve path link: /dev/root Attempting to continue
```
Note: This rule is only guaranteed to work properly with the
mender_x86_64_efi_defconfig example configuration.
Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
---
v2 -> v3: Added a comment that this change is only guaranteed to work
with the mender_x86_64_efi_defconfig [Thomas]
.../mender/x86_64/overlay/etc/udev/rules.d/99-root-symlink.rules | 1 +
1 file changed, 1 insertion(+)
create mode 100644 board/mender/x86_64/overlay/etc/udev/rules.d/99-root-symlink.rules
diff --git a/board/mender/x86_64/overlay/etc/udev/rules.d/99-root-symlink.rules b/board/mender/x86_64/overlay/etc/udev/rules.d/99-root-symlink.rules
new file mode 100644
index 0000000000..7d2ae8cb89
--- /dev/null
+++ b/board/mender/x86_64/overlay/etc/udev/rules.d/99-root-symlink.rules
@@ -0,0 +1 @@
+SUBSYSTEM=="block", ACTION=="add|change", PROGRAM="/bin/grep -q root=/dev/%k /proc/cmdline", SYMLINK+="root"
--
2.56.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Buildroot] [PATCH v3 4/6] test_mender/post-build.sh: use /etc/mender/device_type
2026-10-28 11:33 [Buildroot] [PATCH v3 1/6] package/mender-update-modules: add banner module Adam Duskett
2026-10-28 11:33 ` [Buildroot] [PATCH v3 2/6] board/mender/x86_64/readme.txt: fix documentation Adam Duskett
2026-10-28 11:33 ` [Buildroot] [PATCH v3 3/6] board/mender/x86_64: add a udev rule to create /dev/root Adam Duskett
@ 2026-10-28 11:33 ` Adam Duskett
2026-10-28 11:33 ` [Buildroot] [PATCH v3 5/6] package/mender: bump to version 5.2.0 Adam Duskett
` (2 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Adam Duskett @ 2026-10-28 11:33 UTC (permalink / raw)
To: buildroot; +Cc: Adam Duskett, Angelo Compagnucci
To keep parity with board/mender/x86_64/overlay/etc/mender/mender.conf,
change /var/lib/mender/device_type to /etc/mender/device_type and
add a /etc/mender/mender.conf file.
Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
---
V2 -> V3: s/parody/parity/ [Thomas]
.../testing/tests/package/test_mender/post-build.sh | 3 +--
.../test_mender/rootfs-overlay/etc/mender/mender.conf | 11 +++++++++++
2 files changed, 12 insertions(+), 2 deletions(-)
create mode 100644 support/testing/tests/package/test_mender/rootfs-overlay/etc/mender/mender.conf
diff --git a/support/testing/tests/package/test_mender/post-build.sh b/support/testing/tests/package/test_mender/post-build.sh
index db075628e0..f27b0f9417 100755
--- a/support/testing/tests/package/test_mender/post-build.sh
+++ b/support/testing/tests/package/test_mender/post-build.sh
@@ -21,8 +21,7 @@ generate_mender_bootstrap_artifact() {
function mender_fixup() {
rm -rf "${TARGET_DIR}"/var/lib/mender
mkdir -p "${TARGET_DIR}"/var/lib/mender
- echo "device_type=${COMPATIBLE_TYPE}" > "${TARGET_DIR}"/var/lib/mender/device_type
-
+ echo "device_type=${COMPATIBLE_TYPE}" > "${TARGET_DIR}"/etc/mender/device_type
}
mender_fixup
diff --git a/support/testing/tests/package/test_mender/rootfs-overlay/etc/mender/mender.conf b/support/testing/tests/package/test_mender/rootfs-overlay/etc/mender/mender.conf
new file mode 100644
index 0000000000..5f423fb2cb
--- /dev/null
+++ b/support/testing/tests/package/test_mender/rootfs-overlay/etc/mender/mender.conf
@@ -0,0 +1,11 @@
+{
+ "InventoryPollIntervalSeconds": 1800,
+ "UpdatePollIntervalSeconds": 1800,
+ "RetryPollIntervalSeconds": 300,
+ "RootfsPartA": "/dev/vda2",
+ "RootfsPartB": "/dev/vda3",
+ "ServerCertificate": "/etc/mender/server.crt",
+ "ServerURL": "https://docker.mender.io",
+ "TenantToken": "dummy",
+ "DeviceTypeFile": "/etc/mender/device_type"
+}
--
2.56.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Buildroot] [PATCH v3 5/6] package/mender: bump to version 5.2.0
2026-10-28 11:33 [Buildroot] [PATCH v3 1/6] package/mender-update-modules: add banner module Adam Duskett
` (2 preceding siblings ...)
2026-10-28 11:33 ` [Buildroot] [PATCH v3 4/6] test_mender/post-build.sh: use /etc/mender/device_type Adam Duskett
@ 2026-10-28 11:33 ` Adam Duskett
2026-10-28 14:23 ` Adam Duskett
2026-10-28 11:33 ` [Buildroot] [PATCH v3 6/6] package/mender-connect: depend on mender, drop sysvinit file Adam Duskett
2026-11-05 7:31 ` [Buildroot] [PATCH v3 1/6] package/mender-update-modules: add banner module Thomas Petazzoni via buildroot
5 siblings, 1 reply; 9+ messages in thread
From: Adam Duskett @ 2026-10-28 11:33 UTC (permalink / raw)
To: buildroot; +Cc: Adam Duskett, Angelo Compagnucci
Starting with Mender version 4, the program is rewritten from Go to C++ using
CMake.
The current package provided by Buildroot is 3.5.3, which is quite old, having
been released on 12/6/2024. Since then, several changes have occurred,
necessitating a substantially large patch with many changes all at once.
The following is a list of changes:
MAJOR:
- Mender is now a C++ project
- Mender depends on systemd
- Drops sysvinit support
- Mender is split into two binaries:
- mender-authd
- mender-updated
MINOR:
- Drop the 0001-openssl-v4-update.patch.
- Add 0001-src-common-crypto-platform-openssl-crypto.cpp-fix-bu.patch
Which allowd building without OpenSSL engine support.
This patch is tested against OpenSSL 4.0.2 which is not yet applied
to the master branch.
- The following busyboxy options are required by the rootfs module and are
enabled by default:
- flock
- stat
- stat_format
- sync_fancy
- wget
- wget_https
- wget_openssl
Note: While sync_fancy isn't strictly necessary, enabling this feature
prevents several messages about sync ignoring all arguments.
- New dependencies are as follows:
- boost
- dbus
- libarchive
- libglib2
- lmdb
- openssl
- systemd
- yaml-cpp
The configs/mender_x86_64_efi_defconfig file is updated to
use systemd by default.
Mender is configured with -DBUILD_SHARED_LIBS=OFF as the bundled
libyaml and tiny-process-library .so files are not installed when
-DBUILD_SHARED_LIBS=ON is selected.
The support/testing/tests/package/test_mender.py is updated:
- Uses systemd
- Bumped kernel version to 6.18.59
- Adds a simple network as mender-authd requires network-online.target
- Drops sysvinit tests
Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
---
v2 -> v3:
- Removed documentation update (see first patch in this series)
- Use an external toolchain for mender_x86_64_efi_defconfig [Thomas]
- Dropped jq selection for mender_x86_64_efi_defconfig [Thomas]
- Dropped yaml-cpp selection (bundled and linked statically in mender source code)
- Cleaned up various make commands [Thomas]
- Removed kernel fragment used during debugging [Thomas]
- Add 0001-src-common-crypto-platform-openssl-crypto.cpp-fix-bu.patch [Thomas]
board/mender/x86_64/linux.config | 11 +
configs/mender_x86_64_efi_defconfig | 7 +-
package/mender/0001-openssl-v4-update.patch | 191 ------------------
...o-platform-openssl-crypto.cpp-fix-bu.patch | 69 +++++++
package/mender/Config.in | 39 ++--
package/mender/S42mender | 44 ----
package/mender/mender-client.service | 13 --
package/mender/mender.hash | 52 ++---
package/mender/mender.mk | 146 ++++++-------
package/mender/server.crt | 22 --
support/testing/tests/package/test_mender.py | 96 ++++-----
11 files changed, 249 insertions(+), 441 deletions(-)
delete mode 100644 package/mender/0001-openssl-v4-update.patch
create mode 100644 package/mender/0001-src-common-crypto-platform-openssl-crypto.cpp-fix-bu.patch
delete mode 100644 package/mender/S42mender
delete mode 100644 package/mender/mender-client.service
delete mode 100644 package/mender/server.crt
diff --git a/board/mender/x86_64/linux.config b/board/mender/x86_64/linux.config
index b758c6d45a..f980ec39ab 100644
--- a/board/mender/x86_64/linux.config
+++ b/board/mender/x86_64/linux.config
@@ -1,4 +1,8 @@
CONFIG_SYSVIPC=y
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_USER_NS=y
CONFIG_SMP=y
CONFIG_HYPERVISOR_GUEST=y
CONFIG_PARAVIRT=y
@@ -15,18 +19,22 @@ CONFIG_NETFILTER_XTABLES_LEGACY=y
CONFIG_IP_NF_IPTABLES_LEGACY=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_FILTER=y
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_FQ_CODEL=y
CONFIG_CFG80211=m
CONFIG_CFG80211_WEXT=y
CONFIG_MAC80211=m
CONFIG_PCI=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_DMI_SYSFS=y
CONFIG_VIRTIO_BLK=y
CONFIG_BLK_DEV_SD=y
CONFIG_SCSI_VIRTIO=y
CONFIG_ATA=y
CONFIG_NETDEVICES=y
CONFIG_VIRTIO_NET=y
+CONFIG_E1000E=y
CONFIG_ATH9K=m
CONFIG_ATH9K_HTC=m
CONFIG_CARL9170=m
@@ -57,8 +65,11 @@ CONFIG_VIRTIO_INPUT=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_EXT4_FS=y
+CONFIG_AUTOFS_FS=y
CONFIG_FUSE_FS=y
CONFIG_VFAT_FS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
CONFIG_SQUASHFS=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y
diff --git a/configs/mender_x86_64_efi_defconfig b/configs/mender_x86_64_efi_defconfig
index f10a461770..9cd68e5f62 100644
--- a/configs/mender_x86_64_efi_defconfig
+++ b/configs/mender_x86_64_efi_defconfig
@@ -1,7 +1,6 @@
BR2_x86_64=y
-BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_18=y
-BR2_INIT_SYSV=y
-BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_INIT_SYSTEMD=y
BR2_TARGET_GENERIC_GETTY_PORT="ttyS0"
BR2_ROOTFS_OVERLAY="board/mender/x86_64/overlay"
BR2_ROOTFS_POST_BUILD_SCRIPT="board/mender/x86_64/post-build.sh"
@@ -42,7 +41,7 @@ BR2_PACKAGE_MENDER_GRUBENV=y
BR2_PACKAGE_MENDER_GRUBENV_DEFINES="board/mender/x86_64/mender_grubenv_defines"
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
-BR2_TARGET_ROOTFS_EXT2_SIZE="128M"
+BR2_TARGET_ROOTFS_EXT2_SIZE="256M"
# BR2_TARGET_ROOTFS_TAR is not set
BR2_TARGET_GRUB2=y
BR2_TARGET_GRUB2_X86_64_EFI=y
diff --git a/package/mender/0001-openssl-v4-update.patch b/package/mender/0001-openssl-v4-update.patch
deleted file mode 100644
index 65443614d5..0000000000
--- a/package/mender/0001-openssl-v4-update.patch
+++ /dev/null
@@ -1,191 +0,0 @@
-Description: Fix build compatibility with OpenSSL 4.0
- Include <openssl/x509v3.h> in hostname.c and hostname.go before checking
- #ifndef X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT, preventing fallback to
- legacy OpenSSL < 1.0.2 code that attempts to directly access opaque
- ASN1_STRING fields.
- Also add preprocessor guards around deprecated protocol methods
- (SSLv3_method, TLSv1_method, TLSv1_1_method, TLSv1_2_method) in shim.c
- and ENGINE functions (ENGINE_by_id, ENGINE_init, ENGINE_free,
- ENGINE_finish, ENGINE_load_private_key, ENGINE_load_builtin_engines)
- in shim.c, shim.h, engine.go, key.go to prevent implicit declaration
- and undefined reference errors when building against OpenSSL 4.0.
-Author: Frank Heimes <frank.heimes@canonical.com>
-
-Downloaded from Ubuntu:
-https://git.launchpad.net/ubuntu/+source/golang-github-mendersoftware-openssl/tree/debian/patches/0004-openssl-v4-update.patch?h=applied/ubuntu/stonking-devel
-
-Upstream: not applicable, upstream moved to c++ in newer versions
-
-[Bernd: rebased for vendored download by buildroot infra]
-Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
-
-diff -uNr mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/engine.go mender-3.5.3/vendor/github.com/mendersoftware/openssl/engine.go
---- mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/engine.go 2024-05-24 12:07:27.000000000 +0200
-+++ mender-3.5.3/vendor/github.com/mendersoftware/openssl/engine.go 2026-09-20 18:37:50.270612314 +0200
-@@ -15,6 +15,7 @@
- package openssl
-
- /*
-+#include "shim.h"
- #include "openssl/engine.h"
- */
- import "C"
-@@ -33,18 +34,18 @@
- cname := C.CString(name)
- defer C.free(unsafe.Pointer(cname))
- e := &Engine{
-- e: C.ENGINE_by_id(cname),
-+ e: C.X_ENGINE_by_id(cname),
- }
- if e.e == nil {
- return nil, fmt.Errorf("engine %s missing", name)
- }
-- if C.ENGINE_init(e.e) == 0 {
-- C.ENGINE_free(e.e)
-+ if C.X_ENGINE_init(e.e) == 0 {
-+ C.X_ENGINE_free(e.e)
- return nil, fmt.Errorf("engine %s not initialized", name)
- }
- runtime.SetFinalizer(e, func(e *Engine) {
-- C.ENGINE_finish(e.e)
-- C.ENGINE_free(e.e)
-+ C.X_ENGINE_finish(e.e)
-+ C.X_ENGINE_free(e.e)
- })
- return e, nil
- }
-diff -uNr mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/hostname.c mender-3.5.3/vendor/github.com/mendersoftware/openssl/hostname.c
---- mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/hostname.c 2024-05-24 12:07:27.000000000 +0200
-+++ mender-3.5.3/vendor/github.com/mendersoftware/openssl/hostname.c 2026-09-20 18:32:37.854514981 +0200
-@@ -6,6 +6,7 @@
- */
-
- #include <openssl/x509.h>
-+#include <openssl/x509v3.h>
-
- #ifndef X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT
-
-diff -uNr mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/key.go mender-3.5.3/vendor/github.com/mendersoftware/openssl/key.go
---- mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/key.go 2024-05-24 12:07:27.000000000 +0200
-+++ mender-3.5.3/vendor/github.com/mendersoftware/openssl/key.go 2026-09-20 18:38:13.462370202 +0200
-@@ -303,7 +303,7 @@
- keyID := C.CString(id)
- defer C.free(unsafe.Pointer(keyID))
-
-- key := C.ENGINE_load_private_key(e.e, keyID, nil, nil)
-+ key := C.X_ENGINE_load_private_key(e.e, keyID, nil, nil)
- if key == nil {
- return nil, errors.New("cannot load private key, ENGINE_load_private_key error")
- }
-diff -uNr mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/shim.c mender-3.5.3/vendor/github.com/mendersoftware/openssl/shim.c
---- mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/shim.c 2024-05-24 12:07:27.000000000 +0200
-+++ mender-3.5.3/vendor/github.com/mendersoftware/openssl/shim.c 2026-09-20 18:36:02.855038372 +0200
-@@ -382,7 +382,9 @@
- int rc = 0;
-
- OPENSSL_config(NULL);
-+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_ENGINE)
- ENGINE_load_builtin_engines();
-+#endif
- SSL_load_error_strings();
- SSL_library_init();
- OpenSSL_add_all_algorithms();
-@@ -403,6 +405,46 @@
- return 0;
- }
-
-+ENGINE *X_ENGINE_by_id(const char *id) {
-+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_ENGINE)
-+ return ENGINE_by_id(id);
-+#else
-+ return NULL;
-+#endif
-+}
-+
-+int X_ENGINE_init(ENGINE *e) {
-+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_ENGINE)
-+ return ENGINE_init(e);
-+#else
-+ return 0;
-+#endif
-+}
-+
-+int X_ENGINE_free(ENGINE *e) {
-+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_ENGINE)
-+ return ENGINE_free(e);
-+#else
-+ return 0;
-+#endif
-+}
-+
-+int X_ENGINE_finish(ENGINE *e) {
-+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_ENGINE)
-+ return ENGINE_finish(e);
-+#else
-+ return 0;
-+#endif
-+}
-+
-+EVP_PKEY *X_ENGINE_load_private_key(ENGINE *e, const char *key_id, UI_METHOD *ui_method, void *callback_data) {
-+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_ENGINE)
-+ return ENGINE_load_private_key(e, key_id, ui_method, callback_data);
-+#else
-+ return NULL;
-+#endif
-+}
-+
- void * X_OPENSSL_malloc(size_t size) {
- return OPENSSL_malloc(size);
- }
-@@ -480,7 +522,7 @@
- }
-
- const SSL_METHOD *X_SSLv3_method() {
--#ifndef OPENSSL_NO_SSL3_METHOD
-+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_SSL3_METHOD) && !defined(OPENSSL_NO_DEPRECATED_1_1_0) && !defined(OPENSSL_NO_DEPRECATED_3_0)
- return SSLv3_method();
- #else
- return NULL;
-@@ -488,11 +530,15 @@
- }
-
- const SSL_METHOD *X_TLSv1_method() {
-+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_TLS1_METHOD) && !defined(OPENSSL_NO_DEPRECATED_1_1_0) && !defined(OPENSSL_NO_DEPRECATED_3_0)
- return TLSv1_method();
-+#else
-+ return NULL;
-+#endif
- }
-
- const SSL_METHOD *X_TLSv1_1_method() {
--#if defined(TLS1_1_VERSION) && !defined(OPENSSL_SYSNAME_MACOSX)
-+#if OPENSSL_VERSION_NUMBER < 0x40000000L && defined(TLS1_1_VERSION) && !defined(OPENSSL_SYSNAME_MACOSX) && !defined(OPENSSL_NO_TLS1_1_METHOD) && !defined(OPENSSL_NO_DEPRECATED_1_1_0) && !defined(OPENSSL_NO_DEPRECATED_3_0)
- return TLSv1_1_method();
- #else
- return NULL;
-@@ -500,7 +546,7 @@
- }
-
- const SSL_METHOD *X_TLSv1_2_method() {
--#if defined(TLS1_2_VERSION) && !defined(OPENSSL_SYSNAME_MACOSX)
-+#if OPENSSL_VERSION_NUMBER < 0x40000000L && defined(TLS1_2_VERSION) && !defined(OPENSSL_SYSNAME_MACOSX) && !defined(OPENSSL_NO_TLS1_2_METHOD) && !defined(OPENSSL_NO_DEPRECATED_1_1_0) && !defined(OPENSSL_NO_DEPRECATED_3_0)
- return TLSv1_2_method();
- #else
- return NULL;
-diff -uNr mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/shim.h mender-3.5.3/vendor/github.com/mendersoftware/openssl/shim.h
---- mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/shim.h 2024-05-24 12:07:27.000000000 +0200
-+++ mender-3.5.3/vendor/github.com/mendersoftware/openssl/shim.h 2026-09-20 18:38:33.117854985 +0200
-@@ -40,6 +40,13 @@
- /* shim methods */
- extern int X_shim_init();
-
-+/* Engine methods */
-+extern ENGINE *X_ENGINE_by_id(const char *id);
-+extern int X_ENGINE_init(ENGINE *e);
-+extern int X_ENGINE_free(ENGINE *e);
-+extern int X_ENGINE_finish(ENGINE *e);
-+extern EVP_PKEY *X_ENGINE_load_private_key(ENGINE *e, const char *key_id, UI_METHOD *ui_method, void *callback_data);
-+
- /* Library methods */
- extern void X_OPENSSL_free(void *ref);
- extern void *X_OPENSSL_malloc(size_t size);
diff --git a/package/mender/0001-src-common-crypto-platform-openssl-crypto.cpp-fix-bu.patch b/package/mender/0001-src-common-crypto-platform-openssl-crypto.cpp-fix-bu.patch
new file mode 100644
index 0000000000..e596f1b5f3
--- /dev/null
+++ b/package/mender/0001-src-common-crypto-platform-openssl-crypto.cpp-fix-bu.patch
@@ -0,0 +1,69 @@
+From dcc218c6857e080e760b4a9c04acc79390151eb3 Mon Sep 17 00:00:00 2001
+From: Adam Duskett <adam.duskett@amarulasolutions.com>
+Date: Wed, 28 Oct 2026 12:07:07 +0100
+Subject: [PATCH] src/common/crypto/platform/openssl/crypto.cpp: fix build
+ without engine support
+
+OpenSSL 4.0 removed ENGINE support entirely and always defines
+OPENSSL_NO_ENGINE. Its engine.h still declares the ENGINE_* functions
+for source compatibility, but only provides stub definitions when
+OPENSSL_ENGINE_STUBS is defined, so linking mender-auth fails with:
+
+ undefined reference to `ENGINE_by_id'
+ undefined reference to `ENGINE_free'
+ undefined reference to `ENGINE_init'
+ undefined reference to `ENGINE_load_builtin_engines'
+ undefined reference to `ENGINE_load_private_key'
+
+The same happens with OpenSSL 3.x configured with no-engine.
+
+Guard the ENGINE calls with OPENSSL_NO_ENGINE, and return an error
+from LoadFromHSMEngine() when an SSL engine is configured but not
+available.
+
+Upstream: https://github.com/mendersoftware/mender/pull/2037
+Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
+---
+ src/common/crypto/platform/openssl/crypto.cpp | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/src/common/crypto/platform/openssl/crypto.cpp b/src/common/crypto/platform/openssl/crypto.cpp
+index b31e6c8..5f6a4b9 100644
+--- a/src/common/crypto/platform/openssl/crypto.cpp
++++ b/src/common/crypto/platform/openssl/crypto.cpp
+@@ -103,9 +103,11 @@ auto bn_free = [](BIGNUM *bn) {
+ }
+ };
+ auto engine_free_func = [](ENGINE *e) {
++#ifndef OPENSSL_NO_ENGINE
+ if (e) {
+ ENGINE_free(e);
+ }
++#endif // OPENSSL_NO_ENGINE
+ };
+
+ auto password_callback = [](char *buf, int size, int rwflag, void *u) {
+@@ -153,6 +155,12 @@ string GetOpenSSLErrorMessage() {
+ }
+
+ ExpectedPrivateKey LoadFromHSMEngine(const Args &args) {
++#ifdef OPENSSL_NO_ENGINE
++ return expected::unexpected(MakeError(
++ SetupError,
++ "Failed to get the " + args.ssl_engine
++ + " engine. OpenSSL was built without engine support"));
++#else
+ log::Trace("Loading the private key from HSM");
+
+ ENGINE_load_builtin_engines();
+@@ -190,6 +198,7 @@ ExpectedPrivateKey LoadFromHSMEngine(const Args &args) {
+ auto handle = unique_ptr<OpenSSLResourceHandle, void (*)(OpenSSLResourceHandle *)>(
+ new OpenSSLResourceHandle {std::move(engine)}, resource_handle_free_func);
+ return std::make_unique<PrivateKey>(std::move(private_key), std::move(handle));
++#endif // OPENSSL_NO_ENGINE
+ }
+
+ #ifdef MENDER_CRYPTO_OPENSSL_LEGACY
+--
+2.56.0
+
diff --git a/package/mender/Config.in b/package/mender/Config.in
index c9b9d0b757..8f16e2312f 100644
--- a/package/mender/Config.in
+++ b/package/mender/Config.in
@@ -1,9 +1,20 @@
config BR2_PACKAGE_MENDER
bool "mender"
- depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
- depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS
- depends on BR2_TOOLCHAIN_HAS_THREADS
- select BR2_PACKAGE_HOST_GO
+ depends on BR2_INSTALL_LIBSTDCPP
+ depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # (bundled yaml-cpp)
+ 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 # boost, libarchive, libglib2
+ depends on BR2_PACKAGE_SYSTEMD
+ select BR2_PACKAGE_BOOST
+ select BR2_PACKAGE_BOOST_FILESYSTEM
+ select BR2_PACKAGE_BOOST_LOG
+ select BR2_PACKAGE_CA_CERTIFICATES
+ select BR2_PACKAGE_LIBARCHIVE
+ select BR2_PACKAGE_LIBGLIB2
+ select BR2_PACKAGE_LMDB
select BR2_PACKAGE_OPENSSL
select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
select BR2_PACKAGE_LIBOPENSSL_ENGINES
@@ -21,16 +32,13 @@ config BR2_PACKAGE_MENDER
- uboot-tools must be selected.
- fw_printenv must be functional on the device.
The Mender Uboot patches are at:
- https://github.com/mendersoftware/meta-mender/
+ https://github.com/mendersoftware/meta-mender/tree/master/meta-mender-core/recipes-bsp/u-boot/patches
For more information on Manual U-Boot integration, see:
- https://docs.mender.io/2.6/system-updates-yocto-project/board-integration/bootloader-support/u-boot/manual-u-boot-integration
+ https://docs.mender.io/3.4/system-updates-yocto-project/board-integration/bootloader-support/u-boot/manual-u-boot-integration
For systems using Grub2 as the bootloader:
- Mender depends on the mender-grubenv package.
- - The mender-grubenv package provides a fw_printenv script,
- which is not compatible with the uboot-tools fw_printenv
- script.
The mender project recommends using uboot to load Grub2 as a
secondary bootloader whenever possible. Using Grub2 as a
@@ -39,7 +47,12 @@ config BR2_PACKAGE_MENDER
https://github.com/mendersoftware/mender
-comment "mender needs a toolchain w/ threads"
- depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
- depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS
- depends on !BR2_TOOLCHAIN_HAS_THREADS
+comment "mender needs systemd"
+ depends on !BR2_PACKAGE_SYSTEMD
+
+comment "mender needs a toolchain w/ C++, NPTL, wchar, not affected by GCC bug 64735"
+ 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
diff --git a/package/mender/S42mender b/package/mender/S42mender
deleted file mode 100644
index 70116ed4eb..0000000000
--- a/package/mender/S42mender
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-#
-# Starts mender service.
-#
-DAEMON="mender"
-DAEMON_PATH="/usr/bin/mender"
-PIDFILE="/var/run/${DAEMON}.pid"
-DAEMON_ARGS="daemon"
-
-start() {
- printf "Starting mender service: "
- umask 077
- start-stop-daemon -bmSqp "$PIDFILE" -x ${DAEMON_PATH} -- ${DAEMON_ARGS}
- status=$?
- [ "${status}" = 0 ] && echo "OK" || echo "FAIL"
-}
-
-stop() {
- printf "Stopping mender service: "
- start-stop-daemon -Kqp "$PIDFILE"
- status=$?
- [ "${status}" = 0 ] && echo "OK" || echo "FAIL"
-}
-restart() {
- stop
- start
-}
-
-case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart|reload)
- restart
- ;;
- *)
- echo "Usage: $0 {start|stop|reload|restart}"
- exit 1
-esac
-
-exit $?
diff --git a/package/mender/mender-client.service b/package/mender/mender-client.service
deleted file mode 100644
index 47e439993c..0000000000
--- a/package/mender/mender-client.service
+++ /dev/null
@@ -1,13 +0,0 @@
-[Unit]
-Description=Mender OTA update service
-After=systemd-resolved.service
-
-[Service]
-Type=idle
-User=root
-Group=root
-ExecStart=/usr/bin/mender daemon
-Restart=on-abort
-
-[Install]
-WantedBy=multi-user.target
diff --git a/package/mender/mender.hash b/package/mender/mender.hash
index 17fe08c827..1aa8fb63bd 100644
--- a/package/mender/mender.hash
+++ b/package/mender/mender.hash
@@ -1,47 +1,27 @@
# Locally computed:
-sha256 35e369759b8d4f012153e538b5daf1e0cebe842205811e708332c5a092270ac5 mender-3.5.3-go2.tar.gz
+sha256 436ae559358f29c672b98ca77b953936ba6ef51455466fb5ed0ced7ae77fc226 mender-5.2.0.tar.gz
+sha256 4d3409e4f8f7f3b9de5da7fee7c03e36a2381a02b2e318702485fc993a735cc9 LIC_FILES_CHKSUM.sha256
# Vendor licenses
# Generated with sed '/^[A-Za-z0-9_]/s/^/sha256 /' LIC_FILES_CHKSUM.sha256
# Apache-2.0 license.
-sha256 d0f406b04e7901e6b4076bdf5fd20f9d7f04fc41681069fd8954413ac6295688 LICENSE
-sha256 52b2497ce07650b825015e80ca7a5d40c360c04c530234ca6d950b0f98bca23a vendor/github.com/mendersoftware/mender-artifact/LICENSE
-sha256 73ba74dfaa520b49a401b5d21459a8523a146f3b7518a833eea5efa85130bf68 vendor/github.com/mendersoftware/openssl/LICENSE
-sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 vendor/github.com/minio/sha256-simd/LICENSE
-sha256 8f5d89b47d7a05a199b77b7e0f362dad391d451ebda4ef48ba11c50c071564c7 vendor/github.com/mendersoftware/progressbar/LICENSE
+sha256 d7e8fd4ad05371007d60285c309ba7a7ce3e61029b843f949fbb9ec79dc9eb47 LICENSE
#
-# BSD 2 Clause license.
-sha256 8d427fd87bc9579ea368fde3d49f9ca22eac857f91a9dec7e3004bdfab7dee86 vendor/github.com/pkg/errors/LICENSE
-sha256 e4646a82a976369d7ae8f6ed5c11d35dc0af18433a8ccc24c85b459ad8b95128 vendor/github.com/godbus/dbus/LICENSE
-sha256 2be1b548b0387ca8948e1bb9434e709126904d15f622cc2d0d8e7f186e4d122d vendor/github.com/gorilla/websocket/LICENSE
+# MIT clause license
+sha256 d64d1b4d948aa7751cfb613c02dc246aab7b358d760053e6580f01affe946906 src/common/vendor/json/LICENSE.MIT
+sha256 7920c8620b1e073a79a667c44f9149c25724eb9f0f6b220b3c8d9564e2d40a43 src/common/vendor/json/docs/mkdocs/docs/home/license.md
+sha256 2aefa40fa7e1c0fab18fbad5b15b02406eea1399d3cca42cc1012b65b4a56f74 src/common/vendor/tiny-process-library/LICENSE
+sha256 aa6fcc27be034e41e21dd832f9175bfe694a48491d9e14ff0fa278e19ad14f1b src/common/vendor/yaml-cpp/LICENSE
#
-# BSD 3 Clause license.
-sha256 0d9e582ee4bff57bf1189c9e514e6da7ce277f9cd3bc2d488b22fbb39a6d87cf vendor/github.com/klauspost/compress/LICENSE
-sha256 2eb550be6801c1ea434feba53bf6d12e7c71c90253e0a9de4a4f46cf88b56477 vendor/github.com/pmezard/go-difflib/LICENSE
-sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 vendor/golang.org/x/sys/LICENSE
-sha256 0634b008cee55ca01f0888d2f5aba2d34e66c3f52c31a4e16a5d5d33d0c2a03e vendor/github.com/bmatsuo/lmdb-go/LICENSE.md
-sha256 87640bc4df2ceb1559f268a3db1ba859ab780f7ba5b1b4545173d4680a3d918b vendor/github.com/remyoudompheng/go-liblzma/LICENSE
-sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 vendor/golang.org/x/term/LICENSE
+# UNLICENSE
+sha256 7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c src/common/vendor/lmdbxx/UNLICENSE
#
-# ISC license.
-sha256 1b93a317849ee09d3d7e4f1d20c2b78ddb230b4becb12d7c224c927b9d470251 vendor/github.com/davecgh/go-spew/LICENSE
+# CC0 1.0 Universal
+sha256 a2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499 src/common/vendor/expected/COPYING
#
-# MIT license.
-sha256 6d2de1cde19c4d2bd8bcd9aaa1d581f4cfa3db9cf71896140330eaa2f2687685 vendor/github.com/klauspost/pgzip/LICENSE
-sha256 f69f157b0be75da373605dbc8bbf142e8924ee82d8f44f11bcaf351335bf98cf vendor/github.com/klauspost/compress/internal/snapref/LICENSE
-sha256 f566a9f97bacdaf00d9f21dd991e81dc11201c4e016c86b470799429a1c9a79c vendor/github.com/klauspost/compress/zstd/internal/xxhash/LICENSE.txt
-sha256 5d966570d7a442d4e969892860a914e542c97f262c873baee8f0aa48e1f40212 vendor/github.com/klauspost/cpuid/v2/LICENSE
-sha256 51a0c9ec7f8b7634181b8d4c03e5b5d204ac21d6e72f46c313973424664b2e6b vendor/github.com/sirupsen/logrus/LICENSE
-sha256 f8e536c1c7b695810427095dc85f5f80d44ff7c10535e8a9486cf393e2599189 vendor/github.com/stretchr/testify/LICENSE
-sha256 ffa15bdce332058a03a1d923910864fb6e58bf6df66a0e3914284725b327183e vendor/github.com/ungerik/go-sysfs/LICENSE
-sha256 da277af11b85227490377fbcac6afccc68be560c4fff36ac05ca62de55345fd7 vendor/github.com/urfave/cli/v2/LICENSE
-sha256 b2663894033a05fd80261176cd8da1d72546e25842d5c1abcc852ca23b6b61b0 vendor/github.com/stretchr/objx/LICENSE
-sha256 d18f6323b71b0b768bb5e9616e36da390fbd39369a81807cca352de4e4e6aa0b vendor/gopkg.in/yaml.v3/LICENSE
-sha256 08eab1118c80885fa1fa6a6dd7303f65a379fcb3733e063d20d1bbc2c76e6fa1 vendor/github.com/mattn/go-isatty/LICENSE
+# Boost Software License
+sha256 c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566 src/common/vendor/optional-lite/LICENSE.txt
#
-# OpenLDAP Public License
-sha256 310fe25c858a9515fc8c8d7d1f24a67c9496f84a91e0a0e41ea9975b1371e569 vendor/github.com/bmatsuo/lmdb-go/LICENSE.mdb.md
-
-# sha256 of all the vendor licenses combined
-sha256 86407bd98d5ea7fb0f09ab771c3333e975d06565b809a2dd95f864dc1e3a09b3 LIC_FILES_CHKSUM.sha256
+# BSD-3
+sha256 9702de7e4117a8e2b20dafab11ffda58c198aede066406496bef670d40a22138 src/common/vendor/yaml-cpp/test/googletest-1.16.0/LICENSE
diff --git a/package/mender/mender.mk b/package/mender/mender.mk
index 76dc28d547..e20fec8aa9 100644
--- a/package/mender/mender.mk
+++ b/package/mender/mender.mk
@@ -4,107 +4,107 @@
#
################################################################################
-MENDER_VERSION = 3.5.3
-MENDER_SITE = $(call github,mendersoftware,mender,$(MENDER_VERSION))
-MENDER_LICENSE = Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, MIT, OLDAP-2.8
+MENDER_VERSION = 5.2.0
+MENDER_SITE = https://github.com/mendersoftware/mender/releases/download/$(MENDER_VERSION)
+MENDER_LICENSE = Apache-2.0, BSL-1.0, BSD-3-Clause, CC0-1.0, MIT, Unlicense
MENDER_CPE_ID_VENDOR = northern.tech
-# CVE-2024-46948 only affects mender-server
-MENDER_IGNORE_CVES = CVE-2024-46948
# Vendor license paths generated with:
# awk '{print $2}' LIC_FILES_CHKSUM.sha256 | grep vendor
MENDER_LICENSE_FILES = \
LICENSE \
LIC_FILES_CHKSUM.sha256 \
- vendor/github.com/mendersoftware/mender-artifact/LICENSE \
- vendor/github.com/mendersoftware/openssl/LICENSE \
- vendor/github.com/minio/sha256-simd/LICENSE \
- vendor/github.com/mendersoftware/progressbar/LICENSE \
- vendor/github.com/pkg/errors/LICENSE \
- vendor/github.com/godbus/dbus/LICENSE \
- vendor/github.com/gorilla/websocket/LICENSE \
- vendor/github.com/klauspost/compress/LICENSE \
- vendor/github.com/pmezard/go-difflib/LICENSE \
- vendor/golang.org/x/sys/LICENSE \
- vendor/github.com/bmatsuo/lmdb-go/LICENSE.md \
- vendor/github.com/remyoudompheng/go-liblzma/LICENSE \
- vendor/golang.org/x/term/LICENSE \
- vendor/github.com/davecgh/go-spew/LICENSE \
- vendor/github.com/klauspost/pgzip/LICENSE \
- vendor/github.com/klauspost/compress/internal/snapref/LICENSE \
- vendor/github.com/klauspost/compress/zstd/internal/xxhash/LICENSE.txt \
- vendor/github.com/klauspost/cpuid/v2/LICENSE \
- vendor/github.com/sirupsen/logrus/LICENSE \
- vendor/github.com/stretchr/testify/LICENSE \
- vendor/github.com/ungerik/go-sysfs/LICENSE \
- vendor/github.com/urfave/cli/v2/LICENSE \
- vendor/github.com/stretchr/objx/LICENSE \
- vendor/gopkg.in/yaml.v3/LICENSE \
- vendor/github.com/mattn/go-isatty/LICENSE \
- vendor/github.com/bmatsuo/lmdb-go/LICENSE.mdb.md
-
-MENDER_DEPENDENCIES = host-pkgconf openssl
-
-MENDER_LDFLAGS = -X github.com/mendersoftware/mender/conf.Version=$(MENDER_VERSION)
-
-MENDER_UPDATE_MODULES_FILES = directory single-file
+ src/common/vendor/json/LICENSE.MIT \
+ src/common/vendor/json/docs/mkdocs/docs/home/license.md \
+ src/common/vendor/tiny-process-library/LICENSE \
+ src/common/vendor/yaml-cpp/LICENSE \
+ src/common/vendor/lmdbxx/UNLICENSE \
+ src/common/vendor/expected/COPYING \
+ src/common/vendor/optional-lite/LICENSE.txt \
+ src/common/vendor/yaml-cpp/test/googletest-1.16.0/LICENSE
+
+MENDER_DEPENDENCIES += \
+ host-pkgconf \
+ boost \
+ dbus \
+ libarchive \
+ libglib2 \
+ lmdb \
+ openssl \
+ systemd
+
+MENDER_INSTALL_TARGET_OPTS = \
+ install-bin \
+ install-dbus \
+ install-dbus-service-files \
+ install-identity-scripts \
+ install-inventory-network-scripts \
+ install-inventory-scripts \
+ install-modules \
+ install-rootfs-image-module \
+ install-systemd
define MENDER_INSTALL_CONFIG_FILES
- $(INSTALL) -d -m 755 $(TARGET_DIR)/etc/mender/scripts
- echo -n "3" > $(TARGET_DIR)/etc/mender/scripts/version
-
$(INSTALL) -D -m 0644 $(MENDER_PKGDIR)/mender.conf \
$(TARGET_DIR)/etc/mender/mender.conf
- $(INSTALL) -D -m 0644 $(MENDER_PKGDIR)/server.crt \
- $(TARGET_DIR)/etc/mender/server.crt
- $(INSTALL) -D -m 0755 $(@D)/support/mender-device-identity \
- $(TARGET_DIR)/usr/share/mender/identity/mender-device-identity
- $(foreach f,bootloader-integration hostinfo network os rootfs-type, \
- $(INSTALL) -D -m 0755 $(@D)/support/mender-inventory-$(f) \
- $(TARGET_DIR)/usr/share/mender/inventory/mender-inventory-$(f)
- )
+ $(INSTALL) -D -m 0644 $(@D)/support/demo.crt \
+ $(TARGET_DIR)/etc/mender/server.crt
$(INSTALL) -D -m 0755 $(MENDER_PKGDIR)/device_type \
$(TARGET_DIR)/etc/mender/device_type
- mkdir -p $(TARGET_DIR)/var/lib/mender
- $(foreach f,$(MENDER_UPDATE_MODULES_FILES), \
- $(INSTALL) -D -m 0755 $(@D)/support/modules/$(notdir $(f)) \
- $(TARGET_DIR)/usr/share/mender/modules/v3/$(notdir $(f))
- )
+ mkdir -p $(TARGET_DIR)/var/lib
endef
-
MENDER_POST_INSTALL_TARGET_HOOKS += MENDER_INSTALL_CONFIG_FILES
+# The vendored tiny-process-library and yaml-cpp are built as part of
+# mender but never installed, so always link them statically.
+MENDER_CONF_OPTS += \
+ -DBUILD_SHARED_LIBS=OFF \
+ -DMENDER_EMBED_MENDER_AUTH=OFF \
+ -DMENDER_USE_DBUS=ON \
+ -DMENDER_VERSION=$(MENDER_VERSION)
+
+ifeq ($(BR2_PACKAGE_GZIP),y)
+MENDER_DEPENDENCIES += gzip
+MENDER_CONF_OPTS += -DMENDER_ARTIFACT_GZIP_COMPRESSION=ON
+else
+MENDER_CONF_OPTS += -DMENDER_ARTIFACT_GZIP_COMPRESSION=OFF
+endif
+
ifeq ($(BR2_PACKAGE_XZ),y)
MENDER_DEPENDENCIES += xz
+MENDER_CONF_OPTS += -DMENDER_ARTIFACT_LZMA_COMPRESSION=ON
else
-MENDER_TAGS += nolzma
+MENDER_CONF_OPTS += -DMENDER_ARTIFACT_LZMA_COMPRESSION=OFF
endif
-ifeq ($(BR2_PACKAGE_DBUS)$(BR2_PACKAGE_LIBGLIB2),yy)
-MENDER_DEPENDENCIES += libglib2
-define MENDER_INSTALL_DBUS_AUTHENTICATION_MANAGER_CONF
- $(INSTALL) -D -m 0755 $(@D)/support/dbus/io.mender.AuthenticationManager.conf \
- $(TARGET_DIR)/etc/dbus-1/system.d/io.mender.AuthenticationManager.conf
-
- $(INSTALL) -D -m 0755 $(@D)/support/dbus/io.mender.UpdateManager.conf \
- $(TARGET_DIR)/etc/dbus-1/system.d/io.mender.UpdateManager.conf
-endef
-MENDER_POST_INSTALL_TARGET_HOOKS += MENDER_INSTALL_DBUS_AUTHENTICATION_MANAGER_CONF
+ifeq ($(BR2_PACKAGE_ZSTD),y)
+MENDER_DEPENDENCIES += zstd
+MENDER_CONF_OPTS += -DMENDER_ARTIFACT_ZSTD_COMPRESSION=ON
else
-MENDER_TAGS += nodbus
+MENDER_CONF_OPTS += -DMENDER_ARTIFACT_ZSTD_COMPRESSION=OFF
endif
-define MENDER_INSTALL_INIT_SYSTEMD
- $(INSTALL) -D -m 0644 $(MENDER_PKGDIR)/mender-client.service \
- $(TARGET_DIR)/usr/lib/systemd/system/mender-client.service
+define MENDER_INSTALL_MODULES_GEN
+ $(MAKE) -C $(@D) DESTDIR=$(HOST_DIR) install-modules-gen
+endef
+MENDER_POST_INSTALL_TARGET_HOOKS += MENDER_INSTALL_MODULES_GEN
+
+define MENDER_INSTALL_TARGET_CMDS
+ $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) $(MENDER_INSTALL_TARGET_OPTS)
endef
-define MENDER_INSTALL_INIT_SYSV
- $(INSTALL) -D -m 755 $(MENDER_PKGDIR)/S42mender \
- $(TARGET_DIR)/etc/init.d/S42mender
+# Needed for rootfs-image-module
+define MENDER_BUSYBOX_CONFIG_FIXUPS
+ $(call KCONFIG_ENABLE_OPT,CONFIG_FLOCK)
+ $(call KCONFIG_ENABLE_OPT,CONFIG_STAT)
+ $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_STAT_FORMAT)
+ $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_SYNC_FANCY)
+ $(call KCONFIG_ENABLE_OPT,CONFIG_WGET)
+ $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_WGET_HTTPS)
+ $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_WGET_OPENSSL)
endef
-$(eval $(golang-package))
+$(eval $(cmake-package))
diff --git a/package/mender/server.crt b/package/mender/server.crt
deleted file mode 100644
index 79a57e15e7..0000000000
--- a/package/mender/server.crt
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIBfTCCASOgAwIBAgIJAJOS76a0qWuZMAoGCCqGSM49BAMCMBsxGTAXBgNVBAMM
-EGRvY2tlci5tZW5kZXIuaW8wHhcNMTYxMjE0MTk1MjQ2WhcNMjYxMjEyMTk1MjQ2
-WjAbMRkwFwYDVQQDDBBkb2NrZXIubWVuZGVyLmlvMFkwEwYHKoZIzj0CAQYIKoZI
-zj0DAQcDQgAE7AVYis6MWGPGQYU1/tlLEnskRifDIhvkRb8Y4nQPekRkLkiBYYT3
-iJ46wHrnejbHaLstU9GRdKWOmOuU6HGdO6NQME4wHQYDVR0OBBYEFGOIU4q++Vz8
-9HuT1jg9V+wFeJcyMB8GA1UdIwQYMBaAFGOIU4q++Vz89HuT1jg9V+wFeJcyMAwG
-A1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIhAPLnEeWPNeN7eDCEYRitBfyO
-X1yf2kzOm4ohBE5GY9gzAiBCq7HOSkzQDkelmQCCCpGXf/UwYNgQJjSoeGfk0j1a
-TQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIBhDCCASmgAwIBAgIJALQrf4QDot4IMAoGCCqGSM49BAMCMB4xHDAaBgNVBAMM
-E3MzLmRvY2tlci5tZW5kZXIuaW8wHhcNMTYxMjE0MTk1MjQ2WhcNMjYxMjEyMTk1
-MjQ2WjAeMRwwGgYDVQQDDBNzMy5kb2NrZXIubWVuZGVyLmlvMFkwEwYHKoZIzj0C
-AQYIKoZIzj0DAQcDQgAEEc/Y3T+l3DvINePkpvVZORMIdHVs29jgsl48ia7z/NRX
-HlKtKxVGJyFN5Y7sBZeLgBYH3F4Bo3KfmxI7ad0tI6NQME4wHQYDVR0OBBYEFIUm
-cip00QZYpe4ULflbGNJan+Y9MB8GA1UdIwQYMBaAFIUmcip00QZYpe4ULflbGNJa
-n+Y9MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhANHij9VZBDHOUPaC
-pFiagnWnYL2HBR72W1xTKQbrLLTXAiEAvpwA4HzSnGmLd3010+jqQuMRHArN5WaX
-h0fy7niBbIQ=
------END CERTIFICATE-----
diff --git a/support/testing/tests/package/test_mender.py b/support/testing/tests/package/test_mender.py
index 14440c9527..44196d6a96 100644
--- a/support/testing/tests/package/test_mender.py
+++ b/support/testing/tests/package/test_mender.py
@@ -3,45 +3,69 @@ import os
import infra.basetest
+# gitlab-runner: large
class TestMenderInfra(infra.basetest.BRTest):
- config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
- """
- BR2_PACKAGE_MENDER=y
- BR2_PACKAGE_HOST_MENDER_ARTIFACT=y
- BR2_TARGET_ROOTFS_CPIO=y
- BR2_ROOTFS_POST_BUILD_SCRIPT="{}"
- BR2_ROOTFS_OVERLAY="{}"
- """.format(
- infra.filepath("tests/package/test_mender/post-build.sh"),
- # overlay to add a fake 'fw_printenv', used by Mender
- infra.filepath("tests/package/test_mender/rootfs-overlay"))
+ # infra.basetest.BASIC_TOOLCHAIN_CONFIG cannot be used as it does
+ # not include BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
+ # needed by mender. This config also uses an ext4 rootfs as
+ # the default 128MB is too small for an image with mender and systemd.
+ config = \
+ """
+ BR2_x86_64=y
+ BR2_x86_corei7=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_64_CORE_I7_GLIBC_STABLE=y
+ BR2_INIT_SYSTEMD=y
+ BR2_SYSTEM_DHCP="eth0"
+ BR2_LINUX_KERNEL=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.59"
+ BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
+ BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/mender/x86_64/linux.config"
+ BR2_PACKAGE_MENDER=y
+ BR2_ROOTFS_POST_BUILD_SCRIPT="{}"
+ BR2_ROOTFS_OVERLAY="{}"
+ BR2_PACKAGE_HOST_MENDER_ARTIFACT=y
+ BR2_TARGET_ROOTFS_EXT2=y
+ BR2_TARGET_ROOTFS_EXT2_4=y
+ BR2_TARGET_ROOTFS_EXT2_SIZE="256M"
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """.format(
+ infra.filepath("tests/package/test_mender/post-build.sh"),
+ # overlay to add a fake 'fw_printenv', used by Mender
+ infra.filepath("tests/package/test_mender/rootfs-overlay"))
def base_test_run(self):
- cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
- self.emulator.boot(arch="armv5", kernel="builtin",
- options=["-initrd", cpio_file])
+ drive = os.path.join(self.builddir, "images", "rootfs.ext4")
+ kern = os.path.join(self.builddir, "images", "bzImage")
+ self.emulator.boot(arch="x86_64",
+ kernel=kern,
+ kernel_cmdline=["root=/dev/vda console=ttyS0 net.ifnames=0"],
+ options=["-cpu", "Nehalem",
+ "-m", "256M",
+ "-net", "nic,model=virtio",
+ "-net", "user",
+ "-drive", f"file={drive},if=virtio,format=raw"])
self.emulator.login()
def run_mender_test(self):
- self.assertRunOk("ps aux | egrep [m]ender")
+
+ # mender-authd requires systemd-resolved.service to be up,
+ # so wait for eth0 to get its DHCP address before querying.
+ cmd = "while ! ifconfig eth0 | grep -q 'inet addr'; do sleep 1; done"
+ self.assertRunOk(cmd, timeout=30)
+
+ output, _ = self.emulator.run("systemctl is-active mender-updated")
+ self.assertEqual(output[0], "active")
# Check if a simple Mender command is correctly executed
- self.assertRunOk("mender -log-level debug show-artifact")
- self.assertRunOk("mender -log-level debug show-artifact | grep 'RUNTIME_TEST_ARTIFACT_NAME'")
- cmd = "mender show-artifact 2>&1 | grep -i 'err'" # Check if no 'error' among the traces
+ self.assertRunOk("mender-update --log-level debug show-artifact")
+ self.assertRunOk("mender-update --log-level debug show-artifact | grep 'RUNTIME_TEST_ARTIFACT_NAME'")
+ cmd = "mender-update show-artifact 2>&1 | grep -i 'err'" # Check if no 'error' among the traces
_, exit_code = self.emulator.run(cmd)
self.assertEqual(exit_code, 1)
-class TestMenderRW(TestMenderInfra):
- def test_run(self):
- TestMenderInfra.base_test_run(self)
-
- # Check if the Daemon is running
- self.assertRunOk("ls /var/run/mender.pid")
- self.run_mender_test()
-
-
class TestMenderRO(TestMenderInfra):
config = \
"""
@@ -51,22 +75,4 @@ class TestMenderRO(TestMenderInfra):
def test_run(self):
TestMenderInfra.base_test_run(self)
-
- # Check if the Daemon is running
- self.assertRunOk("ls /var/run/mender.pid")
- self.run_mender_test()
-
-
-# gitlab-runner: large
-class TestMenderSystemd(TestMenderInfra):
- config = \
- """
- {}
- BR2_INIT_SYSTEMD=y
- """.format(TestMenderInfra.config)
-
- def test_run(self):
- TestMenderInfra.base_test_run(self)
- output, _ = self.emulator.run("systemctl is-active mender-client")
- self.assertEqual(output[0], "active")
self.run_mender_test()
--
2.56.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Buildroot] [PATCH v3 6/6] package/mender-connect: depend on mender, drop sysvinit file
2026-10-28 11:33 [Buildroot] [PATCH v3 1/6] package/mender-update-modules: add banner module Adam Duskett
` (3 preceding siblings ...)
2026-10-28 11:33 ` [Buildroot] [PATCH v3 5/6] package/mender: bump to version 5.2.0 Adam Duskett
@ 2026-10-28 11:33 ` Adam Duskett
2026-11-05 7:33 ` Thomas Petazzoni via buildroot
2026-11-05 7:31 ` [Buildroot] [PATCH v3 1/6] package/mender-update-modules: add banner module Thomas Petazzoni via buildroot
5 siblings, 1 reply; 9+ messages in thread
From: Adam Duskett @ 2026-10-28 11:33 UTC (permalink / raw)
To: buildroot; +Cc: Adam Duskett, Angelo Compagnucci
Much like the mender-update-modules package, have the mender-connect
package depend on the mender package. Also, as mender no longer supports
sysvinit, it's safe to remove S43mender-connect
Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
---
package/mender-connect/Config.in | 20 +++------
package/mender-connect/S43mender-connect | 53 ------------------------
package/mender-connect/mender-connect.mk | 5 ---
3 files changed, 5 insertions(+), 73 deletions(-)
delete mode 100644 package/mender-connect/S43mender-connect
diff --git a/package/mender-connect/Config.in b/package/mender-connect/Config.in
index d478e468c2..b8f3770509 100644
--- a/package/mender-connect/Config.in
+++ b/package/mender-connect/Config.in
@@ -1,15 +1,7 @@
config BR2_PACKAGE_MENDER_CONNECT
bool "mender-connect"
- depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
- depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS
- depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2, mender
- depends on BR2_USE_WCHAR # libglib2 -> gettext
- depends on BR2_USE_MMU # dbus -> fork()
- select BR2_PACKAGE_DBUS # runtime
- select BR2_PACKAGE_HOST_GO
- select BR2_PACKAGE_LIBGLIB2
- select BR2_PACKAGE_MENDER # runtime
- select BR2_PACKAGE_OPENSSL
+ depends on BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS
+ depends on BR2_PACKAGE_MENDER
help
mender-connect is a daemon responsible for handling
bidirectional (websocket) communication with the Mender
@@ -27,8 +19,6 @@ config BR2_PACKAGE_MENDER_CONNECT
https://github.com/mendersoftware/mender-connect
-comment "mender-connect needs a toolchain w/ threads, wchar"
- depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
- depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS
- depends on BR2_USE_MMU
- depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR
+comment "mender-connect needs mender"
+ depends on BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS
+ depends on !BR2_PACKAGE_MENDER
diff --git a/package/mender-connect/S43mender-connect b/package/mender-connect/S43mender-connect
deleted file mode 100644
index 4cc21510c4..0000000000
--- a/package/mender-connect/S43mender-connect
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-DAEMON="mender-connect"
-DAEMON_PATH="/usr/bin/mender-connect"
-PIDFILE="/var/run/${DAEMON}.pid"
-
-MENDER_CONNECT_ARGS=""
-
-# shellcheck source=/dev/null
-[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON"
-
-start() {
- printf 'Starting %s: ' "${DAEMON}"
- umask 077
- # shellcheck disable=SC2086 # we need the word splitting
- start-stop-daemon -bmSqp "$PIDFILE" -x ${DAEMON_PATH} \
- -- -daemon ${DAEMON_ARGS}
- status=$?
- if [ "$status" -eq 0 ]; then
- echo "OK"
- else
- echo "FAIL"
- fi
- return "$status"
-}
-
-stop() {
- printf 'Stopping %s: ' "${DAEMON}"
- start-stop-daemon -K -q -p "$PIDFILE"
- status=$?
- if [ "$status" -eq 0 ]; then
- echo "OK"
- else
- echo "FAIL"
- fi
- return "$status"
-}
-
-restart() {
- stop
- sleep 1
- start
-}
-
-case "$1" in
- start|stop|restart)
- "$1";;
- reload)
- # Restart, since there is no true "reload" feature.
- restart;;
- *)
- echo "Usage: $0 {start|stop|restart|reload}"
- exit 1
-esac
diff --git a/package/mender-connect/mender-connect.mk b/package/mender-connect/mender-connect.mk
index ae9094f3b4..91b2c9354b 100644
--- a/package/mender-connect/mender-connect.mk
+++ b/package/mender-connect/mender-connect.mk
@@ -54,9 +54,4 @@ define MENDER_CONNECT_INSTALL_INIT_SYSTEMD
$(TARGET_DIR)/usr/lib/systemd/system/mender-connect.service
endef
-define MENDER_CONNECT_INSTALL_INIT_SYSV
- $(INSTALL) -D -m 0755 $(MENDER_CONNECT_PKGDIR)/S43mender-connect \
- $(TARGET_DIR)/etc/init.d/S43mender-connect
-endef
-
$(eval $(golang-package))
--
2.56.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Buildroot] [PATCH v3 5/6] package/mender: bump to version 5.2.0
2026-10-28 11:33 ` [Buildroot] [PATCH v3 5/6] package/mender: bump to version 5.2.0 Adam Duskett
@ 2026-10-28 14:23 ` Adam Duskett
0 siblings, 0 replies; 9+ messages in thread
From: Adam Duskett @ 2026-10-28 14:23 UTC (permalink / raw)
To: buildroot; +Cc: Angelo Compagnucci
[-- Attachment #1.1: Type: text/plain, Size: 44796 bytes --]
All;
This was tested against libopenssl 4.0.2 using Bernd's patch here:
https://patchwork.buildroot.org/project/buildroot/patch/20261011130058.3443432-53-bernd@kuhls.net/
With a boost update patches applied from this series:
https://patchwork.buildroot.org/project/buildroot/list/?series=1112&archive=both&state=*
Testing went as follows:
- make mender_x86_64_efi_defconfig
- Add openssh to the image
- Boot using the following command:
```
qemu-system-x86_64 \
-enable-kvm \
-display gtk,gl=on,show-cursor=on \
-m 512M \
-M q35,accel=kvm \
-cpu host \
-netdev
bridge,br=virbr0,id=net0,helper="/usr/libexec/qemu-bridge-helper" \
-device virtio-net-pci,netdev=net0 \
-net user \
-drive file=output/images/disk.img,if=virtio,format=raw \
-bios /usr/share/edk2/ovmf/OVMF_CODE.fd
```
Modify the ServerURL entry in /etc/mender/mender.conf to point to my local
mender server with
the address of "https://192.168.178.243"
Replace /etc/mender/server.crt with my local development certificate.
The qemu device appears properly on my local testing server and I am able
to push updates
to the running virtual image.
On Wed, 28 Oct 2026 at 12:33, Adam Duskett <
adam.duskett@amarulasolutions.com> wrote:
> Starting with Mender version 4, the program is rewritten from Go to C++
> using
> CMake.
>
> The current package provided by Buildroot is 3.5.3, which is quite old,
> having
> been released on 12/6/2024. Since then, several changes have occurred,
> necessitating a substantially large patch with many changes all at once.
>
> The following is a list of changes:
>
> MAJOR:
> - Mender is now a C++ project
> - Mender depends on systemd
> - Drops sysvinit support
> - Mender is split into two binaries:
> - mender-authd
> - mender-updated
>
> MINOR:
>
> - Drop the 0001-openssl-v4-update.patch.
> - Add 0001-src-common-crypto-platform-openssl-crypto.cpp-fix-bu.patch
> Which allowd building without OpenSSL engine support.
>
> This patch is tested against OpenSSL 4.0.2 which is not yet applied
> to the master branch.
>
> - The following busyboxy options are required by the rootfs module and
> are
> enabled by default:
> - flock
> - stat
> - stat_format
> - sync_fancy
> - wget
> - wget_https
> - wget_openssl
> Note: While sync_fancy isn't strictly necessary, enabling this
> feature
> prevents several messages about sync ignoring all arguments.
>
> - New dependencies are as follows:
> - boost
> - dbus
> - libarchive
> - libglib2
> - lmdb
> - openssl
> - systemd
> - yaml-cpp
>
> The configs/mender_x86_64_efi_defconfig file is updated to
> use systemd by default.
>
> Mender is configured with -DBUILD_SHARED_LIBS=OFF as the bundled
> libyaml and tiny-process-library .so files are not installed when
> -DBUILD_SHARED_LIBS=ON is selected.
>
> The support/testing/tests/package/test_mender.py is updated:
> - Uses systemd
> - Bumped kernel version to 6.18.59
> - Adds a simple network as mender-authd requires network-online.target
> - Drops sysvinit tests
>
> Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
> ---
> v2 -> v3:
> - Removed documentation update (see first patch in this series)
> - Use an external toolchain for mender_x86_64_efi_defconfig [Thomas]
> - Dropped jq selection for mender_x86_64_efi_defconfig [Thomas]
> - Dropped yaml-cpp selection (bundled and linked statically in mender
> source code)
> - Cleaned up various make commands [Thomas]
> - Removed kernel fragment used during debugging [Thomas]
> - Add 0001-src-common-crypto-platform-openssl-crypto.cpp-fix-bu.patch
> [Thomas]
>
> board/mender/x86_64/linux.config | 11 +
> configs/mender_x86_64_efi_defconfig | 7 +-
> package/mender/0001-openssl-v4-update.patch | 191 ------------------
> ...o-platform-openssl-crypto.cpp-fix-bu.patch | 69 +++++++
> package/mender/Config.in | 39 ++--
> package/mender/S42mender | 44 ----
> package/mender/mender-client.service | 13 --
> package/mender/mender.hash | 52 ++---
> package/mender/mender.mk | 146 ++++++-------
> package/mender/server.crt | 22 --
> support/testing/tests/package/test_mender.py | 96 ++++-----
> 11 files changed, 249 insertions(+), 441 deletions(-)
> delete mode 100644 package/mender/0001-openssl-v4-update.patch
> create mode 100644
> package/mender/0001-src-common-crypto-platform-openssl-crypto.cpp-fix-bu.patch
> delete mode 100644 package/mender/S42mender
> delete mode 100644 package/mender/mender-client.service
> delete mode 100644 package/mender/server.crt
>
> diff --git a/board/mender/x86_64/linux.config
> b/board/mender/x86_64/linux.config
> index b758c6d45a..f980ec39ab 100644
> --- a/board/mender/x86_64/linux.config
> +++ b/board/mender/x86_64/linux.config
> @@ -1,4 +1,8 @@
> CONFIG_SYSVIPC=y
> +CONFIG_CGROUPS=y
> +CONFIG_CGROUP_SCHED=y
> +CONFIG_CFS_BANDWIDTH=y
> +CONFIG_USER_NS=y
> CONFIG_SMP=y
> CONFIG_HYPERVISOR_GUEST=y
> CONFIG_PARAVIRT=y
> @@ -15,18 +19,22 @@ CONFIG_NETFILTER_XTABLES_LEGACY=y
> CONFIG_IP_NF_IPTABLES_LEGACY=y
> CONFIG_IP_NF_IPTABLES=y
> CONFIG_IP_NF_FILTER=y
> +CONFIG_NET_SCHED=y
> +CONFIG_NET_SCH_FQ_CODEL=y
> CONFIG_CFG80211=m
> CONFIG_CFG80211_WEXT=y
> CONFIG_MAC80211=m
> CONFIG_PCI=y
> CONFIG_DEVTMPFS=y
> CONFIG_DEVTMPFS_MOUNT=y
> +CONFIG_DMI_SYSFS=y
> CONFIG_VIRTIO_BLK=y
> CONFIG_BLK_DEV_SD=y
> CONFIG_SCSI_VIRTIO=y
> CONFIG_ATA=y
> CONFIG_NETDEVICES=y
> CONFIG_VIRTIO_NET=y
> +CONFIG_E1000E=y
> CONFIG_ATH9K=m
> CONFIG_ATH9K_HTC=m
> CONFIG_CARL9170=m
> @@ -57,8 +65,11 @@ CONFIG_VIRTIO_INPUT=y
> CONFIG_VIRTIO_MMIO=y
> CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
> CONFIG_EXT4_FS=y
> +CONFIG_AUTOFS_FS=y
> CONFIG_FUSE_FS=y
> CONFIG_VFAT_FS=y
> +CONFIG_TMPFS=y
> +CONFIG_TMPFS_POSIX_ACL=y
> CONFIG_SQUASHFS=y
> CONFIG_NLS_CODEPAGE_437=y
> CONFIG_NLS_ISO8859_1=y
> diff --git a/configs/mender_x86_64_efi_defconfig
> b/configs/mender_x86_64_efi_defconfig
> index f10a461770..9cd68e5f62 100644
> --- a/configs/mender_x86_64_efi_defconfig
> +++ b/configs/mender_x86_64_efi_defconfig
> @@ -1,7 +1,6 @@
> BR2_x86_64=y
> -BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_18=y
> -BR2_INIT_SYSV=y
> -BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
> +BR2_TOOLCHAIN_EXTERNAL=y
> +BR2_INIT_SYSTEMD=y
> BR2_TARGET_GENERIC_GETTY_PORT="ttyS0"
> BR2_ROOTFS_OVERLAY="board/mender/x86_64/overlay"
> BR2_ROOTFS_POST_BUILD_SCRIPT="board/mender/x86_64/post-build.sh"
> @@ -42,7 +41,7 @@ BR2_PACKAGE_MENDER_GRUBENV=y
>
> BR2_PACKAGE_MENDER_GRUBENV_DEFINES="board/mender/x86_64/mender_grubenv_defines"
> BR2_TARGET_ROOTFS_EXT2=y
> BR2_TARGET_ROOTFS_EXT2_4=y
> -BR2_TARGET_ROOTFS_EXT2_SIZE="128M"
> +BR2_TARGET_ROOTFS_EXT2_SIZE="256M"
> # BR2_TARGET_ROOTFS_TAR is not set
> BR2_TARGET_GRUB2=y
> BR2_TARGET_GRUB2_X86_64_EFI=y
> diff --git a/package/mender/0001-openssl-v4-update.patch
> b/package/mender/0001-openssl-v4-update.patch
> deleted file mode 100644
> index 65443614d5..0000000000
> --- a/package/mender/0001-openssl-v4-update.patch
> +++ /dev/null
> @@ -1,191 +0,0 @@
> -Description: Fix build compatibility with OpenSSL 4.0
> - Include <openssl/x509v3.h> in hostname.c and hostname.go before checking
> - #ifndef X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT, preventing fallback to
> - legacy OpenSSL < 1.0.2 code that attempts to directly access opaque
> - ASN1_STRING fields.
> - Also add preprocessor guards around deprecated protocol methods
> - (SSLv3_method, TLSv1_method, TLSv1_1_method, TLSv1_2_method) in shim.c
> - and ENGINE functions (ENGINE_by_id, ENGINE_init, ENGINE_free,
> - ENGINE_finish, ENGINE_load_private_key, ENGINE_load_builtin_engines)
> - in shim.c, shim.h, engine.go, key.go to prevent implicit declaration
> - and undefined reference errors when building against OpenSSL 4.0.
> -Author: Frank Heimes <frank.heimes@canonical.com>
> -
> -Downloaded from Ubuntu:
> -
> https://git.launchpad.net/ubuntu/+source/golang-github-mendersoftware-openssl/tree/debian/patches/0004-openssl-v4-update.patch?h=applied/ubuntu/stonking-devel
> -
> -Upstream: not applicable, upstream moved to c++ in newer versions
> -
> -[Bernd: rebased for vendored download by buildroot infra]
> -Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
> -
> -diff -uNr mender-3.5.3.orig/vendor/
> github.com/mendersoftware/openssl/engine.go mender-3.5.3/vendor/
> github.com/mendersoftware/openssl/engine.go
> ---- mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/engine.go
> 2024-05-24 12:07:27.000000000 +0200
> -+++ mender-3.5.3/vendor/github.com/mendersoftware/openssl/engine.go
> 2026-09-20 18:37:50.270612314 +0200
> -@@ -15,6 +15,7 @@
> - package openssl
> -
> - /*
> -+#include "shim.h"
> - #include "openssl/engine.h"
> - */
> - import "C"
> -@@ -33,18 +34,18 @@
> - cname := C.CString(name)
> - defer C.free(unsafe.Pointer(cname))
> - e := &Engine{
> -- e: C.ENGINE_by_id(cname),
> -+ e: C.X_ENGINE_by_id(cname),
> - }
> - if e.e == nil {
> - return nil, fmt.Errorf("engine %s missing", name)
> - }
> -- if C.ENGINE_init(e.e) == 0 {
> -- C.ENGINE_free(e.e)
> -+ if C.X_ENGINE_init(e.e) == 0 {
> -+ C.X_ENGINE_free(e.e)
> - return nil, fmt.Errorf("engine %s not initialized", name)
> - }
> - runtime.SetFinalizer(e, func(e *Engine) {
> -- C.ENGINE_finish(e.e)
> -- C.ENGINE_free(e.e)
> -+ C.X_ENGINE_finish(e.e)
> -+ C.X_ENGINE_free(e.e)
> - })
> - return e, nil
> - }
> -diff -uNr mender-3.5.3.orig/vendor/
> github.com/mendersoftware/openssl/hostname.c mender-3.5.3/vendor/
> github.com/mendersoftware/openssl/hostname.c
> ---- mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/hostname.c
> 2024-05-24 12:07:27.000000000 +0200
> -+++ mender-3.5.3/vendor/github.com/mendersoftware/openssl/hostname.c
> 2026-09-20 18:32:37.854514981 +0200
> -@@ -6,6 +6,7 @@
> - */
> -
> - #include <openssl/x509.h>
> -+#include <openssl/x509v3.h>
> -
> - #ifndef X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT
> -
> -diff -uNr mender-3.5.3.orig/vendor/
> github.com/mendersoftware/openssl/key.go mender-3.5.3/vendor/
> github.com/mendersoftware/openssl/key.go
> ---- mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/key.go
> 2024-05-24 12:07:27.000000000 +0200
> -+++ mender-3.5.3/vendor/github.com/mendersoftware/openssl/key.go
> 2026-09-20 18:38:13.462370202 +0200
> -@@ -303,7 +303,7 @@
> - keyID := C.CString(id)
> - defer C.free(unsafe.Pointer(keyID))
> -
> -- key := C.ENGINE_load_private_key(e.e, keyID, nil, nil)
> -+ key := C.X_ENGINE_load_private_key(e.e, keyID, nil, nil)
> - if key == nil {
> - return nil, errors.New("cannot load private key,
> ENGINE_load_private_key error")
> - }
> -diff -uNr mender-3.5.3.orig/vendor/
> github.com/mendersoftware/openssl/shim.c mender-3.5.3/vendor/
> github.com/mendersoftware/openssl/shim.c
> ---- mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/shim.c
> 2024-05-24 12:07:27.000000000 +0200
> -+++ mender-3.5.3/vendor/github.com/mendersoftware/openssl/shim.c
> 2026-09-20 18:36:02.855038372 +0200
> -@@ -382,7 +382,9 @@
> - int rc = 0;
> -
> - OPENSSL_config(NULL);
> -+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_ENGINE)
> - ENGINE_load_builtin_engines();
> -+#endif
> - SSL_load_error_strings();
> - SSL_library_init();
> - OpenSSL_add_all_algorithms();
> -@@ -403,6 +405,46 @@
> - return 0;
> - }
> -
> -+ENGINE *X_ENGINE_by_id(const char *id) {
> -+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_ENGINE)
> -+ return ENGINE_by_id(id);
> -+#else
> -+ return NULL;
> -+#endif
> -+}
> -+
> -+int X_ENGINE_init(ENGINE *e) {
> -+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_ENGINE)
> -+ return ENGINE_init(e);
> -+#else
> -+ return 0;
> -+#endif
> -+}
> -+
> -+int X_ENGINE_free(ENGINE *e) {
> -+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_ENGINE)
> -+ return ENGINE_free(e);
> -+#else
> -+ return 0;
> -+#endif
> -+}
> -+
> -+int X_ENGINE_finish(ENGINE *e) {
> -+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_ENGINE)
> -+ return ENGINE_finish(e);
> -+#else
> -+ return 0;
> -+#endif
> -+}
> -+
> -+EVP_PKEY *X_ENGINE_load_private_key(ENGINE *e, const char *key_id,
> UI_METHOD *ui_method, void *callback_data) {
> -+#if OPENSSL_VERSION_NUMBER < 0x40000000L && !defined(OPENSSL_NO_ENGINE)
> -+ return ENGINE_load_private_key(e, key_id, ui_method,
> callback_data);
> -+#else
> -+ return NULL;
> -+#endif
> -+}
> -+
> - void * X_OPENSSL_malloc(size_t size) {
> - return OPENSSL_malloc(size);
> - }
> -@@ -480,7 +522,7 @@
> - }
> -
> - const SSL_METHOD *X_SSLv3_method() {
> --#ifndef OPENSSL_NO_SSL3_METHOD
> -+#if OPENSSL_VERSION_NUMBER < 0x40000000L &&
> !defined(OPENSSL_NO_SSL3_METHOD) && !defined(OPENSSL_NO_DEPRECATED_1_1_0)
> && !defined(OPENSSL_NO_DEPRECATED_3_0)
> - return SSLv3_method();
> - #else
> - return NULL;
> -@@ -488,11 +530,15 @@
> - }
> -
> - const SSL_METHOD *X_TLSv1_method() {
> -+#if OPENSSL_VERSION_NUMBER < 0x40000000L &&
> !defined(OPENSSL_NO_TLS1_METHOD) && !defined(OPENSSL_NO_DEPRECATED_1_1_0)
> && !defined(OPENSSL_NO_DEPRECATED_3_0)
> - return TLSv1_method();
> -+#else
> -+ return NULL;
> -+#endif
> - }
> -
> - const SSL_METHOD *X_TLSv1_1_method() {
> --#if defined(TLS1_1_VERSION) && !defined(OPENSSL_SYSNAME_MACOSX)
> -+#if OPENSSL_VERSION_NUMBER < 0x40000000L && defined(TLS1_1_VERSION) &&
> !defined(OPENSSL_SYSNAME_MACOSX) && !defined(OPENSSL_NO_TLS1_1_METHOD) &&
> !defined(OPENSSL_NO_DEPRECATED_1_1_0) && !defined(OPENSSL_NO_DEPRECATED_3_0)
> - return TLSv1_1_method();
> - #else
> - return NULL;
> -@@ -500,7 +546,7 @@
> - }
> -
> - const SSL_METHOD *X_TLSv1_2_method() {
> --#if defined(TLS1_2_VERSION) && !defined(OPENSSL_SYSNAME_MACOSX)
> -+#if OPENSSL_VERSION_NUMBER < 0x40000000L && defined(TLS1_2_VERSION) &&
> !defined(OPENSSL_SYSNAME_MACOSX) && !defined(OPENSSL_NO_TLS1_2_METHOD) &&
> !defined(OPENSSL_NO_DEPRECATED_1_1_0) && !defined(OPENSSL_NO_DEPRECATED_3_0)
> - return TLSv1_2_method();
> - #else
> - return NULL;
> -diff -uNr mender-3.5.3.orig/vendor/
> github.com/mendersoftware/openssl/shim.h mender-3.5.3/vendor/
> github.com/mendersoftware/openssl/shim.h
> ---- mender-3.5.3.orig/vendor/github.com/mendersoftware/openssl/shim.h
> 2024-05-24 12:07:27.000000000 +0200
> -+++ mender-3.5.3/vendor/github.com/mendersoftware/openssl/shim.h
> 2026-09-20 18:38:33.117854985 +0200
> -@@ -40,6 +40,13 @@
> - /* shim methods */
> - extern int X_shim_init();
> -
> -+/* Engine methods */
> -+extern ENGINE *X_ENGINE_by_id(const char *id);
> -+extern int X_ENGINE_init(ENGINE *e);
> -+extern int X_ENGINE_free(ENGINE *e);
> -+extern int X_ENGINE_finish(ENGINE *e);
> -+extern EVP_PKEY *X_ENGINE_load_private_key(ENGINE *e, const char
> *key_id, UI_METHOD *ui_method, void *callback_data);
> -+
> - /* Library methods */
> - extern void X_OPENSSL_free(void *ref);
> - extern void *X_OPENSSL_malloc(size_t size);
> diff --git
> a/package/mender/0001-src-common-crypto-platform-openssl-crypto.cpp-fix-bu.patch
> b/package/mender/0001-src-common-crypto-platform-openssl-crypto.cpp-fix-bu.patch
> new file mode 100644
> index 0000000000..e596f1b5f3
> --- /dev/null
> +++
> b/package/mender/0001-src-common-crypto-platform-openssl-crypto.cpp-fix-bu.patch
> @@ -0,0 +1,69 @@
> +From dcc218c6857e080e760b4a9c04acc79390151eb3 Mon Sep 17 00:00:00 2001
> +From: Adam Duskett <adam.duskett@amarulasolutions.com>
> +Date: Wed, 28 Oct 2026 12:07:07 +0100
> +Subject: [PATCH] src/common/crypto/platform/openssl/crypto.cpp: fix build
> + without engine support
> +
> +OpenSSL 4.0 removed ENGINE support entirely and always defines
> +OPENSSL_NO_ENGINE. Its engine.h still declares the ENGINE_* functions
> +for source compatibility, but only provides stub definitions when
> +OPENSSL_ENGINE_STUBS is defined, so linking mender-auth fails with:
> +
> + undefined reference to `ENGINE_by_id'
> + undefined reference to `ENGINE_free'
> + undefined reference to `ENGINE_init'
> + undefined reference to `ENGINE_load_builtin_engines'
> + undefined reference to `ENGINE_load_private_key'
> +
> +The same happens with OpenSSL 3.x configured with no-engine.
> +
> +Guard the ENGINE calls with OPENSSL_NO_ENGINE, and return an error
> +from LoadFromHSMEngine() when an SSL engine is configured but not
> +available.
> +
> +Upstream: https://github.com/mendersoftware/mender/pull/2037
> +Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
> +---
> + src/common/crypto/platform/openssl/crypto.cpp | 9 +++++++++
> + 1 file changed, 9 insertions(+)
> +
> +diff --git a/src/common/crypto/platform/openssl/crypto.cpp
> b/src/common/crypto/platform/openssl/crypto.cpp
> +index b31e6c8..5f6a4b9 100644
> +--- a/src/common/crypto/platform/openssl/crypto.cpp
> ++++ b/src/common/crypto/platform/openssl/crypto.cpp
> +@@ -103,9 +103,11 @@ auto bn_free = [](BIGNUM *bn) {
> + }
> + };
> + auto engine_free_func = [](ENGINE *e) {
> ++#ifndef OPENSSL_NO_ENGINE
> + if (e) {
> + ENGINE_free(e);
> + }
> ++#endif // OPENSSL_NO_ENGINE
> + };
> +
> + auto password_callback = [](char *buf, int size, int rwflag, void *u) {
> +@@ -153,6 +155,12 @@ string GetOpenSSLErrorMessage() {
> + }
> +
> + ExpectedPrivateKey LoadFromHSMEngine(const Args &args) {
> ++#ifdef OPENSSL_NO_ENGINE
> ++ return expected::unexpected(MakeError(
> ++ SetupError,
> ++ "Failed to get the " + args.ssl_engine
> ++ + " engine. OpenSSL was built without engine
> support"));
> ++#else
> + log::Trace("Loading the private key from HSM");
> +
> + ENGINE_load_builtin_engines();
> +@@ -190,6 +198,7 @@ ExpectedPrivateKey LoadFromHSMEngine(const Args
> &args) {
> + auto handle = unique_ptr<OpenSSLResourceHandle, void
> (*)(OpenSSLResourceHandle *)>(
> + new OpenSSLResourceHandle {std::move(engine)},
> resource_handle_free_func);
> + return std::make_unique<PrivateKey>(std::move(private_key),
> std::move(handle));
> ++#endif // OPENSSL_NO_ENGINE
> + }
> +
> + #ifdef MENDER_CRYPTO_OPENSSL_LEGACY
> +--
> +2.56.0
> +
> diff --git a/package/mender/Config.in b/package/mender/Config.in
> index c9b9d0b757..8f16e2312f 100644
> --- a/package/mender/Config.in
> +++ b/package/mender/Config.in
> @@ -1,9 +1,20 @@
> config BR2_PACKAGE_MENDER
> bool "mender"
> - depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
> - depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS
> - depends on BR2_TOOLCHAIN_HAS_THREADS
> - select BR2_PACKAGE_HOST_GO
> + depends on BR2_INSTALL_LIBSTDCPP
> + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # (bundled yaml-cpp)
> + 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 # boost, libarchive, libglib2
> + depends on BR2_PACKAGE_SYSTEMD
> + select BR2_PACKAGE_BOOST
> + select BR2_PACKAGE_BOOST_FILESYSTEM
> + select BR2_PACKAGE_BOOST_LOG
> + select BR2_PACKAGE_CA_CERTIFICATES
> + select BR2_PACKAGE_LIBARCHIVE
> + select BR2_PACKAGE_LIBGLIB2
> + select BR2_PACKAGE_LMDB
> select BR2_PACKAGE_OPENSSL
> select BR2_PACKAGE_OPENSSL_FORCE_LIBOPENSSL
> select BR2_PACKAGE_LIBOPENSSL_ENGINES
> @@ -21,16 +32,13 @@ config BR2_PACKAGE_MENDER
> - uboot-tools must be selected.
> - fw_printenv must be functional on the device.
> The Mender Uboot patches are at:
> - https://github.com/mendersoftware/meta-mender/
> +
> https://github.com/mendersoftware/meta-mender/tree/master/meta-mender-core/recipes-bsp/u-boot/patches
>
> For more information on Manual U-Boot integration, see:
> -
> https://docs.mender.io/2.6/system-updates-yocto-project/board-integration/bootloader-support/u-boot/manual-u-boot-integration
> +
> https://docs.mender.io/3.4/system-updates-yocto-project/board-integration/bootloader-support/u-boot/manual-u-boot-integration
>
> For systems using Grub2 as the bootloader:
> - Mender depends on the mender-grubenv package.
> - - The mender-grubenv package provides a fw_printenv script,
> - which is not compatible with the uboot-tools fw_printenv
> - script.
>
> The mender project recommends using uboot to load Grub2 as a
> secondary bootloader whenever possible. Using Grub2 as a
> @@ -39,7 +47,12 @@ config BR2_PACKAGE_MENDER
>
> https://github.com/mendersoftware/mender
>
> -comment "mender needs a toolchain w/ threads"
> - depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
> - depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS
> - depends on !BR2_TOOLCHAIN_HAS_THREADS
> +comment "mender needs systemd"
> + depends on !BR2_PACKAGE_SYSTEMD
> +
> +comment "mender needs a toolchain w/ C++, NPTL, wchar, not affected by
> GCC bug 64735"
> + 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
> diff --git a/package/mender/S42mender b/package/mender/S42mender
> deleted file mode 100644
> index 70116ed4eb..0000000000
> --- a/package/mender/S42mender
> +++ /dev/null
> @@ -1,44 +0,0 @@
> -#!/bin/sh
> -#
> -# Starts mender service.
> -#
> -DAEMON="mender"
> -DAEMON_PATH="/usr/bin/mender"
> -PIDFILE="/var/run/${DAEMON}.pid"
> -DAEMON_ARGS="daemon"
> -
> -start() {
> - printf "Starting mender service: "
> - umask 077
> - start-stop-daemon -bmSqp "$PIDFILE" -x ${DAEMON_PATH} --
> ${DAEMON_ARGS}
> - status=$?
> - [ "${status}" = 0 ] && echo "OK" || echo "FAIL"
> -}
> -
> -stop() {
> - printf "Stopping mender service: "
> - start-stop-daemon -Kqp "$PIDFILE"
> - status=$?
> - [ "${status}" = 0 ] && echo "OK" || echo "FAIL"
> -}
> -restart() {
> - stop
> - start
> -}
> -
> -case "$1" in
> - start)
> - start
> - ;;
> - stop)
> - stop
> - ;;
> - restart|reload)
> - restart
> - ;;
> - *)
> - echo "Usage: $0 {start|stop|reload|restart}"
> - exit 1
> -esac
> -
> -exit $?
> diff --git a/package/mender/mender-client.service
> b/package/mender/mender-client.service
> deleted file mode 100644
> index 47e439993c..0000000000
> --- a/package/mender/mender-client.service
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -[Unit]
> -Description=Mender OTA update service
> -After=systemd-resolved.service
> -
> -[Service]
> -Type=idle
> -User=root
> -Group=root
> -ExecStart=/usr/bin/mender daemon
> -Restart=on-abort
> -
> -[Install]
> -WantedBy=multi-user.target
> diff --git a/package/mender/mender.hash b/package/mender/mender.hash
> index 17fe08c827..1aa8fb63bd 100644
> --- a/package/mender/mender.hash
> +++ b/package/mender/mender.hash
> @@ -1,47 +1,27 @@
> # Locally computed:
> -sha256 35e369759b8d4f012153e538b5daf1e0cebe842205811e708332c5a092270ac5
> mender-3.5.3-go2.tar.gz
> +sha256 436ae559358f29c672b98ca77b953936ba6ef51455466fb5ed0ced7ae77fc226
> mender-5.2.0.tar.gz
> +sha256 4d3409e4f8f7f3b9de5da7fee7c03e36a2381a02b2e318702485fc993a735cc9
> LIC_FILES_CHKSUM.sha256
>
> # Vendor licenses
> # Generated with sed '/^[A-Za-z0-9_]/s/^/sha256 /'
> LIC_FILES_CHKSUM.sha256
>
> # Apache-2.0 license.
> -sha256 d0f406b04e7901e6b4076bdf5fd20f9d7f04fc41681069fd8954413ac6295688
> LICENSE
> -sha256 52b2497ce07650b825015e80ca7a5d40c360c04c530234ca6d950b0f98bca23a
> vendor/github.com/mendersoftware/mender-artifact/LICENSE
> -sha256 <http://github.com/mendersoftware/mender-artifact/LICENSE-sha256>
> 73ba74dfaa520b49a401b5d21459a8523a146f3b7518a833eea5efa85130bf68 vendor/
> github.com/mendersoftware/openssl/LICENSE
> -sha256 <http://github.com/mendersoftware/openssl/LICENSE-sha256>
> cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 vendor/
> github.com/minio/sha256-simd/LICENSE
> -sha256 <http://github.com/minio/sha256-simd/LICENSE-sha256>
> 8f5d89b47d7a05a199b77b7e0f362dad391d451ebda4ef48ba11c50c071564c7 vendor/
> github.com/mendersoftware/progressbar/LICENSE
> +sha256 <http://github.com/mendersoftware/progressbar/LICENSE+sha256>
> d7e8fd4ad05371007d60285c309ba7a7ce3e61029b843f949fbb9ec79dc9eb47 LICENSE
> #
> -# BSD 2 Clause license.
> -sha256 8d427fd87bc9579ea368fde3d49f9ca22eac857f91a9dec7e3004bdfab7dee86
> vendor/github.com/pkg/errors/LICENSE
> -sha256 <http://github.com/pkg/errors/LICENSE-sha256>
> e4646a82a976369d7ae8f6ed5c11d35dc0af18433a8ccc24c85b459ad8b95128 vendor/
> github.com/godbus/dbus/LICENSE
> -sha256 <http://github.com/godbus/dbus/LICENSE-sha256>
> 2be1b548b0387ca8948e1bb9434e709126904d15f622cc2d0d8e7f186e4d122d vendor/
> github.com/gorilla/websocket/LICENSE
> +# MIT clause license
> +sha256 d64d1b4d948aa7751cfb613c02dc246aab7b358d760053e6580f01affe946906
> src/common/vendor/json/LICENSE.MIT
> +sha256 7920c8620b1e073a79a667c44f9149c25724eb9f0f6b220b3c8d9564e2d40a43
> src/common/vendor/json/docs/mkdocs/docs/home/license.md
> +sha256 2aefa40fa7e1c0fab18fbad5b15b02406eea1399d3cca42cc1012b65b4a56f74
> src/common/vendor/tiny-process-library/LICENSE
> +sha256 aa6fcc27be034e41e21dd832f9175bfe694a48491d9e14ff0fa278e19ad14f1b
> src/common/vendor/yaml-cpp/LICENSE
> #
> -# BSD 3 Clause license.
> -sha256 0d9e582ee4bff57bf1189c9e514e6da7ce277f9cd3bc2d488b22fbb39a6d87cf
> vendor/github.com/klauspost/compress/LICENSE
> -sha256 <http://github.com/klauspost/compress/LICENSE-sha256>
> 2eb550be6801c1ea434feba53bf6d12e7c71c90253e0a9de4a4f46cf88b56477 vendor/
> github.com/pmezard/go-difflib/LICENSE
> -sha256 <http://github.com/pmezard/go-difflib/LICENSE-sha256>
> 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 vendor/
> golang.org/x/sys/LICENSE
> -sha256 <http://golang.org/x/sys/LICENSE-sha256>
> 0634b008cee55ca01f0888d2f5aba2d34e66c3f52c31a4e16a5d5d33d0c2a03e vendor/
> github.com/bmatsuo/lmdb-go/LICENSE.md
> -sha256 <http://github.com/bmatsuo/lmdb-go/LICENSE.md-sha256>
> 87640bc4df2ceb1559f268a3db1ba859ab780f7ba5b1b4545173d4680a3d918b vendor/
> github.com/remyoudompheng/go-liblzma/LICENSE
> -sha256 <http://github.com/remyoudompheng/go-liblzma/LICENSE-sha256>
> 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 vendor/
> golang.org/x/term/LICENSE
> +# UNLICENSE
> +sha256 7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c
> src/common/vendor/lmdbxx/UNLICENSE
> #
> -# ISC license.
> -sha256 1b93a317849ee09d3d7e4f1d20c2b78ddb230b4becb12d7c224c927b9d470251
> vendor/github.com/davecgh/go-spew/LICENSE
> +# CC0 1.0 Universal
> +sha256 a2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499
> src/common/vendor/expected/COPYING
> #
> -# MIT license.
> -sha256 6d2de1cde19c4d2bd8bcd9aaa1d581f4cfa3db9cf71896140330eaa2f2687685
> vendor/github.com/klauspost/pgzip/LICENSE
> -sha256 <http://github.com/klauspost/pgzip/LICENSE-sha256>
> f69f157b0be75da373605dbc8bbf142e8924ee82d8f44f11bcaf351335bf98cf vendor/
> github.com/klauspost/compress/internal/snapref/LICENSE
> -sha256
> <http://github.com/klauspost/compress/internal/snapref/LICENSE-sha256>
> f566a9f97bacdaf00d9f21dd991e81dc11201c4e016c86b470799429a1c9a79c vendor/
> github.com/klauspost/compress/zstd/internal/xxhash/LICENSE.txt
> -sha256 5d966570d7a442d4e969892860a914e542c97f262c873baee8f0aa48e1f40212
> vendor/github.com/klauspost/cpuid/v2/LICENSE
> -sha256 <http://github.com/klauspost/cpuid/v2/LICENSE-sha256>
> 51a0c9ec7f8b7634181b8d4c03e5b5d204ac21d6e72f46c313973424664b2e6b vendor/
> github.com/sirupsen/logrus/LICENSE
> -sha256 <http://github.com/sirupsen/logrus/LICENSE-sha256>
> f8e536c1c7b695810427095dc85f5f80d44ff7c10535e8a9486cf393e2599189 vendor/
> github.com/stretchr/testify/LICENSE
> -sha256 <http://github.com/stretchr/testify/LICENSE-sha256>
> ffa15bdce332058a03a1d923910864fb6e58bf6df66a0e3914284725b327183e vendor/
> github.com/ungerik/go-sysfs/LICENSE
> -sha256 <http://github.com/ungerik/go-sysfs/LICENSE-sha256>
> da277af11b85227490377fbcac6afccc68be560c4fff36ac05ca62de55345fd7 vendor/
> github.com/urfave/cli/v2/LICENSE
> -sha256 <http://github.com/urfave/cli/v2/LICENSE-sha256>
> b2663894033a05fd80261176cd8da1d72546e25842d5c1abcc852ca23b6b61b0 vendor/
> github.com/stretchr/objx/LICENSE
> -sha256 <http://github.com/stretchr/objx/LICENSE-sha256>
> d18f6323b71b0b768bb5e9616e36da390fbd39369a81807cca352de4e4e6aa0b vendor/
> gopkg.in/yaml.v3/LICENSE
> -sha256 <http://gopkg.in/yaml.v3/LICENSE-sha256>
> 08eab1118c80885fa1fa6a6dd7303f65a379fcb3733e063d20d1bbc2c76e6fa1 vendor/
> github.com/mattn/go-isatty/LICENSE
> +# Boost Software License
> +sha256 c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566
> src/common/vendor/optional-lite/LICENSE.txt
> #
> -# OpenLDAP Public License
> -sha256 310fe25c858a9515fc8c8d7d1f24a67c9496f84a91e0a0e41ea9975b1371e569
> vendor/github.com/bmatsuo/lmdb-go/LICENSE.mdb.md
> -
> -# sha256 of all the vendor licenses combined
> -sha256 86407bd98d5ea7fb0f09ab771c3333e975d06565b809a2dd95f864dc1e3a09b3
> LIC_FILES_CHKSUM.sha256
> +# BSD-3
> +sha256 9702de7e4117a8e2b20dafab11ffda58c198aede066406496bef670d40a22138
> src/common/vendor/yaml-cpp/test/googletest-1.16.0/LICENSE
> diff --git a/package/mender/mender.mk b/package/mender/mender.mk
> index 76dc28d547..e20fec8aa9 100644
> --- a/package/mender/mender.mk
> +++ b/package/mender/mender.mk
> @@ -4,107 +4,107 @@
> #
>
> ################################################################################
>
> -MENDER_VERSION = 3.5.3
> -MENDER_SITE = $(call github,mendersoftware,mender,$(MENDER_VERSION))
> -MENDER_LICENSE = Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, MIT,
> OLDAP-2.8
> +MENDER_VERSION = 5.2.0
> +MENDER_SITE =
> https://github.com/mendersoftware/mender/releases/download/$(MENDER_VERSION)
> +MENDER_LICENSE = Apache-2.0, BSL-1.0, BSD-3-Clause, CC0-1.0, MIT,
> Unlicense
> MENDER_CPE_ID_VENDOR = northern.tech
> -# CVE-2024-46948 only affects mender-server
> -MENDER_IGNORE_CVES = CVE-2024-46948
>
> # Vendor license paths generated with:
> # awk '{print $2}' LIC_FILES_CHKSUM.sha256 | grep vendor
> MENDER_LICENSE_FILES = \
> LICENSE \
> LIC_FILES_CHKSUM.sha256 \
> - vendor/github.com/mendersoftware/mender-artifact/LICENSE \
> - vendor/github.com/mendersoftware/openssl/LICENSE \
> - vendor/github.com/minio/sha256-simd/LICENSE \
> - vendor/github.com/mendersoftware/progressbar/LICENSE \
> - vendor/github.com/pkg/errors/LICENSE \
> - vendor/github.com/godbus/dbus/LICENSE \
> - vendor/github.com/gorilla/websocket/LICENSE \
> - vendor/github.com/klauspost/compress/LICENSE \
> - vendor/github.com/pmezard/go-difflib/LICENSE \
> - vendor/golang.org/x/sys/LICENSE \
> - vendor/github.com/bmatsuo/lmdb-go/LICENSE.md \
> - vendor/github.com/remyoudompheng/go-liblzma/LICENSE \
> - vendor/golang.org/x/term/LICENSE \
> - vendor/github.com/davecgh/go-spew/LICENSE \
> - vendor/github.com/klauspost/pgzip/LICENSE \
> - vendor/github.com/klauspost/compress/internal/snapref/LICENSE \
> - vendor/
> github.com/klauspost/compress/zstd/internal/xxhash/LICENSE.txt \
> - vendor/github.com/klauspost/cpuid/v2/LICENSE \
> - vendor/github.com/sirupsen/logrus/LICENSE \
> - vendor/github.com/stretchr/testify/LICENSE \
> - vendor/github.com/ungerik/go-sysfs/LICENSE \
> - vendor/github.com/urfave/cli/v2/LICENSE \
> - vendor/github.com/stretchr/objx/LICENSE \
> - vendor/gopkg.in/yaml.v3/LICENSE \
> - vendor/github.com/mattn/go-isatty/LICENSE \
> - vendor/github.com/bmatsuo/lmdb-go/LICENSE.mdb.md
> -
> -MENDER_DEPENDENCIES = host-pkgconf openssl
> -
> -MENDER_LDFLAGS = -X
> github.com/mendersoftware/mender/conf.Version=$(MENDER_VERSION)
> -
> -MENDER_UPDATE_MODULES_FILES = directory single-file
> + src/common/vendor/json/LICENSE.MIT \
> + src/common/vendor/json/docs/mkdocs/docs/home/license.md \
> + src/common/vendor/tiny-process-library/LICENSE \
> + src/common/vendor/yaml-cpp/LICENSE \
> + src/common/vendor/lmdbxx/UNLICENSE \
> + src/common/vendor/expected/COPYING \
> + src/common/vendor/optional-lite/LICENSE.txt \
> + src/common/vendor/yaml-cpp/test/googletest-1.16.0/LICENSE
> +
> +MENDER_DEPENDENCIES += \
> + host-pkgconf \
> + boost \
> + dbus \
> + libarchive \
> + libglib2 \
> + lmdb \
> + openssl \
> + systemd
> +
> +MENDER_INSTALL_TARGET_OPTS = \
> + install-bin \
> + install-dbus \
> + install-dbus-service-files \
> + install-identity-scripts \
> + install-inventory-network-scripts \
> + install-inventory-scripts \
> + install-modules \
> + install-rootfs-image-module \
> + install-systemd
>
> define MENDER_INSTALL_CONFIG_FILES
> - $(INSTALL) -d -m 755 $(TARGET_DIR)/etc/mender/scripts
> - echo -n "3" > $(TARGET_DIR)/etc/mender/scripts/version
> -
> $(INSTALL) -D -m 0644 $(MENDER_PKGDIR)/mender.conf \
> $(TARGET_DIR)/etc/mender/mender.conf
> - $(INSTALL) -D -m 0644 $(MENDER_PKGDIR)/server.crt \
> - $(TARGET_DIR)/etc/mender/server.crt
>
> - $(INSTALL) -D -m 0755 $(@D)/support/mender-device-identity \
> -
> $(TARGET_DIR)/usr/share/mender/identity/mender-device-identity
> - $(foreach f,bootloader-integration hostinfo network os
> rootfs-type, \
> - $(INSTALL) -D -m 0755 $(@D)/support/mender-inventory-$(f) \
> -
> $(TARGET_DIR)/usr/share/mender/inventory/mender-inventory-$(f)
> - )
> + $(INSTALL) -D -m 0644 $(@D)/support/demo.crt \
> + $(TARGET_DIR)/etc/mender/server.crt
>
> $(INSTALL) -D -m 0755 $(MENDER_PKGDIR)/device_type \
> $(TARGET_DIR)/etc/mender/device_type
>
> - mkdir -p $(TARGET_DIR)/var/lib/mender
> - $(foreach f,$(MENDER_UPDATE_MODULES_FILES), \
> - $(INSTALL) -D -m 0755 $(@D)/support/modules/$(notdir $(f))
> \
> - $(TARGET_DIR)/usr/share/mender/modules/v3/$(notdir
> $(f))
> - )
> + mkdir -p $(TARGET_DIR)/var/lib
> endef
> -
> MENDER_POST_INSTALL_TARGET_HOOKS += MENDER_INSTALL_CONFIG_FILES
>
> +# The vendored tiny-process-library and yaml-cpp are built as part of
> +# mender but never installed, so always link them statically.
> +MENDER_CONF_OPTS += \
> + -DBUILD_SHARED_LIBS=OFF \
> + -DMENDER_EMBED_MENDER_AUTH=OFF \
> + -DMENDER_USE_DBUS=ON \
> + -DMENDER_VERSION=$(MENDER_VERSION)
> +
> +ifeq ($(BR2_PACKAGE_GZIP),y)
> +MENDER_DEPENDENCIES += gzip
> +MENDER_CONF_OPTS += -DMENDER_ARTIFACT_GZIP_COMPRESSION=ON
> +else
> +MENDER_CONF_OPTS += -DMENDER_ARTIFACT_GZIP_COMPRESSION=OFF
> +endif
> +
> ifeq ($(BR2_PACKAGE_XZ),y)
> MENDER_DEPENDENCIES += xz
> +MENDER_CONF_OPTS += -DMENDER_ARTIFACT_LZMA_COMPRESSION=ON
> else
> -MENDER_TAGS += nolzma
> +MENDER_CONF_OPTS += -DMENDER_ARTIFACT_LZMA_COMPRESSION=OFF
> endif
>
> -ifeq ($(BR2_PACKAGE_DBUS)$(BR2_PACKAGE_LIBGLIB2),yy)
> -MENDER_DEPENDENCIES += libglib2
> -define MENDER_INSTALL_DBUS_AUTHENTICATION_MANAGER_CONF
> - $(INSTALL) -D -m 0755
> $(@D)/support/dbus/io.mender.AuthenticationManager.conf \
> -
> $(TARGET_DIR)/etc/dbus-1/system.d/io.mender.AuthenticationManager.conf
> -
> - $(INSTALL) -D -m 0755
> $(@D)/support/dbus/io.mender.UpdateManager.conf \
> -
> $(TARGET_DIR)/etc/dbus-1/system.d/io.mender.UpdateManager.conf
> -endef
> -MENDER_POST_INSTALL_TARGET_HOOKS +=
> MENDER_INSTALL_DBUS_AUTHENTICATION_MANAGER_CONF
> +ifeq ($(BR2_PACKAGE_ZSTD),y)
> +MENDER_DEPENDENCIES += zstd
> +MENDER_CONF_OPTS += -DMENDER_ARTIFACT_ZSTD_COMPRESSION=ON
> else
> -MENDER_TAGS += nodbus
> +MENDER_CONF_OPTS += -DMENDER_ARTIFACT_ZSTD_COMPRESSION=OFF
> endif
>
> -define MENDER_INSTALL_INIT_SYSTEMD
> - $(INSTALL) -D -m 0644 $(MENDER_PKGDIR)/mender-client.service \
> - $(TARGET_DIR)/usr/lib/systemd/system/mender-client.service
> +define MENDER_INSTALL_MODULES_GEN
> + $(MAKE) -C $(@D) DESTDIR=$(HOST_DIR) install-modules-gen
> +endef
> +MENDER_POST_INSTALL_TARGET_HOOKS += MENDER_INSTALL_MODULES_GEN
> +
> +define MENDER_INSTALL_TARGET_CMDS
> + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR)
> $(MENDER_INSTALL_TARGET_OPTS)
> endef
>
> -define MENDER_INSTALL_INIT_SYSV
> - $(INSTALL) -D -m 755 $(MENDER_PKGDIR)/S42mender \
> - $(TARGET_DIR)/etc/init.d/S42mender
> +# Needed for rootfs-image-module
> +define MENDER_BUSYBOX_CONFIG_FIXUPS
> + $(call KCONFIG_ENABLE_OPT,CONFIG_FLOCK)
> + $(call KCONFIG_ENABLE_OPT,CONFIG_STAT)
> + $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_STAT_FORMAT)
> + $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_SYNC_FANCY)
> + $(call KCONFIG_ENABLE_OPT,CONFIG_WGET)
> + $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_WGET_HTTPS)
> + $(call KCONFIG_ENABLE_OPT,CONFIG_FEATURE_WGET_OPENSSL)
> endef
>
> -$(eval $(golang-package))
> +$(eval $(cmake-package))
> diff --git a/package/mender/server.crt b/package/mender/server.crt
> deleted file mode 100644
> index 79a57e15e7..0000000000
> --- a/package/mender/server.crt
> +++ /dev/null
> @@ -1,22 +0,0 @@
> ------BEGIN CERTIFICATE-----
> -MIIBfTCCASOgAwIBAgIJAJOS76a0qWuZMAoGCCqGSM49BAMCMBsxGTAXBgNVBAMM
> -EGRvY2tlci5tZW5kZXIuaW8wHhcNMTYxMjE0MTk1MjQ2WhcNMjYxMjEyMTk1MjQ2
> -WjAbMRkwFwYDVQQDDBBkb2NrZXIubWVuZGVyLmlvMFkwEwYHKoZIzj0CAQYIKoZI
> -zj0DAQcDQgAE7AVYis6MWGPGQYU1/tlLEnskRifDIhvkRb8Y4nQPekRkLkiBYYT3
> -iJ46wHrnejbHaLstU9GRdKWOmOuU6HGdO6NQME4wHQYDVR0OBBYEFGOIU4q++Vz8
> -9HuT1jg9V+wFeJcyMB8GA1UdIwQYMBaAFGOIU4q++Vz89HuT1jg9V+wFeJcyMAwG
> -A1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIhAPLnEeWPNeN7eDCEYRitBfyO
> -X1yf2kzOm4ohBE5GY9gzAiBCq7HOSkzQDkelmQCCCpGXf/UwYNgQJjSoeGfk0j1a
> -TQ==
> ------END CERTIFICATE-----
> ------BEGIN CERTIFICATE-----
> -MIIBhDCCASmgAwIBAgIJALQrf4QDot4IMAoGCCqGSM49BAMCMB4xHDAaBgNVBAMM
> -E3MzLmRvY2tlci5tZW5kZXIuaW8wHhcNMTYxMjE0MTk1MjQ2WhcNMjYxMjEyMTk1
> -MjQ2WjAeMRwwGgYDVQQDDBNzMy5kb2NrZXIubWVuZGVyLmlvMFkwEwYHKoZIzj0C
> -AQYIKoZIzj0DAQcDQgAEEc/Y3T+l3DvINePkpvVZORMIdHVs29jgsl48ia7z/NRX
> -HlKtKxVGJyFN5Y7sBZeLgBYH3F4Bo3KfmxI7ad0tI6NQME4wHQYDVR0OBBYEFIUm
> -cip00QZYpe4ULflbGNJan+Y9MB8GA1UdIwQYMBaAFIUmcip00QZYpe4ULflbGNJa
> -n+Y9MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhANHij9VZBDHOUPaC
> -pFiagnWnYL2HBR72W1xTKQbrLLTXAiEAvpwA4HzSnGmLd3010+jqQuMRHArN5WaX
> -h0fy7niBbIQ=
> ------END CERTIFICATE-----
> diff --git a/support/testing/tests/package/test_mender.py
> b/support/testing/tests/package/test_mender.py
> index 14440c9527..44196d6a96 100644
> --- a/support/testing/tests/package/test_mender.py
> +++ b/support/testing/tests/package/test_mender.py
> @@ -3,45 +3,69 @@ import os
> import infra.basetest
>
>
> +# gitlab-runner: large
> class TestMenderInfra(infra.basetest.BRTest):
> - config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
> - """
> - BR2_PACKAGE_MENDER=y
> - BR2_PACKAGE_HOST_MENDER_ARTIFACT=y
> - BR2_TARGET_ROOTFS_CPIO=y
> - BR2_ROOTFS_POST_BUILD_SCRIPT="{}"
> - BR2_ROOTFS_OVERLAY="{}"
> - """.format(
> -
> infra.filepath("tests/package/test_mender/post-build.sh"),
> - # overlay to add a fake 'fw_printenv', used by Mender
> -
> infra.filepath("tests/package/test_mender/rootfs-overlay"))
> + # infra.basetest.BASIC_TOOLCHAIN_CONFIG cannot be used as it does
> + # not include BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
> + # needed by mender. This config also uses an ext4 rootfs as
> + # the default 128MB is too small for an image with mender and systemd.
> + config = \
> + """
> + BR2_x86_64=y
> + BR2_x86_corei7=y
> + BR2_TOOLCHAIN_EXTERNAL=y
> + BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_64_CORE_I7_GLIBC_STABLE=y
> + BR2_INIT_SYSTEMD=y
> + BR2_SYSTEM_DHCP="eth0"
> + BR2_LINUX_KERNEL=y
> + BR2_LINUX_KERNEL_CUSTOM_VERSION=y
> + BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.59"
> + BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
> +
> BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/mender/x86_64/linux.config"
> + BR2_PACKAGE_MENDER=y
> + BR2_ROOTFS_POST_BUILD_SCRIPT="{}"
> + BR2_ROOTFS_OVERLAY="{}"
> + BR2_PACKAGE_HOST_MENDER_ARTIFACT=y
> + BR2_TARGET_ROOTFS_EXT2=y
> + BR2_TARGET_ROOTFS_EXT2_4=y
> + BR2_TARGET_ROOTFS_EXT2_SIZE="256M"
> + # BR2_TARGET_ROOTFS_TAR is not set
> + """.format(
> + infra.filepath("tests/package/test_mender/post-build.sh"),
> + # overlay to add a fake 'fw_printenv', used by Mender
> + infra.filepath("tests/package/test_mender/rootfs-overlay"))
>
> def base_test_run(self):
> - cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
> - self.emulator.boot(arch="armv5", kernel="builtin",
> - options=["-initrd", cpio_file])
> + drive = os.path.join(self.builddir, "images", "rootfs.ext4")
> + kern = os.path.join(self.builddir, "images", "bzImage")
> + self.emulator.boot(arch="x86_64",
> + kernel=kern,
> + kernel_cmdline=["root=/dev/vda console=ttyS0
> net.ifnames=0"],
> + options=["-cpu", "Nehalem",
> + "-m", "256M",
> + "-net", "nic,model=virtio",
> + "-net", "user",
> + "-drive",
> f"file={drive},if=virtio,format=raw"])
> self.emulator.login()
>
> def run_mender_test(self):
> - self.assertRunOk("ps aux | egrep [m]ender")
> +
> + # mender-authd requires systemd-resolved.service to be up,
> + # so wait for eth0 to get its DHCP address before querying.
> + cmd = "while ! ifconfig eth0 | grep -q 'inet addr'; do sleep 1;
> done"
> + self.assertRunOk(cmd, timeout=30)
> +
> + output, _ = self.emulator.run("systemctl is-active
> mender-updated")
> + self.assertEqual(output[0], "active")
>
> # Check if a simple Mender command is correctly executed
> - self.assertRunOk("mender -log-level debug show-artifact")
> - self.assertRunOk("mender -log-level debug show-artifact | grep
> 'RUNTIME_TEST_ARTIFACT_NAME'")
> - cmd = "mender show-artifact 2>&1 | grep -i 'err'" # Check if no
> 'error' among the traces
> + self.assertRunOk("mender-update --log-level debug show-artifact")
> + self.assertRunOk("mender-update --log-level debug show-artifact |
> grep 'RUNTIME_TEST_ARTIFACT_NAME'")
> + cmd = "mender-update show-artifact 2>&1 | grep -i 'err'" # Check
> if no 'error' among the traces
> _, exit_code = self.emulator.run(cmd)
> self.assertEqual(exit_code, 1)
>
>
> -class TestMenderRW(TestMenderInfra):
> - def test_run(self):
> - TestMenderInfra.base_test_run(self)
> -
> - # Check if the Daemon is running
> - self.assertRunOk("ls /var/run/mender.pid")
> - self.run_mender_test()
> -
> -
> class TestMenderRO(TestMenderInfra):
> config = \
> """
> @@ -51,22 +75,4 @@ class TestMenderRO(TestMenderInfra):
>
> def test_run(self):
> TestMenderInfra.base_test_run(self)
> -
> - # Check if the Daemon is running
> - self.assertRunOk("ls /var/run/mender.pid")
> - self.run_mender_test()
> -
> -
> -# gitlab-runner: large
> -class TestMenderSystemd(TestMenderInfra):
> - config = \
> - """
> - {}
> - BR2_INIT_SYSTEMD=y
> - """.format(TestMenderInfra.config)
> -
> - def test_run(self):
> - TestMenderInfra.base_test_run(self)
> - output, _ = self.emulator.run("systemctl is-active mender-client")
> - self.assertEqual(output[0], "active")
> self.run_mender_test()
> --
> 2.56.0
>
>
[-- Attachment #1.2: Type: text/html, Size: 59592 bytes --]
[-- Attachment #2: Type: text/plain, Size: 150 bytes --]
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Buildroot] [PATCH v3 1/6] package/mender-update-modules: add banner module
2026-10-28 11:33 [Buildroot] [PATCH v3 1/6] package/mender-update-modules: add banner module Adam Duskett
` (4 preceding siblings ...)
2026-10-28 11:33 ` [Buildroot] [PATCH v3 6/6] package/mender-connect: depend on mender, drop sysvinit file Adam Duskett
@ 2026-11-05 7:31 ` Thomas Petazzoni via buildroot
5 siblings, 0 replies; 9+ messages in thread
From: Thomas Petazzoni via buildroot @ 2026-11-05 7:31 UTC (permalink / raw)
To: Adam Duskett; +Cc: buildroot, Angelo Compagnucci
Hello Adam,
On Wed, Oct 28, 2026 at 12:33:26PM +0100, Adam Duskett wrote:
> Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
> ---
> v2 -> v3: Fixed github link [Thomas]
Thanks for this v3, I've applied patches 1 to 5 to master. I haven't
applied patch 6 as I have questions about it, I'll reply to it
separately.
A quick suggestion: when you send an updated version (like this v3)
which had comments from someone, don't hesitate to add this reviewer
in Cc: of the new iteration. Indeed, in the overwhelming stream of
incoming patches, I can very easily miss that someone is sending a new
iteration of something I looked at before. If you Cc: me on the new
iteration when I've reviewed a previous one, then there's a much
bigger chance I'll have a look at it quickly and apply. It's not a
hard rule/requirement, just a suggestion that can potentially help.
Thanks a lot!
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Buildroot] [PATCH v3 6/6] package/mender-connect: depend on mender, drop sysvinit file
2026-10-28 11:33 ` [Buildroot] [PATCH v3 6/6] package/mender-connect: depend on mender, drop sysvinit file Adam Duskett
@ 2026-11-05 7:33 ` Thomas Petazzoni via buildroot
0 siblings, 0 replies; 9+ messages in thread
From: Thomas Petazzoni via buildroot @ 2026-11-05 7:33 UTC (permalink / raw)
To: Adam Duskett; +Cc: buildroot, Angelo Compagnucci
On Wed, Oct 28, 2026 at 12:33:31PM +0100, Adam Duskett wrote:
> Much like the mender-update-modules package, have the mender-connect
> package depend on the mender package. Also, as mender no longer supports
> sysvinit, it's safe to remove S43mender-connect
>
> Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
> ---
> package/mender-connect/Config.in | 20 +++------
> package/mender-connect/S43mender-connect | 53 ------------------------
> package/mender-connect/mender-connect.mk | 5 ---
> 3 files changed, 5 insertions(+), 73 deletions(-)
> delete mode 100644 package/mender-connect/S43mender-connect
>
> diff --git a/package/mender-connect/Config.in b/package/mender-connect/Config.in
> index d478e468c2..b8f3770509 100644
> --- a/package/mender-connect/Config.in
> +++ b/package/mender-connect/Config.in
> @@ -1,15 +1,7 @@
> config BR2_PACKAGE_MENDER_CONNECT
> bool "mender-connect"
> - depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
> - depends on BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS
Are you sure this dependency is no longer needed?
> - depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2, mender
> - depends on BR2_USE_WCHAR # libglib2 -> gettext
> - depends on BR2_USE_MMU # dbus -> fork()
> - select BR2_PACKAGE_DBUS # runtime
> - select BR2_PACKAGE_HOST_GO
> - select BR2_PACKAGE_LIBGLIB2
> - select BR2_PACKAGE_MENDER # runtime
> - select BR2_PACKAGE_OPENSSL
And why are all those selects gone? For the BR2_PACKAGE_MENDER select,
I understand it has been changed to a "depends on", which is a very
good idea. But since mender-connect.mk has all these other packages
(dbus, libglib2, openssl) in its DEPENDENCIES variable, then those
select should stick, and therefore perhaps the related "depends on" as
well (threads, wchar, mmu).
Thanks a lot!
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-11-05 7:33 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-28 11:33 [Buildroot] [PATCH v3 1/6] package/mender-update-modules: add banner module Adam Duskett
2026-10-28 11:33 ` [Buildroot] [PATCH v3 2/6] board/mender/x86_64/readme.txt: fix documentation Adam Duskett
2026-10-28 11:33 ` [Buildroot] [PATCH v3 3/6] board/mender/x86_64: add a udev rule to create /dev/root Adam Duskett
2026-10-28 11:33 ` [Buildroot] [PATCH v3 4/6] test_mender/post-build.sh: use /etc/mender/device_type Adam Duskett
2026-10-28 11:33 ` [Buildroot] [PATCH v3 5/6] package/mender: bump to version 5.2.0 Adam Duskett
2026-10-28 14:23 ` Adam Duskett
2026-10-28 11:33 ` [Buildroot] [PATCH v3 6/6] package/mender-connect: depend on mender, drop sysvinit file Adam Duskett
2026-11-05 7:33 ` Thomas Petazzoni via buildroot
2026-11-05 7:31 ` [Buildroot] [PATCH v3 1/6] package/mender-update-modules: add banner module Thomas Petazzoni via buildroot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox