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"
28 # Attempt to find the correct Debian architecture
29 local forcearch="" debarch=""
30 case "$UTS_MACHINE" in
32 debarch="$UTS_MACHINE" ;;
44 debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y .config && echo el) ;;
46 debarch=arm$(grep -q CONFIG_AEABI=y .config && echo el) ;;
49 echo "** ** ** WARNING ** ** **" >&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
57 if [ -n "$KBUILD_DEBARCH" ] ; then
58 debarch="$KBUILD_DEBARCH"
60 if [ -n "$debarch" ] ; then
61 forcearch="-DArchitecture=$debarch"
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
75 packageversion=$version-$revision
77 tmpdir="$objtree/debian/tmp"
78 fwdir="$objtree/debian/fwtmp"
79 packagename=linux-image-$version
80 fwpackagename=linux-firmware-image
82 if [ "$ARCH" = "um" ] ; then
83 packagename=user-mode-linux-$version
86 # Setup the directory structure
87 rm -rf "$tmpdir" "$fwdir"
88 mkdir -m 755 -p "$tmpdir/DEBIAN"
89 mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
90 mkdir -m 755 -p "$fwdir/DEBIAN"
91 mkdir -p "$fwdir/lib" "$fwdir/usr/share/doc/$fwpackagename"
92 if [ "$ARCH" = "um" ] ; then
93 mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
96 # Build and install the kernel
97 if [ "$ARCH" = "um" ] ; then
99 cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
100 cp .config "$tmpdir/usr/share/doc/$packagename/config"
101 gzip "$tmpdir/usr/share/doc/$packagename/config"
102 cp $KBUILD_IMAGE "$tmpdir/usr/bin/linux-$version"
104 cp System.map "$tmpdir/boot/System.map-$version"
105 cp .config "$tmpdir/boot/config-$version"
106 # Not all arches include the boot path in KBUILD_IMAGE
107 if [ -e $KBUILD_IMAGE ]; then
108 cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
110 cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
114 if grep -q '^CONFIG_MODULES=y' .config ; then
115 INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install
116 if [ "$ARCH" = "um" ] ; then
117 mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
118 rmdir "$tmpdir/lib/modules/$version"
122 # Install the maintainer scripts
123 # Note: hook scripts under /etc/kernel are also executed by official Debian
124 # kernel packages, as well as kernel packages built using make-kpkg
125 debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
126 for script in postinst postrm preinst prerm ; do
127 mkdir -p "$tmpdir$debhookdir/$script.d"
128 cat <<EOF > "$tmpdir/DEBIAN/$script"
133 # Pass maintainer script parameters to hook scripts
134 export DEB_MAINT_PARAMS="\$*"
136 test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d
139 chmod 755 "$tmpdir/DEBIAN/$script"
142 # Try to determine maintainer and email values
143 if [ -n "$DEBEMAIL" ]; then
145 elif [ -n "$EMAIL" ]; then
148 email=$(id -nu)@$(hostname -f)
150 if [ -n "$DEBFULLNAME" ]; then
152 elif [ -n "$NAME" ]; then
157 maintainer="$name <$email>"
159 # Generate a simple changelog template
160 cat <<EOF > debian/changelog
161 linux-upstream ($packageversion) unstable; urgency=low
163 * Custom built Linux kernel.
165 -- $maintainer $(date -R)
168 # Generate copyright file
169 cat <<EOF > debian/copyright
170 This is a packacked upstream version of the Linux kernel.
172 The sources may be found at most Linux ftp sites, including:
173 ftp://ftp.kernel.org/pub/linux/kernel
175 Copyright: 1991 - 2009 Linus Torvalds and others.
177 The git repository for mainline kernel development is at:
178 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
180 This program is free software; you can redistribute it and/or modify
181 it under the terms of the GNU General Public License as published by
182 the Free Software Foundation; version 2 dated June, 1991.
184 On Debian GNU/Linux systems, the complete text of the GNU General Public
185 License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
188 # Generate a control file
189 cat <<EOF > debian/control
190 Source: linux-upstream
193 Maintainer: $maintainer
194 Standards-Version: 3.8.4
195 Homepage: http://www.kernel.org/
198 if [ "$ARCH" = "um" ]; then
199 cat <<EOF >> debian/control
201 Package: $packagename
202 Provides: linux-image, linux-image-2.6, linux-modules-$version
204 Description: User Mode Linux kernel, version $version
205 User-mode Linux is a port of the Linux kernel to its own system call
206 interface. It provides a kind of virtual machine, which runs Linux
207 as a user process under another Linux kernel. This is useful for
208 kernel development, sandboxes, jails, experimentation, and
211 This package contains the Linux kernel, modules and corresponding other
212 files, version: $version.
216 cat <<EOF >> debian/control
218 Package: $packagename
219 Provides: linux-image, linux-image-2.6, linux-modules-$version
220 Suggests: $fwpackagename
222 Description: Linux kernel, version $version
223 This package contains the Linux kernel, modules and corresponding other
224 files, version: $version.
229 # Do we have firmware? Move it out of the way and build it into a package.
230 if [ -e "$tmpdir/lib/firmware" ]; then
231 mv "$tmpdir/lib/firmware" "$fwdir/lib/"
233 cat <<EOF >> debian/control
235 Package: $fwpackagename
237 Description: Linux kernel firmware, version $version
238 This package contains firmware from the Linux kernel, version $version.
241 create_package "$fwpackagename" "$fwdir"
244 create_package "$packagename" "$tmpdir"