1#!/bin/sh 2# 3# builddeb 1.2 4# Copyright 2003 Wichert Akkerman <wichert@wiggy.net> 5# 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 installer 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. 11 12set -e 13 14# Some variables and settings used throughout the script 15version=$KERNELRELEASE 16revision=`cat .version` 17tmpdir="$objtree/debian/tmp" 18fwdir="$objtree/debian/fwtmp" 19packagename=linux-$version 20fwpackagename=linux-firmware-image 21 22if [ "$ARCH" == "um" ] ; then 23 packagename=user-mode-linux-$version 24fi 25 26# Setup the directory structure 27rm -rf "$tmpdir" "$fwdir" 28mkdir -p "$tmpdir/DEBIAN" "$tmpdir/lib" "$tmpdir/boot" 29mkdir -p "$fwdir/DEBIAN" "$fwdir/lib" 30if [ "$ARCH" == "um" ] ; then 31 mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/share/doc/$packagename" "$tmpdir/usr/bin" 32fi 33 34# Build and install the kernel 35if [ "$ARCH" == "um" ] ; then 36 $MAKE linux 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" 41else 42 cp System.map "$tmpdir/boot/System.map-$version" 43 cp .config "$tmpdir/boot/config-$version" 44 cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version" 45fi 46 47if 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" 52 fi 53fi 54 55# Install the maintainer scripts 56for script in postinst postrm preinst prerm ; do 57 mkdir -p "$tmpdir/etc/kernel/$script.d" 58 cat <<EOF > "$tmpdir/DEBIAN/$script" 59#!/bin/sh 60 61set -e 62 63test -d /etc/kernel/$script.d && run-parts --arg="$version" /etc/kernel/$script.d 64exit 0 65EOF 66 chmod 755 "$tmpdir/DEBIAN/$script" 67done 68 69name="Kernel Compiler <$(id -nu)@$(hostname -f)>" 70# Generate a simple changelog template 71cat <<EOF > debian/changelog 72linux ($version-$revision) unstable; urgency=low 73 74 * A standard release 75 76 -- $name $(date -R) 77EOF 78 79# Generate a control file 80if [ "$ARCH" == "um" ]; then 81 82cat <<EOF > debian/control 83Source: linux 84Section: base 85Priority: optional 86Maintainer: $name 87Standards-Version: 3.6.1 88 89Package: $packagename 90Provides: kernel-image-$version, linux-image-$version 91Architecture: any 92Description: User Mode Linux kernel, version $version 93 User-mode Linux is a port of the Linux kernel to its own system call 94 interface. It provides a kind of virtual machine, which runs Linux 95 as a user process under another Linux kernel. This is useful for 96 kernel development, sandboxes, jails, experimentation, and 97 many other things. 98 . 99 This package contains the Linux kernel, modules and corresponding other 100 files version $version 101EOF 102 103else 104cat <<EOF > debian/control 105Source: linux 106Section: base 107Priority: optional 108Maintainer: $name 109Standards-Version: 3.6.1 110 111Package: $packagename 112Provides: kernel-image-$version, linux-image-$version 113Suggests: $fwpackagename 114Architecture: any 115Description: Linux kernel, version $version 116 This package contains the Linux kernel, modules and corresponding other 117 files version $version 118EOF 119fi 120 121# Fix some ownership and permissions 122chown -R root:root "$tmpdir" 123chmod -R go-w "$tmpdir" 124 125# Do we have firmware? Move it out of the way and build it into a package. 126if [ -e "$tmpdir/lib/firmware" ]; then 127 mv "$tmpdir/lib/firmware" "$fwdir/lib/" 128 129 cat <<EOF >> debian/control 130 131Package: $fwpackagename 132Architecture: all 133Description: Linux kernel firmware, version $version 134 This package contains firmware from the Linux kernel, version $version 135EOF 136 137 dpkg-gencontrol -isp -p$fwpackagename -P"$fwdir" 138 dpkg --build "$fwdir" .. 139fi 140 141# Perform the final magic 142dpkg-gencontrol -isp -p$packagename 143dpkg --build "$tmpdir" .. 144 145exit 0 146 147