commit:     f477c32907afde160d20ebdea161ea202d9cfeac
Author:     Andrew Ammerlaan <andrewammerlaan <AT> gentoo <DOT> org>
AuthorDate: Tue Jun 25 14:12:39 2024 +0000
Commit:     Andrew Ammerlaan <andrewammerlaan <AT> gentoo <DOT> org>
CommitDate: Sat Jun 29 08:36:19 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f477c329

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 <AT> gentoo.org>

 eclass/dist-kernel-utils.eclass | 39 ++++++++++++++++++++++++++++++------
 eclass/kernel-install.eclass    | 44 +++++++++--------------------------------
 2 files changed, 42 insertions(+), 41 deletions(-)

diff --git a/eclass/dist-kernel-utils.eclass b/eclass/dist-kernel-utils.eclass
index 13137f8c863c..4bc3fab44aae 100644
--- 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,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

diff --git a/eclass/kernel-install.eclass b/eclass/kernel-install.eclass
index f512d815fe09..77570a905ce1 100644
--- a/eclass/kernel-install.eclass
+++ b/eclass/kernel-install.eclass
@@ -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

Reply via email to