kernel-install.eclass: move mount-boot check to dist-kernel-utils.eclass

ebuilds and eclasses using dist-kernel_reinstall_initramfs should also
have the check for mounted /boot and ESP. We can do this safely via
mount-boot-utils.eclass which does not export any phases.

Signed-off-by: Andrew Ammerlaan <andrewammerlaan@gentoo.org>
This commit is contained in:
Andrew Ammerlaan
2024-06-25 16:12:39 +02:00
parent e598ba3fe1
commit f477c32907
2 changed files with 42 additions and 41 deletions

View File

@@ -26,7 +26,7 @@ case ${EAPI} in
*) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
esac
inherit toolchain-funcs
inherit mount-boot-utils toolchain-funcs
# @FUNCTION: dist-kernel_get_image_path
# @DESCRIPTION:
@@ -79,11 +79,38 @@ dist-kernel_install_kernel() {
local image=${2}
local map=${3}
ebegin "Installing the kernel via installkernel"
# note: .config is taken relatively to System.map;
# initrd relatively to bzImage
ARCH=$(tc-arch-kernel) installkernel "${version}" "${image}" "${map}"
eend ${?} || die -n "Installing the kernel failed"
local success=
# not an actual loop but allows error handling with 'break'
while true; do
nonfatal mount-boot_check_status || break
ebegin "Installing the kernel via installkernel"
# note: .config is taken relatively to System.map;
# initrd relatively to bzImage
ARCH=$(tc-arch-kernel) installkernel "${version}" "${image}" "${map}" || break
eend ${?} || die -n "Installing the kernel failed"
success=1
break
done
if [[ ! ${success} ]]; then
# Fallback string, if the identifier file is not found
local kernel="<name of your kernel pakcage>:<kernel version>"
# Try to read dist-kernel identifier to more accurately instruct users
local k_id_file=${image%$(dist-kernel_get_image_path)}/dist-kernel
if [[ -f ${k_id_file} ]]; then
kernel=\'\=$(<${k_id_file})\'
fi
eerror
eerror "The kernel was not deployed successfully. Inspect the failure"
eerror "in the logs above and once you resolve the problems please"
eerror "run the equivalent of the following command to try again:"
eerror
eerror " emerge --config ${kernel}"
die "Kernel install failed, please fix the problems and run emerge --config"
fi
}
# @FUNCTION: dist-kernel_reinstall_initramfs

View File

@@ -17,9 +17,7 @@
# /usr/src/linux-${PV} containing the kernel image in its standard
# location and System.map.
#
# The eclass exports src_test, pkg_postinst and pkg_postrm.
# Additionally, the inherited mount-boot eclass exports pkg_pretend.
# It also stubs out pkg_preinst and pkg_prerm defined by mount-boot.
# The eclass exports src_test, pkg_preinst, pkg_postinst and pkg_postrm.
# @ECLASS_VARIABLE: KERNEL_IUSE_GENERIC_UKI
# @PRE_INHERIT
@@ -50,7 +48,7 @@ case ${EAPI} in
*) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
esac
inherit dist-kernel-utils mount-boot multiprocessing toolchain-funcs
inherit dist-kernel-utils mount-boot-utils multiprocessing toolchain-funcs
SLOT="${PV}"
IUSE="+initramfs test"
@@ -526,6 +524,10 @@ kernel-install_test() {
kernel-install_pkg_pretend() {
debug-print-function ${FUNCNAME} "${@}"
# Check, but don't die because we can fix the problem and then
# emerge --config ... to re-run installation.
nonfatal mount-boot_check_status
if ! has_version -d sys-kernel/linux-firmware; then
ewarn "sys-kernel/linux-firmware not found installed on your system."
ewarn "This package provides various firmware files that may be needed"
@@ -665,27 +667,8 @@ kernel-install_install_all() {
fi
fi
local success=
# not an actual loop but allows error handling with 'break'
while :; do
nonfatal mount-boot_check_status || break
nonfatal dist-kernel_install_kernel "${module_ver}" \
"${kernel_dir}/${image_path}" "${kernel_dir}/System.map" || break
success=1
break
done
if [[ ! ${success} ]]; then
eerror
eerror "The kernel files were copied to disk successfully but the kernel"
eerror "was not deployed successfully. Once you resolve the problems,"
eerror "please run the equivalent of the following command to try again:"
eerror
eerror " emerge --config ${CATEGORY}/${PN}:${SLOT}"
die "Kernel install failed, please fix the problems and run emerge --config ${CATEGORY}/${PN}:${SLOT}"
fi
dist-kernel_install_kernel "${module_ver}" "${kernel_dir}/${image_path}" \
"${kernel_dir}/System.map"
}
# @FUNCTION: kernel-install_pkg_postinst
@@ -718,15 +701,6 @@ kernel-install_pkg_postinst() {
fi
}
# @FUNCTION: kernel-install_pkg_prerm
# @DESCRIPTION:
# Stub out mount-boot.eclass.
kernel-install_pkg_prerm() {
debug-print-function ${FUNCNAME} "${@}"
# (no-op)
}
# @FUNCTION: kernel-install_pkg_postrm
# @DESCRIPTION:
# Clean up the generated initramfs from the removed kernel directory.
@@ -774,5 +748,5 @@ kernel-install_compress_modules() {
fi
EXPORT_FUNCTIONS src_test pkg_preinst pkg_postinst pkg_prerm pkg_postrm
EXPORT_FUNCTIONS src_test pkg_preinst pkg_postinst pkg_postrm
EXPORT_FUNCTIONS pkg_config pkg_pretend