--- branches/magellan-next/include/kernel.sminc 2011/12/01 15:50:56 9463 +++ trunk/include/kernel.sminc 2013/10/09 08:02:31 19654 @@ -2,15 +2,26 @@ # $Id$ # needed extra vars: -# ${KERNEL_TYPE}: needed, 'sources', 'headers' or 'image' -# ${BRANCH}: needed, style branch of the kernel -# ${KERNEL_CONFIG}: optional, needed if you want to override the default -# searchpath ${SOURCEDIR}/${PNAME}/config-${PVER}-${BRANCH}-${PBUILD} +# ${KERNEL_TYPE}: needed, 'sources', 'headers' or 'image' +# ${BRANCH}: needed, style branch of the kernel +# ${KERNEL_CONFIG}: optional, needed if you want to override the default +# searchpath ${SOURCEDIR}/${PNAME}/config-${PVER}-${BRANCH}-${PBUILD} # -# ${PSUBVER}: optional, only needed for 2.6.x.x naming scheme -# ${EXTRAVERSION}: optinal, extra version for the kernel name -# default setting is ${PSUBVER}-${BRANCH}-${PBUILD} -# ${KERNEL_IMAGE_PATH}: override the default KERNEL_IMAGE_PATH (to build xen images for e.g.) +# ${PSUBVER}: optional, only needed for 2.6.x.x naming scheme +# ${EXTRAVERSION}: optinal, extra version for the kernel name +# default setting is ${PSUBVER}-${BRANCH}-${PBUILD} +# ${KERNEL_IMAGE_PATH}: override the default KERNEL_IMAGE_PATH (to build xen images for e.g.) +# ${COMPRESS_MODULES}: compresses the kernel modules with given compressor (gzip|bzip2|xz) +# ${LINUX_FIRMWARE}: remove included firmware bits if requested +# set the version here like USE_LINUX_FIRMARE="20110605" +# version "internal" keeps the bits too +# +# ${INCLUDE_KERNELVERSION_FILE}: creates a /boot/kernelversion file (deprecated) +# ${USE_KERNEL_SYMLINKS}: creates symlinks to unversioned kernel image files +# - kernel-x.x.x.x -> /boot/vmlinuz +# - initrd-x.x.x.x -> /boot/initrd +# - config-x.x.x.x -> /boot/config +# - System.map-x.x.x.x -> /boot/System.map sminclude mtools @@ -22,52 +33,77 @@ KERNEL_ARCH_EXTENSION="" fi +if [[ ! -z ${COMPRESS_MODULES} ]] +then + case ${COMPRESS_MODULES} in + gzip) + COMPRESS_MODULES_CMD="gzip -9v" + SDEPEND="${SDEPEND} + >= app-arch/gzip-1.4" + ;; + bzip2) + COMPRESS_MODULES_CMD="bzip2 -9v" + SDEPEND="${SDEPEND} + >= app-arch/bzip2-1.0.6" + ;; + xz) + COMPRESS_MODULES_CMD="xz -9v" + SDEPEND="${SDEPEND} + >= app-arch/xz-5" + ;; + none) + echo "Disabled compressed kernel-modules!" + COMPRESS_MODULES_CMD="" + ;; + *) die "Unkown compression format '${COMPRESS_MODULES}'" ;; + esac +fi + # some sane defaults -: ${PCATEGORIE="sys-kernel"} +: ${PCAT="sys-kernel"} : ${HOMEPAGE="http://magellan-linux.de/"} -: ${SRCFILE="linux-${PVER/${PSUBVER}/}.tar.bz2"} -: ${SRCDIR="${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}"} : ${TARBALLPVER="${PVER}"} +: ${SRCFILE="linux-${TARBALLPVER}.tar.bz2"} +: ${SRCDIR="${BUILDDIR}/linux-${PVER}-${BRANCH}-${PBUILD}"} -case ${KERNEL_TYPE} in - image|sources) - if [[ -z ${SRC_URI[*]} ]] - then - SRC_URI=( - http://www.kernel.org/pub/linux/kernel/v$(echo ${PVER} | cut -d. -f1).x/${SRCFILE} - http://ftp.uni-erlangen.de/pub/Linux/MIRROR.kernel/v$(echo ${PVER} | cut -d. -f1).x/${SRCFILE} - mirror://kernel-${BRANCH}/${SRCFILE} - mirror://kernel-${BRANCH}/config-${PVER}-${BRANCH}-${PBUILD}-i686 - mirror://kernel-${BRANCH}/config-${PVER}-${BRANCH}-${PBUILD}-x86_64 - ) - fi - ;; - - headers) - if [[ -z ${SRC_URI[*]} ]] - then - SRC_URI=( - http://www.kernel.org/pub/linux/kernel/v$(echo ${PVER} | cut -d. -f1-2)/${SRCFILE} - http://ftp.uni-erlangen.de/pub/Linux/MIRROR.kernel/v$(echo ${PVER} | cut -d. -f1-2)/${SRCFILE} - mirror://kernel-${BRANCH}/${SRCFILE} - ) - fi - ;; -esac +if [[ -z ${SRC_URI[*]} ]] +then + SRC_URI=( + http://www.kernel.org/pub/linux/kernel/v$(echo ${PVER} | cut -d. -f1).x/${SRCFILE} + http://ftp.uni-erlangen.de/pub/Linux/MIRROR.kernel/v$(echo ${PVER} | cut -d. -f1).x/${SRCFILE} + mirror://kernel-${BRANCH}/${SRCFILE} + ) + case ${KERNEL_TYPE} in + image|sources) + SRC_URI=( + ${SRC_URI[*]} + mirror://kernel-${BRANCH}/config-${PVER}-${BRANCH}-${PBUILD}-i686 + mirror://kernel-${BRANCH}/config-${PVER}-${BRANCH}-${PBUILD}-x86_64 + ) + ;; + esac +fi case ${KERNEL_TYPE} in image) : ${PROVIDE="virtual/kernel"} - : ${DEPEND=">= sys-apps/module-init-tools-3.2 + : ${DEPEND=">= virtual/module-tools >= sys-fs/udev-115 - >= sys-apps/mkinitrd-5.0.8 + >= virtual/initramfs-tools >= virtual/initscripts"} - : ${DESCRIPTION="Kernel image of the '${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}' kernel."} + if [[ ! -z ${LINUX_FIRMWARE} ]] && [[ ${LINUX_FIRMWARE} != internal ]] + then + DEPEND="${DEPEND} + >= sys-kernel/linux-firmware-${LINUX_FIRMWARE}" + fi + SDEPEND="${SDEPEND} + >= sys-dev/bc-1.06" + : ${DESCRIPTION="Kernel image of the '${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}' kernel branch."} ;; sources) : ${PROVIDE="virtual/kernel-sources"} - : ${DESCRIPTION="Kernel sources of the '${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}' kernel."} + : ${DESCRIPTION="Kernel sources of the '${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}' kernel branch."} ;; headers) @@ -83,18 +119,25 @@ KPVER="${PVER}" KPBUILD="${PBUILD}" KBRANCH="${BRANCH}" -SPECIAL_VARS="${SPECIAL_VARS} KPVER KPBUILD KBRANCH" +SPECIAL_VARS="${SPECIAL_VARS} KPVER KPBUILD KBRANCH USE_KERNEL_SYMLINKS" + +# dummy function to apply kernel patches +kernel_apply_patches() +{ + return 0 +} kernel_src_prepare() { munpack ${SRCFILE} || die - mv ${BUILDDIR}/linux-${TARBALLPVER/${PSUBVER}/} ${SRCDIR} || die + mv ${BUILDDIR}/linux-${TARBALLPVER} ${SRCDIR} || die # fix permissions chown -R 0:0 ${SRCDIR} || die chmod -R a+r-w+X,u+w ${SRCDIR} || die cd ${SRCDIR} + kernel_apply_patches || die # fixes INSTALL_PATH to /boot and EXTRAVERSION sed -i -e 's:#export\tINSTALL_PATH:export\tINSTALL_PATH:' \ @@ -105,7 +148,7 @@ if [[ ${PVER%%.*} -gt 2 ]] then local sublevel="$(echo ${PVER} | cut -d. -f3)" - sed -i "s:^\(SUBLEVEL =\).*:\1 ${sublevel}:" Makefile || die + sed -i "s:^\(SUBLEVEL =\).*:\1 ${sublevel}:" Makefile || die fi } @@ -152,6 +195,8 @@ # at least alsa-drivers needs this one ... touch include/linux/autoconf.h || die + + # compat symlink for 3.7.x new version.h location until everything is fixed ;; esac } @@ -164,7 +209,7 @@ minstalldir /boot || die # install modules - make ARCH=${ARCH/i*86/x86} INSTALL_MOD_PATH=${BINDIR} modules_install || die + make ARCH=${ARCH/i*86/x86} INSTALL_MOD_PATH=${BINDIR}/usr modules_install || die # install kernelimage if [[ -z ${KERNEL_IMAGE_PATH} ]] @@ -194,13 +239,16 @@ /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} \ || die - # install kernel description - echo " -KRNVER=${BRANCH}-${PVER}-${ARCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} -KRNLIB=${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} -KRNIMG=kernel-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION} -KRNINITRD= -" > ${BINDIR}/boot/kernelversion || die + if [[ ${INCLUDE_KERNELVERSION_FILE} = true ]] + then + MCONFIG=/boot/kernelversion + # install kernel description + mclearconfig || die + maddconfig "KRNVER=${BRANCH}-${PVER}-${ARCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}" || die + maddconfig "KRNLIB=${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}" || die + maddconfig "KRNIMG=kernel-${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}" || die + maddconfig "KRNINITRD=" || die + fi # install kernel-config from srcdir minstallfile .config \ @@ -208,30 +256,49 @@ || die # fix build symlink - if [ -L ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build ] + if [ -L ${BINDIR}/usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build ] then echo "fixing build symlink" - rm ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build || die + rm ${BINDIR}/usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build || die mlink /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} \ - /lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build \ + /usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/build \ || die fi # and fixing source symlink - if [ -L ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source ] + if [ -L ${BINDIR}/usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source ] then echo "fixing source symlink" - rm ${BINDIR}/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source || die + rm ${BINDIR}/usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source || die mlink /usr/src/linux-${PVER}-${BRANCH}-${PBUILD} \ - /lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source \ + /usr/lib/modules/${PVER}-${BRANCH}-${PBUILD}${KERNEL_ARCH_EXTENSION}/source \ || die fi + + # remove firmware bits if $LINUX_FIRMWARE was set + if [[ ! -z ${LINUX_FIRMWARE} ]] && [[ ${LINUX_FIRMWARE} != internal ]] + then + if [[ -d ${BINDIR}/usr/lib/firmware ]] + then + rm -rv ${BINDIR}/usr/lib/firmware + fi + fi + + # compress modules if COMPRESS_MODULES_CMD was set + if [[ ! -z ${COMPRESS_MODULES_CMD} ]] + then + # compress all kernel modules + find ${BINDIR} -name \*.ko | xargs ${COMPRESS_MODULES_CMD} || die + fi } kernel_headers_src_install() { cd ${SRCDIR} make ARCH=${ARCH/i*86/x86} INSTALL_HDR_PATH=${BINDIR}/usr headers_install || die + + # clean-up unnecessary files + find ${BINDIR} -name .install -or -name ..install.cmd | xargs --no-run-if-empty rm -f } kernel_sources_src_install() @@ -344,15 +411,9 @@ if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]] then mount /boot &> /dev/null - fi -} -kernel_image_postremove() -{ - if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]] - then # remove old image entry from grub - new-kernel-pkg -v --rminitrd --remove ${KPVER}-${KBRANCH}-${KPBUILD} + new-kernel-pkg -v --rminitrd --rmmoddep --remove ${KPVER}-${KBRANCH}-${KPBUILD} fi } @@ -375,33 +436,38 @@ new-kernel-pkg -v --mkinitrd --make-default --install ${KPVER}-${KBRANCH}-${KPBUILD} fi - # symlink actual kernel to /boot/vmlinuz etc... - ln -snf kernel-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/vmlinuz - ln -snf System.map-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/System.map - ln -snf config-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/config - [[ -f ${MROOT}/boot/initrd-${KPVER}-${KBRANCH}-${KPBUILD}.img ]] && - ln -snf initrd-${KPVER}-${KBRANCH}-${KPBUILD}.img ${MROOT}/boot/initrd + if [[ ${USE_KERNEL_SYMLINKS} = true ]] + then + # symlink actual kernel to /boot/vmlinuz etc... + ln -snf kernel-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/vmlinuz + ln -snf System.map-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/System.map + ln -snf config-${KPVER}-${KBRANCH}-${KPBUILD} ${MROOT}/boot/config + [[ -f ${MROOT}/boot/initrd-${KPVER}-${KBRANCH}-${KPBUILD}.img ]] && + ln -snf initrd-${KPVER}-${KBRANCH}-${KPBUILD}.img ${MROOT}/boot/initrd + fi } kernel_sources_postinstall() { # check for linux-VERSION/include as the kernel-image installs # the file Modules.symver in the linux-VERSION directory - if [ ! -d ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD}/include ] + if mqueryfeature "kernelsrcunpack" && + [ ! -d ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD}/include ] then echo "Unpacking linux-${KPVER}-${KBRANCH}-${KPBUILD} source tarball ... " tar xvjf ${MROOT}/usr/src/linux-${KPVER}-${KBRANCH}-${KPBUILD}.tar.bz2 -C ${MROOT}/usr/src fi - if [ ! -d ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} ] && + if mqueryfeature "kernelsrcunpack" && + [ ! -d ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} ] && [ -f ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD}.tar.bz2 ] then echo "Unpacking kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} source tarball ... " tar xvjf ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD}.tar.bz2 -C ${MROOT}/usr/src fi - # if not exist create linux symlink - if [ ! -h ${MROOT}/usr/src/linux ] + # create linux symlink + if mqueryfeature "linuxsymlink" then echo "Creating linux -> linux-${KPVER}-${KBRANCH}-${KPBUILD} symlink ... " [ ! -d ${MROOT}/usr/src ] && install ${MROOT}/usr/src @@ -409,8 +475,8 @@ ${MROOT}/usr/src/linux || die fi - # if not exist create kernel-modules symlink - if [ ! -h ${MROOT}/usr/src/kernel-modules ] && + # create kernel-modules symlink + if mqueryfeature "linuxsymlink" && [ -d ${MROOT}/usr/src/kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} ] then echo "Creating kernel-modules -> kernel-modules-${KPVER}-${KBRANCH}-${KPBUILD} symlink ... " @@ -425,8 +491,8 @@ # export pre/postinstall functions depending on KERNEL_TYPE case ${KERNEL_TYPE} in image) - export_inherits kernel_image preinstall preremove postinstall postremove - SPECIAL_FUNCTIONS="${SPECIAL_FUNCTIONS} kernel_image_preinstall kernel_image_preremove kernel_image_postinstall kernel_image_postremove" + export_inherits kernel_image preinstall preremove postinstall + SPECIAL_FUNCTIONS="${SPECIAL_FUNCTIONS} kernel_image_preinstall kernel_image_preremove kernel_image_postinstall" ;; sources) export_inherits kernel_sources postinstall