* [PATCH v10 1/3] rpm: add 0017-critically-fail-if-post-install-fails.patch
@ 2026-10-15 14:23 Adam Duskett
2026-10-15 14:23 ` [PATCH v10 2/3] dnf: Upgrade to 5.4.6.0 Adam Duskett
2026-10-15 14:23 ` [PATCH v10 3/3] libdnf: remove recipe Adam Duskett
0 siblings, 2 replies; 5+ messages in thread
From: Adam Duskett @ 2026-10-15 14:23 UTC (permalink / raw)
To: openembedded-core; +Cc: Adam Duskett
Starting with commit b5fe8a926aeb80e3ce84787e7624685326a2f412,
DNF5 respects the callbacks of RPM and no longer fails unless
RPM reports a failure.
RPM does not report post install failures as critical. However,
Yocto does expect DNF to fail on post-install failures.
Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
---
...ritically-fail-if-post-install-fails.patch | 34 +++++++++++++++++++
meta/recipes-devtools/rpm/rpm_6.0.2.bb | 1 +
2 files changed, 35 insertions(+)
create mode 100644 meta/recipes-devtools/rpm/files/0017-critically-fail-if-post-install-fails.patch
diff --git a/meta/recipes-devtools/rpm/files/0017-critically-fail-if-post-install-fails.patch b/meta/recipes-devtools/rpm/files/0017-critically-fail-if-post-install-fails.patch
new file mode 100644
index 0000000000..05e8ba0cf5
--- /dev/null
+++ b/meta/recipes-devtools/rpm/files/0017-critically-fail-if-post-install-fails.patch
@@ -0,0 +1,34 @@
+From 390841ea7870408826fbddacf50f07a70778a22b Mon Sep 17 00:00:00 2001
+From: Adam Duskett <adam.duskett@amarulasolutions.com>
+Date: Thu, 30 Jul 2026 12:48:24 +0200
+Subject: [PATCH] critically fail if post-install fails
+
+Starting with commit b5fe8a926aeb80e3ce84787e7624685326a2f412,
+DNF5 respects the callback of RPM and no longer fails unless
+RPM reports a failure.
+
+RPM does not report post install failures as critical. However,
+Yocto does expect DNF to fail on post-install failures.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
+---
+ lib/rpmscript.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/rpmscript.cc b/lib/rpmscript.cc
+index 97bd8da62..a354d944c 100644
+--- a/lib/rpmscript.cc
++++ b/lib/rpmscript.cc
+@@ -60,7 +60,7 @@ static const struct scriptInfo_s scriptInfo[] = {
+ RPMSCRIPT_FLAG_CRITICAL, },
+ { RPMSCRIPT_POSTIN, "post", 0,
+ RPMTAG_POSTIN, RPMTAG_POSTINPROG, RPMTAG_POSTINFLAGS,
+- 0, },
++ RPMSCRIPT_FLAG_CRITICAL, },
+ { RPMSCRIPT_POSTUN, "postun", 0,
+ RPMTAG_POSTUN, RPMTAG_POSTUNPROG, RPMTAG_POSTUNFLAGS,
+ 0, },
+--
+2.55.0
+
diff --git a/meta/recipes-devtools/rpm/rpm_6.0.2.bb b/meta/recipes-devtools/rpm/rpm_6.0.2.bb
index c27f58a0e8..a8f35f87bf 100644
--- a/meta/recipes-devtools/rpm/rpm_6.0.2.bb
+++ b/meta/recipes-devtools/rpm/rpm_6.0.2.bb
@@ -40,6 +40,7 @@ SRC_URI = "git://github.com/rpm-software-management/rpm;protocol=https;branch=rp
file://0001-tools-elfdeps.cc-Remove-format-module.patch \
file://0001-macros.in-Set-_pkgverify_level-to-digest-as-RCPM-4.2.patch \
file://0003-Do-not-install-the-pkgconfig-dependency-generator.patch \
+ file://0017-critically-fail-if-post-install-fails.patch \
"
PE = "1"
--
2.56.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v10 2/3] dnf: Upgrade to 5.4.6.0
2026-10-15 14:23 [PATCH v10 1/3] rpm: add 0017-critically-fail-if-post-install-fails.patch Adam Duskett
@ 2026-10-15 14:23 ` Adam Duskett
2026-10-16 11:56 ` [OE-core] " Mathieu Dubois-Briand
2026-10-16 13:14 ` Mathieu Dubois-Briand
2026-10-15 14:23 ` [PATCH v10 3/3] libdnf: remove recipe Adam Duskett
1 sibling, 2 replies; 5+ messages in thread
From: Adam Duskett @ 2026-10-15 14:23 UTC (permalink / raw)
To: openembedded-core; +Cc: Adam Duskett
Completely rewritten in C++, there are several changes needed
to facilitate moving from DNF4 to DNF5. Below are some significant
items to note:
- Added a negative lookahead filter for the following warning if
RPM_SIGN_PACKAGES != '1': "Warning: skipped OpenPGP checks"
This warning is hard-coded and piped to stderr if gpg checks
are disabled. However, most users do not sign their RPM packages
and use dnf to simply construct the rootfs.
- The "-v/--verbose" cli option is removed. As such, remove the argument
everywhere it was called.[1]
- the rpmverbosity cli option is replaced with --setopt=rpmverbosity
- Change gpgcheck to pkg_gpgcheck as this is what the documentation
recommends.[2]
- --nogpgcheck is now --no-gpgchecks
- --setopt=protect_running_kernel=False has to be set or else every dnf
transaction complains that /boot/vmlinuz-${kernel_version} does not
exist in /var/log/dnf5.log. There is an open issue on github[3] to enable
the currently not-yet implemented `autocheck_running_kernel option`, but
it has been open for quite some time and the protect_running_kernel
option supresses the message.
- Move --skip-broken to after the install argument as the global
--skip-broken argument is removed.
- /var/cache/dnf is replaced with /var/cache/libdnf5
- Add `features += 'PACKAGECONFIG:append:pn-rpm = " sequoia"\n'`
`features += 'PACKAGECONFIG:append:pn-librepo = " sequoia"\n'`
to test_testimage_dnf as librepo currently does not work
with gpgme.
- Change `if line.startswith("Error in POSTIN scriptlet in rpm package"):`
to `if "Error in %post scriptlet:" in line:` as dnf prints `>>>`
charachters and the error string has changed.
While DNF5 has many config options, unfortunately, the majority
of them depends on sdbus-c++, which is not included in OE-core.
However, the package is included in meta-openembedded, so it's
best to include the PACKAGECONFIG options in the recipe and
leave them off by default.
1: https://github.com/rpm-software-management/dnf5/issues/464
2: https://dnf5.readthedocs.io/en/latest/dnf5.conf.5.html
3: https://github.com/rpm-software-management/dnf5/issues/1255
Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
---
.../lib/oeqa/runtime/cases/dnf_runtime.py | 6 +-
meta/conf/distro/include/maintainers.inc | 2 +-
meta/lib/oe/package_manager/rpm/__init__.py | 23 ++-
meta/lib/oe/package_manager/rpm/rootfs.py | 3 +
meta/lib/oeqa/runtime/cases/dnf.py | 16 +-
meta/lib/oeqa/selftest/cases/runtime_test.py | 5 +
...tly-install-tmpfiles.d-configuration.patch | 18 --
...ode-etc-and-systemd-unit-directories.patch | 26 ---
...-hardcode-the-systemd-unit-directory.patch | 29 +++
.../0001-dnf-write-the-log-lock-to-root.patch | 29 ---
.../0001-lock.py-fix-Exception-handling.patch | 62 ------
...et-python-path-for-completion_helper.patch | 21 --
.../dnf/0002-cmake-set-CMP0190-to-OLD.patch | 51 +++++
...0003-Do-not-hardcode-system_cachedir.patch | 36 ++++
...004-add-support-for-gcc-12-and-below.patch | 135 +++++++++++++
...Do-not-prepend-installroot-to-logdir.patch | 28 ---
...rm-arch-mapping-issues-for-qemuarmv5.patch | 59 ++++++
...PYTHON_INSTALL_DIR-by-running-python.patch | 24 ---
.../0030-Run-python-scripts-using-env.patch | 34 ----
meta/recipes-devtools/dnf/dnf_4.24.0.bb | 96 ----------
meta/recipes-devtools/dnf/dnf_5.4.6.0.bb | 180 ++++++++++++++++++
21 files changed, 524 insertions(+), 359 deletions(-)
delete mode 100644 meta/recipes-devtools/dnf/dnf/0001-Corretly-install-tmpfiles.d-configuration.patch
delete mode 100644 meta/recipes-devtools/dnf/dnf/0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch
create mode 100644 meta/recipes-devtools/dnf/dnf/0001-Do-not-hardcode-the-systemd-unit-directory.patch
delete mode 100644 meta/recipes-devtools/dnf/dnf/0001-dnf-write-the-log-lock-to-root.patch
delete mode 100644 meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch
delete mode 100644 meta/recipes-devtools/dnf/dnf/0001-set-python-path-for-completion_helper.patch
create mode 100644 meta/recipes-devtools/dnf/dnf/0002-cmake-set-CMP0190-to-OLD.patch
create mode 100644 meta/recipes-devtools/dnf/dnf/0003-Do-not-hardcode-system_cachedir.patch
create mode 100644 meta/recipes-devtools/dnf/dnf/0004-add-support-for-gcc-12-and-below.patch
delete mode 100644 meta/recipes-devtools/dnf/dnf/0005-Do-not-prepend-installroot-to-logdir.patch
create mode 100644 meta/recipes-devtools/dnf/dnf/0005-libdnf-fix-arm-arch-mapping-issues-for-qemuarmv5.patch
delete mode 100644 meta/recipes-devtools/dnf/dnf/0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
delete mode 100644 meta/recipes-devtools/dnf/dnf/0030-Run-python-scripts-using-env.patch
delete mode 100644 meta/recipes-devtools/dnf/dnf_4.24.0.bb
create mode 100644 meta/recipes-devtools/dnf/dnf_5.4.6.0.bb
diff --git a/meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py b/meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py
index d2f0f88f7d..27158b5193 100644
--- a/meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py
+++ b/meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py
@@ -41,11 +41,11 @@ class DnfSelftest(DnfTest):
import re
# Use '-y' for non-interactive mode: automatically import the feed signing key
- output_makecache = self.dnf('-vy makecache')
+ output_makecache = self.dnf('-y makecache')
self.assertTrue(re.match(r".*Failed to synchronize cache", output_makecache, re.DOTALL) is None, msg = "dnf makecache failed to synchronize repo: %s" %(output_makecache))
self.assertTrue(re.match(r".*Metadata cache created", output_makecache, re.DOTALL) is not None, msg = "dnf makecache failed: %s" %(output_makecache))
- output_repoinfo = self.dnf('-v repoinfo')
- matchobj = re.match(r".*Repo-pkgs\s*:\s*(?P<n_pkgs>[0-9]+)", output_repoinfo, re.DOTALL)
+ output_repoinfo = self.dnf('repoinfo')
+ matchobj = re.match(r".*Total packages\s*:\s*(?P<n_pkgs>[0-9]+)", output_repoinfo, re.DOTALL)
self.assertTrue(matchobj is not None, msg = "Could not find the amount of packages in dnf repoinfo output: %s" %(output_repoinfo))
self.assertTrue(int(matchobj.group('n_pkgs')) > 0, msg = "Amount of remote packages is not more than zero: %s\n" %(output_repoinfo))
diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index 94ab0ccace..b5cde257fe 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -157,7 +157,7 @@ RECIPE_MAINTAINER:pn-diffutils = "Chen Qi <Qi.Chen@windriver.com>"
RECIPE_MAINTAINER:pn-distcc = "Hongxu Jia <hongxu.jia@windriver.com>"
RECIPE_MAINTAINER:pn-distcc-config = "Yi Zhao <yi.zhao@windriver.com>"
RECIPE_MAINTAINER:pn-dmidecode = "Unassigned <unassigned@yoctoproject.org>"
-RECIPE_MAINTAINER:pn-dnf = "Unassigned <unassigned@yoctoproject.org>"
+RECIPE_MAINTAINER:pn-dnf = "Adam Duskett <adam.duskett@amarulasolutions.com>"
RECIPE_MAINTAINER:pn-docbook-xml-dtd4 = "Kanksha Paturi <Kanksha.Paturi@windriver.com>"
RECIPE_MAINTAINER:pn-docbook-xsl-stylesheets = "Kanksha Paturi <Kanksha.Paturi@windriver.com>"
RECIPE_MAINTAINER:pn-dos2unix = "Khem Raj <raj.khem@gmail.com>"
diff --git a/meta/lib/oe/package_manager/rpm/__init__.py b/meta/lib/oe/package_manager/rpm/__init__.py
index ccb4316bd0..6e6fd3c5ab 100644
--- a/meta/lib/oe/package_manager/rpm/__init__.py
+++ b/meta/lib/oe/package_manager/rpm/__init__.py
@@ -163,7 +163,7 @@ class RpmPM(PackageManager):
gpg_opts += 'gpgkey=file://%s/pki/packagefeed-gpg/PACKAGEFEED-GPG-KEY-%s-%s\n' % (self.d.getVar('sysconfdir'), self.d.getVar('DISTRO'), self.d.getVar('DISTRO_CODENAME'))
if self.d.getVar('RPM_SIGN_PACKAGES') != '1':
- gpg_opts += 'gpgcheck=0\n'
+ gpg_opts += 'pkg_gpgcheck=0\n'
bb.utils.mkdirhier(oe.path.join(self.target_rootfs, "etc", "yum.repos.d"))
remote_uris = self.construct_uris(feed_uris.split(), feed_base_paths.split())
@@ -200,11 +200,11 @@ class RpmPM(PackageManager):
package_exclude = self.d.getVar('PACKAGE_EXCLUDE')
exclude_pkgs = (bad_recommendations.split() if bad_recommendations else []) + (package_exclude.split() if package_exclude else [])
- output = self._invoke_dnf((["--skip-broken"] if attempt_only else []) +
- (["-x", ",".join(exclude_pkgs)] if len(exclude_pkgs) > 0 else []) +
+ output = self._invoke_dnf((["-x", ",".join(exclude_pkgs)] if len(exclude_pkgs) > 0 else []) +
(["--setopt=install_weak_deps=False"] if (hard_depends_only or self.d.getVar('NO_RECOMMENDATIONS') == "1") else []) +
- (["--nogpgcheck"] if self.d.getVar('RPM_SIGN_PACKAGES') != '1' else ["--setopt=gpgcheck=True"]) +
+ (["--no-gpgchecks"] if self.d.getVar('RPM_SIGN_PACKAGES') != '1' else ["--setopt=pkg_gpgcheck=True"]) +
["install"] +
+ (["--skip-broken"] if attempt_only else []) +
pkgs)
failed_scriptlets_pkgnames = collections.OrderedDict()
@@ -212,7 +212,7 @@ class RpmPM(PackageManager):
if line.startswith("Error: Systemctl"):
bb.error(line)
- if line.startswith("Error in POSTIN scriptlet in rpm package"):
+ if "Error in %post scriptlet:" in line:
failed_scriptlets_pkgnames[line.split()[-1]] = True
if len(failed_scriptlets_pkgnames) > 0:
@@ -313,10 +313,15 @@ class RpmPM(PackageManager):
def _invoke_dnf(self, dnf_args, fatal = True, print_output = True ):
os.environ['RPM_ETCCONFIGDIR'] = self.target_rootfs
+ # Set XDG_CACHE_HOME to avoid dnf attempting to install oe-repo system cache to a /tmp/ directory on the host.
+ os.environ['XDG_CACHE_HOME'] = oe.path.join(os.path.join(self.target_rootfs, "var/cache/libdnf5"))
+
dnf_cmd = bb.utils.which(os.getenv('PATH'), "dnf")
- standard_dnf_args = ["-v", "--rpmverbosity=info", "-y",
- "-c", oe.path.join(self.target_rootfs, "etc/dnf/dnf.conf"),
+ standard_dnf_args = ["-y",
+ "--config", os.path.join(self.d.getVar('STAGING_DIR_NATIVE'), "etc/dnf/dnf.conf"),
+ "--setopt=rpmverbosity=info",
"--setopt=reposdir=%s" %(oe.path.join(self.target_rootfs, "etc/yum.repos.d")),
+ "--setopt=pluginconfpath=%s" %(os.path.join(self.d.getVar('STAGING_DIR_NATIVE'), "etc/dnf/dnf.conf")),
"--installroot=%s" % (self.target_rootfs),
"--setopt=logdir=%s" % (self.d.getVar('T')),
"--setopt=optional_metadata_types=filelists",
@@ -335,9 +340,9 @@ class RpmPM(PackageManager):
e_output = e.output.decode("utf-8")
# RPM 6 fails the entire transaction when a %post scriptlet
# fails, causing dnf to exit non-zero. Let install_pkgs handle
- # scriptlet failures via its existing "Error in POSTIN scriptlet"
+ # scriptlet failures via its existing "Error in %post scriptlet:"
# scanning rather than treating this as a fatal dnf invocation error.
- if "Error in POSTIN scriptlet in rpm package" in e_output:
+ if "Error in %post scriptlet:" in e_output:
bb.note(e_output)
return e_output
extra_info = ""
diff --git a/meta/lib/oe/package_manager/rpm/rootfs.py b/meta/lib/oe/package_manager/rpm/rootfs.py
index 698685c067..8d54b5ab48 100644
--- a/meta/lib/oe/package_manager/rpm/rootfs.py
+++ b/meta/lib/oe/package_manager/rpm/rootfs.py
@@ -17,6 +17,9 @@ class PkgRootfs(Rootfs):
r'|exit 1\b|ERROR: |Error: |Error |ERROR '\
r'|Failed |Failed: |Failed$|Failed\(\d+\):)'
+ if self.d.getVar('RPM_SIGN_PACKAGES') != '1':
+ self.warn_check_regex = r'^(?!.*Warning: skipped OpenPGP checks)(warn|Warn|WARNING:)'
+
self.manifest = PkgManifest(d, manifest_dir)
self.pm = RpmPM(d,
diff --git a/meta/lib/oeqa/runtime/cases/dnf.py b/meta/lib/oeqa/runtime/cases/dnf.py
index 3ccb18ce83..1becc8d8a0 100644
--- a/meta/lib/oeqa/runtime/cases/dnf.py
+++ b/meta/lib/oeqa/runtime/cases/dnf.py
@@ -17,7 +17,7 @@ from oeqa.runtime.decorator.package import OEHasPackage
class DnfTest(OERuntimeTestCase):
def dnf(self, command, expected = 0):
- command = 'dnf %s' % command
+ command = 'dnf --setopt=protect_running_kernel=False %s' % command
status, output = self.target.run(command, 1500)
message = os.linesep.join([command, output])
self.assertEqual(status, expected, message)
@@ -48,7 +48,7 @@ class DnfBasicTest(DnfTest):
@OETestDepends(['dnf.DnfBasicTest.test_dnf_help'])
def test_dnf_history(self):
- self.dnf('history')
+ self.dnf('history list')
class DnfRepoTest(DnfTest):
@@ -68,7 +68,7 @@ class DnfRepoTest(DnfTest):
deploy_url = 'http://%s:%s/' %(self.target.server_ip, self.repo_server.port)
cmdlinerepoopts = ["--repofrompath=oe-testimage-repo-%s,%s%s" %(arch, deploy_url, arch) for arch in pkgarchs]
- output = self.dnf(" ".join(cmdlinerepoopts) + " --nogpgcheck " + command)
+ output = self.dnf(" ".join(cmdlinerepoopts) + " --no-gpgchecks " + command)
return output
@OETestDepends(['dnf.DnfBasicTest.test_dnf_help'])
@@ -96,7 +96,7 @@ class DnfRepoTest(DnfTest):
def test_dnf_install_from_disk(self):
self.dnf_with_repo('remove -y dnf-test-dep')
self.dnf_with_repo('install -y --downloadonly dnf-test-dep')
- status, output = self.target.run('find /var/cache/dnf -name dnf-test-dep*rpm')
+ status, output = self.target.run('find /var/cache/libdnf5 -name dnf-test-dep*rpm')
self.assertEqual(status, 0, output)
self.dnf_with_repo('install -y %s' % output)
@@ -134,8 +134,8 @@ class DnfRepoTest(DnfTest):
self.target.run('cp -r /etc/dnf %s/etc' % rootpath, 1500)
self.target.run('cp /bin/sh %s/bin' % rootpath, 1500)
self.target.run('mount -o bind /dev %s/dev/' % rootpath, 1500)
- self.dnf_with_repo('install --installroot=%s -v -y --rpmverbosity=debug busybox' % rootpath)
- status, output = self.target.run('test -e %s/var/cache/dnf' % rootpath, 1500)
+ self.dnf_with_repo('install --installroot=%s -y busybox' % rootpath)
+ status, output = self.target.run('test -e %s/var/cache/libdnf5' % rootpath, 1500)
self.assertEqual(0, status, output)
status, output = self.target.run('test -e %s/bin/busybox' % rootpath, 1500)
self.assertEqual(0, status, output)
@@ -158,8 +158,8 @@ class DnfRepoTest(DnfTest):
self.target.run('cp -r /etc/dnf %s/etc' % rootpath)
self.target.run('cp /bin/busybox %s/bin/sh' % rootpath)
self.target.run('mount -o bind /dev %s/dev/' % rootpath)
- self.dnf_with_repo('install --installroot=%s -v -y --rpmverbosity=debug busybox' % rootpath)
- status, output = self.target.run('test -e %s/var/cache/dnf' % rootpath)
+ self.dnf_with_repo('install --installroot=%s -y busybox' % rootpath)
+ status, output = self.target.run('test -e %s/var/cache/libdnf5' % rootpath)
self.assertEqual(0, status, output)
status, output = self.target.run('test -e %s/bin/busybox' % rootpath)
self.assertEqual(0, status, output)
diff --git a/meta/lib/oeqa/selftest/cases/runtime_test.py b/meta/lib/oeqa/selftest/cases/runtime_test.py
index a3c3126036..e37fbae855 100644
--- a/meta/lib/oeqa/selftest/cases/runtime_test.py
+++ b/meta/lib/oeqa/selftest/cases/runtime_test.py
@@ -164,6 +164,11 @@ TEST_RUNQEMUPARAMS += " slirp"
features += 'EXTRA_IMAGE_FEATURES += "package-management"\n'
features += 'PACKAGE_CLASSES = "package_rpm"\n'
+ # librepo and rpm require sequoia
+ # https://github.com/rpm-software-management/dnf5/issues/2539
+ features += 'PACKAGECONFIG:append:pn-rpm = " sequoia"\n'
+ features += 'PACKAGECONFIG:append:pn-librepo = " sequoia"\n'
+
bitbake('gnupg-native -c addto_recipe_sysroot')
# Enable package feed signing
diff --git a/meta/recipes-devtools/dnf/dnf/0001-Corretly-install-tmpfiles.d-configuration.patch b/meta/recipes-devtools/dnf/dnf/0001-Corretly-install-tmpfiles.d-configuration.patch
deleted file mode 100644
index fd942228b9..0000000000
--- a/meta/recipes-devtools/dnf/dnf/0001-Corretly-install-tmpfiles.d-configuration.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-From f70eb308c837f2c944e23bb680a501a605004d65 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 26 Jan 2017 16:36:20 +0200
-Subject: [PATCH] Corretly install tmpfiles.d configuration
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- etc/tmpfiles.d/CMakeLists.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/etc/tmpfiles.d/CMakeLists.txt b/etc/tmpfiles.d/CMakeLists.txt
-index f69c773e..3eb6d0e8 100644
---- a/etc/tmpfiles.d/CMakeLists.txt
-+++ b/etc/tmpfiles.d/CMakeLists.txt
-@@ -1 +1 @@
--INSTALL (FILES dnf.conf DESTINATION /usr/lib/tmpfiles.d/)
-+INSTALL (FILES dnf.conf DESTINATION ${SYSCONFDIR}/tmpfiles.d/)
diff --git a/meta/recipes-devtools/dnf/dnf/0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch b/meta/recipes-devtools/dnf/dnf/0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch
deleted file mode 100644
index 9d978cdc5f..0000000000
--- a/meta/recipes-devtools/dnf/dnf/0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From c2b2b91b58f4531d4baf0a01f5d868d71e577a84 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 26 Jan 2017 16:25:47 +0200
-Subject: [PATCH] Do not hardcode /etc and systemd unit directories
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- CMakeLists.txt | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index e71e9517..8fcb2069 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -3,8 +3,8 @@ PROJECT (dnf NONE)
-
- INCLUDE (${CMAKE_SOURCE_DIR}/VERSION.cmake)
-
--SET( SYSCONFDIR /etc)
--SET( SYSTEMD_DIR /usr/lib/systemd/system)
-+SET( SYSCONFDIR ${CMAKE_INSTALL_SYSCONFDIR})
-+SET( SYSTEMD_DIR $ENV{systemd_system_unitdir})
-
- IF (NOT PYTHON_DESIRED)
- FIND_PACKAGE (PythonInterp REQUIRED)
diff --git a/meta/recipes-devtools/dnf/dnf/0001-Do-not-hardcode-the-systemd-unit-directory.patch b/meta/recipes-devtools/dnf/dnf/0001-Do-not-hardcode-the-systemd-unit-directory.patch
new file mode 100644
index 0000000000..e79cab1b44
--- /dev/null
+++ b/meta/recipes-devtools/dnf/dnf/0001-Do-not-hardcode-the-systemd-unit-directory.patch
@@ -0,0 +1,29 @@
+From c07c29e50327a132f330287cd4e0ff428d140c96 Mon Sep 17 00:00:00 2001
+From: Adam Duskett <adam.duskett@amarulasolutions.com>
+Date: Thu, 15 Oct 2026 11:54:09 +0200
+Subject: [PATCH] Do not hardcode the systemd unit directory
+
+Upstream-Status: Inappropriate [oe-core specific]
+
+Rebased for 5.4.6.0
+Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 50ec5f7..2583772 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -7,7 +7,7 @@ project(dnf5 LANGUAGES CXX C VERSION ${VERSION_PRIME}.${VERSION_MAJOR}.${VERSION
+ cmake_policy(VERSION ${CMAKE_VERSION})
+
+ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+-set(SYSTEMD_DIR "/usr/lib/systemd/system" CACHE PATH "Directory for systemd unit files")
++set(SYSTEMD_DIR $ENV{systemd_system_unitdir} CACHE PATH "Directory for systemd unit files")
+ set(TMPFILES_DIR "/usr/lib/tmpfiles.d" CACHE PATH "Directory for systemd tmpfiles.d files")
+
+ message("Building ${PROJECT_NAME} version ${PROJECT_VERSION}")
+--
+2.56.0
+
diff --git a/meta/recipes-devtools/dnf/dnf/0001-dnf-write-the-log-lock-to-root.patch b/meta/recipes-devtools/dnf/dnf/0001-dnf-write-the-log-lock-to-root.patch
deleted file mode 100644
index 18f9a30949..0000000000
--- a/meta/recipes-devtools/dnf/dnf/0001-dnf-write-the-log-lock-to-root.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 049e2832284ab883e185d9020c881518a68e6c38 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Tue, 28 Apr 2020 15:55:00 +0200
-Subject: [PATCH] dnf: write the log lock to root
-
-Writing it to /var/log appears to be racing with installation
-of base-files, and if lock is created first, base-files
-will refuse to install (due to the target directory
-already existing, and base-files creating it as a symlink).
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- dnf/logging.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/dnf/logging.py b/dnf/logging.py
-index ef0b25f3..94610af6 100644
---- a/dnf/logging.py
-+++ b/dnf/logging.py
-@@ -118,7 +118,7 @@ class MultiprocessRotatingFileHandler(logging.handlers.RotatingFileHandler):
- def __init__(self, filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False):
- super(MultiprocessRotatingFileHandler, self).__init__(
- filename, mode, maxBytes, backupCount, encoding, delay)
-- self.rotate_lock = dnf.lock.build_log_lock("/var/log/", True)
-+ self.rotate_lock = dnf.lock.build_log_lock("/", True)
-
- def emit(self, record):
- while True:
diff --git a/meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch b/meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch
deleted file mode 100644
index 6bffe9af0a..0000000000
--- a/meta/recipes-devtools/dnf/dnf/0001-lock.py-fix-Exception-handling.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 3881757eabfde2ff54400ab127b106ab085d83f0 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Wed, 13 Mar 2024 11:22:05 +0800
-Subject: [PATCH] lock.py: fix Exception handling
-
-Before, when logdir is not writable, _try_lock will raise an Exception
-like "Permission denied: '/var/log/log_lock.pid'", and in this case,
-_unlock_thread will not be called and the variable count will not be
-handled, it maybe cause log_lock.pid not be deleted in case like [1].
-
-For [1], it is an cross compile case, when dnf install some packages to
-rootfs, seems like some threads don't do chroot like work, some threads
-do chroot like work. so for the threads don't do chroot, "Permission denied"
-Exception happend, for the threads that do chroot, log_lock.pid will be
-created under installroot/var/log/log_lock.pid, since variable count not
-handled correct before, log_lock.pid may not be deleted correctly.
-
-So fixed like this, if _try_lock raise Exception, _unlock_thread first,
-then raise the Exception.
-
-[1] https://github.com/rpm-software-management/dnf/issues/1963
-
-Upstream-Status: Submitted [ https://github.com/rpm-software-management/dnf/pull/2065 ]
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- dnf/lock.py | 12 ++++++++++--
- 1 file changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/dnf/lock.py b/dnf/lock.py
-index 6817aac9..5718062a 100644
---- a/dnf/lock.py
-+++ b/dnf/lock.py
-@@ -128,7 +128,11 @@ class ProcessLock(object):
- self._lock_thread()
- prev_pid = -1
- my_pid = os.getpid()
-- pid = self._try_lock(my_pid)
-+ try:
-+ pid = self._try_lock(my_pid)
-+ except Exception:
-+ self._unlock_thread()
-+ raise
- while pid != my_pid:
- if pid != -1:
- if not self.blocking:
-@@ -140,7 +144,11 @@ class ProcessLock(object):
- logger.info(msg)
- prev_pid = pid
- time.sleep(1)
-- pid = self._try_lock(my_pid)
-+ try:
-+ pid = self._try_lock(my_pid)
-+ except Exception:
-+ self._unlock_thread()
-+ raise
-
- def __exit__(self, *exc_args):
- if self.count == 1:
---
-2.25.1
-
diff --git a/meta/recipes-devtools/dnf/dnf/0001-set-python-path-for-completion_helper.patch b/meta/recipes-devtools/dnf/dnf/0001-set-python-path-for-completion_helper.patch
deleted file mode 100644
index fcd970a7ae..0000000000
--- a/meta/recipes-devtools/dnf/dnf/0001-set-python-path-for-completion_helper.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-From fa32c7dcabaa3c00d3620a3266e49629365c0cbe Mon Sep 17 00:00:00 2001
-From: Jeremy Puhlman <jpuhlman@mvista.com>
-Date: Wed, 11 Mar 2020 22:10:02 +0000
-Subject: [PATCH] set python path for completion_helper
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Jeremy Puhlman <jpuhlman@mvista.com>
----
- dnf/cli/completion_helper.py.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/dnf/cli/completion_helper.py.in b/dnf/cli/completion_helper.py.in
-index 0da0f2a2..9330d15b 100644
---- a/dnf/cli/completion_helper.py.in
-+++ b/dnf/cli/completion_helper.py.in
-@@ -1,4 +1,4 @@
--#!@PYTHON_EXECUTABLE@
-+#!/usr/bin/env python3
- #
- # This file is part of dnf.
- #
diff --git a/meta/recipes-devtools/dnf/dnf/0002-cmake-set-CMP0190-to-OLD.patch b/meta/recipes-devtools/dnf/dnf/0002-cmake-set-CMP0190-to-OLD.patch
new file mode 100644
index 0000000000..1e8ccbf889
--- /dev/null
+++ b/meta/recipes-devtools/dnf/dnf/0002-cmake-set-CMP0190-to-OLD.patch
@@ -0,0 +1,51 @@
+From 86755bbc9a6596f58f0437823de0ef8a6209e4ab Mon Sep 17 00:00:00 2001
+From: Adam Duskett <adam.duskett@amarulasolutions.com>
+Date: Thu, 15 Oct 2026 11:54:37 +0200
+Subject: [PATCH] cmake: set CMP0190 to OLD
+
+Starting with CMake 4.1, cross-compiling python3 requires setting
+-DCMAKE_CROSSCOMPILING_EMULATOR which can be done by inheriting
+cmake-qemu. However, this leads to the following error:
+Interpreter: Cannot run the interpreter ".../python3-native/python3"
+
+This is due to the target sysroot python3 binary not being installed
+because it can't be executed.
+
+Set CMP0190 to old to force the old behavior.
+
+https://cmake.org/cmake/help/latest/policy/CMP0190.html
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
+---
+ bindings/python3/CMakeLists.txt | 1 +
+ libdnf5-plugins/python_plugins_loader/CMakeLists.txt | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/bindings/python3/CMakeLists.txt b/bindings/python3/CMakeLists.txt
+index cb93269..aa961d0 100644
+--- a/bindings/python3/CMakeLists.txt
++++ b/bindings/python3/CMakeLists.txt
+@@ -6,6 +6,7 @@ endif()
+ message("Building bindings for python3")
+
+
++cmake_policy(SET CMP0190 OLD)
+ find_package(Python3 REQUIRED COMPONENTS Interpreter Development)
+ include_directories(${Python3_INCLUDE_DIRS})
+
+diff --git a/libdnf5-plugins/python_plugins_loader/CMakeLists.txt b/libdnf5-plugins/python_plugins_loader/CMakeLists.txt
+index 9ee2ffb..b8f908a 100644
+--- a/libdnf5-plugins/python_plugins_loader/CMakeLists.txt
++++ b/libdnf5-plugins/python_plugins_loader/CMakeLists.txt
+@@ -6,6 +6,7 @@ if(NOT WITH_PYTHON_PLUGINS_LOADER)
+ return()
+ endif()
+
++cmake_policy(SET CMP0190 OLD)
+ find_package(Python3 REQUIRED COMPONENTS Interpreter Development)
+ find_package(SWIG REQUIRED)
+ include_directories(${Python3_INCLUDE_DIRS})
+--
+2.56.0
+
diff --git a/meta/recipes-devtools/dnf/dnf/0003-Do-not-hardcode-system_cachedir.patch b/meta/recipes-devtools/dnf/dnf/0003-Do-not-hardcode-system_cachedir.patch
new file mode 100644
index 0000000000..0055b2f72e
--- /dev/null
+++ b/meta/recipes-devtools/dnf/dnf/0003-Do-not-hardcode-system_cachedir.patch
@@ -0,0 +1,36 @@
+From 921f6357dcba131d11366ac11249e1a9b2649cd8 Mon Sep 17 00:00:00 2001
+From: Adam Duskett <adam.duskett@amarulasolutions.com>
+Date: Thu, 15 Oct 2026 11:55:10 +0200
+Subject: [PATCH] Do not hardcode system_cachedir
+
+Because dnf is ran in a fakeroot environment, the UID of the
+"user" is 0, and the hardcoded paths to the host system are
+attempted, leading to the following error:
+
+[log_check] DEBUG: Failed to expire repository cache in path "/var/cache/libdnf5/
+
+Remove the check for geteuid() == 0 and rely only on the
+user cache dir.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
+---
+ libdnf5/conf/config_main.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libdnf5/conf/config_main.cpp b/libdnf5/conf/config_main.cpp
+index 2d808ec..a169af4 100644
+--- a/libdnf5/conf/config_main.cpp
++++ b/libdnf5/conf/config_main.cpp
+@@ -244,7 +244,7 @@ class ConfigMain::Impl {
+ // Repo main config
+
+ OptionNumber<std::uint32_t> retries{10};
+- OptionPath cachedir{geteuid() == 0 ? SYSTEM_CACHEDIR : libdnf5::xdg::get_user_cache_dir() / "libdnf5"};
++ OptionPath cachedir{libdnf5::xdg::get_user_cache_dir() / "libdnf5"};
+ OptionBool fastestmirror{false};
+ OptionStringAppendList excludeenvs{std::vector<std::string>{}};
+ OptionStringAppendList excludegroups{std::vector<std::string>{}};
+--
+2.56.0
+
diff --git a/meta/recipes-devtools/dnf/dnf/0004-add-support-for-gcc-12-and-below.patch b/meta/recipes-devtools/dnf/dnf/0004-add-support-for-gcc-12-and-below.patch
new file mode 100644
index 0000000000..1ef49e307a
--- /dev/null
+++ b/meta/recipes-devtools/dnf/dnf/0004-add-support-for-gcc-12-and-below.patch
@@ -0,0 +1,135 @@
+From 2305a8fcd6aec81676c684cb06b9d4a676af3bd3 Mon Sep 17 00:00:00 2001
+From: Adam Duskett <adam.duskett@amarulasolutions.com>
+Date: Thu, 15 Oct 2026 11:58:24 +0200
+Subject: [PATCH] add support for gcc 12 and below
+
+ - Add missing headers for gcc <= 12
+ - Add support for libfmt if the format header is not found
+ - Add an ifdef to support compilers without std::chrono::parse
+
+Commit 1e8ced2293ed62bc7774ef5a2d1aeb48e29e2236 introduced using
+std::chrono::parse which wasn't available until gcc 14.1. This change causes
+build failures when cross-compiling on older, but still supported platforms
+like Debian 12.
+
+Note: This patch should be removed once the minimum GCC version
+for Yocto is >= 14.1.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
+---
+ libdnf5-cli/session.cpp | 12 ++++++++++++
+ libdnf5/CMakeLists.txt | 9 +++++++++
+ libdnf5/base/goal_elements.cpp | 2 +-
+ libdnf5/conf/config_main.cpp | 8 ++++++++
+ libdnf5/logger/memory_buffer_logger.cpp | 1 +
+ 5 files changed, 31 insertions(+), 1 deletion(-)
+
+diff --git a/libdnf5-cli/session.cpp b/libdnf5-cli/session.cpp
+index b2fa196..c5fc02f 100644
+--- a/libdnf5-cli/session.cpp
++++ b/libdnf5-cli/session.cpp
+@@ -22,6 +22,7 @@
+ #include <libdnf5/utils/bgettext/bgettext-mark-domain.h>
+
+ #include <chrono>
++#include <iomanip>
+ #include <limits>
+ #include <sstream>
+ #include <utility>
+@@ -254,7 +255,18 @@ DateOption::DateOption(
+ new libdnf5::OptionNumber<int64_t>(0, [](const std::string & value) {
+ std::istringstream ss(value);
+ std::chrono::sys_seconds tp;
++#if defined(__cpp_lib_chrono) && __cpp_lib_chrono >= 201907L
+ ss >> std::chrono::parse("%F", tp);
++#else
++ std::tm tm{};
++ ss >> std::noskipws >> std::get_time(&tm, "%Y-%m-%d");
++ const auto ymd = std::chrono::year{tm.tm_year + 1900} / (tm.tm_mon + 1) / tm.tm_mday;
++ if (ymd.ok()) {
++ tp = std::chrono::sys_days{ymd};
++ } else {
++ ss.setstate(std::ios_base::failbit);
++ }
++#endif
+ if (ss.fail()) {
+ throw libdnf5::cli::ArgumentParserError(
+ M_("Invalid date passed: \"{}\". Dates in \"YYYY-MM-DD\" format are expected"), value);
+diff --git a/libdnf5/CMakeLists.txt b/libdnf5/CMakeLists.txt
+index 359e39e..315a83b 100644
+--- a/libdnf5/CMakeLists.txt
++++ b/libdnf5/CMakeLists.txt
+@@ -11,6 +11,9 @@ if (NOT WITH_MODULEMD)
+ list(REMOVE_ITEM LIBDNF5_SOURCES ${LIBDNF5_SOURCES_MODULES})
+ endif()
+
++include(CheckIncludeFileCXX)
++check_include_file_cxx("format" CXX_FORMAT_SUPPORT)
++
+ # gather all pkg-config requires and write them to a .pc file later
+ list(APPEND LIBDNF5_PC_REQUIRES)
+ list(APPEND LIBDNF5_PC_REQUIRES_PRIVATE)
+@@ -49,6 +52,12 @@ set_target_properties(libdnf5 PROPERTIES SOVERSION ${DNF_SO_VERSION})
+ # required to have dlopen symbol
+ target_link_libraries(libdnf5 PUBLIC ${CMAKE_DL_LIBS})
+
++if (NOT CXX_FORMAT_SUPPORT)
++ find_package(fmt REQUIRED)
++ target_link_libraries(libdnf5_obj PRIVATE fmt::fmt)
++ target_compile_definitions(libdnf5_obj PUBLIC USE_FMTLIB)
++endif()
++
+ # required by clang
+ target_link_libraries(libdnf5 PUBLIC stdc++)
+
+diff --git a/libdnf5/base/goal_elements.cpp b/libdnf5/base/goal_elements.cpp
+index e5d4a4b..757a6f2 100644
+--- a/libdnf5/base/goal_elements.cpp
++++ b/libdnf5/base/goal_elements.cpp
+@@ -17,7 +17,7 @@
+ // You should have received a copy of the GNU Lesser General Public License
+ // along with libdnf. If not, see <https://www.gnu.org/licenses/>.
+
+-
++#include <optional>
+ #include "libdnf5/base/goal_elements.hpp"
+
+ #include "libdnf5/common/exception.hpp"
+diff --git a/libdnf5/conf/config_main.cpp b/libdnf5/conf/config_main.cpp
+index a169af4..8f0c8fe 100644
+--- a/libdnf5/conf/config_main.cpp
++++ b/libdnf5/conf/config_main.cpp
+@@ -37,9 +37,17 @@
+ #include <algorithm>
+ #include <array>
+ #include <cctype>
++#include <optional>
+ #include <sstream>
+ #include <utility>
+
++#ifdef USE_FMTLIB
++#include <fmt/core.h>
++namespace std {
++ using fmt::format;
++}
++#endif
++
+ namespace libdnf5 {
+
+ /// @brief Converts a friendly bandwidth option to bytes
+diff --git a/libdnf5/logger/memory_buffer_logger.cpp b/libdnf5/logger/memory_buffer_logger.cpp
+index 85bf707..89307e9 100644
+--- a/libdnf5/logger/memory_buffer_logger.cpp
++++ b/libdnf5/logger/memory_buffer_logger.cpp
+@@ -20,6 +20,7 @@
+ #include "libdnf5/logger/memory_buffer_logger.hpp"
+
+ #include <mutex>
++#include <vector>
+
+ namespace libdnf5 {
+
+--
+2.56.0
+
diff --git a/meta/recipes-devtools/dnf/dnf/0005-Do-not-prepend-installroot-to-logdir.patch b/meta/recipes-devtools/dnf/dnf/0005-Do-not-prepend-installroot-to-logdir.patch
deleted file mode 100644
index a1c58d6563..0000000000
--- a/meta/recipes-devtools/dnf/dnf/0005-Do-not-prepend-installroot-to-logdir.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 0e7fc4a8523aad616493e6ad33c509e1e530d852 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 11 Jan 2017 15:10:13 +0200
-Subject: [PATCH] Do not prepend installroot to logdir.
-
-This would otherwise write the logs into rootfs/var/log
-(whereas we want them in $T),
-and will break installation of base-files rpm.
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- dnf/cli/cli.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py
-index d3844df3..ac080f79 100644
---- a/dnf/cli/cli.py
-+++ b/dnf/cli/cli.py
-@@ -954,7 +954,7 @@ class Cli(object):
- logger.warning(_("Unable to detect release version (use '--releasever' to specify "
- "release version)"))
-
-- for opt in ('cachedir', 'logdir', 'persistdir'):
-+ for opt in ('cachedir', 'persistdir'):
- conf.prepend_installroot(opt)
-
- self.base._logging._setup_from_dnf_conf(conf)
diff --git a/meta/recipes-devtools/dnf/dnf/0005-libdnf-fix-arm-arch-mapping-issues-for-qemuarmv5.patch b/meta/recipes-devtools/dnf/dnf/0005-libdnf-fix-arm-arch-mapping-issues-for-qemuarmv5.patch
new file mode 100644
index 0000000000..4fed5ff2a1
--- /dev/null
+++ b/meta/recipes-devtools/dnf/dnf/0005-libdnf-fix-arm-arch-mapping-issues-for-qemuarmv5.patch
@@ -0,0 +1,59 @@
+From 8580e30c9692548d7e3da88e03c08d985402fae2 Mon Sep 17 00:00:00 2001
+From: Adam Duskett <adam.duskett@amarulasolutions.com>
+Date: Thu, 15 Oct 2026 11:58:49 +0200
+Subject: [PATCH] libdnf: fix arm arch mapping issues for qemuarmv5
+
+We change the way rpm architectures work, we make the machine name the default
+machine specific package architecture.
+
+This arm mapping code can work or in the case of qemuarmv5, it doesn't as it
+creates armv5hl which doesn't exist and causes errrors. We can simply remove
+it, we don't need it.
+
+Upstream-Status: Inappropriate [oe-core specific]
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Rebased for 5.4.6.0
+Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
+---
+ libdnf5/utils/system.cpp | 24 ------------------------
+ 1 file changed, 24 deletions(-)
+
+diff --git a/libdnf5/utils/system.cpp b/libdnf5/utils/system.cpp
+index ecdc57e..35d8801 100644
+--- a/libdnf5/utils/system.cpp
++++ b/libdnf5/utils/system.cpp
+@@ -52,30 +52,6 @@ std::string detect_arch() {
+ throw RuntimeError(M_("Failed to execute uname()"));
+ }
+
+- if (!strncmp(un.machine, "armv", 4)) {
+- /* un.machine is armvXE, where X is version number and E is
+- * endianness (b or l); we need to add modifiers such as
+- * h (hardfloat), n (neon). Neon is a requirement of armv8 so
+- * as far as rpm is concerned armv8l is the equivalent of armv7hnl
+- * (or 7hnb) so we don't explicitly add 'n' for 8+ as it's expected. */
+- char endian = un.machine[strlen(un.machine) - 1];
+- char * modifier = un.machine + 5;
+- while (isdigit(*modifier)) /* keep armv7, armv8, armv9, armv10, armv100, ... */
+- modifier++;
+- if (getauxval(AT_HWCAP) & HWCAP_ARM_VFP)
+- *modifier++ = 'h';
+- if ((atoi(un.machine + 4) == 7) && (getauxval(AT_HWCAP) & HWCAP_ARM_NEON))
+- *modifier++ = 'n';
+- *modifier++ = endian;
+- *modifier = 0;
+- }
+-#ifdef __MIPSEL__
+- // support for little endian MIPS
+- if (!strcmp(un.machine, "mips"))
+- strcpy(un.machine, "mipsel");
+- else if (!strcmp(un.machine, "mips64"))
+- strcpy(un.machine, "mips64el");
+-#endif
+ return un.machine;
+ }
+
+--
+2.56.0
+
diff --git a/meta/recipes-devtools/dnf/dnf/0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch b/meta/recipes-devtools/dnf/dnf/0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
deleted file mode 100644
index 64ea7874d3..0000000000
--- a/meta/recipes-devtools/dnf/dnf/0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From d5b154ea69afdcd862299a0b7f255f6ece3686c6 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 30 Dec 2016 18:29:07 +0200
-Subject: [PATCH] Do not set PYTHON_INSTALL_DIR by running python
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- CMakeLists.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 9e2e9e9e..2056089d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -19,7 +19,7 @@ ELSE ()
- MESSAGE (FATAL_ERROR "Invalid PYTHON_DESIRED value: " ${PYTHON_DESIRED})
- ENDIF()
-
--EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from sysconfig import get_path; stdout.write(get_path('purelib'))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
-+#EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from sysconfig import get_path; stdout.write(get_path('purelib'))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
- MESSAGE(STATUS "Python install dir is ${PYTHON_INSTALL_DIR}")
-
- ADD_SUBDIRECTORY (dnf)
diff --git a/meta/recipes-devtools/dnf/dnf/0030-Run-python-scripts-using-env.patch b/meta/recipes-devtools/dnf/dnf/0030-Run-python-scripts-using-env.patch
deleted file mode 100644
index eb46113f3a..0000000000
--- a/meta/recipes-devtools/dnf/dnf/0030-Run-python-scripts-using-env.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From d3556767b84f3687743fdad0a88af0739d736ea9 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 30 Dec 2016 18:29:37 +0200
-Subject: [PATCH] Run python scripts using env
-
-Otherwise the build tools hardcode the python path into them.
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- bin/dnf-automatic.in | 2 +-
- bin/dnf.in | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/bin/dnf-automatic.in b/bin/dnf-automatic.in
-index 17e35a05..28827e38 100755
---- a/bin/dnf-automatic.in
-+++ b/bin/dnf-automatic.in
-@@ -1,4 +1,4 @@
--#!@PYTHON_EXECUTABLE@
-+#!/usr/bin/env python3
- # dnf-automatic executable.
- #
- # Copyright (C) 2014-2016 Red Hat, Inc.
-diff --git a/bin/dnf.in b/bin/dnf.in
-index 55ceb3f2..e38973c7 100755
---- a/bin/dnf.in
-+++ b/bin/dnf.in
-@@ -1,4 +1,4 @@
--#!@PYTHON_EXECUTABLE@
-+#!/usr/bin/env python3
- # The dnf executable script.
- #
- # Copyright (C) 2012-2016 Red Hat, Inc.
diff --git a/meta/recipes-devtools/dnf/dnf_4.24.0.bb b/meta/recipes-devtools/dnf/dnf_4.24.0.bb
deleted file mode 100644
index 31bbb4032b..0000000000
--- a/meta/recipes-devtools/dnf/dnf_4.24.0.bb
+++ /dev/null
@@ -1,96 +0,0 @@
-SUMMARY = "Package manager forked from Yum, using libsolv as a dependency resolver"
-DESCRIPTION = "Software package manager that installs, updates, and removes \
-packages on RPM-based Linux distributions. It automatically computes \
-dependencies and determines the actions required to install packages."
-HOMEPAGE = "https://github.com/rpm-software-management/dnf"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://PACKAGE-LICENSING;md5=4a0548e303dbc77f067335b4d688e745 \
- "
-
-SRC_URI = "git://github.com/rpm-software-management/dnf.git;branch=master;protocol=https;tag=${PV} \
- file://0001-Corretly-install-tmpfiles.d-configuration.patch \
- file://0001-Do-not-hardcode-etc-and-systemd-unit-directories.patch \
- file://0005-Do-not-prepend-installroot-to-logdir.patch \
- file://0029-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
- file://0030-Run-python-scripts-using-env.patch \
- file://0001-set-python-path-for-completion_helper.patch \
- file://0001-lock.py-fix-Exception-handling.patch \
- "
-
-SRC_URI:append:class-native = " file://0001-dnf-write-the-log-lock-to-root.patch"
-
-SRCREV = "e47634fbe3565d0580e89ec21adb7c1b308642ce"
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
-
-inherit cmake gettext bash-completion setuptools3-base systemd
-
-DEPENDS += "libdnf librepo libcomps"
-
-# manpages generation requires http://www.sphinx-doc.org/
-EXTRA_OECMAKE = " -DWITH_MAN=0 -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DPYTHON_DESIRED=3"
-
-BBCLASSEXTEND = "native nativesdk"
-
-RDEPENDS:${PN} += " \
- python3-core \
- python3-codecs \
- python3-ctypes \
- python3-netclient \
- python3-email \
- python3-threading \
- python3-logging \
- python3-fcntl \
- librepo \
- python3-shell \
- libcomps \
- libdnf \
- python3-sqlite3 \
- python3-compression \
- python3-rpm \
- python3-json \
- python3-curses \
- python3-misc \
- "
-
-RDEPENDS:${PN}:class-native = ""
-
-RRECOMMENDS:${PN}:class-target += "gnupg"
-
-# Create a symlink called 'dnf' as 'make install' does not do it, but
-# .spec file in dnf source tree does (and then Fedora and dnf documentation
-# says that dnf binary is plain 'dnf').
-do_install:append() {
- ln -rs ${D}/${bindir}/dnf-3 ${D}/${bindir}/dnf
- ln -rs ${D}/${bindir}/dnf-automatic-3 ${D}/${bindir}/dnf-automatic
-}
-
-# Direct dnf-native to read rpm configuration from our sysroot, not the one it was compiled in
-do_install:append:class-native() {
- create_wrapper ${D}/${bindir}/dnf \
- SEQUOIA_CRYPTO_POLICY=${STAGING_DATADIR_NATIVE}/crypto-policies/back-ends/rpm-sequoia.config \
- RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
- RPM_NO_CHROOT_FOR_SCRIPTS=1
-}
-
-do_install:append:class-nativesdk() {
- create_wrapper ${D}/${bindir}/dnf \
- RPM_CONFIGDIR=${SDKPATHNATIVE}${libdir_nativesdk}/rpm \
- RPM_NO_CHROOT_FOR_SCRIPTS=1
-}
-
-SYSTEMD_SERVICE:${PN} = "dnf-makecache.service dnf-makecache.timer \
- dnf-automatic.service dnf-automatic.timer \
- dnf-automatic-download.service dnf-automatic-download.timer \
- dnf-automatic-install.service dnf-automatic-install.timer \
- dnf-automatic-notifyonly.service dnf-automatic-notifyonly.timer \
-"
-SYSTEMD_AUTO_ENABLE ?= "disable"
-
-SKIP_RECIPE[dnf] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'does not build without package_rpm in PACKAGE_CLASSES due disabled rpm support in libsolv', d)}"
-
-# Packages for testing purposes
-PACKAGES += "${PN}-test-main ${PN}-test-dep"
-ALLOW_EMPTY:${PN}-test-main = "1"
-ALLOW_EMPTY:${PN}-test-dep = "1"
-RRECOMMENDS:${PN}-test-main = "${PN}-test-dep"
diff --git a/meta/recipes-devtools/dnf/dnf_5.4.6.0.bb b/meta/recipes-devtools/dnf/dnf_5.4.6.0.bb
new file mode 100644
index 0000000000..7afd457050
--- /dev/null
+++ b/meta/recipes-devtools/dnf/dnf_5.4.6.0.bb
@@ -0,0 +1,180 @@
+SUMMARY = "DNF package manager rewritten in C++, using libsolv as a dependency resolver"
+DESCRIPTION = "\
+ DNF5 is a command-line package manager that automates the process of \
+ installing, upgrading, configuring, and removing computer programs in a \
+ consistent manner. It supports RPM packages, modulemd modules, and comps \
+ groups and environments. \
+"
+HOMEPAGE = "https://github.com/rpm-software-management/dnf5"
+BUGTRACKER = "https://github.com/rpm-software-management/dnf5/issues"
+CVE_PRODUCT = "rpm:dnf5 rpm-software-management:dnf5"
+SECTION = "base"
+
+LICENSE = "LGPL-2.1-or-later AND GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "\
+ file://COPYING.md;md5=9733192df318d0f806fd668b92ba0ba6 \
+ file://gpl-2.0.txt;md5=570a9b3749dd0463a1778803b12a6dce \
+ file://lgpl-2.1.txt;md5=4bf661c1e3793e55c8d1051bc5e0ae21 \
+"
+
+DEPENDS = "\
+ fmt \
+ glib-2.0 \
+ json-c \
+ libmodulemd \
+ librepo \
+ libsolv \
+ libtoml11 \
+ libxml2 \
+ sqlite3 \
+ util-linux \
+"
+
+SRC_URI = "\
+ git://github.com/rpm-software-management/dnf5.git;protocol=https;branch=main;tag=${PV} \
+ file://0002-cmake-set-CMP0190-to-OLD.patch \
+ file://0003-Do-not-hardcode-system_cachedir.patch \
+ file://0004-add-support-for-gcc-12-and-below.patch \
+ file://0005-libdnf-fix-arm-arch-mapping-issues-for-qemuarmv5.patch \
+"
+SRC_URI:append:class-native = " file://0001-Do-not-hardcode-the-systemd-unit-directory.patch"
+SRCREV = "1b2de4bdc2f25a6de2884fb2cf81f80a8ce2a567"
+
+inherit bash-completion cmake gettext pkgconfig siteinfo systemd
+inherit_defer ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3targetconfig', '', d)}
+
+PACKAGECONFIG[acl] = "-DWITH_ACL=ON,-DWITH_ACL=OFF,acl"
+PACKAGECONFIG[dnfdaemon-client] = "-DWITH_DNF5DAEMON_CLIENT=ON,-DWITH_DNF5DAEMON_CLIENT=OFF,sdbus-c++"
+PACKAGECONFIG[dnfdaemon-server] = "-DWITH_DNF5DAEMON_SERVER=ON,-DWITH_DNF5DAEMON_SERVER=OFF,sdbus-c++"
+PACKAGECONFIG[plugins] = "-DWITH_DNF5_PLUGINS=ON,-DWITH_DNF5_PLUGINS=OFF,curl sdbus-c++ zlib"
+PACKAGECONFIG[plugin-actions] = "-DWITH_PLUGIN_ACTIONS=ON,-DWITH_PLUGIN_ACTIONS=OFF"
+PACKAGECONFIG[plugin-appstream] = "-DWITH_PLUGIN_APPSTREAM=ON,-DWITH_PLUGIN_APPSTREAM=OFF,appstream"
+PACKAGECONFIG[plugin-expired-pgp-keys] = "-DWITH_PLUGIN_EXPIRED_PGP_KEYS=ON,-DWITH_PLUGIN_EXPIRED_PGP_KEYS=OFF,gnupg"
+PACKAGECONFIG[plugin-local] = "-DWITH_PLUGIN_LOCAL=ON,-DWITH_PLUGIN_LOCAL=OFF"
+
+# sdbus-c++ and journalctl integration.
+PACKAGECONFIG[systemd] = "-DWITH_SYSTEMD=ON -DWITH_PLUGIN_SYSTEMD_INHIBIT=ON,-DWITH_SYSTEMD=OFF -DWITH_PLUGIN_SYSTEMD_INHIBIT=OFF,sdbus-c++"
+
+# build options - bindings
+PACKAGECONFIG[python3] = "-DWITH_PYTHON3=ON,-DWITH_PYTHON3=OFF,python3 swig-native"
+
+# No sdbus-c++-native package.
+PACKAGECONFIG:remove:class-native = "\
+ dnfdaemon-client \
+ dnfdaemon-server \
+ plugins \
+ plugin-manifest \
+ systemd \
+"
+
+PACKAGE_BEFORE_PN += "\
+ ${PN}-dnfdaemon-server \
+ ${PN}-plugins \
+ ${PN}-python3 \
+ ${PN}-systemd \
+"
+
+# manpages generation requires http://www.sphinx-doc.org/
+EXTRA_OECMAKE:append = " \
+ -DENABLE_SOLV_FOCUSNEW=ON \
+ -DWITH_DNF5_OBSOLETES_DNF=OFF \
+ -DWITH_DNF5=ON \
+ -DWITH_GO=OFF \
+ -DWITH_HTML=OFF \
+ -DWITH_LIBDNF5_CLI=ON \
+ -DWITH_MAN=OFF \
+ -DWITH_PERL5=OFF \
+ -DWITH_PLUGIN_RHSM=OFF \
+ -DWITH_RUBY=OFF \
+ -DWITH_TESTS=OFF \
+ -DWITH_PLUGIN_MANIFEST=OFF \
+"
+
+# No sdbus-c++-native package exists so remove all options that depend on it.
+EXTRA_OECMAKE:append:class-native = " \
+ -DWITH_DNF5DAEMON_CLIENT=OFF \
+ -DWITH_DNF5DAEMON_SERVER=OFF \
+ -DWITH_DNF5_PLUGINS=OFF \
+ -DWITH_PLUGIN_MANIFEST=OFF \
+ -DWITH_SYSTEMD=OFF \
+"
+
+# Create a symlink called 'dnf' as 'make install' does not do it, but
+# .spec file in dnf source tree does (and then Fedora and dnf documentation
+# says that dnf binary is plain 'dnf').
+do_install:append() {
+ ln -rs ${D}/${bindir}/dnf5 ${D}/${bindir}/dnf
+ install -d ${D}${sysconfdir}/dnf
+
+ # Breaks dnf because the builddep plugin is provided in the
+ # dnf-plugins-core package which is not available in oe-core.
+ rm -f ${D}${datadir}/dnf5/aliases.d/compatibility-plugins.conf
+}
+
+# Direct dnf-native to read rpm configuration from our sysroot, not the one it was compiled in
+do_install:append:class-native() {
+ create_wrapper ${D}/${bindir}/dnf \
+ SEQUOIA_CRYPTO_POLICY=${STAGING_DATADIR_NATIVE}/crypto-policies/back-ends/rpm-sequoia.config \
+ RPM_CONFIGDIR=${STAGING_LIBDIR_NATIVE}/rpm \
+ RPM_NO_CHROOT_FOR_SCRIPTS=1
+}
+
+do_install:append:class-nativesdk() {
+ create_wrapper ${D}/${bindir}/dnf \
+ RPM_CONFIGDIR=${SDKPATHNATIVE}${libdir_nativesdk}/rpm \
+ RPM_NO_CHROOT_FOR_SCRIPTS=1
+}
+
+# Packages for testing purposes
+PACKAGES += "${PN}-test-main ${PN}-test-dep"
+
+FILES:${PN} += "\
+ ${bindir}/dnf* \
+ ${datadir}/dbus-1/system-services/org.rpm.dnf.v0.service \
+ ${datadir}/dnf5 \
+ ${datadir}/polkit-1/actions/org.rpm.dnf* \
+ ${datadir}/polkit-1/rules.d/org.rpm.dnf* \
+ ${datadir}/zsh/site-functions/_dnf5 \
+ ${libdir}/dnf5 \
+ ${libdir}/libdnf5* \
+ ${sysconfdir}/dnf \
+"
+
+FILES:${PN}-bash-completion += "\
+ ${datadir}/bash-completion/completions/dnf5 \
+"
+
+FILES:${PN}-dnfdaemon-server += "\
+ ${systemd_system_unitdir}/dnf5daemon-server.service \
+ ${datadir}/dbus-1/interfaces/org.rpm.dnf* \
+ ${datadir}/dbus-1/system.d/org.rpm.dnf* \
+"
+
+FILES:${PN}-plugins += "\
+ ${systemd_system_unitdir}/dnf-automatic.service \
+ ${systemd_system_unitdir}/dnf-automatic.timer \
+ ${systemd_system_unitdir}/dnf5-automatic.service \
+ ${systemd_system_unitdir}/dnf5-automatic.timer \
+"
+
+FILES:${PN}-python3 += "\
+ ${libdir}/${PYTHON_DIR}/site-packages/libdnf* \
+"
+
+FILES:${PN}-systemd += "\
+ ${systemd_system_unitdir}/dnf5-makecache.service \
+ ${systemd_system_unitdir}/dnf5-makecache.timer \
+ ${systemd_system_unitdir}/dnf5-offline-transaction-cleanup.service \
+ ${systemd_system_unitdir}/dnf5-offline-transaction.service \
+"
+
+SYSTEMD_AUTO_ENABLE ?= "disable"
+
+RRECOMMENDS:${PN}:append:class-target = " bash-completion gnupg"
+RRECOMMENDS:${PN}-test-main = "${PN}-test-dep"
+ALLOW_EMPTY:${PN}-test-main = "1"
+ALLOW_EMPTY:${PN}-test-dep = "1"
+
+SKIP_RECIPE[dnf] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'does not build without package_rpm in PACKAGE_CLASSES due to disabled rpm support in libsolv', d)}"
+
+BBCLASSEXTEND = "native nativesdk"
--
2.56.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v10 3/3] libdnf: remove recipe
2026-10-15 14:23 [PATCH v10 1/3] rpm: add 0017-critically-fail-if-post-install-fails.patch Adam Duskett
2026-10-15 14:23 ` [PATCH v10 2/3] dnf: Upgrade to 5.4.6.0 Adam Duskett
@ 2026-10-15 14:23 ` Adam Duskett
1 sibling, 0 replies; 5+ messages in thread
From: Adam Duskett @ 2026-10-15 14:23 UTC (permalink / raw)
To: openembedded-core; +Cc: Adam Duskett
libdnf is now included in the dnf5 source tree.
Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
---
meta/conf/distro/include/maintainers.inc | 1 -
...or-both-libsolv-and-libsolvext-libdn.patch | 26 ----------
...FNM_EXTMATCH-if-not-already-like-und.patch | 36 -------------
.../0001-drop-FindPythonInstDir.cmake.patch | 39 ---------------
...-utils.cpp-fix-compilation-with-musl.patch | 48 ------------------
...ables-with-pkg-config-cmake-s-own-mo.patch | 27 ----------
.../libdnf/libdnf/armarch.patch | 50 -------------------
meta/recipes-devtools/libdnf/libdnf_0.76.0.bb | 33 ------------
8 files changed, 260 deletions(-)
delete mode 100644 meta/recipes-devtools/libdnf/libdnf/0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch
delete mode 100644 meta/recipes-devtools/libdnf/libdnf/0001-dnf-repo-Define-FNM_EXTMATCH-if-not-already-like-und.patch
delete mode 100644 meta/recipes-devtools/libdnf/libdnf/0001-drop-FindPythonInstDir.cmake.patch
delete mode 100644 meta/recipes-devtools/libdnf/libdnf/0001-utils-utils.cpp-fix-compilation-with-musl.patch
delete mode 100644 meta/recipes-devtools/libdnf/libdnf/0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch
delete mode 100644 meta/recipes-devtools/libdnf/libdnf/armarch.patch
delete mode 100644 meta/recipes-devtools/libdnf/libdnf_0.76.0.bb
diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index b5cde257fe..586bc6258f 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -332,7 +332,6 @@ RECIPE_MAINTAINER:pn-libconvert-asn1-perl = "Tim Orling <tim.orling@konsulko.com
RECIPE_MAINTAINER:pn-libcxx = "Khem Raj <raj.khem@gmail.com>"
RECIPE_MAINTAINER:pn-libdaemon = "Unassigned <unassigned@yoctoproject.org>"
RECIPE_MAINTAINER:pn-libdisplay-info = "Hiago De Franco <hfranco@baylibre.com>"
-RECIPE_MAINTAINER:pn-libdnf = "Unassigned <unassigned@yoctoproject.org>"
RECIPE_MAINTAINER:pn-libdrm = "Unassigned <unassigned@yoctoproject.org>"
RECIPE_MAINTAINER:pn-libedit = "Khem Raj <raj.khem@gmail.com>"
RECIPE_MAINTAINER:pn-libepoxy = "Unassigned <unassigned@yoctoproject.org>"
diff --git a/meta/recipes-devtools/libdnf/libdnf/0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch b/meta/recipes-devtools/libdnf/libdnf/0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch
deleted file mode 100644
index f56e3ecdf9..0000000000
--- a/meta/recipes-devtools/libdnf/libdnf/0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From cd297017bc4013764915dfc1e47d23fe193bc062 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Tue, 7 Feb 2017 12:16:03 +0200
-Subject: [PATCH] Get parameters for both libsolv and libsolvext (libdnf is
-
- using both)
-
-Upstream-Status: Submitted [https://github.com/rpm-software-management/libdnf/pull/312]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- CMakeLists.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 6c866111..c56b6bab 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -58,7 +58,7 @@ endif()
-
-
- # build dependencies
--PKG_CHECK_MODULES (LIBSOLV REQUIRED libsolv)
-+PKG_CHECK_MODULES (LIBSOLV REQUIRED libsolv libsolvext)
- set(LIBSOLV_LIBRARY ${LIBSOLV_LIBRARIES})
-
-
diff --git a/meta/recipes-devtools/libdnf/libdnf/0001-dnf-repo-Define-FNM_EXTMATCH-if-not-already-like-und.patch b/meta/recipes-devtools/libdnf/libdnf/0001-dnf-repo-Define-FNM_EXTMATCH-if-not-already-like-und.patch
deleted file mode 100644
index 2b64176317..0000000000
--- a/meta/recipes-devtools/libdnf/libdnf/0001-dnf-repo-Define-FNM_EXTMATCH-if-not-already-like-und.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 09c7188880ca62248e7c1e8e907df66545bbc3df Mon Sep 17 00:00:00 2001
-From: Wang Mingyu <wangmy@fujitsu.com>
-Date: Sun, 16 Nov 2025 23:29:18 +0000
-Subject: [PATCH] dnf-repo: Define FNM_EXTMATCH if not already (like under
- musl).
-
-With musl, FNM_EXTMATCH is not defined:
-dnf-repo.cpp
-| dnf-repo.cpp: In function 'void dnf_repo_conf_load_overrides(DnfRepo*, const char*)':
-| dnf-repo.cpp:971:50: error: 'FNM_EXTMATCH' was not declared in this scope; did you mean 'FNM_NOMATCH'?
-| 971 | if (fnmatch(repo_id_pattern, repoId, FNM_EXTMATCH) != 0) {
-| | ^~~~~~~~~~~~
-| | FNM_NOMATCH
-
-Upstream-Status: Submitted [https://github.com/rpm-software-management/libdnf/pull/1737/commits/47ed831c1fdb32519f2d66fee91bc47f9521d1d4]
-
-Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
----
- libdnf/dnf-repo.cpp | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp
-index 21d23e0c..dd91b816 100644
---- a/libdnf/dnf-repo.cpp
-+++ b/libdnf/dnf-repo.cpp
-@@ -69,6 +69,10 @@
- #include <string>
- #include <vector>
-
-+#if !defined(FNM_EXTMATCH)
-+#define FNM_EXTMATCH 0
-+#endif
-+
- typedef struct
- {
- DnfRepoEnabled enabled;
diff --git a/meta/recipes-devtools/libdnf/libdnf/0001-drop-FindPythonInstDir.cmake.patch b/meta/recipes-devtools/libdnf/libdnf/0001-drop-FindPythonInstDir.cmake.patch
deleted file mode 100644
index d3a7583eac..0000000000
--- a/meta/recipes-devtools/libdnf/libdnf/0001-drop-FindPythonInstDir.cmake.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 178a1358aac59f0b06184bd60a32fcfebbff9aba Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Tue, 1 Jun 2021 10:23:59 +0800
-Subject: [PATCH] drop FindPythonInstDir.cmake
-
-Since commit [1] applied, PYTHON_INSTALL_DIR is not right
-on nativesdk build
-...
-|Building for python3
-|-- Python install dir is
-|tmp-glibc/work/x86_64-nativesdk-wrlinuxsdk-linux/nativesdk-libdnf/0.63.0-r0/
-recipe-sysroot-native/usr/lib/python3.9/site-packages
-...
-
-Yocto manually set PYTHON_INSTALL_DIR from recipe, it is not
-necessary to call FindPythonInstDir.cmake which will override
-Yocto setting
-
-[1] https://github.com/rpm-software-management/libdnf/commit/f1cffbfb9f338da827e233c2d8ac3a25a6a59a69
-
-Upstream-Status: Inappropriate [Yocto specific]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- cmake/modules/FindPythonInstDir.cmake | 7 +------
- 1 file changed, 1 insertion(+), 6 deletions(-)
-
-diff --git a/cmake/modules/FindPythonInstDir.cmake b/cmake/modules/FindPythonInstDir.cmake
-index ed098ded..8b137891 100644
---- a/cmake/modules/FindPythonInstDir.cmake
-+++ b/cmake/modules/FindPythonInstDir.cmake
-@@ -1,6 +1 @@
--EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "
--from sys import stdout
--from sysconfig import get_path
--path=get_path(name='platlib', vars={'platbase':'${CMAKE_INSTALL_PREFIX}'})
--stdout.write(path)"
--OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
-+
diff --git a/meta/recipes-devtools/libdnf/libdnf/0001-utils-utils.cpp-fix-compilation-with-musl.patch b/meta/recipes-devtools/libdnf/libdnf/0001-utils-utils.cpp-fix-compilation-with-musl.patch
deleted file mode 100644
index 0a6744db9a..0000000000
--- a/meta/recipes-devtools/libdnf/libdnf/0001-utils-utils.cpp-fix-compilation-with-musl.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 899a524ff896d7c400e3b48f8c19feac695a7875 Mon Sep 17 00:00:00 2001
-From: Wang Mingyu <wangmy@fujitsu.com>
-Date: Mon, 17 Nov 2025 00:05:14 +0000
-Subject: [PATCH] utils/utils.cpp: fix compilation with musl
-
-The basename() function requires the libgen.h header when
-compiling with musl-libc, otherwise it complains:
-error: 'basename' was not declared in this scope; did you mean 'g_basename'?
-Also, musl's basename requires char* instead of const char* argument:
-error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
-
-Upstream-Status: Submitted [https://github.com/rpm-software-management/libdnf/pull/1737/commits/8720d5eeb0d348686d4c5f2ccb5a6c73d66eeff5]
-
-Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
----
- libdnf/utils/utils.cpp | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/libdnf/utils/utils.cpp b/libdnf/utils/utils.cpp
-index f5d200b8..40866360 100644
---- a/libdnf/utils/utils.cpp
-+++ b/libdnf/utils/utils.cpp
-@@ -9,6 +9,7 @@
- #include <sys/stat.h>
- #include <dirent.h>
- #include <cstring>
-+#include <libgen.h>
- #include <glob.h>
- #include <stdexcept>
-
-@@ -311,7 +312,7 @@ std::vector<std::string> createSortedFileList(
- auto * path_fname = basename(path);
- bool found{false};
- for (const auto & path_in_list : paths) {
-- if (strcmp(path_fname, basename(path_in_list.c_str())) == 0) {
-+ if (strcmp(path_fname, basename((char*)path_in_list.c_str())) == 0) {
- found = true;
- break;
- }
-@@ -325,7 +326,7 @@ std::vector<std::string> createSortedFileList(
-
- // sort all drop-in configuration files alphabetically by their names
- std::sort(paths.begin(), paths.end(), [](const std::string & p1, const std::string & p2) {
-- return strcmp(basename(p1.c_str()), basename(p2.c_str())) < 0;
-+ return strcmp(basename((char*)p1.c_str()), basename((char*)p2.c_str())) < 0;
- });
-
- return paths;
diff --git a/meta/recipes-devtools/libdnf/libdnf/0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch b/meta/recipes-devtools/libdnf/libdnf/0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch
deleted file mode 100644
index ff4db81d98..0000000000
--- a/meta/recipes-devtools/libdnf/libdnf/0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 514b377d6c37ede0db0e3947f2870b22c1f8cf4c Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Fri, 30 Dec 2016 18:24:50 +0200
-Subject: [PATCH] Set libsolv variables with pkg-config (cmake's own module
-
- doesn't work properly).
-
-Upstream-Status: Submitted [https://github.com/rpm-software-management/libdnf/pull/312]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- CMakeLists.txt | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 63e69888..6c866111 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -58,7 +58,8 @@ endif()
-
-
- # build dependencies
--find_package(LibSolv 0.7.21 REQUIRED COMPONENTS ext)
-+PKG_CHECK_MODULES (LIBSOLV REQUIRED libsolv)
-+set(LIBSOLV_LIBRARY ${LIBSOLV_LIBRARIES})
-
-
- # build dependencies via pkg-config
diff --git a/meta/recipes-devtools/libdnf/libdnf/armarch.patch b/meta/recipes-devtools/libdnf/libdnf/armarch.patch
deleted file mode 100644
index 9080024bf5..0000000000
--- a/meta/recipes-devtools/libdnf/libdnf/armarch.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From ec69d285812fc442ee04fe37144e7de4fecd24f1 Mon Sep 17 00:00:00 2001
-From: Richard Purdie <richard.purdie@linuxfoundation.org>
-Date: Thu, 9 Nov 2023 10:29:31 +0000
-Subject: [PATCH] libdnf: Fix arm arch mapping issues for qemuarmv5
-
-We change the way rpm architectures work, we make the machine name the default machine
-specific package architecture.
-
-This arm mapping code can work or in the case of qemuarmv5, it doesn't as it creates
-armv5hl which doesn't exist and causes errrors. We can simply remove it, we don't need it.
-
-Upstream-Status: Inappropriate [Relies on OE rpm config]
----
- libdnf/hy-util.cpp | 23 -----------------------
- 1 file changed, 23 deletions(-)
-
-diff --git a/libdnf/hy-util.cpp b/libdnf/hy-util.cpp
-index 82f24edd..43cdea69 100644
---- a/libdnf/hy-util.cpp
-+++ b/libdnf/hy-util.cpp
-@@ -117,29 +117,6 @@ hy_detect_arch(char **arch)
- if (uname(&un) < 0)
- return DNF_ERROR_FAILED;
-
-- if (!strncmp(un.machine, "armv", 4)) {
-- /* un.machine is armvXE, where X is version number and E is
-- * endianness (b or l); we need to add modifiers such as
-- * h (hardfloat), n (neon). Neon is a requirement of armv8 so
-- * as far as rpm is concerned armv8l is the equivilent of armv7hnl
-- * (or 7hnb) so we don't explicitly add 'n' for 8+ as it's expected. */
-- char endian = un.machine[strlen(un.machine)-1];
-- char *modifier = un.machine + 5;
-- while(isdigit(*modifier)) /* keep armv7, armv8, armv9, armv10, armv100, ... */
-- modifier++;
-- if (getauxval(AT_HWCAP) & HWCAP_ARM_VFP)
-- *modifier++ = 'h';
-- if ((atoi(un.machine+4) == 7) && (getauxval(AT_HWCAP) & HWCAP_ARM_NEON))
-- *modifier++ = 'n';
-- *modifier++ = endian;
-- *modifier = 0;
-- }
--#ifdef __MIPSEL__
-- if (!strcmp(un.machine, "mips"))
-- strcpy(un.machine, "mipsel");
-- else if (!strcmp(un.machine, "mips64"))
-- strcpy(un.machine, "mips64el");
--#endif
- #if defined(__e2k__)
- if (__builtin_cpu_is("elbrus-v4") || __builtin_cpu_is("elbrus-8c") || __builtin_cpu_is("elbrus-1c+"))
- strcpy(un.machine, "e2kv4");
diff --git a/meta/recipes-devtools/libdnf/libdnf_0.76.0.bb b/meta/recipes-devtools/libdnf/libdnf_0.76.0.bb
deleted file mode 100644
index e8a2dca4d8..0000000000
--- a/meta/recipes-devtools/libdnf/libdnf_0.76.0.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "Library providing simplified C and Python API to libsolv"
-HOMEPAGE = "https://github.com/rpm-software-management/libdnf"
-DESCRIPTION = "This library provides a high level package-manager. It's core library of dnf, PackageKit and rpm-ostree. It's replacement for deprecated hawkey library which it contains inside and uses librepo under the hood."
-LICENSE = "LGPL-2.1-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4bf661c1e3793e55c8d1051bc5e0ae21"
-
-SRC_URI = "git://github.com/rpm-software-management/libdnf;branch=dnf-4-master;protocol=https;tag=${PV} \
- file://0004-Set-libsolv-variables-with-pkg-config-cmake-s-own-mo.patch \
- file://0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch \
- file://0001-drop-FindPythonInstDir.cmake.patch \
- file://armarch.patch \
- file://0001-dnf-repo-Define-FNM_EXTMATCH-if-not-already-like-und.patch \
- file://0001-utils-utils.cpp-fix-compilation-with-musl.patch \
- "
-
-SRCREV = "56370b044f6efdfd14240e3dccac62b833dbe027"
-UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(?!4\.90)\d+(\.\d+)+)"
-
-DEPENDS = "glib-2.0 libsolv librepo rpm libmodulemd json-c swig-native util-linux"
-
-inherit cmake pkgconfig setuptools3-base gettext
-
-COMPATIBLE_HOST_libc-musl = 'null'
-
-EXTRA_OECMAKE = " -DPYTHON_INSTALL_DIR=${PYTHON_SITEPACKAGES_DIR} -DPYTHON_DESIRED=3 \
- -DWITH_GTKDOC=OFF -DWITH_MAN=OFF -DWITH_HTML=OFF \
- -DWITH_TESTS=OFF \
- -DWITH_ZCHUNK=OFF \
- "
-
-BBCLASSEXTEND = "native nativesdk"
-
-SKIP_RECIPE[libdnf] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'Does not build without package_rpm in PACKAGE_CLASSES due disabled rpm support in libsolv', d)}"
--
2.56.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [OE-core] [PATCH v10 2/3] dnf: Upgrade to 5.4.6.0
2026-10-15 14:23 ` [PATCH v10 2/3] dnf: Upgrade to 5.4.6.0 Adam Duskett
@ 2026-10-16 11:56 ` Mathieu Dubois-Briand
2026-10-16 13:14 ` Mathieu Dubois-Briand
1 sibling, 0 replies; 5+ messages in thread
From: Mathieu Dubois-Briand @ 2026-10-16 11:56 UTC (permalink / raw)
To: adam.duskett, openembedded-core
On Thu Oct 15, 2026 at 4:23 PM CEST, Adam Duskett via lists.openembedded.org wrote:
> Completely rewritten in C++, there are several changes needed
> to facilitate moving from DNF4 to DNF5. Below are some significant
> items to note:
>
> - Added a negative lookahead filter for the following warning if
> RPM_SIGN_PACKAGES != '1': "Warning: skipped OpenPGP checks"
> This warning is hard-coded and piped to stderr if gpg checks
> are disabled. However, most users do not sign their RPM packages
> and use dnf to simply construct the rootfs.
>
> - The "-v/--verbose" cli option is removed. As such, remove the argument
> everywhere it was called.[1]
>
> - the rpmverbosity cli option is replaced with --setopt=rpmverbosity
>
> - Change gpgcheck to pkg_gpgcheck as this is what the documentation
> recommends.[2]
>
> - --nogpgcheck is now --no-gpgchecks
>
> - --setopt=protect_running_kernel=False has to be set or else every dnf
> transaction complains that /boot/vmlinuz-${kernel_version} does not
> exist in /var/log/dnf5.log. There is an open issue on github[3] to enable
> the currently not-yet implemented `autocheck_running_kernel option`, but
> it has been open for quite some time and the protect_running_kernel
> option supresses the message.
>
> - Move --skip-broken to after the install argument as the global
> --skip-broken argument is removed.
>
> - /var/cache/dnf is replaced with /var/cache/libdnf5
>
> - Add `features += 'PACKAGECONFIG:append:pn-rpm = " sequoia"\n'`
> `features += 'PACKAGECONFIG:append:pn-librepo = " sequoia"\n'`
> to test_testimage_dnf as librepo currently does not work
> with gpgme.
>
> - Change `if line.startswith("Error in POSTIN scriptlet in rpm package"):`
> to `if "Error in %post scriptlet:" in line:` as dnf prints `>>>`
> charachters and the error string has changed.
>
> While DNF5 has many config options, unfortunately, the majority
> of them depends on sdbus-c++, which is not included in OE-core.
> However, the package is included in meta-openembedded, so it's
> best to include the PACKAGECONFIG options in the recipe and
> leave them off by default.
>
> 1: https://github.com/rpm-software-management/dnf5/issues/464
> 2: https://dnf5.readthedocs.io/en/latest/dnf5.conf.5.html
> 3: https://github.com/rpm-software-management/dnf5/issues/1255
>
> Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
> ---
Hi Adam,
Thanks for the new version. We do see build failures, probably when
building against musl:
ERROR: dnf-5.4.6.0-r0 do_compile: Execution of '/srv/pokybuild/yocto-worker/musl-qemux86-64/build/build/tmp/work/x86-64-v3-poky-linux-musl/dnf/5.4.6.0/temp/run.do_compile.405459' failed with exit code 1
...
| /srv/pokybuild/yocto-worker/musl-qemux86-64/build/build/tmp/work/x86-64-v3-poky-linux-musl/dnf/5.4.6.0/sources/dnf-5.4.6.0/libdnf5/utils/bootc.cpp: In function 'std::unique_ptr<json_object, int (*)(json_object*)> libdnf5::utils::bootc::get_bootc_status()':
| /srv/pokybuild/yocto-worker/musl-qemux86-64/build/build/tmp/work/x86-64-v3-poky-linux-musl/dnf/5.4.6.0/sources/dnf-5.4.6.0/libdnf5/utils/bootc.cpp:44:74: error: expected unqualified-id before '(' token
| 44 | std::string stderr_content(reinterpret_cast<const char *>(result.stderr.data()), result.stderr.size());
| | ^~~~~~
| /srv/pokybuild/yocto-worker/musl-qemux86-64/build/build/tmp/work/x86-64-v3-poky-linux-musl/dnf/5.4.6.0/sources/dnf-5.4.6.0/libdnf5/utils/bootc.cpp:44:97: error: expected unqualified-id before '(' token
| 44 | std::string stderr_content(reinterpret_cast<const char *>(result.stderr.data()), result.stderr.size());
| | ^~~~~~
| /srv/pokybuild/yocto-worker/musl-qemux86-64/build/build/tmp/work/x86-64-v3-poky-linux-musl/dnf/5.4.6.0/sources/dnf-5.4.6.0/libdnf5/utils/bootc.cpp:53:70: error: expected unqualified-id before '(' token
| 53 | std::string stdout_content(reinterpret_cast<const char *>(result.stdout.data()), result.stdout.size());
| | ^~~~~~
| /srv/pokybuild/yocto-worker/musl-qemux86-64/build/build/tmp/work/x86-64-v3-poky-linux-musl/dnf/5.4.6.0/sources/dnf-5.4.6.0/libdnf5/utils/bootc.cpp:53:93: error: expected unqualified-id before '(' token
| 53 | std::string stdout_content(reinterpret_cast<const char *>(result.stdout.data()), result.stdout.size());
| | ^~~~~~
...
https://autobuilder.yoctoproject.org/valkyrie/#/builders/3/builds/4895
https://autobuilder.yoctoproject.org/valkyrie/#/builders/6/builds/4863
Can you have a look at the issue?
Thanks,
Mathieu
--
Mathieu Dubois-Briand, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [OE-core] [PATCH v10 2/3] dnf: Upgrade to 5.4.6.0
2026-10-15 14:23 ` [PATCH v10 2/3] dnf: Upgrade to 5.4.6.0 Adam Duskett
2026-10-16 11:56 ` [OE-core] " Mathieu Dubois-Briand
@ 2026-10-16 13:14 ` Mathieu Dubois-Briand
1 sibling, 0 replies; 5+ messages in thread
From: Mathieu Dubois-Briand @ 2026-10-16 13:14 UTC (permalink / raw)
To: adam.duskett, openembedded-core
On Thu Oct 15, 2026 at 4:23 PM CEST, Adam Duskett via lists.openembedded.org wrote:
> Completely rewritten in C++, there are several changes needed
> to facilitate moving from DNF4 to DNF5. Below are some significant
> items to note:
>
> - Added a negative lookahead filter for the following warning if
> RPM_SIGN_PACKAGES != '1': "Warning: skipped OpenPGP checks"
> This warning is hard-coded and piped to stderr if gpg checks
> are disabled. However, most users do not sign their RPM packages
> and use dnf to simply construct the rootfs.
>
> - The "-v/--verbose" cli option is removed. As such, remove the argument
> everywhere it was called.[1]
>
> - the rpmverbosity cli option is replaced with --setopt=rpmverbosity
>
> - Change gpgcheck to pkg_gpgcheck as this is what the documentation
> recommends.[2]
>
> - --nogpgcheck is now --no-gpgchecks
>
> - --setopt=protect_running_kernel=False has to be set or else every dnf
> transaction complains that /boot/vmlinuz-${kernel_version} does not
> exist in /var/log/dnf5.log. There is an open issue on github[3] to enable
> the currently not-yet implemented `autocheck_running_kernel option`, but
> it has been open for quite some time and the protect_running_kernel
> option supresses the message.
>
> - Move --skip-broken to after the install argument as the global
> --skip-broken argument is removed.
>
> - /var/cache/dnf is replaced with /var/cache/libdnf5
>
> - Add `features += 'PACKAGECONFIG:append:pn-rpm = " sequoia"\n'`
> `features += 'PACKAGECONFIG:append:pn-librepo = " sequoia"\n'`
> to test_testimage_dnf as librepo currently does not work
> with gpgme.
>
> - Change `if line.startswith("Error in POSTIN scriptlet in rpm package"):`
> to `if "Error in %post scriptlet:" in line:` as dnf prints `>>>`
> charachters and the error string has changed.
>
> While DNF5 has many config options, unfortunately, the majority
> of them depends on sdbus-c++, which is not included in OE-core.
> However, the package is included in meta-openembedded, so it's
> best to include the PACKAGECONFIG options in the recipe and
> leave them off by default.
>
> 1: https://github.com/rpm-software-management/dnf5/issues/464
> 2: https://dnf5.readthedocs.io/en/latest/dnf5.conf.5.html
> 3: https://github.com/rpm-software-management/dnf5/issues/1255
>
> Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
> ---
Err, I believe this is also breaking libtoml build. I'm not sure to
really get how:
ERROR: libtoml11-1_4.4.0-r0 do_compile: Execution of '/srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/temp/run.do_compile.836786' failed with exit code 1
ERROR: Logfile of failure stored in: /srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/temp/log.do_compile.836786
...
| FAILED: [code=1] tests/CMakeFiles/test_value.dir/test_value.cpp.o
| /srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/recipe-sysroot-native/usr/bin/arm-oe-linux-gnueabi/arm-oe-linux-gnueabi-g++ --sysroot=/srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/recipe-sysroot -DTOML11_COMPILE_SOURCES -I/srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/sources/libtoml11-4.4.0/tests/extlib/doctest/doctest -I/srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/sources/libtoml11-4.4.0/include -mthumb -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a15 -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/recipe-sysroot -O2 -g -fcanon-prefix-map -ffile-prefix-map=/srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/sources/libtoml11-4.4.0=/usr/src/debug/libtoml11/4.4.0 -ffile-prefix-map=/srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/build=/usr/src/debug/libtoml11/4.4.0 -ffile-prefix-map=/srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/recipe-sysroot= -ffile-prefix-map=/srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/recipe-sysroot-native= -pipe -fvisibility-inlines-hidden -std=c++11 -Wall -Wextra -Wpedantic -Werror -Wsign-conversion -Wconversion -Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wdouble-promotion -Wundef -Wshadow -MD -MT tests/CMakeFiles/test_value.dir/test_value.cpp.o -MF tests/CMakeFiles/test_value.dir/test_value.cpp.o.d -o tests/CMakeFiles/test_value.dir/test_value.cpp.o -c /srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/sources/libtoml11-4.4.0/tests/test_value.cpp
| In file included from /srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/sources/libtoml11-4.4.0/include/toml11/types.hpp:9,
| from /srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/sources/libtoml11-4.4.0/include/toml11/skip.hpp:8,
| from /srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/sources/libtoml11-4.4.0/include/toml11/parser.hpp:10,
| from /srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/sources/libtoml11-4.4.0/tests/utility.hpp:6,
| from /srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/sources/libtoml11-4.4.0/tests/test_value.cpp:4:
| In member function 'toml::basic_value<TypeConcig>& toml::basic_value<TypeConcig>::operator=(const std::chrono::duration<_Rep, _Period>&) [with Rep = long long int; Period = std::ratio<3600>; TypeConfig = toml::type_config]',
| inlined from 'void test_ctors(T, U, FMT) [with toml::value_t TYPE = toml::value_t::local_time; T = std::chrono::duration<long long int, std::ratio<3600> >; U = std::chrono::duration<long long int>; FMT = toml::local_time_format_info]' at /srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/sources/libtoml11-4.4.0/tests/test_value.cpp:303:33:
| /srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/sources/libtoml11-4.4.0/include/toml11/value.hpp:905:13: error: '((unsigned char*)((char*)&x_assign_different_type + offsetof(toml::value, toml::basic_value<toml::type_config>::<unnamed>)))[12]' may be used uninitialized [-Werror=maybe-uninitialized]
| 905 | fmt = this->as_local_time_fmt();
| | ^~~
| /srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/sources/libtoml11-4.4.0/tests/test_value.cpp: In function 'void test_ctors(T, U, FMT) [with toml::value_t TYPE = toml::value_t::local_time; T = std::chrono::duration<long long int, std::ratio<3600> >; U = std::chrono::duration<long long int>; FMT = toml::local_time_format_info]':
| /srv/pokybuild/yocto-worker/qemuarm-oecore/build/build/tmp/work/cortexa15t2hf-neon-oe-linux-gnueabi/libtoml11/4.4.0/sources/libtoml11-4.4.0/tests/test_value.cpp:302:21: note: 'x_assign_different_type' declared here
| 302 | toml::value x_assign_different_type(true);
| | ^~~~~~~~~~~~~~~~~~~~~~~
https://autobuilder.yoctoproject.org/valkyrie/#/builders/40/builds/4814
https://autobuilder.yoctoproject.org/valkyrie/#/builders/16/builds/4874
I only saw that on arm 32 bits right now.
Can you have a look at it?
Thanks,
Mathieu
--
Mathieu Dubois-Briand, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-10-16 13:15 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-15 14:23 [PATCH v10 1/3] rpm: add 0017-critically-fail-if-post-install-fails.patch Adam Duskett
2026-10-15 14:23 ` [PATCH v10 2/3] dnf: Upgrade to 5.4.6.0 Adam Duskett
2026-10-16 11:56 ` [OE-core] " Mathieu Dubois-Briand
2026-10-16 13:14 ` Mathieu Dubois-Briand
2026-10-15 14:23 ` [PATCH v10 3/3] libdnf: remove recipe Adam Duskett
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.