11da177e4SLinus Torvalds#!/bin/sh 21da177e4SLinus Torvalds# 31da177e4SLinus Torvalds# builddeb 1.2 41da177e4SLinus Torvalds# Copyright 2003 Wichert Akkerman <[email protected]> 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 14*3e2ab256SFrans Popcreate_package() { 15*3e2ab256SFrans Pop local pname="$1" pdir="$2" 16*3e2ab256SFrans Pop 17*3e2ab256SFrans Pop # Fix ownership and permissions 18*3e2ab256SFrans Pop chown -R root:root "$pdir" 19*3e2ab256SFrans Pop chmod -R go-w "$pdir" 20*3e2ab256SFrans Pop 21*3e2ab256SFrans Pop # Create the package 22*3e2ab256SFrans Pop dpkg-gencontrol -isp -p$pname -P"$pdir" 23*3e2ab256SFrans Pop dpkg --build "$pdir" .. 24*3e2ab256SFrans Pop} 25*3e2ab256SFrans 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" 561da177e4SLinus Torvalds cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version" 57687c3dacSSam Ravnborgfi 581da177e4SLinus Torvalds 591da177e4SLinus Torvaldsif grep -q '^CONFIG_MODULES=y' .config ; then 60a91f98a2SSam Ravnborg INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install 614f66199bSFrans Pop if [ "$ARCH" = "um" ] ; then 62687c3dacSSam Ravnborg mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/" 63687c3dacSSam Ravnborg rmdir "$tmpdir/lib/modules/$version" 64687c3dacSSam Ravnborg fi 651da177e4SLinus Torvaldsfi 661da177e4SLinus Torvalds 671da177e4SLinus Torvalds# Install the maintainer scripts 681da177e4SLinus Torvaldsfor script in postinst postrm preinst prerm ; do 691da177e4SLinus Torvalds mkdir -p "$tmpdir/etc/kernel/$script.d" 701da177e4SLinus Torvalds cat <<EOF > "$tmpdir/DEBIAN/$script" 711da177e4SLinus Torvalds#!/bin/sh 721da177e4SLinus Torvalds 731da177e4SLinus Torvaldsset -e 741da177e4SLinus Torvalds 751da177e4SLinus Torvaldstest -d /etc/kernel/$script.d && run-parts --arg="$version" /etc/kernel/$script.d 761da177e4SLinus Torvaldsexit 0 771da177e4SLinus TorvaldsEOF 781da177e4SLinus Torvalds chmod 755 "$tmpdir/DEBIAN/$script" 791da177e4SLinus Torvaldsdone 801da177e4SLinus Torvalds 811da177e4SLinus Torvaldsname="Kernel Compiler <$(id -nu)@$(hostname -f)>" 821da177e4SLinus Torvalds# Generate a simple changelog template 831da177e4SLinus Torvaldscat <<EOF > debian/changelog 84ed2c9fa5SMichal Sojkalinux ($version-$revision) unstable; urgency=low 851da177e4SLinus Torvalds 861da177e4SLinus Torvalds * A standard release 871da177e4SLinus Torvalds 881da177e4SLinus Torvalds -- $name $(date -R) 891da177e4SLinus TorvaldsEOF 901da177e4SLinus Torvalds 911da177e4SLinus Torvalds# Generate a control file 921da177e4SLinus Torvaldscat <<EOF > debian/control 931da177e4SLinus TorvaldsSource: linux 941da177e4SLinus TorvaldsSection: base 951da177e4SLinus TorvaldsPriority: optional 961da177e4SLinus TorvaldsMaintainer: $name 971da177e4SLinus TorvaldsStandards-Version: 3.6.1 98*3e2ab256SFrans PopEOF 99*3e2ab256SFrans Pop 100*3e2ab256SFrans Popif [ "$ARCH" = "um" ]; then 101*3e2ab256SFrans Pop cat <<EOF >> debian/control 1021da177e4SLinus Torvalds 103687c3dacSSam RavnborgPackage: $packagename 1046f67a004S[email protected]Provides: kernel-image-$version, linux-image-$version 1051da177e4SLinus TorvaldsArchitecture: any 106dc5962fdSSam RavnborgDescription: User Mode Linux kernel, version $version 107dc5962fdSSam Ravnborg User-mode Linux is a port of the Linux kernel to its own system call 108dc5962fdSSam Ravnborg interface. It provides a kind of virtual machine, which runs Linux 109dc5962fdSSam Ravnborg as a user process under another Linux kernel. This is useful for 110dc5962fdSSam Ravnborg kernel development, sandboxes, jails, experimentation, and 111dc5962fdSSam Ravnborg many other things. 112dc5962fdSSam Ravnborg . 1131da177e4SLinus Torvalds This package contains the Linux kernel, modules and corresponding other 114dc5962fdSSam Ravnborg files version $version 1151da177e4SLinus TorvaldsEOF 1161da177e4SLinus Torvalds 117dc5962fdSSam Ravnborgelse 118*3e2ab256SFrans Pop cat <<EOF >> debian/control 119dc5962fdSSam Ravnborg 120dc5962fdSSam RavnborgPackage: $packagename 1216f67a004S[email protected]Provides: kernel-image-$version, linux-image-$version 122bf1b3644SJonathan McDowellSuggests: $fwpackagename 123dc5962fdSSam RavnborgArchitecture: any 124dc5962fdSSam RavnborgDescription: Linux kernel, version $version 125dc5962fdSSam Ravnborg This package contains the Linux kernel, modules and corresponding other 126dc5962fdSSam Ravnborg files version $version 127dc5962fdSSam RavnborgEOF 1284f66199bSFrans Pop 129dc5962fdSSam Ravnborgfi 130dc5962fdSSam Ravnborg 131bf1b3644SJonathan McDowell# Do we have firmware? Move it out of the way and build it into a package. 132bf1b3644SJonathan McDowellif [ -e "$tmpdir/lib/firmware" ]; then 133bf1b3644SJonathan McDowell mv "$tmpdir/lib/firmware" "$fwdir/lib/" 134bf1b3644SJonathan McDowell 135bf1b3644SJonathan McDowell cat <<EOF >> debian/control 136bf1b3644SJonathan McDowell 137bf1b3644SJonathan McDowellPackage: $fwpackagename 138bf1b3644SJonathan McDowellArchitecture: all 139bf1b3644SJonathan McDowellDescription: Linux kernel firmware, version $version 140bf1b3644SJonathan McDowell This package contains firmware from the Linux kernel, version $version 141bf1b3644SJonathan McDowellEOF 142bf1b3644SJonathan McDowell 143*3e2ab256SFrans Pop create_package "$fwpackagename" "$fwdir" 144bf1b3644SJonathan McDowellfi 145bf1b3644SJonathan McDowell 146*3e2ab256SFrans Popcreate_package "$packagename" "$tmpdir" 1471da177e4SLinus Torvalds 1481da177e4SLinus Torvaldsexit 0 149