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 that will be called on
10 # package install and removal.
14 # Some variables and settings used throughout the script
15 version=$KERNELRELEASE
16 revision=$(cat .version)
17 tmpdir="$objtree/debian/tmp"
18 fwdir="$objtree/debian/fwtmp"
19 packagename=linux-$version
20 fwpackagename=linux-firmware-image
22 if [ "$ARCH" = "um" ] ; then
23 packagename=user-mode-linux-$version
26 # Setup the directory structure
27 rm -rf "$tmpdir" "$fwdir"
28 mkdir -p "$tmpdir/DEBIAN" "$tmpdir/lib" "$tmpdir/boot"
29 mkdir -p "$fwdir/DEBIAN" "$fwdir/lib"
30 if [ "$ARCH" = "um" ] ; then
31 mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/share/doc/$packagename" "$tmpdir/usr/bin"
34 # Build and install the kernel
35 if [ "$ARCH" = "um" ] ; then
37 cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
38 cp .config "$tmpdir/usr/share/doc/$packagename/config"
39 gzip "$tmpdir/usr/share/doc/$packagename/config"
40 cp $KBUILD_IMAGE "$tmpdir/usr/bin/linux-$version"
42 cp System.map "$tmpdir/boot/System.map-$version"
43 cp .config "$tmpdir/boot/config-$version"
44 cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
47 if grep -q '^CONFIG_MODULES=y' .config ; then
48 INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install
49 if [ "$ARCH" = "um" ] ; then
50 mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
51 rmdir "$tmpdir/lib/modules/$version"
55 # Install the maintainer scripts
56 for script in postinst postrm preinst prerm ; do
57 mkdir -p "$tmpdir/etc/kernel/$script.d"
58 cat <<EOF > "$tmpdir/DEBIAN/$script"
63 test -d /etc/kernel/$script.d && run-parts --arg="$version" /etc/kernel/$script.d
66 chmod 755 "$tmpdir/DEBIAN/$script"
69 name="Kernel Compiler <$(id -nu)@$(hostname -f)>"
70 # Generate a simple changelog template
71 cat <<EOF > debian/changelog
72 linux ($version-$revision) unstable; urgency=low
79 # Generate a control file
80 if [ "$ARCH" = "um" ]; then
81 cat <<EOF > debian/control
86 Standards-Version: 3.6.1
89 Provides: kernel-image-$version, linux-image-$version
91 Description: User Mode Linux kernel, version $version
92 User-mode Linux is a port of the Linux kernel to its own system call
93 interface. It provides a kind of virtual machine, which runs Linux
94 as a user process under another Linux kernel. This is useful for
95 kernel development, sandboxes, jails, experimentation, and
98 This package contains the Linux kernel, modules and corresponding other
99 files version $version
103 cat <<EOF > debian/control
108 Standards-Version: 3.6.1
110 Package: $packagename
111 Provides: kernel-image-$version, linux-image-$version
112 Suggests: $fwpackagename
114 Description: Linux kernel, version $version
115 This package contains the Linux kernel, modules and corresponding other
116 files version $version
121 # Fix some ownership and permissions
122 chown -R root:root "$tmpdir"
123 chmod -R go-w "$tmpdir"
125 # Do we have firmware? Move it out of the way and build it into a package.
126 if [ -e "$tmpdir/lib/firmware" ]; then
127 mv "$tmpdir/lib/firmware" "$fwdir/lib/"
129 cat <<EOF >> debian/control
131 Package: $fwpackagename
133 Description: Linux kernel firmware, version $version
134 This package contains firmware from the Linux kernel, version $version
137 dpkg-gencontrol -isp -p$fwpackagename -P"$fwdir"
138 dpkg --build "$fwdir" ..
141 # Perform the final magic
142 dpkg-gencontrol -isp -p$packagename
143 dpkg --build "$tmpdir" ..