Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux-2.6.git] / scripts / package / builddeb
blobacb86507828aaba1304594588959fbfc2804c528
1 #!/bin/sh
3 # builddeb 1.3
4 # Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
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.
13 set -e
15 create_package() {
16 local pname="$1" pdir="$2"
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"
24 # Fix ownership and permissions
25 chown -R root:root "$pdir"
26 chmod -R go-w "$pdir"
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) ;;
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"
60 if [ -n "$debarch" ] ; then
61 forcearch="-DArchitecture=$debarch"
64 # Create the package
65 dpkg-gencontrol -isp $forcearch -p$pname -P"$pdir"
66 dpkg --build "$pdir" ..
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
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
86 if [ "$ARCH" = "um" ] ; then
87 packagename=user-mode-linux-$version
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/firmware/$version/" "$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 mkdir -p "$kernel_headers_dir/lib/modules/$version/"
101 if [ "$ARCH" = "um" ] ; then
102 mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
105 # Build and install the kernel
106 if [ "$ARCH" = "um" ] ; then
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"
112 else
113 cp System.map "$tmpdir/boot/System.map-$version"
114 cp .config "$tmpdir/boot/config-$version"
115 # Not all arches include the boot path in KBUILD_IMAGE
116 if [ -e $KBUILD_IMAGE ]; then
117 cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
118 else
119 cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
123 if grep -q '^CONFIG_MODULES=y' .config ; then
124 INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install
125 rm -f "$tmpdir/lib/modules/$version/build"
126 rm -f "$tmpdir/lib/modules/$version/source"
127 if [ "$ARCH" = "um" ] ; then
128 mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
129 rmdir "$tmpdir/lib/modules/$version"
133 if [ "$ARCH" != "um" ]; then
134 $MAKE headers_check KBUILD_SRC=
135 $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr"
138 # Install the maintainer scripts
139 # Note: hook scripts under /etc/kernel are also executed by official Debian
140 # kernel packages, as well as kernel packages built using make-kpkg
141 debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
142 for script in postinst postrm preinst prerm ; do
143 mkdir -p "$tmpdir$debhookdir/$script.d"
144 cat <<EOF > "$tmpdir/DEBIAN/$script"
145 #!/bin/sh
147 set -e
149 # Pass maintainer script parameters to hook scripts
150 export DEB_MAINT_PARAMS="\$*"
152 test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d
153 exit 0
155 chmod 755 "$tmpdir/DEBIAN/$script"
156 done
158 # Try to determine maintainer and email values
159 if [ -n "$DEBEMAIL" ]; then
160 email=$DEBEMAIL
161 elif [ -n "$EMAIL" ]; then
162 email=$EMAIL
163 else
164 email=$(id -nu)@$(hostname -f)
166 if [ -n "$DEBFULLNAME" ]; then
167 name=$DEBFULLNAME
168 elif [ -n "$NAME" ]; then
169 name=$NAME
170 else
171 name="Anonymous"
173 maintainer="$name <$email>"
175 # Generate a simple changelog template
176 cat <<EOF > debian/changelog
177 linux-upstream ($packageversion) unstable; urgency=low
179 * Custom built Linux kernel.
181 -- $maintainer $(date -R)
184 # Generate copyright file
185 cat <<EOF > debian/copyright
186 This is a packacked upstream version of the Linux kernel.
188 The sources may be found at most Linux ftp sites, including:
189 ftp://ftp.kernel.org/pub/linux/kernel
191 Copyright: 1991 - 2009 Linus Torvalds and others.
193 The git repository for mainline kernel development is at:
194 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
196 This program is free software; you can redistribute it and/or modify
197 it under the terms of the GNU General Public License as published by
198 the Free Software Foundation; version 2 dated June, 1991.
200 On Debian GNU/Linux systems, the complete text of the GNU General Public
201 License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
204 # Generate a control file
205 cat <<EOF > debian/control
206 Source: linux-upstream
207 Section: kernel
208 Priority: optional
209 Maintainer: $maintainer
210 Standards-Version: 3.8.4
211 Homepage: http://www.kernel.org/
214 if [ "$ARCH" = "um" ]; then
215 cat <<EOF >> debian/control
217 Package: $packagename
218 Provides: linux-image, linux-image-2.6, linux-modules-$version
219 Architecture: any
220 Description: User Mode Linux kernel, version $version
221 User-mode Linux is a port of the Linux kernel to its own system call
222 interface. It provides a kind of virtual machine, which runs Linux
223 as a user process under another Linux kernel. This is useful for
224 kernel development, sandboxes, jails, experimentation, and
225 many other things.
227 This package contains the Linux kernel, modules and corresponding other
228 files, version: $version.
231 else
232 cat <<EOF >> debian/control
234 Package: $packagename
235 Provides: linux-image, linux-image-2.6, linux-modules-$version
236 Suggests: $fwpackagename
237 Architecture: any
238 Description: Linux kernel, version $version
239 This package contains the Linux kernel, modules and corresponding other
240 files, version: $version.
245 # Build header package
246 (cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl > "$objtree/debian/hdrsrcfiles")
247 (cd $srctree; find arch/$SRCARCH/include include scripts -type f >> "$objtree/debian/hdrsrcfiles")
248 (cd $objtree; find arch/$SRCARCH/include .config Module.symvers include scripts -type f >> "$objtree/debian/hdrobjfiles")
249 destdir=$kernel_headers_dir/usr/src/linux-headers-$version
250 mkdir -p "$destdir"
251 (cd $srctree; tar -c -f - -T "$objtree/debian/hdrsrcfiles") | (cd $destdir; tar -xf -)
252 (cd $objtree; tar -c -f - -T "$objtree/debian/hdrobjfiles") | (cd $destdir; tar -xf -)
253 ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
254 rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
255 arch=$(dpkg --print-architecture)
257 cat <<EOF >> debian/control
259 Package: $kernel_headers_packagename
260 Provides: linux-headers, linux-headers-2.6
261 Architecture: $arch
262 Description: Linux kernel headers for $KERNELRELEASE on $arch
263 This package provides kernel header files for $KERNELRELEASE on $arch
265 This is useful for people who need to build external modules
268 # Do we have firmware? Move it out of the way and build it into a package.
269 if [ -e "$tmpdir/lib/firmware" ]; then
270 mv "$tmpdir/lib/firmware"/* "$fwdir/lib/firmware/$version/"
271 rmdir "$tmpdir/lib/firmware"
273 cat <<EOF >> debian/control
275 Package: $fwpackagename
276 Architecture: all
277 Description: Linux kernel firmware, version $version
278 This package contains firmware from the Linux kernel, version $version.
281 create_package "$fwpackagename" "$fwdir"
284 cat <<EOF >> debian/control
286 Package: $libc_headers_packagename
287 Section: devel
288 Provides: linux-kernel-headers
289 Architecture: any
290 Description: Linux support headers for userspace development
291 This package provides userspaces headers from the Linux kernel. These headers
292 are used by the installed headers for GNU glibc and other system libraries.
295 if [ "$ARCH" != "um" ]; then
296 create_package "$kernel_headers_packagename" "$kernel_headers_dir"
297 create_package "$libc_headers_packagename" "$libc_headers_dir"
300 create_package "$packagename" "$tmpdir"
302 exit 0