Gentoo Archives: gentoo-commits

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