From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 4C43315834D for ; Sat, 29 Jun 2024 08:39:36 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 9242A2BC016; Sat, 29 Jun 2024 08:39:35 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 735272BC016 for ; Sat, 29 Jun 2024 08:39:35 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 63D7433BF39 for ; Sat, 29 Jun 2024 08:39:34 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id EF3A41CE5 for ; Sat, 29 Jun 2024 08:39:32 +0000 (UTC) From: "Andrew Ammerlaan" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Andrew Ammerlaan" Message-ID: <1719650179.f477c32907afde160d20ebdea161ea202d9cfeac.andrewammerlaan@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: eclass/ X-VCS-Repository: repo/gentoo X-VCS-Files: eclass/dist-kernel-utils.eclass eclass/kernel-install.eclass X-VCS-Directories: eclass/ X-VCS-Committer: andrewammerlaan X-VCS-Committer-Name: Andrew Ammerlaan X-VCS-Revision: f477c32907afde160d20ebdea161ea202d9cfeac X-VCS-Branch: master Date: Sat, 29 Jun 2024 08:39:32 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: d073f344-8b1e-4ea6-b8f2-8c477e81f13e X-Archives-Hash: 6b0a81097270054ccb9a49cf6c26a0c0 commit: f477c32907afde160d20ebdea161ea202d9cfeac Author: Andrew Ammerlaan gentoo org> AuthorDate: Tue Jun 25 14:12:39 2024 +0000 Commit: Andrew Ammerlaan gentoo 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 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=":" + # 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