2 # Copyright 1999-2005 Gentoo Foundation
3 # Distributed under the terms of the GNU General Public License v2
5 source /tmp/chroot-functions.sh
7 mkdir -p /tmp/kerncache
9 check_genkernel_version
11 PKGDIR=/tmp/kerncache/${clst_kname}/ebuilds
14 # default genkernel args
15 GK_ARGS="${clst_gk_mainargs} \
16 ${clst_kernel_gk_kernargs} \
17 --cachedir=/tmp/kerncache/${clst_kname}-genkernel_cache-${clst_version_stamp} \
19 --kerneldir=/usr/src/linux \
20 --kernel-config=/var/tmp/${clst_kname}.config \
21 --modulespackage=/tmp/kerncache/${clst_kname}-modules-${clst_version_stamp}.tar.bz2 \
22 --minkernpackage=/tmp/kerncache/${clst_kname}-kernel-initrd-${clst_version_stamp}.tar.bz2 \
23 --kerncache=/tmp/kerncache/${clst_kname}-kerncache-${clst_version_stamp}.tar.bz2 all"
24 # extra genkernel options that we have to test for
25 if [ "${clst_splash_type}" == "bootsplash" -a -n "${clst_splash_theme}" ]
27 GK_ARGS="${GK_ARGS} --bootsplash=${clst_splash_theme}"
30 if [ "${clst_splash_type}" == "gensplash" -a -n "${clst_splash_theme}" ]
32 GK_ARGS="${GK_ARGS} --gensplash=${clst_splash_theme}"
35 if [ -d "${clst_initramfs_overlay}" ]
37 GK_ARGS="${GK_ARGS} --initramfs-overlay=/tmp/initramfs_overlay/${clst_initramfs_overlay}"
39 if [ -n "${clst_CCACHE}" ]
41 GK_ARGS="${GK_ARGS} --kernel-cc=/usr/lib/ccache/bin/gcc --utils-cc=/usr/lib/ccache/bin/gcc"
44 if [ "${clst_devmanager}" == "devfs" ]
46 GK_ARGS="${GK_ARGS} --no-udev"
49 if [ -n "${clst_linuxrc}" ]
51 GK_ARGS="${GK_ARGS} --linuxrc=/tmp/linuxrc"
56 eval "clst_initramfs_overlay=\$clst_boot_kernel_${filtered_kname}_initramfs_overlay"
57 eval "clst_kernel_merge=\$clst_boot_kernel_${filtered_kname}_packages"
60 #echo "The GK_ARGS are"
62 export clst_kernel_merge
63 export clst_initramfs_overlay
64 # Build our list of kernel packages
65 if [ "${clst_livecd_type}" = "gentoo-release-livecd" -a "$clst_kernel_merge" != ""]
68 echo "${clst_kernel_merge}" > /usr/livecd/kernelpkgs.txt
70 # Build with genkernel using the set options
71 # callback is put here to avoid escaping issues
72 if [ -n "${clst_KERNCACHE}" ]
74 if [ "$clst_kernel_merge" != "" ]
76 genkernel --callback="PKGDIR=${PKGDIR} emerge -kb \
77 ${clst_kernel_merge}" ${GK_ARGS} || exit 1
79 genkernel ${GK_ARGS} || exit 1
82 if [ "$clst_kernel_merge" != "" ]
84 genkernel --callback="emerge ${clst_kernel_merge}" \
87 genkernel ${GK_ARGS} || exit 1
90 md5sum /var/tmp/${clst_kname}.config|awk '{print $1}' > /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.CONFIG
97 # Script to build each kernel, kernel-related packages
104 [ -n "${clst_ENVSCRIPT}" ] && source /tmp/envscript
105 export CONFIG_PROTECT="-*"
107 # Set the timezone for the kernel build
109 ln -s /usr/share/zoneinfo/UTC /etc/localtime
112 filtered_kname=${clst_kname/-/_}
113 filtered_kname=${clst_kname/\//_}
114 filtered_kname=${filtered_kname/\./_}
116 eval "clst_kernel_use=\$clst_boot_kernel_${filtered_kname}_use"
117 export USE=$clst_kernel_use
119 eval "clst_kernel_gk_kernargs=\$clst_boot_kernel_${filtered_kname}_gk_kernargs"
120 eval "clst_ksource=\$clst_boot_kernel_${filtered_kname}_sources"
122 # Don't use pkgcache here, as the kernel source may get emerged with different
123 # USE variables (and thus different patches enabled/disabled.) Also, there's no
124 # real benefit in using the pkgcache for kernel source ebuilds.
127 if [ -e /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.USE ]
129 STR1=$(for i in `cat /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.USE`; do echo $i; done|sort)
130 STR2=$(for i in ${clst_kernel_use}; do echo $i; done|sort)
131 if [ "${STR1}" = "${STR2}" ]
133 #echo "USE Flags match"
136 if [ -n "${clst_KERNCACHE}" ]
138 [ -d /tmp/kerncache/${clst_kname}/ebuilds ] && \
139 rm -r /tmp/kerncache/${clst_kname}/ebuilds
140 [ -e /tmp/kerncache/${clst_kname}/usr/src/linux/.config ] && \
141 rm /tmp/kerncache/${clst_kname}/usr/src/linux/.config
147 if [ -e /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.EXTRAVERSION ]
149 STR1=`cat /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.EXTRAVERSION`
150 STR2=${clst_kextraversion}
151 if [ "${STR1}" = "${STR2}" ]
153 if [ -n "${clst_KERNCACHE}" ]
155 #echo "EXTRAVERSION match"
162 if [ -e /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.CONFIG ]
164 STR1=`cat /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.CONFIG`
165 STR2=`md5sum /var/tmp/${clst_kname}.config|awk '{print $1}'`
166 if [ "${STR1}" = "${STR2}" ]
168 if [ -n "${clst_KERNCACHE}" ]
176 if [ "${USE_MATCH}" = "0" -o "${EXTRAVERSION_MATCH}" = "0" -o "${CONFIG_MATCH}" = "0" ]
178 echo "Cleaning up ${clst_kname} kernel install ..."
179 echo "This may take some time ..."
180 if [ -d /tmp/kerncache/${clst_kname}/ ]
182 rm -r /tmp/kerncache/${clst_kname}/ || exit 1
186 mkdir -p /tmp/kerncache/${clst_kname}
188 if [ -n "${clst_KERNCACHE}" ]
190 ROOT=/tmp/kerncache/${clst_kname} PKGDIR=${PKGDIR} USE="${USE} symlink build" emerge --nodeps -ukb "${clst_ksource}" || exit 1
191 KERNELVERSION=`/usr/lib/portage/bin/portageq best_visible / "${clst_ksource}"`
192 if [ ! -e /etc/portage/profile/package.provided ]
194 mkdir -p /etc/portage/profile
195 echo "${KERNELVERSION}" > /etc/portage/profile/package.provided
197 if ( ! grep -q "^${KERNELVERSION}" /etc/portage/profile/package.provided )
199 echo "${KERNELVERSION}" >> /etc/portage/profile/package.provided
202 [ -d /usr/src/linux ] && rm /usr/src/linux
203 ln -s /tmp/kerncache/${clst_kname}/usr/src/linux /usr/src/linux
205 USE="${USE} symlink build" emerge "${clst_ksource}" || exit 1
208 # If catalyst has set to a empty string, extraversion wasn't specified so we
210 if [ "${EXTRAVERSION_MATCH}" = "0" ]
212 if [ ! "${clst_kextraversion}" = "" ]
214 echo "Setting extraversion to ${clst_kextraversion}"
215 sed -i -e "s:EXTRAVERSION \(=.*\):EXTRAVERSION \1-${clst_kextraversion}:" /usr/src/linux/Makefile
216 echo ${clst_kextraversion} > /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.EXTRAVERSION
218 touch /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.EXTRAVERSION
223 # grep out the kernel version so that we can do our modules magic
224 VER=`grep ^VERSION\ \= /usr/src/linux/Makefile | awk '{ print $3 };'`
225 PAT=`grep ^PATCHLEVEL\ \= /usr/src/linux/Makefile | awk '{ print $3 };'`
226 SUB=`grep ^SUBLEVEL\ \= /usr/src/linux/Makefile | awk '{ print $3 };'`
227 EXV=`grep ^EXTRAVERSION\ \= /usr/src/linux/Makefile | sed -e "s/EXTRAVERSION =//" -e "s/ //g"`
228 clst_fudgeuname=${VER}.${PAT}.${SUB}${EXV}
230 /sbin/modules-update --assume-kernel=${clst_fudgeuname}
233 echo ${clst_kernel_use} > /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.USE