]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - scripts/package/builddeb
deb-pkg: Install linux-firmware-image in versioned dir
[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"
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"
6607ddad 95mkdir -p "$fwdir/lib/firmware/$version/" "$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
dddcbb7c 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
d7d357bc 133if [ "$ARCH" != "um" ]; then
dddcbb7c
JR
134 $MAKE headers_check KBUILD_SRC=
135 $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr"
d7d357bc 136fi
e6807785 137
1da177e4 138# Install the maintainer scripts
fe233cb6
FP
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
141debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
1da177e4 142for script in postinst postrm preinst prerm ; do
fe233cb6 143 mkdir -p "$tmpdir$debhookdir/$script.d"
1da177e4
LT
144 cat <<EOF > "$tmpdir/DEBIAN/$script"
145#!/bin/sh
146
147set -e
148
4964451a 149# Pass maintainer script parameters to hook scripts
241ad11f 150export DEB_MAINT_PARAMS="\$*"
4964451a 151
fe233cb6 152test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d
1da177e4
LT
153exit 0
154EOF
155 chmod 755 "$tmpdir/DEBIAN/$script"
156done
157
edec611d 158# Try to determine maintainer and email values
159if [ -n "$DEBEMAIL" ]; then
160 email=$DEBEMAIL
161elif [ -n "$EMAIL" ]; then
162 email=$EMAIL
163else
164 email=$(id -nu)@$(hostname -f)
165fi
166if [ -n "$DEBFULLNAME" ]; then
167 name=$DEBFULLNAME
168elif [ -n "$NAME" ]; then
169 name=$NAME
170else
171 name="Anonymous"
172fi
173maintainer="$name <$email>"
174
1da177e4
LT
175# Generate a simple changelog template
176cat <<EOF > debian/changelog
4bf4cd49 177linux-upstream ($packageversion) unstable; urgency=low
1da177e4 178
a83ca277 179 * Custom built Linux kernel.
1da177e4 180
edec611d 181 -- $maintainer $(date -R)
1da177e4
LT
182EOF
183
9461f666
FP
184# Generate copyright file
185cat <<EOF > debian/copyright
186This is a packacked upstream version of the Linux kernel.
187
188The sources may be found at most Linux ftp sites, including:
189ftp://ftp.kernel.org/pub/linux/kernel
190
191Copyright: 1991 - 2009 Linus Torvalds and others.
192
193The git repository for mainline kernel development is at:
194git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
195
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.
199
200On Debian GNU/Linux systems, the complete text of the GNU General Public
201License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
202EOF
203
1da177e4 204# Generate a control file
3e2ab256 205cat <<EOF > debian/control
4bf4cd49 206Source: linux-upstream
aa42abed 207Section: kernel
dc5962fd 208Priority: optional
edec611d 209Maintainer: $maintainer
2d7204ac 210Standards-Version: 3.8.4
ee6eed80 211Homepage: http://www.kernel.org/
3e2ab256
FP
212EOF
213
214if [ "$ARCH" = "um" ]; then
215 cat <<EOF >> debian/control
dc5962fd
SR
216
217Package: $packagename
8ebc2fe9 218Provides: linux-image, linux-image-2.6, linux-modules-$version
dc5962fd
SR
219Architecture: any
220Description: 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.
226 .
227 This package contains the Linux kernel, modules and corresponding other
a83ca277 228 files, version: $version.
dc5962fd
SR
229EOF
230
231else
3e2ab256 232 cat <<EOF >> debian/control
1da177e4 233
687c3dac 234Package: $packagename
8ebc2fe9 235Provides: linux-image, linux-image-2.6, linux-modules-$version
bf1b3644 236Suggests: $fwpackagename
1da177e4 237Architecture: any
dc5962fd 238Description: Linux kernel, version $version
1da177e4 239 This package contains the Linux kernel, modules and corresponding other
a83ca277 240 files, version: $version.
1da177e4 241EOF
4f66199b 242
dc5962fd 243fi
1da177e4 244
cd8d60a2 245# Build header package
6c635224
BH
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")
19a4b988 248(cd $objtree; find arch/$SRCARCH/include .config Module.symvers include scripts -type f >> "$objtree/debian/hdrobjfiles")
ee81b786 249destdir=$kernel_headers_dir/usr/src/linux-headers-$version
250mkdir -p "$destdir"
6c635224
BH
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 -)
a47b6c61 253ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
6c635224 254rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
cd8d60a2
TT
255arch=$(dpkg --print-architecture)
256
257cat <<EOF >> debian/control
258
ee81b786 259Package: $kernel_headers_packagename
cd8d60a2
TT
260Provides: linux-headers, linux-headers-2.6
261Architecture: $arch
262Description: Linux kernel headers for $KERNELRELEASE on $arch
263 This package provides kernel header files for $KERNELRELEASE on $arch
264 .
265 This is useful for people who need to build external modules
266EOF
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
6607ddad 270 mv "$tmpdir/lib/firmware"/* "$fwdir/lib/firmware/$version/"
271 rmdir "$tmpdir/lib/firmware"
bf1b3644
JM
272
273 cat <<EOF >> debian/control
274
275Package: $fwpackagename
276Architecture: all
277Description: Linux kernel firmware, version $version
a83ca277 278 This package contains firmware from the Linux kernel, version $version.
bf1b3644
JM
279EOF
280
3e2ab256 281 create_package "$fwpackagename" "$fwdir"
bf1b3644
JM
282fi
283
e6807785 284cat <<EOF >> debian/control
285
ee81b786 286Package: $libc_headers_packagename
e6807785 287Section: devel
288Provides: linux-kernel-headers
289Architecture: any
290Description: 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.
293EOF
294
d7d357bc
JR
295if [ "$ARCH" != "um" ]; then
296 create_package "$kernel_headers_packagename" "$kernel_headers_dir"
297 create_package "$libc_headers_packagename" "$libc_headers_dir"
298fi
299
3e2ab256 300create_package "$packagename" "$tmpdir"
1da177e4
LT
301
302exit 0