File: use-debian-rules-for-ubuntu-builds.patch

package info (click to toggle)
kpatch 0.9.10-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,716 kB
  • sloc: ansic: 9,716; sh: 2,592; makefile: 260; asm: 35
file content (143 lines) | stat: -rw-r--r-- 4,696 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
Description: Use Ubuntu-style build for Livepatch Generation
 This patch changes the livepatch mechanism for Ubuntu. Instead of using
 the kernel makefile directly, the build is performed using debian/rules,
 so it matches how the Ubuntu kernel is actually made.

Author: Benjamin M Romer <benjamin.romer@canonical.com>
Last-Update: 2022-05-24

--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -175,12 +175,12 @@
 	for (( ; APPLIED_PATCHES>0; APPLIED_PATCHES-- )); do
 		idx=$(( APPLIED_PATCHES - 1))
 		patch="${PATCH_LIST[$idx]}"
-		patch -p1 -R -d "$BUILDDIR" < "$patch" &> /dev/null
+		patch -p1 -R -d "$KERNEL_SRCDIR" < "$patch" &> /dev/null
 	done
 
 	# If $BUILDDIR was a git repo, make sure git actually sees that
 	# we've reverted our patch(es).
-	[[ -d "$BUILDDIR/.git" ]] && (cd "$BUILDDIR" && git update-index -q --refresh)
+	[[ -d "$BUILDDIR/.git" ]] && (cd "$KERNEL_SRCDIR" && git update-index -q --refresh)
 }
 
 # List of kernel tree files that kpatch-build backed up to
@@ -897,7 +897,12 @@
 	fi
 	BUILDDIR="$OOT_MODULE_SRCDIR"
 else
-	BUILDDIR="$KERNEL_SRCDIR"
+	if [[ $DISTRO = ubuntu ]]; then
+		BUILDDIR="$TEMPDIR/build-generic"
+		mkdir -p "$BUILDDIR"
+	else
+		BUILDDIR="$KERNEL_SRCDIR"
+	fi
 fi
 
 [[ "$SKIPCLEANUP" -eq 0 ]] && trap cleanup EXIT INT TERM HUP
@@ -967,6 +972,12 @@
 		backup_kernel_file "vmlinux"
 		VMLINUX="$KERNEL_BACKUPDIR/vmlinux"
 	fi
+
+	# save debian before it gets removed with mrproper
+	if [[ -e "$SRCDIR/debian" ]]; then
+		cp -rf "$SRCDIR/debian" "$TEMPDIR/debian.bak"
+	fi
+
 elif [[ -n "$OOT_MODULE" ]]; then
 	if [[ -z "${CONFIGFILE}" ]]; then
 		CONFIGFILE="/boot/config-${ARCHVERSION}"
@@ -1238,7 +1249,7 @@
 fi
 
 echo "Testing patch file(s)"
-cd "$BUILDDIR" || die
+cd "$KERNEL_SRCDIR" || die
 verify_patch_files
 apply_patches
 remove_patches
@@ -1287,13 +1298,30 @@
 	MAKEVARS+=("LD=${KPATCH_CC_PREFIX}${LD}")
 fi
 
+if [[ $DISTRO = ubuntu ]]; then
+	mv "$KERNEL_SRCDIR/debian" "$KERNEL_SRCDIR/debian.master" "$TEMPDIR"
+	make mrproper 2>&1 | logger || die
+	mv "$TEMPDIR/debian" "$TEMPDIR/debian.master" "$KERNEL_SRCDIR"
+	fakeroot debian/rules clean 2>&1 | logger || die
+	# shellcheck disable=SC1117
+	MAKEFLAGS="--no-print-directory" fakeroot \
+		debian/rules "${MAKEVARS[@]}" "-j$CPUS" \
+		build-generic build_image=vmlinux builddir="$TEMPDIR" \
+		enable_zfs=false  2>&1 | logger \
+		|| die
+else
+	# $TARGETS used as list, no quotes.
+	# shellcheck disable=SC2086
+	make "${MAKEVARS[@]}" "-j$CPUS" $TARGETS 2>&1 | logger || die
+fi
 
-# $TARGETS used as list, no quotes.
-# shellcheck disable=SC2086
-make "${MAKEVARS[@]}" "-j$CPUS" $TARGETS 2>&1 | logger || die
+MODULE_SYMVERS="$KERNEL_SRCDIR/Module.symvers"
+if [[ "$DISTRO" = ubuntu ]]; then
+	MODULE_SYMVERS="$TEMPDIR/build-generic/Module.symvers"
+fi
 
 # Save original module symvers
-cp -f "$BUILDDIR/Module.symvers" "$TEMPDIR/Module.symvers" || die
+cp -f "$MODULE_SYMVERS" "$TEMPDIR/Module.symvers" || die
 
 echo "Building patched source"
 apply_patches
@@ -1301,9 +1329,20 @@
 export KPATCH_GCC_TEMPDIR="$TEMPDIR"
 export KPATCH_GCC_SRCDIR="$BUILDDIR"
 save_env
-# $TARGETS used as list, no quotes.
-# shellcheck disable=SC2086
-KBUILD_MODPOST_WARN=1 make "${MAKEVARS[@]}" "-j$CPUS" $TARGETS 2>&1 | logger || die
+
+if [[ $DISTRO = ubuntu ]]; then
+	rm -f debian/stamps/stamp-build-generic
+	# shellcheck disable=SC1117
+	MAKEFLAGS="--no-print-directory" fakeroot \
+		debian/rules "${MAKEVARS[@]}" "-j$CPUS" \
+		build-generic build_image=vmlinux builddir="$TEMPDIR" \
+		enable_zfs=false  2>&1 | logger \
+		|| die
+else
+	# $TARGETS used as list, no quotes.
+	# shellcheck disable=SC2086
+	KBUILD_MODPOST_WARN=1 make "${MAKEVARS[@]}" "-j$CPUS" $TARGETS 2>&1 | logger || die
+fi
 
 # source.c:(.section+0xFF): undefined reference to `symbol'
 grep "undefined reference" "$LOGFILE" | sed -r "s/^.*\`(.*)'$/\\1/" \
@@ -1316,7 +1355,7 @@
 	die "no changed objects found"
 fi
 
-grep -q vmlinux "$KERNEL_SRCDIR/Module.symvers" || die "truncated $KERNEL_SRCDIR/Module.symvers file"
+grep -q vmlinux "$MODULE_SYMVERS" || die "truncated $MODULE_SYMVERS file"
 
 if [[ -n "$CONFIG_MODVERSIONS" ]]; then
 	trace_off "reading Module.symvers"
@@ -1467,13 +1506,6 @@
 
 echo "Building patch module: $MODNAME.ko"
 
-if [[ -z "$USERSRCDIR" ]] && [[ "$DISTRO" = ubuntu ]]; then
-	# UBUNTU: add UTS_UBUNTU_RELEASE_ABI to utsrelease.h after regenerating it
-	UBUNTU_ABI="${ARCHVERSION#*-}"
-	UBUNTU_ABI="${UBUNTU_ABI%-*}"
-	echo "#define UTS_UBUNTU_RELEASE_ABI $UBUNTU_ABI" >> "$KERNEL_SRCDIR"/include/generated/utsrelease.h
-fi
-
 cd "$TEMPDIR/output" || die
 # $KPATCH_LDFLAGS and result of find used as list, no quotes.
 # shellcheck disable=SC2086,SC2046