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 "$debarch" ] ; then
58 forcearch="-DArchitecture=$debarch"
62 dpkg-gencontrol -isp $forcearch -p$pname -P"$pdir"
63 dpkg --build "$pdir" ..
66 # Some variables and settings used throughout the script
67 version=$KERNELRELEASE
68 revision=$(cat .version)
69 if [ -n "$KDEB_PKGVERSION" ]; then
70 packageversion=$KDEB_PKGVERSION
72 packageversion=$version-$revision
74 tmpdir="$objtree/debian/tmp"
75 fwdir="$objtree/debian/fwtmp"
76 packagename=linux-image-$version
77 fwpackagename=linux-firmware-image
79 if [ "$ARCH" = "um" ] ; then
80 packagename=user-mode-linux-$version
83 # Setup the directory structure
84 rm -rf "$tmpdir" "$fwdir"
85 mkdir -m 755 -p "$tmpdir/DEBIAN"
86 mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
87 mkdir -m 755 -p "$fwdir/DEBIAN"
88 mkdir -p "$fwdir/lib" "$fwdir/usr/share/doc/$fwpackagename"
89 if [ "$ARCH" = "um" ] ; then
90 mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
93 # Build and install the kernel
94 if [ "$ARCH" = "um" ] ; then
96 cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
97 cp .config "$tmpdir/usr/share/doc/$packagename/config"
98 gzip "$tmpdir/usr/share/doc/$packagename/config"
99 cp $KBUILD_IMAGE "$tmpdir/usr/bin/linux-$version"
101 cp System.map "$tmpdir/boot/System.map-$version"
102 cp .config "$tmpdir/boot/config-$version"
103 # Not all arches include the boot path in KBUILD_IMAGE
104 if [ -e $KBUILD_IMAGE ]; then
105 cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
107 cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
111 if grep -q '^CONFIG_MODULES=y' .config ; then
112 INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install
113 if [ "$ARCH" = "um" ] ; then
114 mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
115 rmdir "$tmpdir/lib/modules/$version"
119 # Install the maintainer scripts
120 # Note: hook scripts under /etc/kernel are also executed by official Debian
121 # kernel packages, as well as kernel packages built using make-kpkg
122 debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
123 for script in postinst postrm preinst prerm ; do
124 mkdir -p "$tmpdir$debhookdir/$script.d"
125 cat <<EOF > "$tmpdir/DEBIAN/$script"
130 # Pass maintainer script parameters to hook scripts
131 export DEB_MAINT_PARAMS="\$*"
133 test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d
136 chmod 755 "$tmpdir/DEBIAN/$script"
139 # Try to determine maintainer and email values
140 if [ -n "$DEBEMAIL" ]; then
142 elif [ -n "$EMAIL" ]; then
145 email=$(id -nu)@$(hostname -f)
147 if [ -n "$DEBFULLNAME" ]; then
149 elif [ -n "$NAME" ]; then
154 maintainer="$name <$email>"
156 # Generate a simple changelog template
157 cat <<EOF > debian/changelog
158 linux-upstream ($packageversion) unstable; urgency=low
160 * Custom built Linux kernel.
162 -- $maintainer $(date -R)
165 # Generate copyright file
166 cat <<EOF > debian/copyright
167 This is a packacked upstream version of the Linux kernel.
169 The sources may be found at most Linux ftp sites, including:
170 ftp://ftp.kernel.org/pub/linux/kernel
172 Copyright: 1991 - 2009 Linus Torvalds and others.
174 The git repository for mainline kernel development is at:
175 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
177 This program is free software; you can redistribute it and/or modify
178 it under the terms of the GNU General Public License as published by
179 the Free Software Foundation; version 2 dated June, 1991.
181 On Debian GNU/Linux systems, the complete text of the GNU General Public
182 License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
185 # Generate a control file
186 cat <<EOF > debian/control
187 Source: linux-upstream
190 Maintainer: $maintainer
191 Standards-Version: 3.8.4
192 Homepage: http://www.kernel.org/
195 if [ "$ARCH" = "um" ]; then
196 cat <<EOF >> debian/control
198 Package: $packagename
199 Provides: linux-image, linux-image-2.6, linux-modules-$version
201 Description: User Mode Linux kernel, version $version
202 User-mode Linux is a port of the Linux kernel to its own system call
203 interface. It provides a kind of virtual machine, which runs Linux
204 as a user process under another Linux kernel. This is useful for
205 kernel development, sandboxes, jails, experimentation, and
208 This package contains the Linux kernel, modules and corresponding other
209 files, version: $version.
213 cat <<EOF >> debian/control
215 Package: $packagename
216 Provides: linux-image, linux-image-2.6, linux-modules-$version
217 Suggests: $fwpackagename
219 Description: Linux kernel, version $version
220 This package contains the Linux kernel, modules and corresponding other
221 files, version: $version.
226 # Do we have firmware? Move it out of the way and build it into a package.
227 if [ -e "$tmpdir/lib/firmware" ]; then
228 mv "$tmpdir/lib/firmware" "$fwdir/lib/"
230 cat <<EOF >> debian/control
232 Package: $fwpackagename
234 Description: Linux kernel firmware, version $version
235 This package contains firmware from the Linux kernel, version $version.
238 create_package "$fwpackagename" "$fwdir"
241 create_package "$packagename" "$tmpdir"