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 46F93158020 for ; Wed, 26 Oct 2022 11:32:59 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 07B55E0951; Wed, 26 Oct 2022 11:31:49 +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)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id B730FE094F for ; Wed, 26 Oct 2022 11:31:48 +0000 (UTC) From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= To: gentoo-dev@lists.gentoo.org Cc: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Subject: [gentoo-dev] [PATCH 3/4] kernel-install.eclass: Account for PV/KV mismatch Date: Wed, 26 Oct 2022 13:31:39 +0200 Message-Id: <20221026113140.3213-4-mgorny@gentoo.org> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221026113140.3213-1-mgorny@gentoo.org> References: <20221026113140.3213-1-mgorny@gentoo.org> Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Archives-Salt: 65c1fe78-01a9-48be-a78f-75ba8a7fe8d4 X-Archives-Hash: 6aa69079b4f8738132f89332a49a1901 Do not assume PV and kernel version must always match. Use PV for kernel install directory (i.e. /usr/src/linux) but get the release from the kernel build directory for the module directory. Update preinst version check to account for live ebuilds. Signed-off-by: Michał Górny --- eclass/kernel-install.eclass | 67 ++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 26 deletions(-) diff --git a/eclass/kernel-install.eclass b/eclass/kernel-install.eclass index dc77cb514b1a..9aece24bbff5 100644 --- a/eclass/kernel-install.eclass +++ b/eclass/kernel-install.eclass @@ -403,24 +403,34 @@ kernel-install_src_test() { kernel-install_pkg_preinst() { debug-print-function ${FUNCNAME} "${@}" - local ver="${PV}${KV_LOCALVERSION}" - local kdir="${ED}/usr/src/linux-${ver}" - local relfile="${kdir}/include/config/kernel.release" - [[ ! -d ${kdir} ]] && die "Kernel directory ${kdir} not installed!" - [[ ! -f ${relfile} ]] && die "Release file ${relfile} not installed!" - local release="$(<"${relfile}")" - if [[ ${release} != ${PV}* ]]; then - eerror "Kernel release mismatch!" - eerror " expected (PV): ${PV}*" - eerror " found: ${release}" - eerror "Please verify that you are applying the correct patches." - die "Kernel release mismatch (${release} instead of ${PV}*)" + local dir_ver=${PV}${KV_LOCALVERSION} + local kernel_dir=${ED}/usr/src/linux-${dir_ver} + local relfile=${kernel_dir}/include/config/kernel.release + [[ ! -d ${kernel_dir} ]] && + die "Kernel directory ${kernel_dir} not installed!" + [[ ! -f ${relfile} ]] && + die "Release file ${relfile} not installed!" + local release + release="$(<"${relfile}")" || die + + # perform the version check for release ebuilds only + if [[ ${PV} != *9999 ]]; then + local expected_ver=$(dist-kernel_PV_to_KV "${PV}") + + if [[ ${release} != ${expected_ver}* ]]; then + eerror "Kernel release mismatch!" + eerror " expected (PV): ${expected_ver}*" + eerror " found: ${release}" + eerror "Please verify that you are applying the correct patches." + die "Kernel release mismatch (${release} instead of ${expected_ver}*)" + fi fi + if [[ -L ${EROOT}/lib && ${EROOT}/lib -ef ${EROOT}/usr/lib ]]; then # Adjust symlinks for merged-usr. - rm "${ED}/lib/modules/${ver}"/{build,source} || die - dosym "../../../src/linux-${ver}" "/usr/lib/modules/${ver}/build" - dosym "../../../src/linux-${ver}" "/usr/lib/modules/${ver}/source" + rm "${ED}/lib/modules/${release}"/{build,source} || die + dosym "../../../src/linux-${dir_ver}" "/usr/lib/modules/${release}/build" + dosym "../../../src/linux-${dir_ver}" "/usr/lib/modules/${release}/source" fi } @@ -434,7 +444,11 @@ kernel-install_install_all() { debug-print-function ${FUNCNAME} "${@}" [[ ${#} -eq 1 ]] || die "${FUNCNAME}: invalid arguments" - local ver=${1} + local dir_ver=${1} + local kernel_dir=${EROOT}/usr/src/linux-${dir_ver} + local relfile=${kernel_dir}/include/config/kernel.release + local module_ver + module_ver=$(<"${relfile}") || die local success= # not an actual loop but allows error handling with 'break' @@ -446,13 +460,13 @@ kernel-install_install_all() { # putting it alongside kernel image as 'initrd' makes # kernel-install happier nonfatal dist-kernel_build_initramfs \ - "${EROOT}/usr/src/linux-${ver}/${image_path%/*}/initrd" \ - "${ver}" || break + "${kernel_dir}/${image_path%/*}/initrd" \ + "${module_ver}" || break fi - nonfatal dist-kernel_install_kernel "${ver}" \ - "${EROOT}/usr/src/linux-${ver}/${image_path}" \ - "${EROOT}/usr/src/linux-${ver}/System.map" || break + nonfatal dist-kernel_install_kernel "${module_ver}" \ + "${kernel_dir}/${image_path}" \ + "${kernel_dir}/System.map" || break success=1 break @@ -476,11 +490,11 @@ kernel-install_install_all() { kernel-install_pkg_postinst() { debug-print-function ${FUNCNAME} "${@}" - local ver="${PV}${KV_LOCALVERSION}" + local dir_ver=${PV}${KV_LOCALVERSION} kernel-install_update_symlink "${EROOT}/usr/src/linux" "${ver}" if [[ -z ${ROOT} ]]; then - kernel-install_install_all "${ver}" + kernel-install_install_all "${dir_ver}" fi } @@ -500,11 +514,12 @@ kernel-install_pkg_postrm() { debug-print-function ${FUNCNAME} "${@}" if [[ -z ${ROOT} ]] && use initramfs; then - local ver="${PV}${KV_LOCALVERSION}" + local dir_ver=${PV}${KV_LOCALVERSION} + local kernel_dir=${EROOT}/usr/src/linux-${dir_ver} local image_path=$(dist-kernel_get_image_path) ebegin "Removing initramfs" - rm -f "${EROOT}/usr/src/linux-${ver}/${image_path%/*}"/initrd{,.uefi} && - find "${EROOT}/usr/src/linux-${ver}" -depth -type d -empty -delete + rm -f "${kernel_dir}/${image_path%/*}"/initrd{,.uefi} && + find "${kernel_dir}" -depth -type d -empty -delete eend ${?} fi } -- 2.38.1