]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - scripts/package/builddeb
kbuild: Fix link to headers in 'make deb-pkg'
[mirror_ubuntu-bionic-kernel.git] / scripts / package / builddeb
CommitLineData
1da177e4
LT
1#!/bin/sh
2#
4964451a 3# builddeb 1.3
1da177e4
LT
4# Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
5#
6# Simple script to generate a deb package for a Linux kernel. All the
4f66199b 7# complexity of what to do with a kernel after it is installed or removed
1da177e4 8# is left to other scripts and packages: they can install scripts in the
fe233cb6
FP
9# /etc/kernel/{pre,post}{inst,rm}.d/ directories (or an alternative location
10# specified in KDEB_HOOKDIR) that will be called on package install and
11# removal.
1da177e4
LT
12
13set -e
14
3e2ab256
FP
15create_package() {
16 local pname="$1" pdir="$2"
17
9461f666 18 cp debian/copyright "$pdir/usr/share/doc/$pname/"
1ab18486 19 cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian"
20 gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian"
b59a1225
FJ
21 sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \
22 | xargs -r0 md5sum > DEBIAN/md5sums"
9461f666 23
3e2ab256
FP
24 # Fix ownership and permissions
25 chown -R root:root "$pdir"
26 chmod -R go-w "$pdir"
27
10f26fa6
AST
28 # Attempt to find the correct Debian architecture
29 local forcearch="" debarch=""
30 case "$UTS_MACHINE" in
31 i386|ia64|alpha)
32 debarch="$UTS_MACHINE" ;;
33 x86_64)
34 debarch=amd64 ;;
35 sparc*)
36 debarch=sparc ;;
37 s390*)
38 debarch=s390 ;;
39 ppc*)
40 debarch=powerpc ;;
41 parisc*)
42 debarch=hppa ;;
43 mips*)
44 debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y .config && echo el) ;;
45 arm*)
46 debarch=arm$(grep -q CONFIG_AEABI=y .config && echo el) ;;
47 *)
48 echo "" >&2
49 echo "** ** ** WARNING ** ** **" >&2
50 echo "" >&2
51 echo "Your architecture doesn't have it's equivalent" >&2
52 echo "Debian userspace architecture defined!" >&2
53 echo "Falling back to using your current userspace instead!" >&2
54 echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
55 echo "" >&2
56 esac
55f88ecc
AST
57 if [ -n "$KBUILD_DEBARCH" ] ; then
58 debarch="$KBUILD_DEBARCH"
59 fi
10f26fa6
AST
60 if [ -n "$debarch" ] ; then
61 forcearch="-DArchitecture=$debarch"
62 fi
63
3e2ab256 64 # Create the package
10f26fa6 65 dpkg-gencontrol -isp $forcearch -p$pname -P"$pdir"
3e2ab256
FP
66 dpkg --build "$pdir" ..
67}
68
1da177e4
LT
69# Some variables and settings used throughout the script
70version=$KERNELRELEASE
4f66199b 71revision=$(cat .version)
c72c75db
FP
72if [ -n "$KDEB_PKGVERSION" ]; then
73 packageversion=$KDEB_PKGVERSION
74else
75 packageversion=$version-$revision
76fi
1da177e4 77tmpdir="$objtree/debian/tmp"
bf1b3644 78fwdir="$objtree/debian/fwtmp"
ee81b786 79kernel_headers_dir="$objtree/debian/hdrtmp"
80libc_headers_dir="$objtree/debian/headertmp"
f7a2c31f 81packagename=linux-image-$version
bf1b3644 82fwpackagename=linux-firmware-image
ee81b786 83kernel_headers_packagename=linux-headers-$version
84libc_headers_packagename=linux-libc-dev
687c3dac 85
4f66199b 86if [ "$ARCH" = "um" ] ; then
687c3dac
SR
87 packagename=user-mode-linux-$version
88fi
1da177e4
LT
89
90# Setup the directory structure
ee81b786 91rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir"
e86c2412 92mkdir -m 755 -p "$tmpdir/DEBIAN"
93mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
94mkdir -m 755 -p "$fwdir/DEBIAN"
95mkdir -p "$fwdir/lib" "$fwdir/usr/share/doc/$fwpackagename"
ee81b786 96mkdir -m 755 -p "$libc_headers_dir/DEBIAN"
97mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
98mkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
99mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
a47b6c61 100mkdir -p "$kernel_headers_dir/lib/modules/$version/"
4f66199b 101if [ "$ARCH" = "um" ] ; then
9461f666 102 mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
687c3dac 103fi
1da177e4
LT
104
105# Build and install the kernel
4f66199b 106if [ "$ARCH" = "um" ] ; then
687c3dac
SR
107 $MAKE linux
108 cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
109 cp .config "$tmpdir/usr/share/doc/$packagename/config"
110 gzip "$tmpdir/usr/share/doc/$packagename/config"
111 cp $KBUILD_IMAGE "$tmpdir/usr/bin/linux-$version"
112else
113 cp System.map "$tmpdir/boot/System.map-$version"
114 cp .config "$tmpdir/boot/config-$version"
a89b433b 115 # Not all arches include the boot path in KBUILD_IMAGE
242c5ab0
GJ
116 if [ -e $KBUILD_IMAGE ]; then
117 cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
118 else
a89b433b
FP
119 cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
120 fi
687c3dac 121fi
1da177e4
LT
122
123if grep -q '^CONFIG_MODULES=y' .config ; then
a91f98a2 124 INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install
a47b6c61
JR
125 rm -f "$tmpdir/lib/modules/$version/build"
126 rm -f "$tmpdir/lib/modules/$version/source"
4f66199b 127 if [ "$ARCH" = "um" ] ; then
687c3dac
SR
128 mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
129 rmdir "$tmpdir/lib/modules/$version"
130 fi
1da177e4
LT
131fi
132
e6807785 133make headers_check
ee81b786 134make headers_install INSTALL_HDR_PATH="$libc_headers_dir/usr"
e6807785 135
1da177e4 136# Install the maintainer scripts
fe233cb6
FP
137# Note: hook scripts under /etc/kernel are also executed by official Debian
138# kernel packages, as well as kernel packages built using make-kpkg
139debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
1da177e4 140for script in postinst postrm preinst prerm ; do
fe233cb6 141 mkdir -p "$tmpdir$debhookdir/$script.d"
1da177e4
LT
142 cat <<EOF > "$tmpdir/DEBIAN/$script"
143#!/bin/sh
144
145set -e
146
4964451a 147# Pass maintainer script parameters to hook scripts
241ad11f 148export DEB_MAINT_PARAMS="\$*"
4964451a 149
fe233cb6 150test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d
1da177e4
LT
151exit 0
152EOF
153 chmod 755 "$tmpdir/DEBIAN/$script"
154done
155
edec611d 156# Try to determine maintainer and email values
157if [ -n "$DEBEMAIL" ]; then
158 email=$DEBEMAIL
159elif [ -n "$EMAIL" ]; then
160 email=$EMAIL
161else
162 email=$(id -nu)@$(hostname -f)
163fi
164if [ -n "$DEBFULLNAME" ]; then
165 name=$DEBFULLNAME
166elif [ -n "$NAME" ]; then
167 name=$NAME
168else
169 name="Anonymous"
170fi
171maintainer="$name <$email>"
172
1da177e4
LT
173# Generate a simple changelog template
174cat <<EOF > debian/changelog
4bf4cd49 175linux-upstream ($packageversion) unstable; urgency=low
1da177e4 176
a83ca277 177 * Custom built Linux kernel.
1da177e4 178
edec611d 179 -- $maintainer $(date -R)
1da177e4
LT
180EOF
181
9461f666
FP
182# Generate copyright file
183cat <<EOF > debian/copyright
184This is a packacked upstream version of the Linux kernel.
185
186The sources may be found at most Linux ftp sites, including:
187ftp://ftp.kernel.org/pub/linux/kernel
188
189Copyright: 1991 - 2009 Linus Torvalds and others.
190
191The git repository for mainline kernel development is at:
192git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
193
194 This program is free software; you can redistribute it and/or modify
195 it under the terms of the GNU General Public License as published by
196 the Free Software Foundation; version 2 dated June, 1991.
197
198On Debian GNU/Linux systems, the complete text of the GNU General Public
199License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
200EOF
201
1da177e4 202# Generate a control file
3e2ab256 203cat <<EOF > debian/control
4bf4cd49 204Source: linux-upstream
aa42abed 205Section: kernel
dc5962fd 206Priority: optional
edec611d 207Maintainer: $maintainer
2d7204ac 208Standards-Version: 3.8.4
ee6eed80 209Homepage: http://www.kernel.org/
3e2ab256
FP
210EOF
211
212if [ "$ARCH" = "um" ]; then
213 cat <<EOF >> debian/control
dc5962fd
SR
214
215Package: $packagename
8ebc2fe9 216Provides: linux-image, linux-image-2.6, linux-modules-$version
dc5962fd
SR
217Architecture: any
218Description: User Mode Linux kernel, version $version
219 User-mode Linux is a port of the Linux kernel to its own system call
220 interface. It provides a kind of virtual machine, which runs Linux
221 as a user process under another Linux kernel. This is useful for
222 kernel development, sandboxes, jails, experimentation, and
223 many other things.
224 .
225 This package contains the Linux kernel, modules and corresponding other
a83ca277 226 files, version: $version.
dc5962fd
SR
227EOF
228
229else
3e2ab256 230 cat <<EOF >> debian/control
1da177e4 231
687c3dac 232Package: $packagename
8ebc2fe9 233Provides: linux-image, linux-image-2.6, linux-modules-$version
bf1b3644 234Suggests: $fwpackagename
1da177e4 235Architecture: any
dc5962fd 236Description: Linux kernel, version $version
1da177e4 237 This package contains the Linux kernel, modules and corresponding other
a83ca277 238 files, version: $version.
1da177e4 239EOF
4f66199b 240
dc5962fd 241fi
1da177e4 242
cd8d60a2 243# Build header package
6c635224
BH
244(cd $srctree; find . -name Makefile -o -name Kconfig\* -o -name \*.pl > "$objtree/debian/hdrsrcfiles")
245(cd $srctree; find arch/$SRCARCH/include include scripts -type f >> "$objtree/debian/hdrsrcfiles")
246(cd $objtree; find .config Module.symvers include scripts -type f >> "$objtree/debian/hdrobjfiles")
ee81b786 247destdir=$kernel_headers_dir/usr/src/linux-headers-$version
248mkdir -p "$destdir"
6c635224
BH
249(cd $srctree; tar -c -f - -T "$objtree/debian/hdrsrcfiles") | (cd $destdir; tar -xf -)
250(cd $objtree; tar -c -f - -T "$objtree/debian/hdrobjfiles") | (cd $destdir; tar -xf -)
a47b6c61 251ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
6c635224 252rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
cd8d60a2
TT
253arch=$(dpkg --print-architecture)
254
255cat <<EOF >> debian/control
256
ee81b786 257Package: $kernel_headers_packagename
cd8d60a2
TT
258Provides: linux-headers, linux-headers-2.6
259Architecture: $arch
260Description: Linux kernel headers for $KERNELRELEASE on $arch
261 This package provides kernel header files for $KERNELRELEASE on $arch
262 .
263 This is useful for people who need to build external modules
264EOF
265
ee81b786 266create_package "$kernel_headers_packagename" "$kernel_headers_dir"
cd8d60a2 267
bf1b3644
JM
268# Do we have firmware? Move it out of the way and build it into a package.
269if [ -e "$tmpdir/lib/firmware" ]; then
270 mv "$tmpdir/lib/firmware" "$fwdir/lib/"
271
272 cat <<EOF >> debian/control
273
274Package: $fwpackagename
275Architecture: all
276Description: Linux kernel firmware, version $version
a83ca277 277 This package contains firmware from the Linux kernel, version $version.
bf1b3644
JM
278EOF
279
3e2ab256 280 create_package "$fwpackagename" "$fwdir"
bf1b3644
JM
281fi
282
e6807785 283cat <<EOF >> debian/control
284
ee81b786 285Package: $libc_headers_packagename
e6807785 286Section: devel
287Provides: linux-kernel-headers
288Architecture: any
289Description: Linux support headers for userspace development
290 This package provides userspaces headers from the Linux kernel. These headers
291 are used by the installed headers for GNU glibc and other system libraries.
292EOF
293
ee81b786 294create_package "$libc_headers_packagename" "$libc_headers_dir"
3e2ab256 295create_package "$packagename" "$tmpdir"
1da177e4
LT
296
297exit 0