diff options
author | Michał Górny <mgorny@gentoo.org> | 2021-01-13 15:15:54 +0100 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2021-01-16 10:53:08 +0100 |
commit | 9201c6c58e9a8b9dd184a4d2445b4144cf22df8f (patch) | |
tree | 6be009943c9064f9740505dde2859b4dc0ec5b9a | |
parent | kernel-install.eclass: Improve failed install error messages (diff) | |
download | gentoo-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.eclass | 31 |
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 |