]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - scripts/package/builddeb
deb-pkg: Make deb-pkg generate a seperate linux-libc-dev deb
[mirror_ubuntu-artful-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"
cd8d60a2 79hdrdir="$objtree/debian/hdrtmp"
e6807785 80headerdir="$objtree/debian/headertmp"
f7a2c31f 81packagename=linux-image-$version
bf1b3644 82fwpackagename=linux-firmware-image
cd8d60a2 83hdrpackagename=linux-headers-$version
e6807785 84headerpackagename=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
e6807785 91rm -rf "$tmpdir" "$fwdir" "$hdrdir" "$headerdir"
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"
e6807785 96mkdir -m 755 -p "$headerdir/DEBIAN"
97mkdir -p "$headerdir/usr/share/doc/$headerpackagename"
4f66199b 98if [ "$ARCH" = "um" ] ; then
9461f666 99 mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
687c3dac 100fi
1da177e4
LT
101
102# Build and install the kernel
4f66199b 103if [ "$ARCH" = "um" ] ; then
687c3dac
SR
104 $MAKE linux
105 cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
106 cp .config "$tmpdir/usr/share/doc/$packagename/config"
107 gzip "$tmpdir/usr/share/doc/$packagename/config"
108 cp $KBUILD_IMAGE "$tmpdir/usr/bin/linux-$version"
109else
110 cp System.map "$tmpdir/boot/System.map-$version"
111 cp .config "$tmpdir/boot/config-$version"
a89b433b 112 # Not all arches include the boot path in KBUILD_IMAGE
242c5ab0
GJ
113 if [ -e $KBUILD_IMAGE ]; then
114 cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
115 else
a89b433b
FP
116 cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
117 fi
687c3dac 118fi
1da177e4
LT
119
120if grep -q '^CONFIG_MODULES=y' .config ; then
a91f98a2 121 INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install
4f66199b 122 if [ "$ARCH" = "um" ] ; then
687c3dac
SR
123 mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
124 rmdir "$tmpdir/lib/modules/$version"
125 fi
1da177e4
LT
126fi
127
e6807785 128make headers_check
129make headers_install INSTALL_HDR_PATH="$headerdir/usr"
130
1da177e4 131# Install the maintainer scripts
fe233cb6
FP
132# Note: hook scripts under /etc/kernel are also executed by official Debian
133# kernel packages, as well as kernel packages built using make-kpkg
134debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
1da177e4 135for script in postinst postrm preinst prerm ; do
fe233cb6 136 mkdir -p "$tmpdir$debhookdir/$script.d"
1da177e4
LT
137 cat <<EOF > "$tmpdir/DEBIAN/$script"
138#!/bin/sh
139
140set -e
141
4964451a 142# Pass maintainer script parameters to hook scripts
241ad11f 143export DEB_MAINT_PARAMS="\$*"
4964451a 144
fe233cb6 145test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d
1da177e4
LT
146exit 0
147EOF
148 chmod 755 "$tmpdir/DEBIAN/$script"
149done
150
edec611d 151# Try to determine maintainer and email values
152if [ -n "$DEBEMAIL" ]; then
153 email=$DEBEMAIL
154elif [ -n "$EMAIL" ]; then
155 email=$EMAIL
156else
157 email=$(id -nu)@$(hostname -f)
158fi
159if [ -n "$DEBFULLNAME" ]; then
160 name=$DEBFULLNAME
161elif [ -n "$NAME" ]; then
162 name=$NAME
163else
164 name="Anonymous"
165fi
166maintainer="$name <$email>"
167
1da177e4
LT
168# Generate a simple changelog template
169cat <<EOF > debian/changelog
4bf4cd49 170linux-upstream ($packageversion) unstable; urgency=low
1da177e4 171
a83ca277 172 * Custom built Linux kernel.
1da177e4 173
edec611d 174 -- $maintainer $(date -R)
1da177e4
LT
175EOF
176
9461f666
FP
177# Generate copyright file
178cat <<EOF > debian/copyright
179This is a packacked upstream version of the Linux kernel.
180
181The sources may be found at most Linux ftp sites, including:
182ftp://ftp.kernel.org/pub/linux/kernel
183
184Copyright: 1991 - 2009 Linus Torvalds and others.
185
186The git repository for mainline kernel development is at:
187git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
188
189 This program is free software; you can redistribute it and/or modify
190 it under the terms of the GNU General Public License as published by
191 the Free Software Foundation; version 2 dated June, 1991.
192
193On Debian GNU/Linux systems, the complete text of the GNU General Public
194License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
195EOF
196
1da177e4 197# Generate a control file
3e2ab256 198cat <<EOF > debian/control
4bf4cd49 199Source: linux-upstream
aa42abed 200Section: kernel
dc5962fd 201Priority: optional
edec611d 202Maintainer: $maintainer
2d7204ac 203Standards-Version: 3.8.4
ee6eed80 204Homepage: http://www.kernel.org/
3e2ab256
FP
205EOF
206
207if [ "$ARCH" = "um" ]; then
208 cat <<EOF >> debian/control
dc5962fd
SR
209
210Package: $packagename
8ebc2fe9 211Provides: linux-image, linux-image-2.6, linux-modules-$version
dc5962fd
SR
212Architecture: any
213Description: User Mode Linux kernel, version $version
214 User-mode Linux is a port of the Linux kernel to its own system call
215 interface. It provides a kind of virtual machine, which runs Linux
216 as a user process under another Linux kernel. This is useful for
217 kernel development, sandboxes, jails, experimentation, and
218 many other things.
219 .
220 This package contains the Linux kernel, modules and corresponding other
a83ca277 221 files, version: $version.
dc5962fd
SR
222EOF
223
224else
3e2ab256 225 cat <<EOF >> debian/control
1da177e4 226
687c3dac 227Package: $packagename
8ebc2fe9 228Provides: linux-image, linux-image-2.6, linux-modules-$version
bf1b3644 229Suggests: $fwpackagename
1da177e4 230Architecture: any
dc5962fd 231Description: Linux kernel, version $version
1da177e4 232 This package contains the Linux kernel, modules and corresponding other
a83ca277 233 files, version: $version.
1da177e4 234EOF
4f66199b 235
dc5962fd 236fi
1da177e4 237
cd8d60a2
TT
238# Build header package
239find . -name Makefile -o -name Kconfig\* -o -name \*.pl > /tmp/files$$
240find arch/x86/include include scripts -type f >> /tmp/files$$
241(cd $objtree; find .config Module.symvers include scripts -type f >> /tmp/objfiles$$)
242destdir=$hdrdir/usr/src/linux-headers-$version
243mkdir -p "$destdir" "$hdrdir/DEBIAN" "$hdrdir/usr/share/doc/$hdrpackagename"
244tar -c -f - -T /tmp/files$$ | (cd $destdir; tar -xf -)
245(cd $objtree; tar -c -f - -T /tmp/objfiles$$) | (cd $destdir; tar -xf -)
246rm -f /tmp/files$$ /tmp/objfiles$$
247arch=$(dpkg --print-architecture)
248
249cat <<EOF >> debian/control
250
251Package: $hdrpackagename
252Provides: linux-headers, linux-headers-2.6
253Architecture: $arch
254Description: Linux kernel headers for $KERNELRELEASE on $arch
255 This package provides kernel header files for $KERNELRELEASE on $arch
256 .
257 This is useful for people who need to build external modules
258EOF
259
260create_package "$hdrpackagename" "$hdrdir"
261
bf1b3644
JM
262# Do we have firmware? Move it out of the way and build it into a package.
263if [ -e "$tmpdir/lib/firmware" ]; then
264 mv "$tmpdir/lib/firmware" "$fwdir/lib/"
265
266 cat <<EOF >> debian/control
267
268Package: $fwpackagename
269Architecture: all
270Description: Linux kernel firmware, version $version
a83ca277 271 This package contains firmware from the Linux kernel, version $version.
bf1b3644
JM
272EOF
273
3e2ab256 274 create_package "$fwpackagename" "$fwdir"
bf1b3644
JM
275fi
276
e6807785 277cat <<EOF >> debian/control
278
279Package: $headerpackagename
280Section: devel
281Provides: linux-kernel-headers
282Architecture: any
283Description: Linux support headers for userspace development
284 This package provides userspaces headers from the Linux kernel. These headers
285 are used by the installed headers for GNU glibc and other system libraries.
286EOF
287
288create_package "$headerpackagename" "$headerdir"
3e2ab256 289create_package "$packagename" "$tmpdir"
1da177e4
LT
290
291exit 0