>>>>> On Wed, 26 Jun 2024, Andrew Nowa Ammerlaan wrote: > --- a/eclass/dist-kernel-utils.eclass > +++ b/eclass/dist-kernel-utils.eclass > @@ -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,40 @@ 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 :; do IMHO "while true" would be better readable. > + 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 > + # Try to read dist-kernel identifier to more accurately instruct users > + local kernel > + local k_id_file=${image%$(dist-kernel_get_image_path)}/dist-kernel > + if [[ -f ${k_id_file} ]]; then > + kernel=\'\=$(<${k_id_file})\' > + else > + # Fallback string if identifier is not found > + kernel=":" > + 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 > diff --git a/eclass/kernel-install.eclass b/eclass/kernel-install.eclass > index f512d815fe098..a572597bc6fa3 100644 > --- a/eclass/kernel-install.eclass > +++ b/eclass/kernel-install.eclass > @@ -18,8 +18,6 @@ > # 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. > > # @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