# Copyright 1999-2003 Gentoo Technologies, Inc. # Distributed under the terms of the GNU General Public License v2 # $Header: IUSE="build pcmcia xfs acpi grsec aavm rmap" ETYPE="sources" inherit kernel || die # OKV=original kernel version, KV=patched kernel version. OKV="2.4.21" KV="2.4.21-ck${PR/r/}" S=${WORKDIR}/linux-${KV} EXTRAVERSION="-ck${PR/r/}" DESCRIPTION="Full sources for the Con Kolivas's high performance kernel and its optional features" HOMEPAGE="http://members.optusnet.com.au/ckolivas/kernel" ### Below is a list of all the available patches: ## Performance enhancements (installed by default): # Base ck patch (contains the batch O(1) scheduler, preemptible, # low latency, and interactivity): # (added by default) BASE_PATCH="patch-1000_O1_PE_LL_0306300059_2.4.21-ck3.bz2" # Con Colivas autoregulation vm hacks: # USE: -aavm -rmap CKVM_PATCH="patch-1010_CKVM_0306300027_2.4.21-ck3.bz2" # Swap prefetching: # USE: -aavm -rmap SP_PATCH="patch-1011_SP_0306102217_2.4.21-ck2.bz2" # Read Latency2: # (added by default) RL2="patch-1020_RL2_0305310042_2.4.21-ck2.bz2" # Desktop Tuning 1: # (added by default) DT1_PATCH="patch-1021_DT1_030531616_2.4.21-ck2.bz2" # Variable HZ setting: # USE: -pcmcia VH_PATCH="patch-1030_VH_0306200116_2.4.21-ck2.bz2" # Desktop Tuning 2: # USE: -pcmcia DT2_PATCH="patch-1031_DT2_0306200119_2.4.21-ck2.bz2" # Scheduler Tunables: # (added by default) ST_PATCH="patch-1040_ST_0306230135_2.4.21-ck2.bz2" ## Extra features: # Supermount-NG v1.2.7: # (added by default) SM_PATCH="patch-1050_SM1.2.7_0306201731_2.4.21-ck2.patch.bz2" # XFS file system: # USE: xfs XFS_PATCH="patch-1060_XFS1.3.0pre2_0306201757_2.4.21-ck2.bz2" # ACPI 20030522: # USE: acpi ACPI_PATCH="patch-1070_ACPI_0306300010_2.4.21-ck3.bz2" # Bootsplash: # (added by default) BS_PATCH="patch-1090_BS_0306020027_2.4.21-ck2.bz2" ## Misc other patches: # Nvidia Nforce2 update: # (added by default) NF2_PATCH="patch-1080_NF2_0305311048_2.4.21-ck2.bz2" # CPU Frequency scaling for supported laptops: # USE: pcmcia CFS_PATCH="1100_CFS_0306161356_2.4.21-ck1.patch.bz2" # Grsec 1.9.9h (currently depends on CKVM and XFS): # USE: grsec -rmap -aavm GRS_PATCH="patch-1161_GRS1.9.9h_0306230051_2.4.21-ck2.bz2" # Packet writing for CDRW/DVDR # (added by default) PW_PATCH="patch-1100_PW_0306221328_2.4.21-ck2.bz2" ## Alternative VMs: # AAVM: # USE: aavm -rmap AAVM_PATCH="1010_AAVM_0306191118_2.4.21-ck1.patch.bz2" # Rmap: # USE: rmap -aavm RMAP_PATCH="1010_rmap15j_0306172008_2.4.21-ck1.patch.bz2" ### Create the SRC_URI from USE flags. #CK_URL="http://members.optusnet.com.au/ckolivas/kernel" TGL_URL="http://tdegreni.free.fr/ck-sources" CK_URL="${TGL_URL}" SRC_URI="http://www.kernel.org/pub/linux/kernel/v2.4/linux-${OKV}.tar.bz2 \ ${CK_URL}/${BASE_PATCH} \ ${CK_URL}/${CKVM_PATCH} \ ${CK_URL}/${SP_PATCH} \ ${CK_URL}/${RL2} \ ${CK_URL}/${DT1_PATCH} \ ${CK_URL}/${VH_PATCH} \ ${CK_URL}/${DT2_PATCH} \ ${CK_URL}/${ST_PATCH} \ ${CK_URL}/${SM_PATCH} \ xfs? ( ${CK_URL}/${XFS_PATCH} ) \ acpi? ( ${CK_URL}/${ACPI_PATCH} ) \ ${CK_URL}/${NF2_PATCH} \ ${CK_URL}/${BS_PATCH} \ pcmcia? ( ${CK_URL}/${CFS_PATCH} ) \ ${CK_URL}/${PW_PATCH} \ rmap? ( ${CK_URL}/${RMAP_PATCH} ) \ aavm? ( ${CK_URL}/${AAVM_PATCH} ) \ grsec? ( ${CK_URL}/${XFS_PATCH} ) \ grsec? ( ${CK_URL}/${GRS_PATCH} )" KEYWORDS="~x86 -ppc" SLOT="${KV}" ## Utility functions add_patches() { for PATCH in $* do if [ ! -L ${PATCH#patch-} ]; then ln -s ${DISTDIR}/${PATCH} ${PATCH#patch-} || die "Can't add patch ${PATCH}" fi done } rem_patches() { for PATCH in $* do if [ -L ${PATCH#patch-} ]; then rm ${PATCH#patch-} || die "Can't remove patch ${PATCH}" fi done } apply_patches() { cd linux-${OKV} for PATCH in ../1* do einfo "Apply patch ${PATCH#\.\.\/}" bzcat ${PATCH} | patch -p1 -s || die "Patching with ${PATCH#\.\.\/} failed." done cd .. } ## End of the utility functions src_unpack() { # Check for conflicts without obvious default choice: [ -n "`use rmap`" -a -n "`use aavm`" ] && \ die "You'll have to choose between AAVM and Rmap." [ -n "`use grsec`" ] && [ -n "`use rmap`" -o -n "`use aavm`" ] && \ die "Grsecurity patch currently won't work with AAVM or Rmap." # Unpack the vanilla sources unpack linux-${OKV}.tar.bz2 # Add the main separate patches: add_patches ${BASE_PATCH} ${CKVM_PATCH} ${SP_PATCH} ${RL2} ${DT1_PATCH} ${ST_PATCH} ${VH_PATCH} ${DT2_PATCH} [ -n "`use pcmcia`" ] && \ einfo "PCMCIA is in use: \"Variable HZ setting\" and \"Desktop Tuning 2\" removed." && \ rem_patches ${VH_PATCH} ${DT2_PATCH} # Add optional features: add_patches ${SM_PATCH} ${NF2_PATCH} ${BS_PATCH} ${PW_PATCH} [ -n "`use xfs`" ] && add_patches ${XFS_PATCH} [ -n "`use acpi`" ] && add_patches ${ACPI_PATCH} [ -n "`use rmap`" -o -n "`use aavm`" ] && \ einfo "A non-CK VM is in use." && \ rem_patches ${SP_PATCH} ${CKVM_PATCH} [ -n "`use pcmcia`" ] && add_patches ${CFS_PATCH} [ -n "`use grsec`" ] && add_patches ${GRS_PATCH} [ -n "`use grsec`" -a ! -n "`use xfs`" ] && \ einfo "Grsec is in use: XFS added." && \ add_patches ${XFS_PATCH} [ -n "`use rmap`" ] && add_patches ${RMAP_PATCH} [ -n "`use aavm`" ] && add_patches ${AAVM_PATCH} # Apply the selected patches apply_patches # Rename the kernel mv linux-${OKV} linux-${KV} || die # Do the usual cleanups cd linux-${KV} kernel_universal_unpack } pkg_postinst() { # Create the /usr/src/linux link if needed kernel_pkg_postinst # Display some configuration advices: echo [ -n "`use xfs`" -o -n "`use grsec`" ] && einfo "It is safer to disable \"Preempt\" if you use XFS." echo einfo "Do NOT use hdparm with this 2.4.21 kernel. It will timeout," einfo "not set dma properly and can cause fs corruption if you use" einfo "it during hd activity!" echo }