hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/scripts/package/builddeb
....@@ -12,36 +12,104 @@
1212
1313 set -e
1414
15
+is_enabled() {
16
+ grep -q "^$1=y" include/config/auto.conf
17
+}
18
+
19
+if_enabled_echo() {
20
+ if is_enabled "$1"; then
21
+ echo -n "$2"
22
+ elif [ $# -ge 3 ]; then
23
+ echo -n "$3"
24
+ fi
25
+}
26
+
1527 create_package() {
1628 local pname="$1" pdir="$2"
29
+ local dpkg_deb_opts
1730
1831 mkdir -m 755 -p "$pdir/DEBIAN"
1932 mkdir -p "$pdir/usr/share/doc/$pname"
2033 cp debian/copyright "$pdir/usr/share/doc/$pname/"
2134 cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian"
22
- gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian"
35
+ gzip -n -9 "$pdir/usr/share/doc/$pname/changelog.Debian"
2336 sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \
2437 | xargs -r0 md5sum > DEBIAN/md5sums"
2538
2639 # Fix ownership and permissions
27
- chown -R root:root "$pdir"
40
+ if [ "$DEB_RULES_REQUIRES_ROOT" = "no" ]; then
41
+ dpkg_deb_opts="--root-owner-group"
42
+ else
43
+ chown -R root:root "$pdir"
44
+ fi
2845 chmod -R go-w "$pdir"
2946 # in case we are in a restrictive umask environment like 0077
3047 chmod -R a+rX "$pdir"
48
+ # in case we build in a setuid/setgid directory
49
+ chmod -R ug-s "$pdir"
3150
3251 # Create the package
3352 dpkg-gencontrol -p$pname -P"$pdir"
34
- dpkg --build "$pdir" ..
53
+ dpkg-deb $dpkg_deb_opts ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" ..
54
+}
55
+
56
+deploy_kernel_headers () {
57
+ pdir=$1
58
+
59
+ rm -rf $pdir
60
+
61
+ (
62
+ cd $srctree
63
+ find . arch/$SRCARCH -maxdepth 1 -name Makefile\*
64
+ find include scripts -type f -o -type l
65
+ find arch/$SRCARCH -name Kbuild.platforms -o -name Platform
66
+ find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f
67
+ ) > debian/hdrsrcfiles
68
+
69
+ {
70
+ if is_enabled CONFIG_STACK_VALIDATION; then
71
+ echo tools/objtool/objtool
72
+ fi
73
+
74
+ find arch/$SRCARCH/include Module.symvers include scripts -type f
75
+
76
+ if is_enabled CONFIG_GCC_PLUGINS; then
77
+ find scripts/gcc-plugins -name \*.so
78
+ fi
79
+ } > debian/hdrobjfiles
80
+
81
+ destdir=$pdir/usr/src/linux-headers-$version
82
+ mkdir -p $destdir
83
+ tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir
84
+ tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir
85
+ rm -f debian/hdrsrcfiles debian/hdrobjfiles
86
+
87
+ # copy .config manually to be where it's expected to be
88
+ cp $KCONFIG_CONFIG $destdir/.config
89
+
90
+ mkdir -p $pdir/lib/modules/$version/
91
+ ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build
92
+}
93
+
94
+deploy_libc_headers () {
95
+ pdir=$1
96
+
97
+ rm -rf $pdir
98
+
99
+ $MAKE -f $srctree/Makefile headers
100
+ $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH=$pdir/usr
101
+
102
+ # move asm headers to /usr/include/<libc-machine>/asm to match the structure
103
+ # used by Debian-based distros (to support multi-arch)
104
+ host_arch=$(dpkg-architecture -a$(cat debian/arch) -qDEB_HOST_MULTIARCH)
105
+ mkdir $pdir/usr/include/$host_arch
106
+ mv $pdir/usr/include/asm $pdir/usr/include/$host_arch/
35107 }
36108
37109 version=$KERNELRELEASE
38
-tmpdir="$objtree/debian/tmp"
39
-kernel_headers_dir="$objtree/debian/hdrtmp"
40
-libc_headers_dir="$objtree/debian/headertmp"
41
-dbg_dir="$objtree/debian/dbgtmp"
110
+tmpdir=debian/linux-image
111
+dbg_dir=debian/linux-image-dbg
42112 packagename=linux-image-$version
43
-kernel_headers_packagename=linux-headers-$version
44
-libc_headers_packagename=linux-libc-dev
45113 dbg_packagename=$packagename-dbg
46114
47115 if [ "$ARCH" = "um" ] ; then
....@@ -62,18 +130,16 @@
62130 installed_image_path="boot/vmlinuz-$version"
63131 esac
64132
65
-BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)"
133
+BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes)
66134
67135 # Setup the directory structure
68
-rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files
136
+rm -rf "$tmpdir" "$dbg_dir" debian/files
69137 mkdir -m 755 -p "$tmpdir/DEBIAN"
70138 mkdir -p "$tmpdir/lib" "$tmpdir/boot"
71
-mkdir -p "$kernel_headers_dir/lib/modules/$version/"
72139
73
-# Build and install the kernel
140
+# Install the kernel
74141 if [ "$ARCH" = "um" ] ; then
75142 mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename"
76
- $MAKE linux
77143 cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
78144 cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config"
79145 gzip "$tmpdir/usr/share/doc/$packagename/config"
....@@ -83,15 +149,15 @@
83149 fi
84150 cp "$($MAKE -s -f $srctree/Makefile image_name)" "$tmpdir/$installed_image_path"
85151
86
-if grep -q "^CONFIG_OF=y" $KCONFIG_CONFIG ; then
152
+if is_enabled CONFIG_OF_EARLY_FLATTREE; then
87153 # Only some architectures with OF support have this target
88
- if grep -q dtbs_install "${srctree}/arch/$SRCARCH/Makefile"; then
89
- $MAKE KBUILD_SRC= INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install
154
+ if [ -d "${srctree}/arch/$SRCARCH/boot/dts" ]; then
155
+ $MAKE -f $srctree/Makefile INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install
90156 fi
91157 fi
92158
93
-if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then
94
- INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install
159
+if is_enabled CONFIG_MODULES; then
160
+ INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_install
95161 rm -f "$tmpdir/lib/modules/$version/build"
96162 rm -f "$tmpdir/lib/modules/$version/source"
97163 if [ "$ARCH" = "um" ] ; then
....@@ -111,16 +177,10 @@
111177 done
112178
113179 # resign stripped modules
114
- MODULE_SIG_ALL="$(grep -s '^CONFIG_MODULE_SIG_ALL=y' $KCONFIG_CONFIG || true)"
115
- if [ -n "$MODULE_SIG_ALL" ]; then
116
- INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_sign
180
+ if is_enabled CONFIG_MODULE_SIG_ALL; then
181
+ INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_sign
117182 fi
118183 fi
119
-fi
120
-
121
-if [ "$ARCH" != "um" ]; then
122
- $MAKE headers_check KBUILD_SRC=
123
- $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr"
124184 fi
125185
126186 # Install the maintainer scripts
....@@ -129,11 +189,6 @@
129189 # make-kpkg sets $INITRD to indicate whether an initramfs is wanted, and
130190 # so do we; recent versions of dracut and initramfs-tools will obey this.
131191 debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
132
-if grep -q '^CONFIG_BLK_DEV_INITRD=y' $KCONFIG_CONFIG; then
133
- want_initrd=Yes
134
-else
135
- want_initrd=No
136
-fi
137192 for script in postinst postrm preinst prerm ; do
138193 mkdir -p "$tmpdir$debhookdir/$script.d"
139194 cat <<EOF > "$tmpdir/DEBIAN/$script"
....@@ -145,7 +200,7 @@
145200 export DEB_MAINT_PARAMS="\$*"
146201
147202 # Tell initramfs builder whether it's wanted
148
-export INITRD=$want_initrd
203
+export INITRD=$(if_enabled_echo CONFIG_BLK_DEV_INITRD Yes No)
149204
150205 test -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/$installed_image_path" $debhookdir/$script.d
151206 exit 0
....@@ -153,29 +208,14 @@
153208 chmod 755 "$tmpdir/DEBIAN/$script"
154209 done
155210
156
-# Build kernel header package
157
-(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles"
158
-(cd $srctree; find arch/*/include include scripts -type f -o -type l) >> "$objtree/debian/hdrsrcfiles"
159
-(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles"
160
-(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles"
161
-if grep -q '^CONFIG_STACK_VALIDATION=y' $KCONFIG_CONFIG ; then
162
- (cd $objtree; find tools/objtool -type f -executable) >> "$objtree/debian/hdrobjfiles"
163
-fi
164
-(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles"
165
-if grep -q '^CONFIG_GCC_PLUGINS=y' $KCONFIG_CONFIG ; then
166
- (cd $objtree; find scripts/gcc-plugins -name \*.so -o -name gcc-common.h) >> "$objtree/debian/hdrobjfiles"
167
-fi
168
-destdir=$kernel_headers_dir/usr/src/linux-headers-$version
169
-mkdir -p "$destdir"
170
-(cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -)
171
-(cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -)
172
-(cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be
173
-ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
174
-rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
175
-
176211 if [ "$ARCH" != "um" ]; then
177
- create_package "$kernel_headers_packagename" "$kernel_headers_dir"
178
- create_package "$libc_headers_packagename" "$libc_headers_dir"
212
+ if is_enabled CONFIG_MODULES; then
213
+ deploy_kernel_headers debian/linux-headers
214
+ create_package linux-headers-$version debian/linux-headers
215
+ fi
216
+
217
+ deploy_libc_headers debian/linux-libc-dev
218
+ create_package linux-libc-dev debian/linux-libc-dev
179219 fi
180220
181221 create_package "$packagename" "$tmpdir"