* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.