3 source /tmp/chroot-functions.sh
5 check_genkernel_version
7 install -d /tmp/kerncache
8 PKGDIR=/tmp/kerncache/${clst_kname}/ebuilds
11 # default genkernel args
12 GK_ARGS="${clst_gk_mainargs} \
13 ${clst_kernel_gk_kernargs} \
14 --cachedir=/tmp/kerncache/${clst_kname}-genkernel_cache-${clst_version_stamp} \
16 --kerneldir=/usr/src/linux \
17 --modulespackage=/tmp/kerncache/${clst_kname}-modules-${clst_version_stamp}.tar.bz2 \
18 --minkernpackage=/tmp/kerncache/${clst_kname}-kernel-initrd-${clst_version_stamp}.tar.bz2 all"
19 # extra genkernel options that we have to test for
20 if [ -n "${clst_KERNCACHE}" ]
22 GK_ARGS="${GK_ARGS} --kerncache=/tmp/kerncache/${clst_kname}-kerncache-${clst_version_stamp}.tar.bz2"
24 if [ -e /var/tmp/${clst_kname}.config ]
26 GK_ARGS="${GK_ARGS} --kernel-config=/var/tmp/${clst_kname}.config"
29 if [ -n "${clst_splash_theme}" ]
31 GK_ARGS="${GK_ARGS} --splash=${clst_splash_theme}"
32 # Setup case structure for livecd_type
33 case ${clst_livecd_type} in
34 gentoo-release-minimal|gentoo-release-universal)
35 case ${clst_hostarch} in
37 GK_ARGS="${GK_ARGS} --splash-res=1024x768"
44 if [ -d "/tmp/initramfs_overlay/${clst_initramfs_overlay}" ]
46 GK_ARGS="${GK_ARGS} --initramfs-overlay=/tmp/initramfs_overlay/${clst_initramfs_overlay}"
48 if [ -n "${clst_CCACHE}" ]
50 GK_ARGS="${GK_ARGS} --kernel-cc=/usr/lib/ccache/bin/gcc --utils-cc=/usr/lib/ccache/bin/gcc"
53 if [ -n "${clst_linuxrc}" ]
55 GK_ARGS="${GK_ARGS} --linuxrc=/tmp/linuxrc"
58 if [ -n "${clst_busybox_config}" ]
60 GK_ARGS="${GK_ARGS} --busybox-config=/tmp/busy-config"
63 if [ "${clst_target}" == "netboot2" ]
65 GK_ARGS="${GK_ARGS} --netboot"
67 if [ -n "${clst_merge_path}" ]
69 GK_ARGS="${GK_ARGS} --initramfs-overlay=\"${clst_merge_path}\""
75 eval "clst_initramfs_overlay=\$clst_boot_kernel_${filtered_kname}_initramfs_overlay"
76 eval "clst_kernel_merge=\$clst_boot_kernel_${filtered_kname}_packages"
79 #echo "The GK_ARGS are"
81 export clst_kernel_merge
82 export clst_initramfs_overlay
83 # Build our list of kernel packages
84 case ${clst_livecd_type} in
86 if [ -n "${clst_kernel_merge}" ]
89 echo "${clst_kernel_merge}" > /usr/livecd/kernelpkgs.txt
93 # Build with genkernel using the set options
94 # callback is put here to avoid escaping issues
95 gk_callback_opts="-qN"
97 if [ -n "${clst_KERNCACHE}" ]
99 gk_callback_opts="${gk_callback_opts} -kb"
101 if [ -n "${clst_FETCH}" ]
103 gk_callback_opts="${gk_callback_opts} -f"
105 if [ "${clst_kernel_merge}" != "" ]
107 genkernel --callback="emerge ${gk_callback_opts} ${clst_kernel_merge}" \
110 genkernel ${GK_ARGS} || exit 1
112 if [ -e /var/tmp/${clst_kname}.config ]
114 md5sum /var/tmp/${clst_kname}.config | awk '{print $1}' > \
115 /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.CONFIG
123 [ -n "${clst_ENVSCRIPT}" ] && source /tmp/envscript
124 export CONFIG_PROTECT="-*"
126 # Set the timezone for the kernel build
128 cp -f /usr/share/zoneinfo/UTC /etc/localtime
130 filtered_kname=${clst_kname/-/_}
131 filtered_kname=${clst_kname/\//_}
132 filtered_kname=${filtered_kname/\./_}
134 eval "clst_kernel_use=\$clst_boot_kernel_${filtered_kname}_use"
135 eval "clst_kernel_gk_kernargs=\$clst_boot_kernel_${filtered_kname}_gk_kernargs"
136 eval "clst_ksource=\$clst_boot_kernel_${filtered_kname}_sources"
138 if [ -z "${clst_ksource}" ]
140 clst_ksource="virtual/linux-sources"
143 # Don't use pkgcache here, as the kernel source may get emerged with different
144 # USE variables (and thus different patches enabled/disabled.) Also, there's no
145 # real benefit in using the pkgcache for kernel source ebuilds.
148 if [ -e /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.USE ]
150 STR1=$(for i in `cat /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.USE`; do echo $i; done|sort)
151 STR2=$(for i in ${clst_kernel_use}; do echo $i; done|sort)
152 if [ "${STR1}" = "${STR2}" ]
154 #echo "USE Flags match"
157 if [ -n "${clst_KERNCACHE}" ]
159 [ -d /tmp/kerncache/${clst_kname}/ebuilds ] && \
160 rm -r /tmp/kerncache/${clst_kname}/ebuilds
161 [ -e /tmp/kerncache/${clst_kname}/usr/src/linux/.config ] && \
162 rm /tmp/kerncache/${clst_kname}/usr/src/linux/.config
168 if [ -e /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.EXTRAVERSION ]
170 STR1=`cat /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.EXTRAVERSION`
171 STR2=${clst_kextraversion}
172 if [ "${STR1}" = "${STR2}" ]
174 if [ -n "${clst_KERNCACHE}" ]
176 #echo "EXTRAVERSION match"
183 if [ -n "${clst_KERNCACHE}" -a \
184 -e /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.CONFIG ]
186 if [ ! -e /var/tmp/${clst_kname}.config ]
190 STR1=`cat /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.CONFIG`
191 STR2=`md5sum /var/tmp/${clst_kname}.config|awk '{print $1}'`
192 if [ "${STR1}" = "${STR2}" ]
199 [ -e /etc/portage/make.conf ] && \
200 echo "USE=\"\${USE} ${clst_kernel_use} \"" >> /etc/portage/make.conf
202 if [ -n "${clst_KERNCACHE}" ]
204 mkdir -p /tmp/kerncache/${clst_kname}
205 clst_root_path=/tmp/kerncache/${clst_kname} PKGDIR=${PKGDIR} clst_myemergeopts="--quiet --nodeps --update --newuse" run_merge "${clst_ksource}" || exit 1
206 KERNELVERSION=`portageq best_visible / "${clst_ksource}"`
207 if [ ! -e /etc/portage/profile/package.provided ]
209 mkdir -p /etc/portage/profile
210 echo "${KERNELVERSION}" > /etc/portage/profile/package.provided
212 if ( ! grep -q "^${KERNELVERSION}\$" /etc/portage/profile/package.provided )
214 echo "${KERNELVERSION}" >> /etc/portage/profile/package.provided
217 [ -L /usr/src/linux ] && rm -f /usr/src/linux
218 ln -s /tmp/kerncache/${clst_kname}/usr/src/linux /usr/src/linux
220 [ -L /usr/src/linux ] && rm -f /usr/src/linux
221 run_merge "${clst_ksource}" || exit 1
225 # If catalyst has set to a empty string, extraversion wasn't specified so we
227 if [ "${EXTRAVERSION_MATCH}" = "0" ]
229 if [ ! "${clst_kextraversion}" = "" ]
231 echo "Setting extraversion to ${clst_kextraversion}"
232 sed -i -e "s:EXTRAVERSION \(=.*\):EXTRAVERSION \1-${clst_kextraversion}:" /usr/src/linux/Makefile
233 echo ${clst_kextraversion} > /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.EXTRAVERSION
235 touch /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.EXTRAVERSION
240 sed -i "/USE=\"\${USE} ${clst_kernel_use} \"/d" /etc/portage/make.conf
241 # grep out the kernel version so that we can do our modules magic
242 VER=`grep ^VERSION\ \= /usr/src/linux/Makefile | awk '{ print $3 };'`
243 PAT=`grep ^PATCHLEVEL\ \= /usr/src/linux/Makefile | awk '{ print $3 };'`
244 SUB=`grep ^SUBLEVEL\ \= /usr/src/linux/Makefile | awk '{ print $3 };'`
245 EXV=`grep ^EXTRAVERSION\ \= /usr/src/linux/Makefile | sed -e "s/EXTRAVERSION =//" -e "s/ //g"`
246 clst_fudgeuname=${VER}.${PAT}.${SUB}${EXV}
248 /sbin/update-modules --assume-kernel=${clst_fudgeuname}
251 echo ${clst_kernel_use} > /tmp/kerncache/${clst_kname}/${clst_kname}-${clst_version_stamp}.USE
254 if [ -n "${clst_KERNCACHE}" ]
256 if [ -e /etc/portage/profile/package.provided ]
258 sed -i "/^$(echo "${KERNELVERSION}" | sed -e 's|/|\\/|g')\$/d" /etc/portage/profile/package.provided