The Debian packaging scripts created by the deb-pkg target do not pass on the standard Debian maintainer script parameters to hook scripts, which means that those scripts cannot tell whether they are being called during e.g. install vs. upgrade, or removal vs. purge of the package. As there are several variantions in how hook scripts are called from kernel packages, we pass the parameters in the environment variable DEB_MAINT_PARAMS rather than as extra arguments. Bump version of builddep script to 1.3. Signed-off-by: Frans Pop <elendil@planet.nl> Acked-by: maximilian attems <max@stro.at> Cc: Andres Salomon <dilinger@debian.org> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
155 lines
4.1 KiB
Bash
155 lines
4.1 KiB
Bash
#!/bin/sh
|
|
#
|
|
# builddeb 1.3
|
|
# 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
|
|
# 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" ..
|
|
}
|
|
|
|
# Some variables and settings used throughout the script
|
|
version=$KERNELRELEASE
|
|
revision=$(cat .version)
|
|
tmpdir="$objtree/debian/tmp"
|
|
fwdir="$objtree/debian/fwtmp"
|
|
packagename=linux-$version
|
|
fwpackagename=linux-firmware-image
|
|
|
|
if [ "$ARCH" = "um" ] ; then
|
|
packagename=user-mode-linux-$version
|
|
fi
|
|
|
|
# Setup the directory structure
|
|
rm -rf "$tmpdir" "$fwdir"
|
|
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
|
|
|
|
# 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
|
|
fi
|
|
|
|
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
|
|
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
|
|
|
|
# Pass maintainer script parameters to hook scripts
|
|
export DEB_MAINT_PARAMS="\$@"
|
|
|
|
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
|
|
|
|
* 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
|
|
|
|
Package: $packagename
|
|
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
|
|
|
|
Package: $packagename
|
|
Provides: kernel-image-$version, linux-image-$version
|
|
Suggests: $fwpackagename
|
|
Architecture: any
|
|
Description: Linux kernel, version $version
|
|
This package contains the Linux kernel, modules and corresponding other
|
|
files version $version
|
|
EOF
|
|
|
|
fi
|
|
|
|
# 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"
|
|
fi
|
|
|
|
create_package "$packagename" "$tmpdir"
|
|
|
|
exit 0
|