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 |