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 36AF81581C1 for ; Mon, 15 Jul 2024 13:43:53 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 098172BC083; Mon, 15 Jul 2024 13:43:50 +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 93B27E2A4C for ; Mon, 15 Jul 2024 13:43:49 +0000 (UTC) Message-ID: Date: Mon, 15 Jul 2024 15:43:46 +0200 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 User-Agent: Mozilla Thunderbird Content-Language: en-US, nl-NL To: gentoo-dev@lists.gentoo.org From: Andrew Nowa Ammerlaan Subject: [gentoo-dev] [PATCH 1/4] kernel-{build,install}.eclass: make kernel install paths match release Autocrypt: addr=andrewammerlaan@gentoo.org; keydata= xsBNBF3n3cUBCAC6uoDZ0XzaO29l8AzUblXQ5rxZI7nbGEnfFqjEQCK3oEXxsDa9Ez1myx3M ir53Vyx64Iz1Bq/TOS/PttgguPpiLggCpTTD2vavp5SwFmg272+P8bUJVJF2mMRm0OR/YPiA B5dNfcoLqKIj+ZMOtrZ72B7agkUn+iDt8lB2fZ7XhfZMyQBXICYSe+EiJJmTuvIhHhOn7GCT VjpwGYCCSw3F/j2VPmJPUftz6Nb4oWaiaJ6ZwroS2ECYqZKeo+dXCsmB/LZWYqIFSSPILTLZ f1Hh/TklnQqkNVO+nY/B/o9RVYAhWJbl/F4VaKlRXemE+pDZIALlK8kt0IFU6liUOHHlABEB AAHNLUFuZHJldyBBbW1lcmxhYW4gPGFuZHJld2FtbWVybGFhbkBnZW50b28ub3JnPsLAlwQT AQgAQQIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAIZARYhBAb/U0G9gF2wvH0HpqGfY2zU 7bzRBQJlNiYEBQkJL3u/AAoJEKGfY2zU7bzRUeYH/33eX3sOyo3++xcqR/KrTNodkgWAknPe Jl8BiYdIn7zEgif5Fz6Uu8IzjfDpPd8uR82sbV2uQWarrpNmnPrAACKuAuYN9vnuLZ+9UWz6 ybGqMm545+qsFtUTTzdveMPEWr2nr+payfxthK6OdgZU5ZseLxDS9KYmBeAC7RVnIWMVDn9n opmuFK5iGxIUvIbYIl/xrk2HPAIsh1ScLBy4z7r8PFmWT1XGC0Na6PJyEG2KiQXwjKxwsljQ 6mKEAkKOkbifD0CSO8eg56ccf8WYo0s/+SiYjBjI9SEhbgZbiUbpTSw3eT/g4V2SKX1CYs1z 717XjlMKzqBNaw+AzWgrk0TOwE0EXefdxQEIAJtT7965MCxOTic3mISWSI6Z3mFFYmUkxQt8 gBVsTAezOrkd6xEt/HnFPZqeGnbSiV8gMFPKv4RkaXxWfQYKm+9/12qJNEFdVop1rpe77lU2 h0elVXuWiWsNmwqEhQcs1mq/awzO81Lyob9Miai2qNQ9MBikmFAp9c4n8C42kPLVrTKPmemI 95gZ1Y830W+udYg1jNqLF2ucMDUX1M1U2EfazWI0pNCwPoKnOqAJS+VQbyxtJ1IlE3+9sk+6 hjlTTF+RDYGv5hUoWkmcXDM2X/Cl0XB4XYOWr17Wa6+WXC+80/iLxxolMqM4KfuIR5OizbqK 2CRAJY7la7TSv1lTD1cAEQEAAcLAfAQYAQgAJgIbDBYhBAb/U0G9gF2wvH0HpqGfY2zU7bzR BQJlNiHABQkJL3d7AAoJEKGfY2zU7bzRjDwH/1fp/87km2YYVgrfP1aWLjAA/TwcEVycRJQQ S9Q6xuzgD5AYhjzBSONoN46cwf+gla6xndY0lCawsZN7whtJ/DhqSZEfL0HgHkJ6T8FCXexf n1s6XmIAxqIrMmfsuOkAPLJIHzAAGzQX8DXcRSj1cIDUpa1Uy7ncVvI4EzJBRtJVJXIbl+53 NGauXU8ZuprPYkMSPuW3eHATFc0F5DhmlFUXh+HYYK+2QTO73TENMhngkrYcw63je5bRp/+f 72XFKlf1gXHK1ivg8nYueyUfrxZTBGKagusOiQeOao2I1uYcHoFhPYJrQWePMyZiYyB6PR0K DR4B/Ulo3v0eBXaaYzo= Organization: Gentoo Linux Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Archives-Salt: 9856fc96-1089-4379-a9ee-b706611b3000 X-Archives-Hash: 882eb3e9868f2f873540ef11f45e558d Part of https://github.com/gentoo/gentoo/pull/37327 From d57b75ed204432c11ae643ea3526b46dab40c746 Mon Sep 17 00:00:00 2001 From: James Calligeros Date: Thu, 27 Jun 2024 05:56:44 +0000 Subject: [PATCH] kernel-{build,install}.eclass: make kernel install paths match release dist-kernel releases are required to match the package's version, with '_' substituted for '-' as per kernel release format rules. Curiously, we made no such substitution on the kernel install directory names. The consequence of this is that Catalyst has technically only been working with dist-kernels by pure coincidence - it had never been tested with kernels containing '_' in ${PV}. When attempting to build install media for the Gentoo Asahi project, which necessitates using kernels versioned with '_p*', Catalyst's call to Dracut's --kver argument passes in the name of the source directory while Dracut expects the kernel release (module directory). Make sure that all directories installed by the kernel match the kernel's own idea of its version exactly. This fixes Catalyst, makes directories like /usr/src/linux-* consistent with /lib/modules For compatibility with existing bin kernels, KV_FULL will be set to ${PV}${KV_LOCALVERSION} in kernel-install.eclass if it has not been explicitly set elsewhere. Signed-off-by: James Calligeros --- eclass/kernel-build.eclass | 46 +++++++++++++++------------- eclass/kernel-install.eclass | 59 +++++++++++++++++++++--------------- 2 files changed, 60 insertions(+), 45 deletions(-) diff --git a/eclass/kernel-build.eclass b/eclass/kernel-build.eclass index 86c7cd4a172d5..7d4b98ac027d9 100644 --- a/eclass/kernel-build.eclass +++ b/eclass/kernel-build.eclass @@ -20,6 +20,14 @@ # the kernel and installing it along with its modules and subset # of sources needed to build external modules. +# @ECLASS_VARIABLE: KV_FULL +# @DEFAULT_UNSET +# @DESCRIPTION: +# A string containing the full kernel release version, e.g. +# '6.9.6-gentoo-dist'. This is used to ensure consistency between the +# kernel's release version and Gentoo's tooling. This is set by +# kernel-build_src_configure() once we have a kernel.release file. + case ${EAPI} in 8) ;; *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; @@ -225,6 +233,12 @@ kernel-build_src_configure() { emake O="${WORKDIR}"/modprep "${MAKEARGS[@]}" olddefconfig emake O="${WORKDIR}"/modprep "${MAKEARGS[@]}" modules_prepare cp -pR "${WORKDIR}"/modprep "${WORKDIR}"/build || die + + # Now that we have a release file, set KV_FULL + if [[ -z ${KV_FULL} ]]; then + local relfile=${WORKDIR}/build/include/config/kernel.release + KV_FULL=$(<"${relfile}") || die + fi } # @FUNCTION: kernel-build_src_compile @@ -254,20 +268,15 @@ kernel-build_src_test() { INSTALL_MOD_PATH="${T}" INSTALL_MOD_STRIP="${strip_args}" \ modules_install - local dir_ver=${PV}${KV_LOCALVERSION} - local relfile=${WORKDIR}/build/include/config/kernel.release - local module_ver - module_ver=$(<"${relfile}") || die - - kernel-install_test "${module_ver}" \ + kernel-install_test "${KV_FULL}" \ "${WORKDIR}/build/$(dist-kernel_get_image_path)" \ - "${T}/lib/modules/${module_ver}" + "${T}/lib/modules/${KV_FULL}" } # @FUNCTION: kernel-build_src_install # @DESCRIPTION: # Install the built kernel along with subset of sources -# into /usr/src/linux-${PV}. Install the modules. Save the config. +# into /usr/src/linux-${KV_FULL}. Install the modules. Save the config. kernel-build_src_install() { debug-print-function ${FUNCNAME} "${@}" @@ -304,8 +313,7 @@ kernel-build_src_install() { # note: we're using mv rather than doins to save space and time # install main and arch-specific headers first, and scripts local kern_arch=$(tc-arch-kernel) - local dir_ver=${PV}${KV_LOCALVERSION} - local kernel_dir=/usr/src/linux-${dir_ver} + local kernel_dir=/usr/src/linux-${KV_FULL} if use sparc ; then # We don't want tc-arch-kernel's sparc64, even though we do @@ -378,10 +386,6 @@ kernel-build_src_install() { # strip empty directories find "${D}" -type d -empty -exec rmdir {} + || die - local relfile=${ED}${kernel_dir}/include/config/kernel.release - local module_ver - module_ver=$(<"${relfile}") || die - # warn when trying to "make" a dist-kernel cat <<-EOF >> "${ED}${kernel_dir}/Makefile" || die @@ -399,12 +403,12 @@ kernel-build_src_install() { echo "${CATEGORY}/${PF}:${SLOT}" > "${ED}${kernel_dir}/dist-kernel" || die # fix source tree and build dir symlinks - dosym "../../../${kernel_dir}" "/lib/modules/${module_ver}/build" - dosym "../../../${kernel_dir}" "/lib/modules/${module_ver}/source" + dosym "../../../${kernel_dir}" "/lib/modules/${KV_FULL}/build" + dosym "../../../${kernel_dir}" "/lib/modules/${KV_FULL}/source" if [[ "${image_path}" == *vmlinux* ]]; then - dosym "../../../${kernel_dir}/${image_path}" "/lib/modules/${module_ver}/vmlinux" + dosym "../../../${kernel_dir}/${image_path}" "/lib/modules/${KV_FULL}/vmlinux" else - dosym "../../../${kernel_dir}/${image_path}" "/lib/modules/${module_ver}/vmlinuz" + dosym "../../../${kernel_dir}/${image_path}" "/lib/modules/${KV_FULL}/vmlinuz" fi if [[ ${KERNEL_IUSE_MODULES_SIGN} ]]; then @@ -435,7 +439,7 @@ kernel-build_src_install() { --conf "${T}/empty-file" --confdir "${T}/empty-directory" --kernel-image "${image}" - --kmoddir "${ED}/lib/modules/${dir_ver}" + --kmoddir "${ED}/lib/modules/${KV_FULL}" --kver "${dir_ver}" --verbose --compress="xz -9e --check=crc32" @@ -462,7 +466,7 @@ kernel-build_src_install() { --linux="${image}" --initrd="${image%/*}/initrd" --cmdline="${KERNEL_GENERIC_UKI_CMDLINE}" - --uname="${dir_ver}" + --uname="${KV_FULL}" --output="${image%/*}/uki.efi" ) @@ -520,7 +524,7 @@ kernel-build_pkg_postinst() { ewarn ewarn "MODULES_SIGN_KEY was not set, this means the kernel build system" ewarn "automatically generated the signing key. This key was installed" - ewarn "in ${EROOT}/usr/src/linux-${PV}${KV_LOCALVERSION}/certs" + ewarn "in ${EROOT}/usr/src/linux-${KV_FULL}/certs" ewarn "and will also be included in any binary packages." ewarn "Please take appropriate action to protect the key!" ewarn diff --git a/eclass/kernel-install.eclass b/eclass/kernel-install.eclass index f512d815fe098..e0716b63a2489 100644 --- a/eclass/kernel-install.eclass +++ b/eclass/kernel-install.eclass @@ -28,6 +28,15 @@ # If set to a non-null value, adds IUSE=generic-uki and required # logic to install a generic unified kernel image. +# @ECLASS_VARIABLE: KV_FULL +# @DEFAULT_UNSET +# @DESCRIPTION: +# A string containing the full kernel release version, e.g. +# '6.9.6-gentoo-dist'. Defaults to ${PV}${KV_LOCALVERSION}, +# but can be set by the ebuild when this default value does +# not match the kernel release. kernel-build.eclass sets this +# to whatever is in the built kernel's kernel.release file. + # @ECLASS_VARIABLE: KV_LOCALVERSION # @DEFAULT_UNSET # @DESCRIPTION: @@ -569,40 +578,40 @@ kernel-install_src_test() { kernel-install_pkg_preinst() { debug-print-function ${FUNCNAME} "${@}" - local dir_ver=${PV}${KV_LOCALVERSION} - local kernel_dir=${ED}/usr/src/linux-${dir_ver} - local relfile=${kernel_dir}/include/config/kernel.release + # Set KV_FULL to ${PV}${KV_LOCALVERSION} if it hasn't + # been set elsewhere for backward compatibility with existing + # bin-kernel packages + if [[ -z ${KV_FULL} ]]; then + KV_FULL=${PV}${KV_LOCALVERSION} + fi + + local kernel_dir=${ED}/usr/src/linux-${KV_FULL} local image_path=$(dist-kernel_get_image_path) [[ ! -d ${kernel_dir} ]] && die "Kernel directory ${kernel_dir} not installed!" - [[ ! -f ${relfile} ]] && - die "Release file ${relfile} not installed!" - local release - release="$(<"${relfile}")" || die - DIST_KERNEL_RELEASE="${release}" # 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 + if [[ ${KV_FULL} != ${expected_ver}* ]]; then eerror "Kernel release mismatch!" eerror " expected (PV): ${expected_ver}*" - eerror " found: ${release}" + eerror " found: ${KV_FULL}" eerror "Please verify that you are applying the correct patches." - die "Kernel release mismatch (${release} instead of ${expected_ver}*)" + die "Kernel release mismatch (${KV_FULL} 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/${release}"/{build,source} || die - dosym "../../../src/linux-${dir_ver}" "/usr/lib/modules/${release}/build" - dosym "../../../src/linux-${dir_ver}" "/usr/lib/modules/${release}/source" + rm "${ED}/lib/modules/${KV_FULL}"/{build,source} || die + dosym "../../../src/linux-${KV_FULL}" "/usr/lib/modules/${KV_FULL}/build" + dosym "../../../src/linux-${KV_FULL}" "/usr/lib/modules/${KV_FULL}/source" for file in vmlinux vmlinuz; do - if [[ -L "${ED}/lib/modules/${release}/${file}" ]]; then - rm "${ED}/lib/modules/${release}/${file}" || die - dosym "../../../src/linux-${dir_ver}/${image_path}" "/usr/lib/modules/${release}/${file}" + if [[ -L "${ED}/lib/modules/${KV_FULL}/${file}" ]]; then + rm "${ED}/lib/modules/${KV_FULL}/${file}" || die + dosym "../../../src/linux-${KV_FULL}/${image_path}" "/usr/lib/modules/${KV_FULL}/${file}" fi done fi @@ -695,13 +704,12 @@ kernel-install_install_all() { kernel-install_pkg_postinst() { debug-print-function ${FUNCNAME} "${@}" - local dir_ver=${PV}${KV_LOCALVERSION} - kernel-install_update_symlink "${EROOT}/usr/src/linux" "${dir_ver}" + kernel-install_update_symlink "${EROOT}/usr/src/linux" "${KV_FULL}" dist-kernel_compressed_module_cleanup \ - "${EROOT}/lib/modules/${DIST_KERNEL_RELEASE}" + "${EROOT}/lib/modules/${KV_FULL}" if [[ -z ${ROOT} ]]; then - kernel-install_install_all "${dir_ver}" + kernel-install_install_all "${KV_FULL}" fi if [[ ${KERNEL_IUSE_GENERIC_UKI} ]] && use generic-uki; then @@ -734,8 +742,7 @@ kernel-install_pkg_postrm() { debug-print-function ${FUNCNAME} "${@}" if [[ -z ${ROOT} && ! ${KERNEL_IUSE_GENERIC_UKI} ]]; then - local dir_ver=${PV}${KV_LOCALVERSION} - local kernel_dir=${EROOT}/usr/src/linux-${dir_ver} + local kernel_dir=${EROOT}/usr/src/linux-${KV_FULL} local image_path=$(dist-kernel_get_image_path) ebegin "Removing initramfs" rm -f "${kernel_dir}/${image_path%/*}"/{initrd,uki.efi} && @@ -750,7 +757,11 @@ kernel-install_pkg_postrm() { kernel-install_pkg_config() { [[ -z ${ROOT} ]] || die "ROOT!=/ not supported currently" - kernel-install_install_all "${PV}${KV_LOCALVERSION}" + if [[ -z ${KV_FULL} ]]; then + KV_FULL=${PV}${KV_LOCALVERSION} + fi + + kernel-install_install_all "${KV_FULL}" } # @FUNCTION: kernel-install_compress_modules