>>>>> 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="<name of your kernel pakcage>:<kernel version>"
> +             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

Attachment: signature.asc
Description: PGP signature

Reply via email to