#!/bin/bash ##################################################### ##### colors ######################################## green="\033[01;32m" contrast="\033[1m" restore="\033[00m" prepare(){ ##################################################### ##### create/mount temp dir ######################### RAM_DIR="${PWD%/*}/RAM" mkdir "${RAM_DIR}" SOURCE_DIR="${PWD}" mount -t tmpfs tmpfs ${RAM_DIR} ##################################################### ##### copy sources over symlinks into RAM_DIR ####### for i in $(ls -A);do cp -Rs ${SOURCE_DIR}/${i} ${RAM_DIR}/${i} done cd "${RAM_DIR}" } config(){ ##################################################### ##### config ######################################## echo -e "${green}Config${restore}" [[ ! -f .config ]] && zcat /proc/config.gz > .config if [[ -z "${1}" ]];then make oldconfig else make ${1} fi } compile(){ ##################################################### ##### compiling ##################################### echo -e "${green}Compiling in RAM${restore}" threads="$(( $(awk '/^cpu cores/ {print $4}' /proc/cpuinfo | uniq) + 1 ))" if ! make -j${threads};then make xconfig make -j${threads} fi } src_install(){ ##################################################### ##### modules ####################################### echo -e "${green}Installing modules${restore}" make INSTALL_MOD_STRIP=1 modules_install KERNELRELEASE="$(cat include/config/kernel.release 2> /dev/null)" MODLIB="/lib/modules/${KERNELRELEASE}" rm -f "${MODLIB}/source" rm -f "${MODLIB}/build" ln -s "${SOURCE_DIR}" "${MODLIB}/source" ln -s "${SOURCE_DIR}" "${MODLIB}/build" echo -e "${green}Installing kernel${restore}" cp arch/x86/boot/bzImage /boot/${ver#linux-} ##################################################### ##### bootloader #################################### echo -e "${green}Configuring grub${restore}" old_ver="$(grep kernel /boot/grub/grub.conf | tr ' ' $'\n'| grep boot)" sed -e "s|${old_ver} |/boot/${ver#linux-} |" \ -e "s|title Gentoo.*|title Gentoo ${ver#linux-}|"\ -i /boot/grub/grub.conf } dump(){ ##################################################### ##### copy generated files back into SOURCE_DIR ##### rsync --checksum --recursive --links --safe-links \ --exclude='*.o' \ --exclude='*.ko' \ --exclude='*.cmd' \ --exclude='*.builtin' \ --exclude='*.order' \ --exclude='*.mod' \ ${RAM_DIR}/ ${SOURCE_DIR}/ } clean(){ ##################################################### ##### umount/remove temp dir ######################## cd "${SOURCE_DIR}" umount "${RAM_DIR}" rm -rf "${RAM_DIR}" } ##################################################### ##### choose version ################################ PS3=`echo -e "${contrast}Choose version:${restore} "` select ver in `ls -d1 /usr/src/linux-* | sed 's|/usr/src/||g'`;do eselect kernel set ${ver} break done ln -sfT "${ver}" /usr/src/linux cd /usr/src/$(readlink /usr/src/linux); prepare; config; compile; src_install; dump; clean; ##################################################### ##### thirdparty modules ############################ echo -e "${green}Building thirdparty modules${restore}" dkms-gentoo -cl