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