Skip to content
Snippets Groups Projects
builddeb 4.01 KiB
Newer Older
  • Learn to ignore specific revisions
  • Linus Torvalds's avatar
    Linus Torvalds committed
    #!/bin/sh
    #
    # builddeb 1.2
    # Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
    #
    # Simple script to generate a deb package for a Linux kernel. All the
    
    # complexity of what to do with a kernel after it is installed or removed
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    # is left to other scripts and packages: they can install scripts in the
    # /etc/kernel/{pre,post}{inst,rm}.d/ directories that will be called on
    # package install and removal.
    
    set -e
    
    
    create_package() {
    	local pname="$1" pdir="$2"
    
    	# Fix ownership and permissions
    	chown -R root:root "$pdir"
    	chmod -R go-w "$pdir"
    
    	# Create the package
    	dpkg-gencontrol -isp -p$pname -P"$pdir"
    	dpkg --build "$pdir" ..
    }
    
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    # Some variables and settings used throughout the script
    version=$KERNELRELEASE
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    tmpdir="$objtree/debian/tmp"
    
    fwpackagename=linux-firmware-image
    
    if [ "$ARCH" = "um" ] ; then
    
    	packagename=user-mode-linux-$version
    fi
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    
    # Setup the directory structure
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    mkdir -p "$tmpdir/DEBIAN" "$tmpdir/lib" "$tmpdir/boot"
    
    mkdir -p "$fwdir/DEBIAN" "$fwdir/lib"
    
    if [ "$ARCH" = "um" ] ; then
    
    	mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/share/doc/$packagename" "$tmpdir/usr/bin"
    fi
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    
    # Build and install the kernel
    
    if [ "$ARCH" = "um" ] ; then
    
    	$MAKE linux
    	cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
    	cp .config "$tmpdir/usr/share/doc/$packagename/config"
    	gzip "$tmpdir/usr/share/doc/$packagename/config"
    	cp $KBUILD_IMAGE "$tmpdir/usr/bin/linux-$version"
    else 
    	cp System.map "$tmpdir/boot/System.map-$version"
    	cp .config "$tmpdir/boot/config-$version"
    
    	# Not all arches include the boot path in KBUILD_IMAGE
    	if ! cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"; then
    		cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
    	fi
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    
    if grep -q '^CONFIG_MODULES=y' .config ; then
    
    	INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install
    
    	if [ "$ARCH" = "um" ] ; then
    
    		mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
    		rmdir "$tmpdir/lib/modules/$version"
    	fi
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    fi
    
    # Install the maintainer scripts
    for script in postinst postrm preinst prerm ; do
    	mkdir -p "$tmpdir/etc/kernel/$script.d"
    	cat <<EOF > "$tmpdir/DEBIAN/$script"
    #!/bin/sh
    
    set -e
    
    test -d /etc/kernel/$script.d && run-parts --arg="$version" /etc/kernel/$script.d
    exit 0
    EOF
    	chmod 755 "$tmpdir/DEBIAN/$script"
    done
    
    name="Kernel Compiler <$(id -nu)@$(hostname -f)>"
    # Generate a simple changelog template
    cat <<EOF > debian/changelog
    
    linux ($version-$revision) unstable; urgency=low
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    
      * A standard release
    
     -- $name  $(date -R)
    EOF
    
    # Generate a control file
    
    cat <<EOF > debian/control
    
    Source: linux
    Section: base
    Priority: optional
    Maintainer: $name
    Standards-Version: 3.6.1
    
    EOF
    
    if [ "$ARCH" = "um" ]; then
    	cat <<EOF >> debian/control
    
    Provides: kernel-image-$version, linux-image-$version
    
    Architecture: any
    Description: User Mode Linux kernel, version $version
     User-mode Linux is a port of the Linux kernel to its own system call
     interface.  It provides a kind of virtual machine, which runs Linux
     as a user process under another Linux kernel.  This is useful for
     kernel development, sandboxes, jails, experimentation, and
     many other things.
     .
     This package contains the Linux kernel, modules and corresponding other
     files version $version
    EOF
    
    else
    
    	cat <<EOF >> debian/control
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    
    
    Provides: kernel-image-$version, linux-image-$version
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    Architecture: any
    
    Description: Linux kernel, version $version
    
    Linus Torvalds's avatar
    Linus Torvalds committed
     This package contains the Linux kernel, modules and corresponding other
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    EOF
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    
    
    # Do we have firmware? Move it out of the way and build it into a package.
    if [ -e "$tmpdir/lib/firmware" ]; then
    	mv "$tmpdir/lib/firmware" "$fwdir/lib/"
    
    	cat <<EOF >> debian/control
    
    Package: $fwpackagename
    Architecture: all
    Description: Linux kernel firmware, version $version
     This package contains firmware from the Linux kernel, version $version
    EOF
    
    
    	create_package "$fwpackagename" "$fwdir"
    
    create_package "$packagename" "$tmpdir"
    
    Linus Torvalds's avatar
    Linus Torvalds committed
    
    exit 0