#!/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.9 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 CLOOP_TARBALL=cloop_0.68-2.tar.gz CLOOP_DIR=cloop-0.68 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 [ "$MYCONFIG" = "yes" ] then cp -f ${CONFIG}/myconfig ${KD}/.config || die "couldn't copy myconfig" elif [ -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\"" if [ "$PACKAGE" = "yes" ] then install -d ${TEMP}/modules INSTALL_MOD_PATH="${TEMP}/modules" make modules_install >/var/log/genkernel.log 2>&1 || die; eend mkdir ${TEMP}/genkernel cp -rf ${TEMP}/modules/lib/modules/${KV} ${TEMP}/genkernel rm -rf ${TEMP}/modules else make modules_install >/var/log/genkernel.log 2>&1 || die; eend fi local BOOT_MOUNTED="no" if [ "$NOINSTALL" = "no" ] then ebegin "Mounting /boot" [ -z "$(mount |egrep 'on /boot')" ] && BOOT_MOUNTED="yes" [ "${BOOT_MOUNTED}" = "no" ] && mount /boot > /dev/null 2>&1 retval=$? [ $retval -eq 0 ] && BOOT_MOUNTED="yes" eend $retval fi local BZIMAGE_SRC=arch/i386/boot/bzImage local BZIMAGE_DST=/boot/kernel-${KV} if [ "$LIVECD" = "yes" ] then BZIMAGE_DST=/kernel-${KV}-livecd elif [ "$NOINSTALL" = "yes" ] then BZIMAGE_DST=${TEMP}/kernel-${KV} fi ebegin "Moving bzImage to ${BZIMAGE_DST}" cp ${BZIMAGE_SRC} ${BZIMAGE_DST} || die ; eend # now we handle System.map local SYSTEMMAP_SRC=System.map local SYSTEMMAP_DST=/boot/System.map-${KV} if [ "$LIVECD" = "yes" ] then SYSTEMMAP_DST=/System.map-${KV}-livecd elif [ "$NOINSTALL" = "yes" ] then SYSTEMMAP_DST=${TEMP}/System.map-${KV} fi ebegin "Copying System.map to ${SYSTEMMAP_DST}" cp -f System.map ${SYSTEMMAP_DST} if [ "$NOINSTALL" = "no" ] then 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 ${SYSTEMMAP_DST} /boot/System.map fi 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=${INITRD_SIZE} 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}/key.lst ${TEMP}/kernel-initrd/keymaps tar xzf ${GK_SHARE}/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}/kernel-initrd gzip -f -9 ${TEMP}/initrd } bootsplash() { local INITRD_SRC=${TEMP}/initrd.gz local INITRD_DST=/boot/initrd-${KV} if [ "${BOOTSPLASH}" = "yes" ] then ebegin "Adding Bootsplash Initrd" cat ${BOOT_SPLASH_INITRD} >> ${INITRD_SRC} eend fi if [ "$LIVECD" = "yes" ] then INITRD_DST=/initrd-${KV}-livecd elif [ "$NOINSTALL" = "yes" ] then INITRD_DST=${TEMP}/initrd-${KV} fi ebegin "Moving initrd to ${INITRD_DST}" mv -f ${INITRD_SRC} ${INITRD_DST} eend } buildpkg() { if [ "${PACKAGE}" = "yes" ] then ebegin "Building Kernel Package" mv ${TEMP}/kernel-${KV} ${TEMP}/genkernel || die "cannot copy kernel" mv ${TEMP}/initrd-${KV} ${TEMP}/genkernel || die "cannot copy initrd" eend cp -f ${KD}/.config ${TEMP}/genkernel/config >/var/log/genkernel.log 2>&1 cd ${TEMP} ebegin "Copying Kernel package to /kernel-${KV}.tar.bz2" tar -jcvf /kernel-${KV}.tar.bz2 genkernel >/var/log/genkernel.log 2>&1 || die eend rm -rf ${TEMP}/genkernel 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." umount ${TEMP}/kernel-initrd >/var/log/genkernel.log 2>&1 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 bootsplash buildpkg finish exit 0