diff --git a/34154.patch b/34154.patch
new file mode 100644
index 0000000..acab80c
--- /dev/null
+++ b/34154.patch
@@ -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')))
diff --git a/split-files.py b/split-files.py
index 3f66ada..51400fd 100644
--- a/split-files.py
+++ b/split-files.py
@@ -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)
diff --git a/systemd.spec b/systemd.spec
index 456f4f9..614db47 100644
--- a/systemd.spec
+++ b/systemd.spec
@@ -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