Gentoo Archives: gentoo-dev

From: "Michał Górny" <mgorny@g.o>
To: gentoo-dev@l.g.o
Cc: "Michał Górny" <mgorny@g.o>
Subject: [gentoo-dev] [PATCH 3/4] kernel-install.eclass: Account for PV/KV mismatch
Date: Wed, 26 Oct 2022 11:32:59
Message-Id: 20221026113140.3213-4-mgorny@gentoo.org
In Reply to: [gentoo-dev] [PATCH 0/4] dist-kernel: Improved kernel version logic, take two by "Michał Górny"
1 Do not assume PV and kernel version must always match. Use PV for
2 kernel install directory (i.e. /usr/src/linux) but get the release
3 from the kernel build directory for the module directory. Update
4 preinst version check to account for live ebuilds.
5
6 Signed-off-by: Michał Górny <mgorny@g.o>
7 ---
8 eclass/kernel-install.eclass | 67 ++++++++++++++++++++++--------------
9 1 file changed, 41 insertions(+), 26 deletions(-)
10
11 diff --git a/eclass/kernel-install.eclass b/eclass/kernel-install.eclass
12 index dc77cb514b1a..9aece24bbff5 100644
13 --- a/eclass/kernel-install.eclass
14 +++ b/eclass/kernel-install.eclass
15 @@ -403,24 +403,34 @@ kernel-install_src_test() {
16 kernel-install_pkg_preinst() {
17 debug-print-function ${FUNCNAME} "${@}"
18
19 - local ver="${PV}${KV_LOCALVERSION}"
20 - local kdir="${ED}/usr/src/linux-${ver}"
21 - local relfile="${kdir}/include/config/kernel.release"
22 - [[ ! -d ${kdir} ]] && die "Kernel directory ${kdir} not installed!"
23 - [[ ! -f ${relfile} ]] && die "Release file ${relfile} not installed!"
24 - local release="$(<"${relfile}")"
25 - if [[ ${release} != ${PV}* ]]; then
26 - eerror "Kernel release mismatch!"
27 - eerror " expected (PV): ${PV}*"
28 - eerror " found: ${release}"
29 - eerror "Please verify that you are applying the correct patches."
30 - die "Kernel release mismatch (${release} instead of ${PV}*)"
31 + local dir_ver=${PV}${KV_LOCALVERSION}
32 + local kernel_dir=${ED}/usr/src/linux-${dir_ver}
33 + local relfile=${kernel_dir}/include/config/kernel.release
34 + [[ ! -d ${kernel_dir} ]] &&
35 + die "Kernel directory ${kernel_dir} not installed!"
36 + [[ ! -f ${relfile} ]] &&
37 + die "Release file ${relfile} not installed!"
38 + local release
39 + release="$(<"${relfile}")" || die
40 +
41 + # perform the version check for release ebuilds only
42 + if [[ ${PV} != *9999 ]]; then
43 + local expected_ver=$(dist-kernel_PV_to_KV "${PV}")
44 +
45 + if [[ ${release} != ${expected_ver}* ]]; then
46 + eerror "Kernel release mismatch!"
47 + eerror " expected (PV): ${expected_ver}*"
48 + eerror " found: ${release}"
49 + eerror "Please verify that you are applying the correct patches."
50 + die "Kernel release mismatch (${release} instead of ${expected_ver}*)"
51 + fi
52 fi
53 +
54 if [[ -L ${EROOT}/lib && ${EROOT}/lib -ef ${EROOT}/usr/lib ]]; then
55 # Adjust symlinks for merged-usr.
56 - rm "${ED}/lib/modules/${ver}"/{build,source} || die
57 - dosym "../../../src/linux-${ver}" "/usr/lib/modules/${ver}/build"
58 - dosym "../../../src/linux-${ver}" "/usr/lib/modules/${ver}/source"
59 + rm "${ED}/lib/modules/${release}"/{build,source} || die
60 + dosym "../../../src/linux-${dir_ver}" "/usr/lib/modules/${release}/build"
61 + dosym "../../../src/linux-${dir_ver}" "/usr/lib/modules/${release}/source"
62 fi
63 }
64
65 @@ -434,7 +444,11 @@ kernel-install_install_all() {
66 debug-print-function ${FUNCNAME} "${@}"
67
68 [[ ${#} -eq 1 ]] || die "${FUNCNAME}: invalid arguments"
69 - local ver=${1}
70 + local dir_ver=${1}
71 + local kernel_dir=${EROOT}/usr/src/linux-${dir_ver}
72 + local relfile=${kernel_dir}/include/config/kernel.release
73 + local module_ver
74 + module_ver=$(<"${relfile}") || die
75
76 local success=
77 # not an actual loop but allows error handling with 'break'
78 @@ -446,13 +460,13 @@ kernel-install_install_all() {
79 # putting it alongside kernel image as 'initrd' makes
80 # kernel-install happier
81 nonfatal dist-kernel_build_initramfs \
82 - "${EROOT}/usr/src/linux-${ver}/${image_path%/*}/initrd" \
83 - "${ver}" || break
84 + "${kernel_dir}/${image_path%/*}/initrd" \
85 + "${module_ver}" || break
86 fi
87
88 - nonfatal dist-kernel_install_kernel "${ver}" \
89 - "${EROOT}/usr/src/linux-${ver}/${image_path}" \
90 - "${EROOT}/usr/src/linux-${ver}/System.map" || break
91 + nonfatal dist-kernel_install_kernel "${module_ver}" \
92 + "${kernel_dir}/${image_path}" \
93 + "${kernel_dir}/System.map" || break
94
95 success=1
96 break
97 @@ -476,11 +490,11 @@ kernel-install_install_all() {
98 kernel-install_pkg_postinst() {
99 debug-print-function ${FUNCNAME} "${@}"
100
101 - local ver="${PV}${KV_LOCALVERSION}"
102 + local dir_ver=${PV}${KV_LOCALVERSION}
103 kernel-install_update_symlink "${EROOT}/usr/src/linux" "${ver}"
104
105 if [[ -z ${ROOT} ]]; then
106 - kernel-install_install_all "${ver}"
107 + kernel-install_install_all "${dir_ver}"
108 fi
109 }
110
111 @@ -500,11 +514,12 @@ kernel-install_pkg_postrm() {
112 debug-print-function ${FUNCNAME} "${@}"
113
114 if [[ -z ${ROOT} ]] && use initramfs; then
115 - local ver="${PV}${KV_LOCALVERSION}"
116 + local dir_ver=${PV}${KV_LOCALVERSION}
117 + local kernel_dir=${EROOT}/usr/src/linux-${dir_ver}
118 local image_path=$(dist-kernel_get_image_path)
119 ebegin "Removing initramfs"
120 - rm -f "${EROOT}/usr/src/linux-${ver}/${image_path%/*}"/initrd{,.uefi} &&
121 - find "${EROOT}/usr/src/linux-${ver}" -depth -type d -empty -delete
122 + rm -f "${kernel_dir}/${image_path%/*}"/initrd{,.uefi} &&
123 + find "${kernel_dir}" -depth -type d -empty -delete
124 eend ${?}
125 fi
126 }
127 --
128 2.38.1