Skip to content

Commit

Permalink
eclass/(dist-)kernel-*.eclass: drop installkernel-gentoo-7
Browse files Browse the repository at this point in the history
because we drop the generation of the initrd/uki here
we can remove KERNEL_IUSE_SECUREBOOT since this is now
exactly the same as KERNEL_IUSE_MODULES_SIGN

Signed-off-by: Andrew Ammerlaan <[email protected]>
  • Loading branch information
Nowa-Ammerlaan committed Jan 7, 2024
1 parent 34cf0a8 commit a42e984
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 113 deletions.
78 changes: 0 additions & 78 deletions eclass/dist-kernel-utils.eclass
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,6 @@
# This eclass provides various utility functions related to Distribution
# Kernels.

# @ECLASS_VARIABLE: KERNEL_IUSE_SECUREBOOT
# @PRE_INHERIT
# @DEFAULT_UNSET
# @DESCRIPTION:
# If set to a non-null value, inherits secureboot.eclass
# and allows signing of generated kernel images.

# @ECLASS_VARIABLE: KERNEL_EFI_ZBOOT
# @DEFAULT_UNSET
# @DESCRIPTION:
Expand All @@ -35,43 +28,6 @@ esac

inherit toolchain-funcs

if [[ ${KERNEL_IUSE_SECUREBOOT} ]]; then
inherit secureboot
fi

# @FUNCTION: dist-kernel_build_initramfs
# @USAGE: <output> <version>
# @DESCRIPTION:
# Build an initramfs for the kernel. <output> specifies the absolute
# path where initramfs will be created, while <version> specifies
# the kernel version, used to find modules.
#
# Note: while this function uses dracut at the moment, other initramfs
# variants may be supported in the future.
dist-kernel_build_initramfs() {
debug-print-function ${FUNCNAME} "${@}"

[[ ${#} -eq 2 ]] || die "${FUNCNAME}: invalid arguments"
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 "${args[@]}"
eend ${?} || die -n "Building initramfs failed"
}

# @FUNCTION: dist-kernel_get_image_path
# @DESCRIPTION:
# Get relative kernel image path specific to the current ${ARCH}.
Expand Down Expand Up @@ -123,26 +79,6 @@ dist-kernel_install_kernel() {
local image=${2}
local map=${3}

if has_version "<=sys-kernel/installkernel-gentoo-7"; then
# 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%/*}/uki.efi
mv "${initrd}" "${image}" || die

if [[ ${KERNEL_IUSE_SECUREBOOT} ]]; then
# Ensure the uki is signed if dracut hasn't already done so.
secureboot_sign_efi_file "${image}"
fi
fi
fi

ebegin "Installing the kernel via installkernel"
# note: .config is taken relatively to System.map;
# initrd relatively to bzImage
Expand All @@ -159,10 +95,6 @@ dist-kernel_install_kernel() {
# The function will determine whether <kernel-dir> is actually
# a dist-kernel, and whether initramfs was used.
#
# With sys-kernel/installkernel-systemd, or version 8 or greater of
# sys-kernel/installkernel-gentoo, the generation of the initrd via dracut
# is handled by kernel-install instead.
#
# This function is to be used in pkg_postinst() of ebuilds installing
# kernel modules that are included in the initramfs.
dist-kernel_reinstall_initramfs() {
Expand All @@ -180,16 +112,6 @@ dist-kernel_reinstall_initramfs() {
return
fi

if has_version "<=sys-kernel/installkernel-gentoo-7"; then
local initramfs_path=${image_path%/*}/initrd
if [[ ! -f ${initramfs_path} && ! -f ${initramfs_path%/*}/uki.efi ]]; then
einfo "No initramfs or uki found at ${image_path}"
return
fi

dist-kernel_build_initramfs "${initramfs_path}" "${ver}"
fi

dist-kernel_install_kernel "${ver}" "${image_path}" \
"${kernel_dir}/System.map"
}
Expand Down
13 changes: 5 additions & 8 deletions eclass/kernel-build.eclass
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,6 @@ _KERNEL_BUILD_ECLASS=1

PYTHON_COMPAT=( python3_{10..12} )
if [[ ${KERNEL_IUSE_MODULES_SIGN} ]]; then
# If we have enabled module signing IUSE
# then we can also enable secureboot IUSE
KERNEL_IUSE_SECUREBOOT=1
inherit secureboot
fi

Expand All @@ -56,10 +53,10 @@ IUSE="+strip"
# @PRE_INHERIT
# @DEFAULT_UNSET
# @DESCRIPTION:
# If set to a non-null value, adds IUSE=modules-sign and required
# logic to manipulate the kernel config while respecting the
# MODULES_SIGN_HASH, MODULES_SIGN_CERT, and MODULES_SIGN_KEY user
# variables.
# If set to a non-null value, inherits secureboot.eclass, adds
# IUSE=modules-sign and required logic to manipulate the kernel
# config while respecting the MODULES_SIGN_HASH, MODULES_SIGN_CERT,
# and MODULES_SIGN_KEY user variables.

# @ECLASS_VARIABLE: MODULES_SIGN_HASH
# @USER_VARIABLE
Expand Down Expand Up @@ -381,7 +378,7 @@ kernel-build_src_install() {
dosym "../../../${kernel_dir}" "/lib/modules/${module_ver}/build"
dosym "../../../${kernel_dir}" "/lib/modules/${module_ver}/source"

if [[ ${KERNEL_IUSE_SECUREBOOT} ]]; then
if [[ ${KERNEL_IUSE_MODULES_SIGN} ]]; then
secureboot_sign_efi_file "${image}"
fi

Expand Down
39 changes: 12 additions & 27 deletions eclass/kernel-install.eclass
Original file line number Diff line number Diff line change
Expand Up @@ -63,16 +63,15 @@ RESTRICT+="
_IDEPEND_BASE="
!initramfs? (
|| (
sys-kernel/installkernel-gentoo
sys-kernel/installkernel-systemd
>=sys-kernel/installkernel-gentoo-8
>=sys-kernel/installkernel-systemd-2-r5
)
)
initramfs? (
>=sys-kernel/dracut-059-r4
|| (
<=sys-kernel/installkernel-gentoo-7
>=sys-kernel/installkernel-gentoo-8[dracut(-)]
sys-kernel/installkernel-systemd
>=sys-kernel/installkernel-systemd-2-r5
)
)
"
Expand Down Expand Up @@ -543,14 +542,11 @@ kernel-install_pkg_pretend() {
ewarn "for your hardware to work. If in doubt, it is recommended"
ewarn "to pause or abort the build process and install it before"
ewarn "resuming."

if use initramfs; then
elog
elog "If you decide to install linux-firmware later, you can rebuild"
elog "the initramfs via issuing a command equivalent to:"
elog
elog " emerge --config ${CATEGORY}/${PN}:${SLOT}"
fi
elog
elog "If you decide to install linux-firmware later, you can rebuild"
elog "the initramfs via issuing a command equivalent to:"
elog
elog " emerge --config ${CATEGORY}/${PN}:${SLOT}"
fi

if ! use initramfs && ! has_version "${CATEGORY}/${PN}[-initramfs]"; then
Expand Down Expand Up @@ -633,13 +629,9 @@ kernel-install_extract_from_uki() {
# @FUNCTION: kernel-install_install_all
# @USAGE: <ver>
# @DESCRIPTION:
# Build an initramfs for the kernel if required and install the kernel.
# This is called from pkg_postinst() and pkg_config(). <ver> is the
# full kernel version.
#
# With sys-kernel/installkernel-systemd, or version 8 or greater of
# sys-kernel/installkernel-gentoo, the generation of the initrd via dracut
# is handled by kernel-install instead.
# Install the kernel, initramfs/uki generation is optionally handled by
# installkernel. This is called from pkg_postinst() and pkg_config().
# <ver> is the full kernel version.
kernel-install_install_all() {
debug-print-function ${FUNCNAME} "${@}"

Expand Down Expand Up @@ -673,13 +665,6 @@ kernel-install_install_all() {
while :; do
nonfatal mount-boot_check_status || break

if use initramfs && has_version "<=sys-kernel/installkernel-gentoo-7"; then
# putting it alongside kernel image as 'initrd' makes
# kernel-install happier
nonfatal dist-kernel_build_initramfs \
"${image_dir}/initrd" "${module_ver}" || break
fi

nonfatal dist-kernel_install_kernel "${module_ver}" \
"${image_path}" "${kernel_dir}/System.map" || break

Expand Down Expand Up @@ -743,7 +728,7 @@ kernel-install_pkg_prerm() {
kernel-install_pkg_postrm() {
debug-print-function ${FUNCNAME} "${@}"

if [[ -z ${ROOT} && ! ${KERNEL_IUSE_GENERIC_UKI} ]] && use initramfs; then
if [[ -z ${ROOT} && ! ${KERNEL_IUSE_GENERIC_UKI} ]]; then
local dir_ver=${PV}${KV_LOCALVERSION}
local kernel_dir=${EROOT}/usr/src/linux-${dir_ver}
local image_path=$(dist-kernel_get_image_path)
Expand Down

0 comments on commit a42e984

Please sign in to comment.