Skip to content

Commit b41d920

Browse files
Riku Voipiomasahir0y
authored andcommitted
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 <[email protected]> Signed-off-by: Masahiro Yamada <[email protected]>
1 parent a73619a commit b41d920

File tree

3 files changed

+200
-244
lines changed

3 files changed

+200
-244
lines changed

scripts/package/Makefile

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
# Remove hyphens since they have special meaning in RPM filenames
2525
KERNELPATH := kernel-$(subst -,_,$(KERNELRELEASE))
2626
KDEB_SOURCENAME ?= linux-$(KERNELRELEASE)
27+
KBUILD_PKG_ROOTCMD ?="fakeroot -u"
2728
export KDEB_SOURCENAME
2829
# Include only those top-level files that are needed by make, plus the GPL copy
2930
TAR_CONTENT := $(KBUILD_ALLDIRS) .config .scmversion Makefile \
@@ -66,35 +67,20 @@ binrpm-pkg: FORCE
6667

6768
clean-files += $(objtree)/*.spec
6869

69-
# Deb target
70-
# ---------------------------------------------------------------------------
71-
quiet_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-
8970
deb-pkg: FORCE
9071
$(MAKE) clean
72+
$(CONFIG_SHELL) $(srctree)/scripts/package/mkdebian
9173
$(call cmd,src_tar,$(KDEB_SOURCENAME))
92-
$(MAKE) KBUILD_SRC=
93-
+$(call cmd,builddeb)
74+
origversion=$$(dpkg-parsechangelog -SVersion |sed 's/-[^-]*$$//');\
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
9477

9578
bindeb-pkg: FORCE
96-
$(MAKE) KBUILD_SRC=
97-
+$(call cmd,builddeb)
79+
$(CONFIG_SHELL) $(srctree)/scripts/package/mkdebian
80+
+dpkg-buildpackage -r$(KBUILD_PKG_ROOTCMD) -a$$(cat debian/arch) -b -nc -uc
81+
82+
intdeb-pkg: FORCE
83+
+$(CONFIG_SHELL) $(srctree)/scripts/package/builddeb
9884

9985
clean-dirs += $(objtree)/debian/
10086

scripts/package/builddeb

Lines changed: 1 addition & 220 deletions
Original file line numberDiff line numberDiff line change
@@ -30,67 +30,11 @@ create_package() {
3030
chmod -R a+rX "$pdir"
3131

3232
# Create the package
33-
dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch}" -p$pname -P"$pdir"
33+
dpkg-gencontrol -p$pname -P"$pdir"
3434
dpkg --build "$pdir" ..
3535
}
3636

37-
set_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
8637
version=$KERNELRELEASE
87-
revision=$(cat .version)
88-
if [ -n "$KDEB_PKGVERSION" ]; then
89-
packageversion=$KDEB_PKGVERSION
90-
else
91-
packageversion=$version-$revision
92-
fi
93-
sourcename=$KDEB_SOURCENAME
9438
tmpdir="$objtree/debian/tmp"
9539
kernel_headers_dir="$objtree/debian/hdrtmp"
9640
libc_headers_dir="$objtree/debian/headertmp"
@@ -99,9 +43,6 @@ packagename=linux-image-$version
9943
kernel_headers_packagename=linux-headers-$version
10044
libc_headers_packagename=linux-libc-dev
10145
dbg_packagename=$packagename-dbg
102-
debarch=
103-
forcearch=
104-
set_debarch
10546

10647
if [ "$ARCH" = "um" ] ; then
10748
packagename=user-mode-linux-$version
@@ -212,105 +153,6 @@ EOF
212153
chmod 755 "$tmpdir/DEBIAN/$script"
213154
done
214155

215-
# Try to determine maintainer and email values
216-
if [ -n "$DEBEMAIL" ]; then
217-
email=$DEBEMAIL
218-
elif [ -n "$EMAIL" ]; then
219-
email=$EMAIL
220-
else
221-
email=$(id -nu)@$(hostname -f 2>/dev/null || hostname)
222-
fi
223-
if [ -n "$DEBFULLNAME" ]; then
224-
name=$DEBFULLNAME
225-
elif [ -n "$NAME" ]; then
226-
name=$NAME
227-
else
228-
name="Anonymous"
229-
fi
230-
maintainer="$name <$email>"
231-
232-
# Try to determine distribution
233-
if [ -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
236-
elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
237-
: # nothing to do in this case
238-
else
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"
242-
fi
243-
244-
# Generate a simple changelog template
245-
cat <<EOF > debian/changelog
246-
$sourcename ($packageversion) $distribution; urgency=low
247-
248-
* Custom built Linux kernel.
249-
250-
-- $maintainer $(date -R)
251-
EOF
252-
253-
# Generate copyright file
254-
cat <<EOF > debian/copyright
255-
This is a packacked upstream version of the Linux kernel.
256-
257-
The sources may be found at most Linux archive sites, including:
258-
https://www.kernel.org/pub/linux/kernel
259-
260-
Copyright: 1991 - 2017 Linus Torvalds and others.
261-
262-
The git repository for mainline kernel development is at:
263-
git://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-
269-
On Debian GNU/Linux systems, the complete text of the GNU General Public
270-
License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
271-
EOF
272-
273-
274-
build_depends="bc, kmod, cpio "
275-
276-
# Generate a control file
277-
cat <<EOF > debian/control
278-
Source: $sourcename
279-
Section: kernel
280-
Priority: optional
281-
Maintainer: $maintainer
282-
Build-Depends: $build_depends
283-
Homepage: http://www.kernel.org/
284-
EOF
285-
286-
if [ "$ARCH" = "um" ]; then
287-
cat <<EOF >> debian/control
288-
289-
Package: $packagename
290-
Architecture: any
291-
Description: 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.
300-
EOF
301-
302-
else
303-
cat <<EOF >> debian/control
304-
305-
Package: $packagename
306-
Architecture: any
307-
Description: Linux kernel, version $version
308-
This package contains the Linux kernel, modules and corresponding other
309-
files, version: $version.
310-
EOF
311-
312-
fi
313-
314156
# Build kernel header package
315157
(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles"
316158
(cd $srctree; find arch/*/include include scripts -type f -o -type l) >> "$objtree/debian/hdrsrcfiles"
@@ -331,27 +173,6 @@ mkdir -p "$destdir"
331173
ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
332174
rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
333175

334-
cat <<EOF >> debian/control
335-
336-
Package: $kernel_headers_packagename
337-
Architecture: any
338-
Description: 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
342-
EOF
343-
344-
cat <<EOF >> debian/control
345-
346-
Package: $libc_headers_packagename
347-
Section: devel
348-
Provides: linux-kernel-headers
349-
Architecture: any
350-
Description: 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.
353-
EOF
354-
355176
if [ "$ARCH" != "um" ]; then
356177
create_package "$kernel_headers_packagename" "$kernel_headers_dir"
357178
create_package "$libc_headers_packagename" "$libc_headers_dir"
@@ -370,47 +191,7 @@ if [ -n "$BUILD_DEBUG" ] ; then
370191
ln -s ../lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/boot/vmlinux-$version
371192
# kdump-tools
372193
ln -s lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/vmlinux-$version
373-
374-
cat <<EOF >> debian/control
375-
376-
Package: $dbg_packagename
377-
Section: debug
378-
Architecture: any
379-
Description: 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.
382-
EOF
383-
384194
create_package "$dbg_packagename" "$dbg_dir"
385195
fi
386196

387-
if [ "x$1" = "xdeb-pkg" ]
388-
then
389-
cat <<EOF > debian/rules
390-
#!/usr/bin/make -f
391-
392-
build:
393-
\$(MAKE)
394-
395-
binary-arch:
396-
\$(MAKE) KDEB_SOURCENAME=${sourcename} KDEB_PKGVERSION=${packageversion} bindeb-pkg
397-
398-
clean:
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-
404-
binary: binary-arch
405-
EOF
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
412-
else
413-
dpkg-genchanges -b -Vkernel:debarch="${debarch}" > ../${sourcename}_${packageversion}_${debarch}.changes
414-
fi
415-
416197
exit 0

0 commit comments

Comments
 (0)