Merge branch 'for_2.6.40/gpio-move' of git://git.kernel.org/pub/scm/linux/kernel...
[deliverable/linux.git] / scripts / package / builddeb
1 #!/bin/sh
2 #
3 # builddeb 1.3
4 # Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
5 #
6 # Simple script to generate a deb package for a Linux kernel. All the
7 # complexity of what to do with a kernel after it is installed or removed
8 # is left to other scripts and packages: they can install scripts in the
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.
12
13 set -e
14
15 create_package() {
16 local pname="$1" pdir="$2"
17
18 cp debian/copyright "$pdir/usr/share/doc/$pname/"
19 cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian"
20 gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian"
21 sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \
22 | xargs -r0 md5sum > DEBIAN/md5sums"
23
24 # Fix ownership and permissions
25 chown -R root:root "$pdir"
26 chmod -R go-w "$pdir"
27
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
57 if [ -n "$KBUILD_DEBARCH" ] ; then
58 debarch="$KBUILD_DEBARCH"
59 fi
60 if [ -n "$debarch" ] ; then
61 forcearch="-DArchitecture=$debarch"
62 fi
63
64 # Create the package
65 dpkg-gencontrol -isp $forcearch -p$pname -P"$pdir"
66 dpkg --build "$pdir" ..
67 }
68
69 # Some variables and settings used throughout the script
70 version=$KERNELRELEASE
71 revision=$(cat .version)
72 if [ -n "$KDEB_PKGVERSION" ]; then
73 packageversion=$KDEB_PKGVERSION
74 else
75 packageversion=$version-$revision
76 fi
77 tmpdir="$objtree/debian/tmp"
78 fwdir="$objtree/debian/fwtmp"
79 kernel_headers_dir="$objtree/debian/hdrtmp"
80 libc_headers_dir="$objtree/debian/headertmp"
81 packagename=linux-image-$version
82 fwpackagename=linux-firmware-image
83 kernel_headers_packagename=linux-headers-$version
84 libc_headers_packagename=linux-libc-dev
85
86 if [ "$ARCH" = "um" ] ; then
87 packagename=user-mode-linux-$version
88 fi
89
90 # Setup the directory structure
91 rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir"
92 mkdir -m 755 -p "$tmpdir/DEBIAN"
93 mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
94 mkdir -m 755 -p "$fwdir/DEBIAN"
95 mkdir -p "$fwdir/lib" "$fwdir/usr/share/doc/$fwpackagename"
96 mkdir -m 755 -p "$libc_headers_dir/DEBIAN"
97 mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
98 mkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
99 mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
100 if [ "$ARCH" = "um" ] ; then
101 mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
102 fi
103
104 # Build and install the kernel
105 if [ "$ARCH" = "um" ] ; then
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"
111 else
112 cp System.map "$tmpdir/boot/System.map-$version"
113 cp .config "$tmpdir/boot/config-$version"
114 # Not all arches include the boot path in KBUILD_IMAGE
115 if [ -e $KBUILD_IMAGE ]; then
116 cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
117 else
118 cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
119 fi
120 fi
121
122 if grep -q '^CONFIG_MODULES=y' .config ; then
123 INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install
124 if [ "$ARCH" = "um" ] ; then
125 mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
126 rmdir "$tmpdir/lib/modules/$version"
127 fi
128 fi
129
130 make headers_check
131 make headers_install INSTALL_HDR_PATH="$libc_headers_dir/usr"
132
133 # Install the maintainer scripts
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
136 debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
137 for script in postinst postrm preinst prerm ; do
138 mkdir -p "$tmpdir$debhookdir/$script.d"
139 cat <<EOF > "$tmpdir/DEBIAN/$script"
140 #!/bin/sh
141
142 set -e
143
144 # Pass maintainer script parameters to hook scripts
145 export DEB_MAINT_PARAMS="\$*"
146
147 test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d
148 exit 0
149 EOF
150 chmod 755 "$tmpdir/DEBIAN/$script"
151 done
152
153 # Try to determine maintainer and email values
154 if [ -n "$DEBEMAIL" ]; then
155 email=$DEBEMAIL
156 elif [ -n "$EMAIL" ]; then
157 email=$EMAIL
158 else
159 email=$(id -nu)@$(hostname -f)
160 fi
161 if [ -n "$DEBFULLNAME" ]; then
162 name=$DEBFULLNAME
163 elif [ -n "$NAME" ]; then
164 name=$NAME
165 else
166 name="Anonymous"
167 fi
168 maintainer="$name <$email>"
169
170 # Generate a simple changelog template
171 cat <<EOF > debian/changelog
172 linux-upstream ($packageversion) unstable; urgency=low
173
174 * Custom built Linux kernel.
175
176 -- $maintainer $(date -R)
177 EOF
178
179 # Generate copyright file
180 cat <<EOF > debian/copyright
181 This is a packacked upstream version of the Linux kernel.
182
183 The sources may be found at most Linux ftp sites, including:
184 ftp://ftp.kernel.org/pub/linux/kernel
185
186 Copyright: 1991 - 2009 Linus Torvalds and others.
187
188 The git repository for mainline kernel development is at:
189 git://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
195 On Debian GNU/Linux systems, the complete text of the GNU General Public
196 License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
197 EOF
198
199 # Generate a control file
200 cat <<EOF > debian/control
201 Source: linux-upstream
202 Section: kernel
203 Priority: optional
204 Maintainer: $maintainer
205 Standards-Version: 3.8.4
206 Homepage: http://www.kernel.org/
207 EOF
208
209 if [ "$ARCH" = "um" ]; then
210 cat <<EOF >> debian/control
211
212 Package: $packagename
213 Provides: linux-image, linux-image-2.6, linux-modules-$version
214 Architecture: any
215 Description: 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
223 files, version: $version.
224 EOF
225
226 else
227 cat <<EOF >> debian/control
228
229 Package: $packagename
230 Provides: linux-image, linux-image-2.6, linux-modules-$version
231 Suggests: $fwpackagename
232 Architecture: any
233 Description: Linux kernel, version $version
234 This package contains the Linux kernel, modules and corresponding other
235 files, version: $version.
236 EOF
237
238 fi
239
240 # Build header package
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$$)
243 (cd $objtree; find .config Module.symvers include scripts -type f >> /tmp/objfiles$$)
244 destdir=$kernel_headers_dir/usr/src/linux-headers-$version
245 mkdir -p "$destdir"
246 (cd $srctree; tar -c -f - -T /tmp/files$$) | (cd $destdir; tar -xf -)
247 (cd $objtree; tar -c -f - -T /tmp/objfiles$$) | (cd $destdir; tar -xf -)
248 rm -f /tmp/files$$ /tmp/objfiles$$
249 arch=$(dpkg --print-architecture)
250
251 cat <<EOF >> debian/control
252
253 Package: $kernel_headers_packagename
254 Provides: linux-headers, linux-headers-2.6
255 Architecture: $arch
256 Description: 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
260 EOF
261
262 create_package "$kernel_headers_packagename" "$kernel_headers_dir"
263
264 # Do we have firmware? Move it out of the way and build it into a package.
265 if [ -e "$tmpdir/lib/firmware" ]; then
266 mv "$tmpdir/lib/firmware" "$fwdir/lib/"
267
268 cat <<EOF >> debian/control
269
270 Package: $fwpackagename
271 Architecture: all
272 Description: Linux kernel firmware, version $version
273 This package contains firmware from the Linux kernel, version $version.
274 EOF
275
276 create_package "$fwpackagename" "$fwdir"
277 fi
278
279 cat <<EOF >> debian/control
280
281 Package: $libc_headers_packagename
282 Section: devel
283 Provides: linux-kernel-headers
284 Architecture: any
285 Description: 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.
288 EOF
289
290 create_package "$libc_headers_packagename" "$libc_headers_dir"
291 create_package "$packagename" "$tmpdir"
292
293 exit 0
This page took 0.039534 seconds and 5 git commands to generate.