summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2021-01-13 15:15:54 +0100
committerMichał Górny <mgorny@gentoo.org>2021-01-16 10:53:08 +0100
commit9201c6c58e9a8b9dd184a4d2445b4144cf22df8f (patch)
tree6be009943c9064f9740505dde2859b4dc0ec5b9a
parentkernel-install.eclass: Improve failed install error messages (diff)
downloadgentoo-9201c6c58e9a8b9dd184a4d2445b4144cf22df8f.tar.gz
gentoo-9201c6c58e9a8b9dd184a4d2445b4144cf22df8f.tar.bz2
gentoo-9201c6c58e9a8b9dd184a4d2445b4144cf22df8f.zip
dist-kernel-utils.eclass: Support dracut's uefi=yes option
Support dracut's uefi=yes configuration option that creates a combined UEFI stub, kernel and initramfs in a single UEFI executable. If such an output is detected, install it in place of the actual kernel image and stub out the duplicate initrd to save space. Signed-off-by: Michał Górny <mgorny@gentoo.org>
-rw-r--r--eclass/dist-kernel-utils.eclass31
1 files changed, 30 insertions, 1 deletions
diff --git a/eclass/dist-kernel-utils.eclass b/eclass/dist-kernel-utils.eclass
index d65dc0924b40..9ab65b097b32 100644
--- a/eclass/dist-kernel-utils.eclass
+++ b/eclass/dist-kernel-utils.eclass
@@ -41,8 +41,20 @@ dist-kernel_build_initramfs() {
local output=${1}
local version=${2}
+ local rel_image_path=$(dist-kernel_get_image_path)
+ local image=${output%/*}/${rel_image_path##*/}
+
+ local args=(
+ --force
+ # if uefi=yes is used, dracut needs to locate the kernel image
+ --kernel-image "${image}"
+
+ # positional arguments
+ "${output}" "${version}"
+ )
+
ebegin "Building initramfs via dracut"
- dracut --force "${output}" "${version}"
+ dracut "${args[@]}"
eend ${?} || die -n "Building initramfs failed"
}
@@ -85,6 +97,23 @@ dist-kernel_install_kernel() {
local image=${2}
local map=${3}
+ # if dracut is used in uefi=yes mode, initrd will actually
+ # be a combined kernel+initramfs UEFI executable. we can easily
+ # recognize it by PE magic (vs cpio for a regular initramfs)
+ local initrd=${image%/*}/initrd
+ local magic
+ [[ -s ${initrd} ]] && read -n 2 magic < "${initrd}"
+ if [[ ${magic} == MZ ]]; then
+ einfo "Combined UEFI kernel+initramfs executable found"
+ # install the combined executable in place of kernel
+ image=${initrd}.uefi
+ mv "${initrd}" "${image}" || die
+ # put an empty file in place of initrd. installing a duplicate
+ # file would waste disk space, and removing it entirely provokes
+ # kernel-install to regenerate it via dracut.
+ > "${initrd}"
+ fi
+
ebegin "Installing the kernel via installkernel"
# note: .config is taken relatively to System.map;
# initrd relatively to bzImage