#!/bin/bash # Bob Johnson, 23 March 2003 # Daniel Robbins, ? 2003 # Robin Johnson, 28 September 2003 # Copyright 2002 Gentoo Technologies, Inc; http://www.gentoo.org # Released under the GNU General Public License version 2 die() { [ -n "$1" ] && echo "$1" exit 1 } GK_VERSION=1.8 GK_SHARE=/usr/share/genkernel [ ! -e /sbin/functions.sh ] && die "Can't find /sbin/functions.sh; exiting." source /sbin/functions.sh TEMP=/tmp CONFIG=/etc/kernels [ ! -e /etc/kernels/settings ] && die "Can't find /etc/kernels/settings; exiting." source /etc/kernels/settings BUSYBOX_TARBALL=${GK_SHARE}/busybox-0.60.5.tar.bz2 BUSYBOX_DIR=busybox-0.60.5 MAKEOPTS="$(portageq envvar MAKEOPTS)" doheader() { cat <&2 cat 1>&2 < /dev/null eend else einfo "Skipping mrproper as requested" ewarn "If you have problems compiling or running the kernel," ewarn "it is recommended that you ensure mrproper is run again" fi if [ -e ${CONFIG}/config-${KV} ] then cp -f ${CONFIG}/config-${KV} ${KD}/.config || die "couldn't copy 1" elif [ -e ${KD}/kernel-config ] then cp -f ${KD}/kernel-config ${KD}/.config || die "couldn't copy 2" else cp -f ${CONFIG}/default-config ${KD}/.config || die "couldn't copy 3" fi ebegin "Running \"make oldconfig\"" while true;do echo -e "\n";done|make oldconfig >/dev/null eend if [ "$MENUCONFIG" = "yes" ] then echo echo "You will now be able to make customizations to your kernel configuration." echo "Any changes you make will be saved in ${CONFIG}/config-${KV}." echo "Your changes will also be used automatically the next time you use" echo "genkernel to build the ${KV} kernel." echo echo "Hit enter to begin." read make menuconfig if [ $? -eq 0 ] then cp ${KD}/.config ${CONFIG}/config-${KV} else echo "Error running \"make menuconfig\"; exiting." die fi fi } compile() { local compile ebegin "Logging to /var/log/genkernel.log"; eend; ebegin "Starting ${KV} build"; eend ebegin "Running \"make dep\"" make dep >/var/log/genkernel.log 2>&1 ||die; eend ebegin "Running \"make bzImage\"" make $MAKEOPTS bzImage >/var/log/genkernel.log 2>&1 || die; eend ebegin "Running \"make modules\"" make $MAKEOPTS modules >/var/log/genkernel.log 2>&1 || die; eend ebegin "Running \"make modules_install\"" make modules_install >/var/log/genkernel.log 2>&1 || die; eend local BOOT_MOUNTED="no" [ -z "$(mount |egrep 'on /boot\>')" ] && BOOT_MOUNTED="yes" [ "${BOOT_MOUNTED}" = "no" ] && mount /boot > /dev/null 2>&1 ebegin "Moving bzImage to /boot/kernel-${KV}" cp arch/i386/boot/bzImage /boot/kernel-${KV} || die; eend ebegin "Copying System.map to /boot/System.map-${KV}" cp System.map /boot/System.map-${KV} rm -f /boot/System.map.old if [ -L /boot/System.map ] then rm /boot/System.map elif [ -e /boot/System.map ] then mv -f /boot/System.map /boot/System.map.old fi ln -s System.map-${KV} /boot/System.map eend } busybox() { local busy ebegin "Building busybox" cd ${TEMP} rm -rf ${BUSYBOX_DIR} tar -xjf ${BUSYBOX_TARBALL} cd ${BUSYBOX_DIR} cp Config.h Config.h.orig sed -e "s://#define BB_INSMOD:#define BB_INSMOD:" \ -e "s://#define BB_PIVOT_ROOT:#define BB_PIVOT_ROOT:" \ -e "s://#define BB_LOADKMAP:#define BB_LOADKMAP:" \ -e "s://#define BB_LOSETUP:#define BB_LOSETUP:" \ -e "s://#define BB_RMMOD:#define BB_RMMOD:" Config.h.orig > Config.h make clean make DOSTATIC=true install -d ${TEMP}/kernel-initrd dd if=/dev/zero of=${TEMP}/initrd bs=1k count=5000 mke2fs -F -q -N5000 ${TEMP}/initrd mount -t ext2 -o loop ${TEMP}/initrd ${TEMP}/kernel-initrd install -d ${TEMP}/kernel-initrd/{bin,etc,usr,proc,tmp,.initrd,new_root} ln -s bin ${TEMP}/kernel-initrd/sbin ln -s ../bin ${TEMP}/kernel-initrd/usr/bin ln -s ../bin ${TEMP}/kernel-initrd/usr/sbin install -d ${TEMP}/kernel-initrd/keymaps cp ${GK_SHARE}/keymaps/key.lst ${TEMP}/kernel-initrd/keymaps tar xzf ${GK_SHARE}/keymaps/bin-keymaps.tar.gz -C ${TEMP}/kernel-initrd/keymaps (mkdir ${TEMP}/kernel-initrd/dev;cd ${TEMP}/kernel-initrd/dev;MAKEDEV generic-i386;MAKEDEV scd) cat >${TEMP}/kernel-initrd/etc/fstab < ${TEMP}/kernel-initrd/linuxrc chmod +x ${TEMP}/kernel-initrd/linuxrc umount ${TEMP}/initrd if [ "${BOOTSPLASH}" = "yes" ] then ebegin "Adding Bootsplash Initrd" cat ${BOOT_SPLASH_INITRD} >> ${TEMP}/initrd || die cp -f ${TEMP}/initrd /boot/initrd-${KV} eend else gzip -f -9 ${TEMP}/initrd mv -f ${TEMP}/initrd.gz /boot/initrd-${KV} eend fi } buildpkg() { local build if [ "${PACKAGE}" = "yes" ] then ebegin "Building Kernel Package" mkdir ${TEMP}/genkernel cp /boot/kernel-${KV} ${TEMP}/genkernel cp /boot/initrd-${KV} ${TEMP}/genkernel cp -rf /lib/modules/${KV} ${TEMP}/genkernel cp -f /usr/src/linux-${KV}/.config ${TEMP}/genkernel/config cd ${TEMP} tar -jcvf /root/kernel-${KV}.tar.bz2 genkernel 2>&1 || die rm -rf ${TEMP}/genkernel echo $WARN " * Copied Kernel package to /root/kernel-${KV}.tar.bz2" eend fi } finish() { echo einfo "Build completed successfully!" echo einfo "Please specify /boot/kernel-${KV} and /boot/initrd-${KV}" einfo "when customizing your boot loader configuration files." echo einfo "A detailed log can be found at /var/log/genkernel.log." rm -rf /tmp/KV rm -rf ${TEMP}/kernel-initrd rm -rf ${TEMP}/${BUSYBOX_DIR} } #root_device configuration compile ebegin "Building busybox" busybox >/var/log/genkernel.log 2>&1 eend ebegin "Creating initrd" initrd >/var/log/genkernel.log 2>&1 eend buildpkg finish exit 0