summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorRiku Voipio <riku.voipio@linaro.org>2018-04-05 07:22:29 -0400
committerMasahiro Yamada <yamada.masahiro@socionext.com>2018-04-07 06:04:02 -0400
commitb41d920acff8305b8a25a183a8e4d41b8975097d (patch)
treeea8cebd8e42c7c85ecaea7154f91f34f5adffa4a /scripts
parenta73619a845d5625079cc1b3b820f44c899618388 (diff)
kbuild: deb-pkg: split generating packaging and build
Move debian/ directory generation out of builddeb to a new script, mkdebian. The package build commands are kept in builddeb, which is now an internal command called from debian/rules. With these changes in place, we can now use dpkg-buildpackage from deb-pkg and bindeb-pkg removing need for handrolled source/changes generation. This patch is based on the criticism of the current state of builddeb discussed on: https://patchwork.kernel.org/patch/9656403/ Signed-off-by: Riku Voipio <riku.voipio@linaro.org> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/package/Makefile34
-rwxr-xr-xscripts/package/builddeb221
-rwxr-xr-xscripts/package/mkdebian189
3 files changed, 200 insertions, 244 deletions
diff --git a/scripts/package/Makefile b/scripts/package/Makefile
index 9fbcf5ed0ca7..73503ebce632 100644
--- a/scripts/package/Makefile
+++ b/scripts/package/Makefile
@@ -24,6 +24,7 @@
24# Remove hyphens since they have special meaning in RPM filenames 24# Remove hyphens since they have special meaning in RPM filenames
25KERNELPATH := kernel-$(subst -,_,$(KERNELRELEASE)) 25KERNELPATH := kernel-$(subst -,_,$(KERNELRELEASE))
26KDEB_SOURCENAME ?= linux-$(KERNELRELEASE) 26KDEB_SOURCENAME ?= linux-$(KERNELRELEASE)
27KBUILD_PKG_ROOTCMD ?="fakeroot -u"
27export KDEB_SOURCENAME 28export KDEB_SOURCENAME
28# Include only those top-level files that are needed by make, plus the GPL copy 29# Include only those top-level files that are needed by make, plus the GPL copy
29TAR_CONTENT := $(KBUILD_ALLDIRS) .config .scmversion Makefile \ 30TAR_CONTENT := $(KBUILD_ALLDIRS) .config .scmversion Makefile \
@@ -66,35 +67,20 @@ binrpm-pkg: FORCE
66 67
67clean-files += $(objtree)/*.spec 68clean-files += $(objtree)/*.spec
68 69
69# Deb target
70# ---------------------------------------------------------------------------
71quiet_cmd_builddeb = BUILDDEB
72 cmd_builddeb = set -e; \
73 test `id -u` = 0 || \
74 test -n "$(KBUILD_PKG_ROOTCMD)" || { \
75 which fakeroot >/dev/null 2>&1 && \
76 KBUILD_PKG_ROOTCMD="fakeroot -u"; \
77 } || { \
78 echo; \
79 echo "builddeb must be run as root (or using fakeroot)."; \
80 echo "KBUILD_PKG_ROOTCMD is unset and fakeroot not found."; \
81 echo "Try setting KBUILD_PKG_ROOTCMD to a command to acquire"; \
82 echo "root privileges (e.g., 'fakeroot -u' or 'sudo')."; \
83 false; \
84 } && \
85 \
86 $$KBUILD_PKG_ROOTCMD $(CONFIG_SHELL) \
87 $(srctree)/scripts/package/builddeb $@
88
89deb-pkg: FORCE 70deb-pkg: FORCE
90 $(MAKE) clean 71 $(MAKE) clean
72 $(CONFIG_SHELL) $(srctree)/scripts/package/mkdebian
91 $(call cmd,src_tar,$(KDEB_SOURCENAME)) 73 $(call cmd,src_tar,$(KDEB_SOURCENAME))
92 $(MAKE) KBUILD_SRC= 74 origversion=$$(dpkg-parsechangelog -SVersion |sed 's/-[^-]*$$//');\
93 +$(call cmd,builddeb) 75 mv $(KDEB_SOURCENAME).tar.gz ../$(KDEB_SOURCENAME)_$${origversion}.orig.tar.gz
76 +dpkg-buildpackage -r$(KBUILD_PKG_ROOTCMD) -a$$(cat debian/arch) -i.git -us -uc
94 77
95bindeb-pkg: FORCE 78bindeb-pkg: FORCE
96 $(MAKE) KBUILD_SRC= 79 $(CONFIG_SHELL) $(srctree)/scripts/package/mkdebian
97 +$(call cmd,builddeb) 80 +dpkg-buildpackage -r$(KBUILD_PKG_ROOTCMD) -a$$(cat debian/arch) -b -nc -uc
81
82intdeb-pkg: FORCE
83 +$(CONFIG_SHELL) $(srctree)/scripts/package/builddeb
98 84
99clean-dirs += $(objtree)/debian/ 85clean-dirs += $(objtree)/debian/
100 86
diff --git a/scripts/package/builddeb b/scripts/package/builddeb
index 13fabb1f81db..90c9a8ac7adb 100755
--- a/scripts/package/builddeb
+++ b/scripts/package/builddeb
@@ -30,67 +30,11 @@ create_package() {
30 chmod -R a+rX "$pdir" 30 chmod -R a+rX "$pdir"
31 31
32 # Create the package 32 # Create the package
33 dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch}" -p$pname -P"$pdir" 33 dpkg-gencontrol -p$pname -P"$pdir"
34 dpkg --build "$pdir" .. 34 dpkg --build "$pdir" ..
35} 35}
36 36
37set_debarch() {
38 # Attempt to find the correct Debian architecture
39 case "$UTS_MACHINE" in
40 i386|ia64|alpha)
41 debarch="$UTS_MACHINE" ;;
42 x86_64)
43 debarch=amd64 ;;
44 sparc*)
45 debarch=sparc ;;
46 s390*)
47 debarch=s390$(grep -q CONFIG_64BIT=y $KCONFIG_CONFIG && echo x || true) ;;
48 ppc*)
49 debarch=$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo ppc64el || echo powerpc) ;;
50 parisc*)
51 debarch=hppa ;;
52 mips*)
53 debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo el || true) ;;
54 aarch64|arm64)
55 debarch=arm64 ;;
56 arm*)
57 if grep -q CONFIG_AEABI=y $KCONFIG_CONFIG; then
58 if grep -q CONFIG_VFP=y $KCONFIG_CONFIG; then
59 debarch=armhf
60 else
61 debarch=armel
62 fi
63 else
64 debarch=arm
65 fi
66 ;;
67 *)
68 debarch=$(dpkg --print-architecture)
69 echo "" >&2
70 echo "** ** ** WARNING ** ** **" >&2
71 echo "" >&2
72 echo "Your architecture doesn't have its equivalent" >&2
73 echo "Debian userspace architecture defined!" >&2
74 echo "Falling back to using your current userspace instead!" >&2
75 echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
76 echo "" >&2
77 esac
78 if [ -n "$KBUILD_DEBARCH" ] ; then
79 debarch="$KBUILD_DEBARCH"
80 fi
81 forcearch="-DArchitecture=$debarch"
82
83}
84
85# Some variables and settings used throughout the script
86version=$KERNELRELEASE 37version=$KERNELRELEASE
87revision=$(cat .version)
88if [ -n "$KDEB_PKGVERSION" ]; then
89 packageversion=$KDEB_PKGVERSION
90else
91 packageversion=$version-$revision
92fi
93sourcename=$KDEB_SOURCENAME
94tmpdir="$objtree/debian/tmp" 38tmpdir="$objtree/debian/tmp"
95kernel_headers_dir="$objtree/debian/hdrtmp" 39kernel_headers_dir="$objtree/debian/hdrtmp"
96libc_headers_dir="$objtree/debian/headertmp" 40libc_headers_dir="$objtree/debian/headertmp"
@@ -99,9 +43,6 @@ packagename=linux-image-$version
99kernel_headers_packagename=linux-headers-$version 43kernel_headers_packagename=linux-headers-$version
100libc_headers_packagename=linux-libc-dev 44libc_headers_packagename=linux-libc-dev
101dbg_packagename=$packagename-dbg 45dbg_packagename=$packagename-dbg
102debarch=
103forcearch=
104set_debarch
105 46
106if [ "$ARCH" = "um" ] ; then 47if [ "$ARCH" = "um" ] ; then
107 packagename=user-mode-linux-$version 48 packagename=user-mode-linux-$version
@@ -212,105 +153,6 @@ EOF
212 chmod 755 "$tmpdir/DEBIAN/$script" 153 chmod 755 "$tmpdir/DEBIAN/$script"
213done 154done
214 155
215# Try to determine maintainer and email values
216if [ -n "$DEBEMAIL" ]; then
217 email=$DEBEMAIL
218elif [ -n "$EMAIL" ]; then
219 email=$EMAIL
220else
221 email=$(id -nu)@$(hostname -f 2>/dev/null || hostname)
222fi
223if [ -n "$DEBFULLNAME" ]; then
224 name=$DEBFULLNAME
225elif [ -n "$NAME" ]; then
226 name=$NAME
227else
228 name="Anonymous"
229fi
230maintainer="$name <$email>"
231
232# Try to determine distribution
233if [ -n "$KDEB_CHANGELOG_DIST" ]; then
234 distribution=$KDEB_CHANGELOG_DIST
235# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
236elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
237 : # nothing to do in this case
238else
239 distribution="unstable"
240 echo >&2 "Using default distribution of 'unstable' in the changelog"
241 echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
242fi
243
244# Generate a simple changelog template
245cat <<EOF > debian/changelog
246$sourcename ($packageversion) $distribution; urgency=low
247
248 * Custom built Linux kernel.
249
250 -- $maintainer $(date -R)
251EOF
252
253# Generate copyright file
254cat <<EOF > debian/copyright
255This is a packacked upstream version of the Linux kernel.
256
257The sources may be found at most Linux archive sites, including:
258https://www.kernel.org/pub/linux/kernel
259
260Copyright: 1991 - 2017 Linus Torvalds and others.
261
262The git repository for mainline kernel development is at:
263git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
264
265 This program is free software; you can redistribute it and/or modify
266 it under the terms of the GNU General Public License as published by
267 the Free Software Foundation; version 2 dated June, 1991.
268
269On Debian GNU/Linux systems, the complete text of the GNU General Public
270License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
271EOF
272
273
274build_depends="bc, kmod, cpio "
275
276# Generate a control file
277cat <<EOF > debian/control
278Source: $sourcename
279Section: kernel
280Priority: optional
281Maintainer: $maintainer
282Build-Depends: $build_depends
283Homepage: http://www.kernel.org/
284EOF
285
286if [ "$ARCH" = "um" ]; then
287 cat <<EOF >> debian/control
288
289Package: $packagename
290Architecture: any
291Description: User Mode Linux kernel, version $version
292 User-mode Linux is a port of the Linux kernel to its own system call
293 interface. It provides a kind of virtual machine, which runs Linux
294 as a user process under another Linux kernel. This is useful for
295 kernel development, sandboxes, jails, experimentation, and
296 many other things.
297 .
298 This package contains the Linux kernel, modules and corresponding other
299 files, version: $version.
300EOF
301
302else
303 cat <<EOF >> debian/control
304
305Package: $packagename
306Architecture: any
307Description: Linux kernel, version $version
308 This package contains the Linux kernel, modules and corresponding other
309 files, version: $version.
310EOF
311
312fi
313
314# Build kernel header package 156# Build kernel header package
315(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles" 157(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles"
316(cd $srctree; find arch/*/include include scripts -type f -o -type l) >> "$objtree/debian/hdrsrcfiles" 158(cd $srctree; find arch/*/include include scripts -type f -o -type l) >> "$objtree/debian/hdrsrcfiles"
@@ -331,27 +173,6 @@ mkdir -p "$destdir"
331ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" 173ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
332rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" 174rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
333 175
334cat <<EOF >> debian/control
335
336Package: $kernel_headers_packagename
337Architecture: any
338Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch}
339 This package provides kernel header files for $KERNELRELEASE on \${kernel:debarch}
340 .
341 This is useful for people who need to build external modules
342EOF
343
344cat <<EOF >> debian/control
345
346Package: $libc_headers_packagename
347Section: devel
348Provides: linux-kernel-headers
349Architecture: any
350Description: Linux support headers for userspace development
351 This package provides userspaces headers from the Linux kernel. These headers
352 are used by the installed headers for GNU glibc and other system libraries.
353EOF
354
355if [ "$ARCH" != "um" ]; then 176if [ "$ARCH" != "um" ]; then
356 create_package "$kernel_headers_packagename" "$kernel_headers_dir" 177 create_package "$kernel_headers_packagename" "$kernel_headers_dir"
357 create_package "$libc_headers_packagename" "$libc_headers_dir" 178 create_package "$libc_headers_packagename" "$libc_headers_dir"
@@ -370,47 +191,7 @@ if [ -n "$BUILD_DEBUG" ] ; then
370 ln -s ../lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/boot/vmlinux-$version 191 ln -s ../lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/boot/vmlinux-$version
371 # kdump-tools 192 # kdump-tools
372 ln -s lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/vmlinux-$version 193 ln -s lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/vmlinux-$version
373
374 cat <<EOF >> debian/control
375
376Package: $dbg_packagename
377Section: debug
378Architecture: any
379Description: Linux kernel debugging symbols for $version
380 This package will come in handy if you need to debug the kernel. It provides
381 all the necessary debug symbols for the kernel and its modules.
382EOF
383
384 create_package "$dbg_packagename" "$dbg_dir" 194 create_package "$dbg_packagename" "$dbg_dir"
385fi 195fi
386 196
387if [ "x$1" = "xdeb-pkg" ]
388then
389 cat <<EOF > debian/rules
390#!/usr/bin/make -f
391
392build:
393 \$(MAKE)
394
395binary-arch:
396 \$(MAKE) KDEB_SOURCENAME=${sourcename} KDEB_PKGVERSION=${packageversion} bindeb-pkg
397
398clean:
399 rm -rf debian/*tmp debian/files
400 mv debian/ debian.backup # debian/ might be cleaned away
401 \$(MAKE) clean
402 mv debian.backup debian
403
404binary: binary-arch
405EOF
406 mv ${sourcename}.tar.gz ../${sourcename}_${version}.orig.tar.gz
407 tar caf ../${sourcename}_${packageversion}.debian.tar.gz debian/{copyright,rules,changelog,control}
408 dpkg-source -cdebian/control -ldebian/changelog --format="3.0 (custom)" --target-format="3.0 (quilt)" \
409 -b / ../${sourcename}_${version}.orig.tar.gz ../${sourcename}_${packageversion}.debian.tar.gz
410 mv ${sourcename}_${packageversion}*dsc ..
411 dpkg-genchanges -Vkernel:debarch="${debarch}" > ../${sourcename}_${packageversion}_${debarch}.changes
412else
413 dpkg-genchanges -b -Vkernel:debarch="${debarch}" > ../${sourcename}_${packageversion}_${debarch}.changes
414fi
415
416exit 0 197exit 0
diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian
new file mode 100755
index 000000000000..6adb3a16ba3b
--- /dev/null
+++ b/scripts/package/mkdebian
@@ -0,0 +1,189 @@
1#!/bin/sh
2#
3# Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
4#
5# Simple script to generate a debian/ directory for a Linux kernel.
6
7set -e
8
9set_debarch() {
10 # Attempt to find the correct Debian architecture
11 case "$UTS_MACHINE" in
12 i386|ia64|alpha)
13 debarch="$UTS_MACHINE" ;;
14 x86_64)
15 debarch=amd64 ;;
16 sparc*)
17 debarch=sparc ;;
18 s390*)
19 debarch=s390$(grep -q CONFIG_64BIT=y $KCONFIG_CONFIG && echo x || true) ;;
20 ppc*)
21 debarch=$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo ppc64el || echo powerpc) ;;
22 parisc*)
23 debarch=hppa ;;
24 mips*)
25 debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo el || true) ;;
26 aarch64|arm64)
27 debarch=arm64 ;;
28 arm*)
29 if grep -q CONFIG_AEABI=y $KCONFIG_CONFIG; then
30 if grep -q CONFIG_VFP=y $KCONFIG_CONFIG; then
31 debarch=armhf
32 else
33 debarch=armel
34 fi
35 else
36 debarch=arm
37 fi
38 ;;
39 *)
40 debarch=$(dpkg --print-architecture)
41 echo "" >&2
42 echo "** ** ** WARNING ** ** **" >&2
43 echo "" >&2
44 echo "Your architecture doesn't have its equivalent" >&2
45 echo "Debian userspace architecture defined!" >&2
46 echo "Falling back to using your current userspace instead!" >&2
47 echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
48 echo "" >&2
49 esac
50 if [ -n "$KBUILD_DEBARCH" ] ; then
51 debarch="$KBUILD_DEBARCH"
52 fi
53}
54
55# Some variables and settings used throughout the script
56version=$KERNELRELEASE
57if [ -n "$KDEB_PKGVERSION" ]; then
58 packageversion=$KDEB_PKGVERSION
59else
60 revision=$(cat .version 2>/dev/null||echo 1)
61 packageversion=$version-$revision
62fi
63sourcename=$KDEB_SOURCENAME
64packagename=linux-image-$version
65kernel_headers_packagename=linux-headers-$version
66dbg_packagename=$packagename-dbg
67debarch=
68set_debarch
69
70if [ "$ARCH" = "um" ] ; then
71 packagename=user-mode-linux-$version
72fi
73
74# Try to determine maintainer and email values
75if [ -n "$DEBEMAIL" ]; then
76 email=$DEBEMAIL
77elif [ -n "$EMAIL" ]; then
78 email=$EMAIL
79else
80 email=$(id -nu)@$(hostname -f 2>/dev/null || hostname)
81fi
82if [ -n "$DEBFULLNAME" ]; then
83 name=$DEBFULLNAME
84elif [ -n "$NAME" ]; then
85 name=$NAME
86else
87 name="Anonymous"
88fi
89maintainer="$name <$email>"
90
91# Try to determine distribution
92if [ -n "$KDEB_CHANGELOG_DIST" ]; then
93 distribution=$KDEB_CHANGELOG_DIST
94# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
95elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
96 : # nothing to do in this case
97else
98 distribution="unstable"
99 echo >&2 "Using default distribution of 'unstable' in the changelog"
100 echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
101fi
102
103mkdir -p debian/
104echo $debarch > debian/arch
105
106# Generate a simple changelog template
107cat <<EOF > debian/changelog
108$sourcename ($packageversion) $distribution; urgency=low
109
110 * Custom built Linux kernel.
111
112 -- $maintainer $(date -R)
113EOF
114
115# Generate copyright file
116cat <<EOF > debian/copyright
117This is a packacked upstream version of the Linux kernel.
118
119The sources may be found at most Linux archive sites, including:
120https://www.kernel.org/pub/linux/kernel
121
122Copyright: 1991 - 2018 Linus Torvalds and others.
123
124The git repository for mainline kernel development is at:
125git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
126
127 This program is free software; you can redistribute it and/or modify
128 it under the terms of the GNU General Public License as published by
129 the Free Software Foundation; version 2 dated June, 1991.
130
131On Debian GNU/Linux systems, the complete text of the GNU General Public
132License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
133EOF
134
135# Generate a control file
136cat <<EOF > debian/control
137Source: $sourcename
138Section: kernel
139Priority: optional
140Maintainer: $maintainer
141Build-Depends: bc, kmod, cpio
142Homepage: http://www.kernel.org/
143
144Package: $packagename
145Architecture: $debarch
146Description: Linux kernel, version $version
147 This package contains the Linux kernel, modules and corresponding other
148 files, version: $version.
149
150Package: $kernel_headers_packagename
151Architecture: $debarch
152Description: Linux kernel headers for $version on $debarch
153 This package provides kernel header files for $version on $debarch
154 .
155 This is useful for people who need to build external modules
156
157Package: linux-libc-dev
158Section: devel
159Provides: linux-kernel-headers
160Architecture: $debarch
161Description: Linux support headers for userspace development
162 This package provides userspaces headers from the Linux kernel. These headers
163 are used by the installed headers for GNU glibc and other system libraries.
164
165Package: $dbg_packagename
166Section: debug
167Architecture: $debarch
168Description: Linux kernel debugging symbols for $version
169 This package will come in handy if you need to debug the kernel. It provides
170 all the necessary debug symbols for the kernel and its modules.
171EOF
172
173cat <<EOF > debian/rules
174#!$(command -v $MAKE) -f
175
176build:
177 \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC=
178
179binary-arch:
180 \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC= intdeb-pkg
181
182clean:
183 rm -rf debian/*tmp debian/files
184 \$(MAKE) clean
185
186binary: binary-arch
187EOF
188
189exit 0