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 |
} |