Package Details: dracut-ukify 9-5

Git Clone URL: https://aur.archlinux.org/dracut-ukify.git (read-only, click to copy)
Package Base: dracut-ukify
Description: Integration layer for dracut and systemd's ukify tool for Arch Linux
Upstream URL: https://aur.archlinux.org/packages/dracut-ukify
Licenses: MIT
Conflicts: dracut-hook-uefi, dracut-uefi-hook
Provides: dracut-hook
Submitter: Prototik
Maintainer: Prototik
Last Packager: Prototik
Votes: 10
Popularity: 0.60
First Submitted: 2023-02-20 21:54 (UTC)
Last Updated: 2024-08-19 16:31 (UTC)

Latest Comments

« First ‹ Previous 1 2 3 4

jonas-w commented on 2023-05-02 14:15 (UTC) (edited on 2023-05-02 14:15 (UTC) by jonas-w)

@Prototik Thanks for the implementation, seems to work!

One thing, bootctl set-default does not work, when someone doesn't use systemd-boot. This currently prints an error message when generating the UKI. That's why I removed it in my patch. But I don't know if there is a good non hacky way to set it automatically (if the path is dynamic).

Prototik commented on 2023-05-02 12:09 (UTC)

@jonas-w latest update adds option to customize UKI image location, now you can use this package without custom patches to store UKI for UEFI default location, can you try it and give some feedback if you wish?

jonas-w commented on 2023-04-15 13:44 (UTC)

If someone wants to use the EFI directly without systemd-boot, I created a patch which installs the efi to EFI/BOOT/BOOTX64.efi if you set it as default kernel package otherwise to EFI/BOOT/BOOTX64-$pkgname.efi. Feel free to use this, but with no warranty.

--- /usr/bin/dracut-ukify   2023-04-15 13:49:56.000000000 +0200
+++ dracut-ukify    2023-04-15 15:43:31.073418694 +0200
@@ -79,7 +79,13 @@
           path="$(grep -lE "^${pkgbase}\$" /usr/lib/modules/*/pkgbase)"
           version=$(basename "${path%/pkgbase}")
           for variant in "${!ukify_variants[@]}"; do
-            IMAGE="${ESP_PATH}/EFI/Linux/$(variant_name "linux-$version-$MACHINE_ID-$BUILD_ID" "$variant").efi"
+
+            if [[ "$pkgbase" == "$default_kernel_package" ]]; then
+              IMAGE="${ESP_PATH}/EFI/BOOT/BOOTX64.efi"
+            else
+              IMAGE="${ESP_PATH}/EFI/BOOT/BOOTX64-${pkgbase}.efi"
+            fi
+            #IMAGE="${ESP_PATH}/EFI/Linux/$(variant_name "linux-$version-$MACHINE_ID-$BUILD_ID" "$variant").efi"
             if [ -f "$IMAGE" ]; then
               echo "==> Removing $IMAGE..."
               rm -f "$IMAGE"
@@ -127,7 +133,14 @@
   vmlinuz="/usr/lib/modules/${version}/vmlinuz"

   for variant in "${!ukify_variants[@]}"; do
-    image="${ESP_PATH}/EFI/Linux/$(variant_name "linux-${version}-${MACHINE_ID}-${BUILD_ID}" "$variant").efi"
+
+
+    if [[ "$pkgbase" == "$default_kernel_package" ]]; then
+      image="${ESP_PATH}/EFI/BOOT/BOOTX64.efi"
+    else
+      image="${ESP_PATH}/EFI/BOOT/BOOTX64-${pkgbase}.efi"
+    fi
+    #image="${ESP_PATH}/EFI/Linux/$(variant_name "linux-${version}-${MACHINE_ID}-${BUILD_ID}" "$variant").efi"
     version_name=$(variant_name "$version" "$variant")

     read -r pkgbase < "$path"
@@ -135,7 +148,7 @@
     initrd=$(mktemp)

     echo "==> Building initrd image $kernel ($version_name)"
-    dracut -q -f --no-hostonly-cmdline --kver "${version}" ${ukify_variants[$variant]} "$initrd"
+    dracut -f --no-hostonly-cmdline --kver "${version}" ${ukify_variants[$variant]} "$initrd"

     os_release=$(mktemp)
     grep -v '^BUILD_ID=' /etc/os-release > "$os_release"
@@ -156,14 +169,6 @@
     rm "$initrd"
     rm "$os_release"
   done
-
-  # Mark image as default if needed
-  if [[ "$pkgbase" == "$default_kernel_package" ]]; then
-    echo "===> Mark linux image $kernel ($version) as default"
-    bootctl set-default "linux-${version}-${MACHINE_ID}-${BUILD_ID}.efi" || {
-       echo "==> Unable to mark linux image $kernel ($version) as default due to error" >&2
-    }
-  fi
 }

 for kernel in "${!kernels[@]}"; do