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 16tmpdir="$objtree/debian/tmp" 17packagename=linux-$version 18 19if [ "$ARCH" == "um" ] ; then 20 packagename=user-mode-linux-$version 21fi 22 23# Setup the directory structure 24rm -rf "$tmpdir" 25mkdir -p "$tmpdir/DEBIAN" "$tmpdir/lib" "$tmpdir/boot" 26if [ "$ARCH" == "um" ] ; then 27 mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/share/doc/$packagename" "$tmpdir/usr/bin" 28fi 29 30# Build and install the kernel 31if [ "$ARCH" == "um" ] ; then 32 $MAKE linux 33 cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map" 34 cp .config "$tmpdir/usr/share/doc/$packagename/config" 35 gzip "$tmpdir/usr/share/doc/$packagename/config" 36 cp $KBUILD_IMAGE "$tmpdir/usr/bin/linux-$version" 37else 38 cp System.map "$tmpdir/boot/System.map-$version" 39 cp .config "$tmpdir/boot/config-$version" 40 cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version" 41fi 42 43if grep -q '^CONFIG_MODULES=y' .config ; then 44 INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install 45 if [ "$ARCH" == "um" ] ; then 46 mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/" 47 rmdir "$tmpdir/lib/modules/$version" 48 fi 49fi 50 51# Install the maintainer scripts 52for script in postinst postrm preinst prerm ; do 53 mkdir -p "$tmpdir/etc/kernel/$script.d" 54 cat <<EOF > "$tmpdir/DEBIAN/$script" 55#!/bin/sh 56 57set -e 58 59test -d /etc/kernel/$script.d && run-parts --arg="$version" /etc/kernel/$script.d 60exit 0 61EOF 62 chmod 755 "$tmpdir/DEBIAN/$script" 63done 64 65name="Kernel Compiler <$(id -nu)@$(hostname -f)>" 66# Generate a simple changelog template 67cat <<EOF > debian/changelog 68linux ($version) unstable; urgency=low 69 70 * A standard release 71 72 -- $name $(date -R) 73EOF 74 75# Generate a control file 76if [ "$ARCH" == "um" ]; then 77 78cat <<EOF > debian/control 79Source: linux 80Section: base 81Priority: optional 82Maintainer: $name 83Standards-Version: 3.6.1 84 85Package: $packagename 86Provides: kernel-image-$version, linux-image-$version 87Architecture: any 88Description: User Mode Linux kernel, version $version 89 User-mode Linux is a port of the Linux kernel to its own system call 90 interface. It provides a kind of virtual machine, which runs Linux 91 as a user process under another Linux kernel. This is useful for 92 kernel development, sandboxes, jails, experimentation, and 93 many other things. 94 . 95 This package contains the Linux kernel, modules and corresponding other 96 files version $version 97EOF 98 99else 100cat <<EOF > debian/control 101Source: linux 102Section: base 103Priority: optional 104Maintainer: $name 105Standards-Version: 3.6.1 106 107Package: $packagename 108Provides: kernel-image-$version, linux-image-$version 109Architecture: any 110Description: Linux kernel, version $version 111 This package contains the Linux kernel, modules and corresponding other 112 files version $version 113EOF 114fi 115 116# Fix some ownership and permissions 117chown -R root:root "$tmpdir" 118chmod -R go-w "$tmpdir" 119 120# Perform the final magic 121dpkg-gencontrol -isp 122dpkg --build "$tmpdir" .. 123 124exit 0 125 126