#!/bin/sh # ---------------------------------------------------------------------------- # # Script to fetch kernel binaries out of given *.deb packages # # Creation: 2010-03-06 starwarsfan # Last modified: $Id$ # # ---------------------------------------------------------------------------- #set -x set -e # exit on all non-zero-exiting commands . common.inc.sh . functions.inc.sh doCleanup=true while [ $# -gt 0 ] do arg="$1" shift case "$arg" in '-v') doVerbose=yes verbose="-v" ;; '--no-cleanup') doCleanup=false cleanup=$arg ;; *) echo "Invalid parameter: $arg" exit 1 ;; esac done function fetchPackages() { local binaryPackagesFile=$1 local line local filename cd $downloadPath while read line exclude do filename=$line echo "$filename" | grep -q '^#' && continue case $filename in *linux-image*|*linux-ubuntu-modules*|*linux-backports-modules*) archiveFile=`basename $filename` getPackage $filename $archiveFile dataArchive=`ar t ${downloadPath}/$archiveFile | grep data.tar` ar x ${downloadPath}/$archiveFile $dataArchive cd .. if [ "${dataArchive/*.}" == 'bz2' ] then tar -xjf ${downloadPath}/$dataArchive else tar -xzf ${downloadPath}/$dataArchive fi rm ${downloadPath}/$dataArchive rm -rf ./usr* ;; *) # echo " - Not a kernel package, skipping $filename" ;; esac cd $downloadPath done < $binaryPackagesFile } function patchBackport() { local kernelv="$1" if [ -e ${baseDir}/lib/modules/${kernelv}/updates ] then echo " - Patch backports to eisfair kernel $kernelv" cd ${baseDir}/lib/modules/${kernelv}/updates ls | while read filename do find ${baseDir}/lib/modules/${kernelv}/* -type f -iname "${filename}" \ -and '(' -path "*/${kernelv}/kernel/*" -or -path "*/${kernelv}/ubuntu/*" ')' \ -exec mv -f ${baseDir}/lib/modules/${kernelv}/updates/${filename} {} \; done fi cd ${baseDir} } cd ${baseDir} echo " - Preparing working directory" rm -rf ${baseDir}/boot rm -rf ${baseDir}/lib echo " - Updating Ubuntu kernel packages" fetchPackages $binaryPackagesFileEis while read kernelversion type do echo "$kernelversion" | grep -q '^#' && continue echo " - Creating ${kernelversion}" patchBackport ${kernelversion} modules='' firmware='' if [ -d lib/modules/${kernelversion}/ ] then echo " - Run depmod ${kernelversion}" /sbin/depmod -b ${baseDir} ${kernelversion} modules="lib/modules/${kernelversion}/*" fi rm -f $baseDir/kernel-${kernelversion}.tar.gz echo " - Repack kernel ${kernelversion}" rm -f ${baseDir}/boot/config-${kernelversion} mkdir -p ${baseDir}/lib/firmware/${kernelversion} if [ -d lib/firmware/${kernelversion} ] then firmware="lib/firmware/${kernelversion}" fi tar -czf $baseDir/kernel-${kernelversion}.tar.gz boot/*${kernelversion} $modules $firmware done < $kernelVersions if $doCleanup then rm -rf ${baseDir}/boot rm -rf ${baseDir}/lib fi echo "Done."