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 ! cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"; then
70 cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
74 if grep -q '^CONFIG_MODULES=y' .config ; then
75 INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install
76 if [ "$ARCH" = "um" ] ; then
77 mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
78 rmdir "$tmpdir/lib/modules/$version"
82 # Install the maintainer scripts
83 # Note: hook scripts under /etc/kernel are also executed by official Debian
84 # kernel packages, as well as kernel packages built using make-kpkg
85 debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
86 for script in postinst postrm preinst prerm ; do
87 mkdir -p "$tmpdir$debhookdir/$script.d"
88 cat <<EOF > "$tmpdir/DEBIAN/$script"
93 # Pass maintainer script parameters to hook scripts
94 export DEB_MAINT_PARAMS="\$*"
96 test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d
99 chmod 755 "$tmpdir/DEBIAN/$script"
102 # Try to determine maintainer and email values
103 if [ -n "$DEBEMAIL" ]; then
105 elif [ -n "$EMAIL" ]; then
108 email=$(id -nu)@$(hostname -f)
110 if [ -n "$DEBFULLNAME" ]; then
112 elif [ -n "$NAME" ]; then
117 maintainer="$name <$email>"
119 # Generate a simple changelog template
120 cat <<EOF > debian/changelog
121 linux-upstream ($packageversion) unstable; urgency=low
123 * Custom built Linux kernel.
125 -- $maintainer $(date -R)
128 # Generate copyright file
129 cat <<EOF > debian/copyright
130 This is a packacked upstream version of the Linux kernel.
132 The sources may be found at most Linux ftp sites, including:
133 ftp://ftp.kernel.org/pub/linux/kernel
135 Copyright: 1991 - 2009 Linus Torvalds and others.
137 The git repository for mainline kernel development is at:
138 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
140 This program is free software; you can redistribute it and/or modify
141 it under the terms of the GNU General Public License as published by
142 the Free Software Foundation; version 2 dated June, 1991.
144 On Debian GNU/Linux systems, the complete text of the GNU General Public
145 License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
148 # Generate a control file
149 cat <<EOF > debian/control
150 Source: linux-upstream
153 Maintainer: $maintainer
154 Standards-Version: 3.8.1
157 if [ "$ARCH" = "um" ]; then
158 cat <<EOF >> debian/control
160 Package: $packagename
161 Provides: linux-image, linux-image-2.6, linux-modules-$version
163 Description: User Mode Linux kernel, version $version
164 User-mode Linux is a port of the Linux kernel to its own system call
165 interface. It provides a kind of virtual machine, which runs Linux
166 as a user process under another Linux kernel. This is useful for
167 kernel development, sandboxes, jails, experimentation, and
170 This package contains the Linux kernel, modules and corresponding other
171 files, version: $version.
175 cat <<EOF >> debian/control
177 Package: $packagename
178 Provides: linux-image, linux-image-2.6, linux-modules-$version
179 Suggests: $fwpackagename
181 Description: Linux kernel, version $version
182 This package contains the Linux kernel, modules and corresponding other
183 files, version: $version.
188 # Do we have firmware? Move it out of the way and build it into a package.
189 if [ -e "$tmpdir/lib/firmware" ]; then
190 mv "$tmpdir/lib/firmware" "$fwdir/lib/"
192 cat <<EOF >> debian/control
194 Package: $fwpackagename
196 Description: Linux kernel firmware, version $version
197 This package contains firmware from the Linux kernel, version $version.
200 create_package "$fwpackagename" "$fwdir"
203 create_package "$packagename" "$tmpdir"