#!/bin/bash # # Incremental Kernel Patch Builder # Robin Johnson # robbat2@orbis-terrarum.net # # Build an incremental diff between two kernel patches # run as "./interpatch 2.4.13 ac7 ac8" to build patch-2.4.13-ac7-ac8.bz2 # this would require the follow files in the current directory: # linux-2.4.13.tar.bz2 # patch-2.4.13-ac7.bz2 # patch-2.4.13-ac8.bz2 # # REQUIRES tmpfs and lots of RAM for speed reasons # # TAR_CMD="tar x" COMPRESS_CMD="bzip2 -9c" UNCOMPRESS_CMD="bzip2 -dc" PATCH_CMD="patch -s -p1" DIFF_CMD="diff -HurdN" #the Hurd kernel ? MOUNTCMD="mount -t tmpfs /dev/ram8" MOUNTOPT=" -o size=512M" # ----------------------------------------- # NO USER CONFIGURATION BEYOND THIS! # ----------------------------------------- KERNELVERSION=$1 PATCHLEVEL1=$2 PATCHLEVEL2=$3 SRC="linux-${KERNELVERSION}.tar.bz2" OLDVERSION="${KERNELVERSION}-${PATCHLEVEL1}" NEWVERSION="${KERNELVERSION}-${PATCHLEVEL2}" OLDDIR="linux-${OLDVERSION}" NEWDIR="linux-${NEWVERSION}" PATCH1="patch-${OLDVERSION}.bz2" PATCH2="patch-${NEWVERSION}.bz2" TARGET="patch-${KERNELVERSION}-${PATCHLEVEL1}-${PATCHLEVEL2}" SRCDIR=`pwd` TMPDIR=`mktemp -q -d kernpatch.XXXXXX` echo "Setting up space..." ${MOUNTCMD} ${TMPDIR} ${MOUNTOPT} cd ${TMPDIR} echo "Extracting..." ${UNCOMPRESS_CMD} ${SRCDIR}/${SRC} | ${TAR_CMD} echo "Copying..." mv linux $OLDDIR cp -r $OLDDIR $NEWDIR echo "Patching #1..." ${UNCOMPRESS_CMD} ${SRCDIR}/${PATCH1} | ${PATCH_CMD} -d $OLDDIR echo "Patching #2..." ${UNCOMPRESS_CMD} ${SRCDIR}/${PATCH2} | ${PATCH_CMD} -d $NEWDIR echo "Building diff..." ${DIFF_CMD} $OLDDIR $NEWDIR > ${TARGET} echo "Compressing diff..." ${COMPRESS_CMD} ${TARGET} > ${SRCDIR}/${TARGET}.bz2 cd ${SRCDIR} echo "Cleaning up..." rm -rf ${TMPDIR}/* umount ${TMPDIR} rm -rf ${TMPDIR}