Always build ukify package

Even on non-uefi architectures, ukify can be used to build UKIs for
UEFI images. For example, mkosi can use it to build UKIs on s390x.
To enable this use case, let's always build ukify, but with a conditional
dependency on systemd-boot only on arches that support UEFI.
This commit is contained in:
Daan De Meyer 2024-08-28 11:57:41 +02:00 • committed by Zbigniew Jędrzejewski-Szmek
commit a67221c3f0
3 changed files with 40 additions and 7 deletions

27
34154.patch Normal file
View file

@ -0,0 +1,27 @@
From e3486e1494ab4bc23df39cae8b4bda6182265408 Mon Sep 17 00:00:00 2001
From: Daan De Meyer <daan.j.demeyer@gmail.com>
Date: Wed, 28 Aug 2024 14:08:30 +0200
Subject: [PATCH] ukify: Skip test on architectures without UEFI
---
src/ukify/test/test_ukify.py | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/ukify/test/test_ukify.py b/src/ukify/test/test_ukify.py
index bbd26c0d42343..a08996cb55cf6 100755
--- a/src/ukify/test/test_ukify.py
+++ b/src/ukify/test/test_ukify.py
@@ -45,6 +45,13 @@
sys.path.append(os.path.dirname(__file__) + '/..')
import ukify
+# Skip if we're running on an architecture that does not use UEFI.
+try:
+ ukify.guess_efi_arch()
+except ValueError as e:
+ print(str(e), file=sys.stderr)
+ sys.exit(77)
+
build_root = os.getenv('PROJECT_BUILD_ROOT')
try:
slow_tests = bool(int(os.getenv('SYSTEMD_SLOW_TESTS', '1')))

View file

@ -260,6 +260,6 @@ for file in files(buildroot):
if [print(f'ERROR: no file names were written to {o.name}')
for name, o in outputs.items()
if (o.tell() == 0 and
not (no_bootloader and name in ('ukify', 'boot')))
not (no_bootloader and name == 'boot'))
]:
sys.exit(1)

View file

@ -120,6 +120,9 @@ Patch0010: https://github.com/systemd/systemd/pull/26494.patch
# Requested in https://bugzilla.redhat.com/show_bug.cgi?id=2298422
Patch0011: https://github.com/systemd/systemd/pull/33738.patch
# Make test-ukify skip itself on architectures without UEFI.
Patch0012: https://github.com/systemd/systemd/pull/34154.patch
# Those are downstream-only patches, but we don't want them in packit builds:
# https://bugzilla.redhat.com/show_bug.cgi?id=2251843
Patch0491: https://github.com/systemd/systemd/pull/30846.patch
@ -483,12 +486,16 @@ This package also provides systemd-timesyncd, a network time protocol daemon.
It also contains tools to manage encrypted home areas and secrets bound to the
machine, and to create or grow partitions and make file systems automatically.
%if 0%{?want_bootloader}
%package ukify
Summary: Tool to build Unified Kernel Images
Requires: %{name} = %{version}-%{release}
Requires: systemd-boot
Requires: (systemd-boot if %{shrink:(
filesystem(x86-32) or
filesystem(x86-64) or
filesystem(aarch64) or
filesystem(riscv64)
)})
Requires: python3dist(pefile)
%if 0%{?fedora}
Requires: python3dist(zstd)
@ -512,6 +519,7 @@ This package provides ukify, a script that combines a kernel image, an initrd,
with a command line, and possibly PCR measurements and other metadata, into a
Unified Kernel Image (UKI).
%if 0%{?want_bootloader}
%package boot-unsigned
Summary: UEFI boot manager (unsigned version)
@ -826,10 +834,8 @@ CONFIGURE_OPTS=(
# For now, let's build the bootloader in the same places where we
# built with gnu-efi. Later on, we might want to extend coverage, but
# considering that that support is untested, let's not do this now.
# Note, ukify requires bootloader, let's also explicitly enable/disable it
# here for https://github.com/systemd/systemd/pull/24175.
-Dbootloader=%[%{?want_bootloader}?"enabled":"disabled"]
-Dukify=%[%{?want_bootloader}?"enabled":"disabled"]
-Dukify=enabled
)
%if %{without lto}
@ -1265,8 +1271,8 @@ fi
%files udev -f .file-list-udev
%if 0%{?want_bootloader}
%files ukify -f .file-list-ukify
%if 0%{?want_bootloader}
%files boot-unsigned -f .file-list-boot
%endif