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
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"
29 dpkg-gencontrol -isp -p$pname -P"$pdir"
30 dpkg --build "$pdir" ..
33 # Some variables and settings used throughout the script
34 version=$KERNELRELEASE
35 revision=$(cat .version)
36 if [ -n "$KDEB_PKGVERSION" ]; then
37 packageversion=$KDEB_PKGVERSION
39 packageversion=$version-$revision
41 tmpdir="$objtree/debian/tmp"
42 fwdir="$objtree/debian/fwtmp"
43 packagename=linux-image-$version
44 fwpackagename=linux-firmware-image
46 if [ "$ARCH" = "um" ] ; then
47 packagename=user-mode-linux-$version
50 # Setup the directory structure
51 rm -rf "$tmpdir" "$fwdir"
52 mkdir -p "$tmpdir/DEBIAN" "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
53 mkdir -p "$fwdir/DEBIAN" "$fwdir/lib" "$fwdir/usr/share/doc/$fwpackagename"
54 if [ "$ARCH" = "um" ] ; then
55 mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
58 # Build and install the kernel
59 if [ "$ARCH" = "um" ] ; then
61 cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
62 cp .config "$tmpdir/usr/share/doc/$packagename/config"
63 gzip "$tmpdir/usr/share/doc/$packagename/config"
64 cp $KBUILD_IMAGE "$tmpdir/usr/bin/linux-$version"
66 cp System.map "$tmpdir/boot/System.map-$version"
67 cp .config "$tmpdir/boot/config-$version"
68 # Not all arches include the boot path in KBUILD_IMAGE
69 if [ -e $KBUILD_IMAGE ]; then
70 cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
72 cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
76 if grep -q '^CONFIG_MODULES=y' .config ; then
77 INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install
78 if [ "$ARCH" = "um" ] ; then
79 mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
80 rmdir "$tmpdir/lib/modules/$version"
84 # Install the maintainer scripts
85 # Note: hook scripts under /etc/kernel are also executed by official Debian
86 # kernel packages, as well as kernel packages built using make-kpkg
87 debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
88 for script in postinst postrm preinst prerm ; do
89 mkdir -p "$tmpdir$debhookdir/$script.d"
90 cat <<EOF > "$tmpdir/DEBIAN/$script"
95 # Pass maintainer script parameters to hook scripts
96 export DEB_MAINT_PARAMS="\$*"
98 test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d
101 chmod 755 "$tmpdir/DEBIAN/$script"
104 # Try to determine maintainer and email values
105 if [ -n "$DEBEMAIL" ]; then
107 elif [ -n "$EMAIL" ]; then
110 email=$(id -nu)@$(hostname -f)
112 if [ -n "$DEBFULLNAME" ]; then
114 elif [ -n "$NAME" ]; then
119 maintainer="$name <$email>"
121 # Generate a simple changelog template
122 cat <<EOF > debian/changelog
123 linux-upstream ($packageversion) unstable; urgency=low
125 * Custom built Linux kernel.
127 -- $maintainer $(date -R)
130 # Generate copyright file
131 cat <<EOF > debian/copyright
132 This is a packacked upstream version of the Linux kernel.
134 The sources may be found at most Linux ftp sites, including:
135 ftp://ftp.kernel.org/pub/linux/kernel
137 Copyright: 1991 - 2009 Linus Torvalds and others.
139 The git repository for mainline kernel development is at:
140 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
142 This program is free software; you can redistribute it and/or modify
143 it under the terms of the GNU General Public License as published by
144 the Free Software Foundation; version 2 dated June, 1991.
146 On Debian GNU/Linux systems, the complete text of the GNU General Public
147 License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
150 # Generate a control file
151 cat <<EOF > debian/control
152 Source: linux-upstream
155 Maintainer: $maintainer
156 Standards-Version: 3.8.4
157 Homepage: http://www.kernel.org/
160 if [ "$ARCH" = "um" ]; then
161 cat <<EOF >> debian/control
163 Package: $packagename
164 Provides: linux-image, linux-image-2.6, linux-modules-$version
166 Description: User Mode Linux kernel, version $version
167 User-mode Linux is a port of the Linux kernel to its own system call
168 interface. It provides a kind of virtual machine, which runs Linux
169 as a user process under another Linux kernel. This is useful for
170 kernel development, sandboxes, jails, experimentation, and
173 This package contains the Linux kernel, modules and corresponding other
174 files, version: $version.
178 cat <<EOF >> debian/control
180 Package: $packagename
181 Provides: linux-image, linux-image-2.6, linux-modules-$version
182 Suggests: $fwpackagename
184 Description: Linux kernel, version $version
185 This package contains the Linux kernel, modules and corresponding other
186 files, version: $version.
191 # Do we have firmware? Move it out of the way and build it into a package.
192 if [ -e "$tmpdir/lib/firmware" ]; then
193 mv "$tmpdir/lib/firmware" "$fwdir/lib/"
195 cat <<EOF >> debian/control
197 Package: $fwpackagename
199 Description: Linux kernel firmware, version $version
200 This package contains firmware from the Linux kernel, version $version.
203 create_package "$fwpackagename" "$fwdir"
206 create_package "$packagename" "$tmpdir"