11da177e4SLinus Torvalds#!/bin/sh 21da177e4SLinus Torvalds# 3*4964451aSFrans Pop# builddeb 1.3 41da177e4SLinus Torvalds# Copyright 2003 Wichert Akkerman <wichert@wiggy.net> 51da177e4SLinus Torvalds# 61da177e4SLinus Torvalds# Simple script to generate a deb package for a Linux kernel. All the 74f66199bSFrans Pop# complexity of what to do with a kernel after it is installed or removed 81da177e4SLinus Torvalds# is left to other scripts and packages: they can install scripts in the 91da177e4SLinus Torvalds# /etc/kernel/{pre,post}{inst,rm}.d/ directories that will be called on 101da177e4SLinus Torvalds# package install and removal. 111da177e4SLinus Torvalds 121da177e4SLinus Torvaldsset -e 131da177e4SLinus Torvalds 143e2ab256SFrans Popcreate_package() { 153e2ab256SFrans Pop local pname="$1" pdir="$2" 163e2ab256SFrans Pop 173e2ab256SFrans Pop # Fix ownership and permissions 183e2ab256SFrans Pop chown -R root:root "$pdir" 193e2ab256SFrans Pop chmod -R go-w "$pdir" 203e2ab256SFrans Pop 213e2ab256SFrans Pop # Create the package 223e2ab256SFrans Pop dpkg-gencontrol -isp -p$pname -P"$pdir" 233e2ab256SFrans Pop dpkg --build "$pdir" .. 243e2ab256SFrans Pop} 253e2ab256SFrans Pop 261da177e4SLinus Torvalds# Some variables and settings used throughout the script 271da177e4SLinus Torvaldsversion=$KERNELRELEASE 284f66199bSFrans Poprevision=$(cat .version) 291da177e4SLinus Torvaldstmpdir="$objtree/debian/tmp" 30bf1b3644SJonathan McDowellfwdir="$objtree/debian/fwtmp" 31687c3dacSSam Ravnborgpackagename=linux-$version 32bf1b3644SJonathan McDowellfwpackagename=linux-firmware-image 33687c3dacSSam Ravnborg 344f66199bSFrans Popif [ "$ARCH" = "um" ] ; then 35687c3dacSSam Ravnborg packagename=user-mode-linux-$version 36687c3dacSSam Ravnborgfi 371da177e4SLinus Torvalds 381da177e4SLinus Torvalds# Setup the directory structure 39bf1b3644SJonathan McDowellrm -rf "$tmpdir" "$fwdir" 401da177e4SLinus Torvaldsmkdir -p "$tmpdir/DEBIAN" "$tmpdir/lib" "$tmpdir/boot" 41bf1b3644SJonathan McDowellmkdir -p "$fwdir/DEBIAN" "$fwdir/lib" 424f66199bSFrans Popif [ "$ARCH" = "um" ] ; then 43687c3dacSSam Ravnborg mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/share/doc/$packagename" "$tmpdir/usr/bin" 44687c3dacSSam Ravnborgfi 451da177e4SLinus Torvalds 461da177e4SLinus Torvalds# Build and install the kernel 474f66199bSFrans Popif [ "$ARCH" = "um" ] ; then 48687c3dacSSam Ravnborg $MAKE linux 49687c3dacSSam Ravnborg cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map" 50687c3dacSSam Ravnborg cp .config "$tmpdir/usr/share/doc/$packagename/config" 51687c3dacSSam Ravnborg gzip "$tmpdir/usr/share/doc/$packagename/config" 52687c3dacSSam Ravnborg cp $KBUILD_IMAGE "$tmpdir/usr/bin/linux-$version" 53687c3dacSSam Ravnborgelse 541da177e4SLinus Torvalds cp System.map "$tmpdir/boot/System.map-$version" 551da177e4SLinus Torvalds cp .config "$tmpdir/boot/config-$version" 56a89b433bSFrans Pop # Not all arches include the boot path in KBUILD_IMAGE 57a89b433bSFrans Pop if ! cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"; then 58a89b433bSFrans Pop cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version" 59a89b433bSFrans Pop fi 60687c3dacSSam Ravnborgfi 611da177e4SLinus Torvalds 621da177e4SLinus Torvaldsif grep -q '^CONFIG_MODULES=y' .config ; then 63a91f98a2SSam Ravnborg INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install 644f66199bSFrans Pop if [ "$ARCH" = "um" ] ; then 65687c3dacSSam Ravnborg mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/" 66687c3dacSSam Ravnborg rmdir "$tmpdir/lib/modules/$version" 67687c3dacSSam Ravnborg fi 681da177e4SLinus Torvaldsfi 691da177e4SLinus Torvalds 701da177e4SLinus Torvalds# Install the maintainer scripts 711da177e4SLinus Torvaldsfor script in postinst postrm preinst prerm ; do 721da177e4SLinus Torvalds mkdir -p "$tmpdir/etc/kernel/$script.d" 731da177e4SLinus Torvalds cat <<EOF > "$tmpdir/DEBIAN/$script" 741da177e4SLinus Torvalds#!/bin/sh 751da177e4SLinus Torvalds 761da177e4SLinus Torvaldsset -e 771da177e4SLinus Torvalds 78*4964451aSFrans Pop# Pass maintainer script parameters to hook scripts 79*4964451aSFrans Popexport DEB_MAINT_PARAMS="\$@" 80*4964451aSFrans Pop 811da177e4SLinus Torvaldstest -d /etc/kernel/$script.d && run-parts --arg="$version" /etc/kernel/$script.d 821da177e4SLinus Torvaldsexit 0 831da177e4SLinus TorvaldsEOF 841da177e4SLinus Torvalds chmod 755 "$tmpdir/DEBIAN/$script" 851da177e4SLinus Torvaldsdone 861da177e4SLinus Torvalds 871da177e4SLinus Torvaldsname="Kernel Compiler <$(id -nu)@$(hostname -f)>" 881da177e4SLinus Torvalds# Generate a simple changelog template 891da177e4SLinus Torvaldscat <<EOF > debian/changelog 90ed2c9fa5SMichal Sojkalinux ($version-$revision) unstable; urgency=low 911da177e4SLinus Torvalds 921da177e4SLinus Torvalds * A standard release 931da177e4SLinus Torvalds 941da177e4SLinus Torvalds -- $name $(date -R) 951da177e4SLinus TorvaldsEOF 961da177e4SLinus Torvalds 971da177e4SLinus Torvalds# Generate a control file 981da177e4SLinus Torvaldscat <<EOF > debian/control 991da177e4SLinus TorvaldsSource: linux 1001da177e4SLinus TorvaldsSection: base 1011da177e4SLinus TorvaldsPriority: optional 1021da177e4SLinus TorvaldsMaintainer: $name 1031da177e4SLinus TorvaldsStandards-Version: 3.6.1 1043e2ab256SFrans PopEOF 1053e2ab256SFrans Pop 1063e2ab256SFrans Popif [ "$ARCH" = "um" ]; then 1073e2ab256SFrans Pop cat <<EOF >> debian/control 1081da177e4SLinus Torvalds 109687c3dacSSam RavnborgPackage: $packagename 1106f67a004Sbugme-daemon@bugzilla.kernel.orgProvides: kernel-image-$version, linux-image-$version 1111da177e4SLinus TorvaldsArchitecture: any 112dc5962fdSSam RavnborgDescription: User Mode Linux kernel, version $version 113dc5962fdSSam Ravnborg User-mode Linux is a port of the Linux kernel to its own system call 114dc5962fdSSam Ravnborg interface. It provides a kind of virtual machine, which runs Linux 115dc5962fdSSam Ravnborg as a user process under another Linux kernel. This is useful for 116dc5962fdSSam Ravnborg kernel development, sandboxes, jails, experimentation, and 117dc5962fdSSam Ravnborg many other things. 118dc5962fdSSam Ravnborg . 1191da177e4SLinus Torvalds This package contains the Linux kernel, modules and corresponding other 120dc5962fdSSam Ravnborg files version $version 1211da177e4SLinus TorvaldsEOF 1221da177e4SLinus Torvalds 123dc5962fdSSam Ravnborgelse 1243e2ab256SFrans Pop cat <<EOF >> debian/control 125dc5962fdSSam Ravnborg 126dc5962fdSSam RavnborgPackage: $packagename 1276f67a004Sbugme-daemon@bugzilla.kernel.orgProvides: kernel-image-$version, linux-image-$version 128bf1b3644SJonathan McDowellSuggests: $fwpackagename 129dc5962fdSSam RavnborgArchitecture: any 130dc5962fdSSam RavnborgDescription: Linux kernel, version $version 131dc5962fdSSam Ravnborg This package contains the Linux kernel, modules and corresponding other 132dc5962fdSSam Ravnborg files version $version 133dc5962fdSSam RavnborgEOF 1344f66199bSFrans Pop 135dc5962fdSSam Ravnborgfi 136dc5962fdSSam Ravnborg 137bf1b3644SJonathan McDowell# Do we have firmware? Move it out of the way and build it into a package. 138bf1b3644SJonathan McDowellif [ -e "$tmpdir/lib/firmware" ]; then 139bf1b3644SJonathan McDowell mv "$tmpdir/lib/firmware" "$fwdir/lib/" 140bf1b3644SJonathan McDowell 141bf1b3644SJonathan McDowell cat <<EOF >> debian/control 142bf1b3644SJonathan McDowell 143bf1b3644SJonathan McDowellPackage: $fwpackagename 144bf1b3644SJonathan McDowellArchitecture: all 145bf1b3644SJonathan McDowellDescription: Linux kernel firmware, version $version 146bf1b3644SJonathan McDowell This package contains firmware from the Linux kernel, version $version 147bf1b3644SJonathan McDowellEOF 148bf1b3644SJonathan McDowell 1493e2ab256SFrans Pop create_package "$fwpackagename" "$fwdir" 150bf1b3644SJonathan McDowellfi 151bf1b3644SJonathan McDowell 1523e2ab256SFrans Popcreate_package "$packagename" "$tmpdir" 1531da177e4SLinus Torvalds 1541da177e4SLinus Torvaldsexit 0 155