1 # vim:expandtab:shiftwidth=4:softtabstop=4:tabstop=4:
6 SUSEBUILD=${SUSEBUILD:-0}
8 SUSEBUILD=${SUSEBUILD:-0}
14 if [ "$TARGET" = "rhel-2.6" -o "$TARGET" = "rhel-2.4" ]; then
16 if [ "$TARGET" = "rhel-2.6" ]; then
18 OLDCONFIG=nonint_oldconfig
19 elif [ "$TARGET" = "rhel-2.4" ]; then
24 RPMTOPDIR=$(mktemp -d $KERNELDIR/rpm_XXXXXX)
25 mkdir $RPMTOPDIR/BUILD/
26 rpm -ivh $KERNELDIR/$SRPM --define "_topdir $RPMTOPDIR" || \
27 { rm -rf $RPMTOPDIR; fatal 1 "Error installing kernel SRPM."; }
28 $RPMBUILD -bp --nodeps --target i686 $RPMTOPDIR/SPECS/$SPEC --define "_topdir $RPMTOPDIR" 2>&1
29 pushd $RPMTOPDIR/BUILD/kernel-${lnxmaj}/linux-${lnxmaj} && {
31 cp configs/kernel-${lnxmaj}-i686-smp.config .config
32 if ! make $OLDCONFIG > /dev/null; then
33 fatal 1 "error trying to make $OLDCONFIG while building a tarball from SRPM."
35 make include/linux/version.h
38 tar cjf $KERNEL_FILE linux-${lnxmaj}
45 download_and_build_tarball() {
49 local srpm=kernel-${lnxmaj}-${lnxrel}.src.rpm
51 echo "Downloading http://downloads.lustre.org/public/kernels/$target/old/$srpm..."
52 if ! wget -nv "http://downloads.lustre.org/public/kernels/$target/old/$srpm" \
53 -O "$KERNELDIR/$srpm" ; then
54 fatal 1 "Could not download target $kernel_file's kernel SRPM $srpm from downloads.lustre.org."
56 [ -s "$KERNELDIR/$srpm" ] || {
57 rm -rf $KERNELDIR/$srpm
58 fatal 1 "Could not download target $kernel_file's kernel SRPM $srpm from downloads.lustre.org."
61 build_tarball $target $srpm
66 untar "$KERNEL_FILE" || fatal 1 "Error unpacking Linux tarball"
67 [ -d linux ] || ln -sf linux* linux
73 [ "$SERIES" ] || return 0
77 echo "Replacing .config files..."
78 [ -d linux/configs ] || mkdir linux/configs || \
79 fatal 1 "Error creating configs directory."
82 for patchesdir in "$EXTERNAL_PATCHES" "lustre/lustre/kernel_patches" ; do
83 [ "$patchesdir" ] && \
84 cp -v $patchesdir/kernel_configs/kernel-${VERSION}-${TARGET}*.config linux/configs/ >/dev/null && copysuccess=1
86 [ "$copysuccess" = "1" ] || \
87 fatal 1 "Error copying in kernel configs."
91 TARBALL="$(readlink linux)-$EXTRA_VERSION.tar.gz"
92 echo "Creating patched linux tarball $TARBALL..."
93 tar -zcf "$TARBALL" "$(readlink linux)" \
94 --exclude "CVS" --exclude ".cvsignore" \
95 --exclude "*.orig" --exclude "*~" --exclude "*.rej" || \
96 fatal 1 "Error creating patched Linux tarball."
100 [ -d linux ] || return 0
101 echo "Cleaning linux..."
102 [ -L linux ] && rm -rf $(readlink linux)
106 prep_kernel_build() {
107 local lmakeopts="\"\""
112 ENABLE_INIT_SCRIPTS=""
114 -e "s^@BASE_ARCHS@^$BASE_ARCHS^g" \
115 -e "s^@BIGMEM_ARCHS@^$BIGMEM_ARCHS^g" \
116 -e "s^@BIGSMP_ARCHS@^$BIGSMP_ARCHS^g" \
117 -e "s^@BOOT_ARCHS@^$BOOT_ARCHS^g" \
118 -e "s^@CONFIGURE_FLAGS@^$CONFIGURE_FLAGS^g" \
119 -e "s^@ENABLE_INIT_SCRIPTS@^$ENABLE_INIT_SCRIPTS^g" \
120 -e "s^@JENSEN_ARCHS@^$BOOT_ARCHS^g" \
121 -e "s^@KERNEL_EXTRA_VERSION@^$EXTRA_VERSION^g" \
122 -e "s^@KERNEL_EXTRA_VERSION_DELIMITER@^$EXTRA_VERSION_DELIMITER^g" \
123 -e "s^@KERNEL_TARGET_DELIMITER@^$TARGET_DELIMITER^g" \
124 -e "s^@KERNEL_RELEASE@^${EXTRA_VERSION//-/_}^g" \
125 -e "s^@KERNEL_SOURCE@^$KERNEL^g" \
126 -e "s^@KERNEL_VERSION@^$VERSION^g" \
127 -e "s^@LINUX26@^$LINUX26^g" \
128 -e "s^@LUSTRE_SOURCE@^${LUSTRE##*/}^g" \
129 -e "s^@LUSTRE_TARGET@^$TARGET^g" \
130 -e "s^@PSERIES64_ARCHS@^$PSERIES64_ARCHS^g" \
131 -e "s^@RHBUILD@^$RHBUILD^g" \
132 -e "s^@SMP_ARCHS@^$SMP_ARCHS^g" \
133 -e "s^@SUSEBUILD@^$SUSEBUILD^g" \
134 -e "s^@UP_ARCHS@^$UP_ARCHS^g" \
135 -e "s^@LMAKEOPTS@^$lmakeopts^g" \
136 < $TOPDIR/lustre/build/lustre-kernel-2.4.spec.in \
137 > lustre-kernel-2.4.spec
138 [ -d SRPMS ] || mkdir SRPMS
139 [ -d RPMS ] || mkdir RPMS
140 [ -d BUILD ] || mkdir BUILD
141 [ -d SOURCES ] || mkdir SOURCES
142 for script in linux-{rhconfig.h,merge-config.awk,merge-modules.awk} \
143 suse-{functions.sh,post.sh,postun.sh,trigger-script.sh.in} \
144 sles8-{pre,post,postun,update_{INITRD_MODULES,rcfile_setting}}.sh ; do
145 cp $TOPDIR/lustre/build/$script SOURCES
147 cp "$LUSTRE" "$KERNEL_FILE" SOURCES
148 if [ "$EXTERNAL_PATCHES" -a -d "$EXTERNAL_PATCHES" ] ; then
149 tar zcf SOURCES/external-patches.tar.gz -C "$EXTERNAL_PATCHES" series targets patches kernel_configs
151 touch SOURCES/external-patches.tar.gz
156 [ -d lustre ] || return 0
157 echo "Cleaning Lustre..."
158 [ -L lustre ] && rm -rf $(readlink lustre)
163 echo "Building kernel + Lustre RPMs for: $BUILD_ARCHS..."
165 for arch in $BUILD_ARCHS ; do
166 targets="--target $arch $targets"
169 local rpmbuildopt='-bb'
172 # echo NORPM mode. Only compiling.
173 # echo "XXX: need to fix lmake - add options to do rpmbuild -bc instead of -bb"
176 $RPMBUILD $targets $rpmbuildopt lustre-kernel-2.4.spec \
177 --define "_tmppath $TMPDIR" \
178 --define "_topdir $TOPDIR" 2>&1 || \
179 fatal 1 "Error building rpms for $BUILD_ARCHS."
182 $RPMBUILD -bs lustre-kernel-2.4.spec \
183 --define "_tmppath $TMPDIR" \
184 --define "_topdir $TOPDIR" 2>&1 || \
185 fatal 1 "Error building .src.rpm."
188 ( $(skeep_ldiskfs_rpm $TAG) ) && return
190 pushd $TOPDIR/BUILD/lustre*/ldiskfs || return 255
192 if [ "$?" != "0" ] ; then
196 cp lustre-ldiskfs*.tar.gz $TOPDIR/SOURCES
200 local ldiskfs_spec=lustre-ldiskfs.spec
201 [ -f "$ldiskfs_spec" ] && sed \
202 -e "s^Release: .*$^Release: $LUSTRE_EXTRA_VERSION^" \
204 > ../lustre-ldiskfs.spec
206 if ! $RPMBUILD $targets $rpmbuildopt ../lustre-ldiskfs.spec \
207 --define "_tmppath /var/tmp" \
208 --define "_topdir $TOPDIR" 2>&1; then
214 if ! $RPMBUILD -bs ../lustre-ldiskfs.spec \
215 --define "_tmppath /var/tmp" \
216 --define "_topdir $TOPDIR" 2>&1; then
224 #get date of last changed target/config/series/patches
225 get_last_source_date() {
226 local filelist="${TOPDIR}/lustre/lustre/kernel_patches/series/${SERIES} \
228 local TOPDIRnew=$(echo ${TOPDIR} | sed -e s/\\//\\\\\\//g)
229 filelist="$filelist $( \
230 cat ${TOPDIR}/lustre/lustre/kernel_patches/series/${SERIES} | \
231 sed -e s/^/${TOPDIRnew}\\/lustre\\/lustre\\/kernel_patches\\/patches\\// 2>&1)"
232 local sourcelastdate=$( find ${filelist} -name CVS -prune -o \
233 -type f -printf "%T@\n" 2>&1 | sort | tail -1 )
234 is_integer $sourcelastdate && echo $sourcelastdate
237 #check if variable is integer
240 [ "$invariable" = "" ] && return 255
241 local invariableint=$( echo $invariable | sed -e s/[^0-9]//g )
242 [ "$invariable" = "$invariableint" ] || return 255
245 #store RPMs and/or BUILD dir for future reuse
248 if [ ! "$REUSEBUILD" = "" ] && [ -d "/$REUSEBUILD/" ] ; then
249 [ -d "${REUSEBUILD}/${TIMESTAMP}" ] || mkdir "${REUSEBUILD}/${TIMESTAMP}"
250 [ -d "${REUSEBUILD}/${TIMESTAMP}" ] || return 255
255 local lnxrelnew=${lnxrel//-/_}
256 local EXTRA_VERSIONnew=${EXTRA_VERSION//-/_}
257 local KERNELRPMnew=$(basename "$KERNELRPM")
258 if [ ! "$rpmonly" = "rpmonly" ]; then
260 if [ ! "$KERNELCOMPILEDIR" = "" ]; then
261 builddir="$KERNELCOMPILEDIR"
263 builddir="BUILD/lustre-kernel-${lnxmaj}/lustre/linux-${lnxmaj}"
264 [ "$KERNELCOMPILEDIR" = "" ] || builddir="$KERNELCOMPILEDIR"
265 [ -d "$builddir" ] || builddir="BUILD/lustre-kernel-${lnxmaj}/lustre/linux-${lnxmaj}.${lnxrel}"
266 [ -d "$builddir" ] || builddir="BUILD/lustre-kernel-${lnxmaj}/lustre/linux-${lnxmaj}-${lnxrel}"
267 if [ ! -d "$builddir" ]; then
268 pushd "BUILD/lustre-kernel-${lnxmaj}/lustre/" || return 255
269 local basebuilddir=$(ls -d linux-${lnxmaj}* | head -1)
270 [ "$basebuilddir" = "" ] || builddir="BUILD/lustre-kernel-${lnxmaj}/lustre/${basebuilddir}"
274 [ -d "$builddir" ] || return 255
275 local dstdir="${REUSEBUILD}/${TIMESTAMP}/linux-${KERNCONFSMPTYPE}-${lnxmaj}-${EXTRA_VERSIONnew}.${TARGET_ARCH}"
276 ( $PATCHLESS ) && dstdir="${REUSEBUILD}/${TIMESTAMP}/linux-$KERNELRPMnew" && \
277 dstdir="${dstdir%.rpm}"
278 [ -d "$dstdir" ] && rm -rf "$dstdir"
279 mv "${builddir}" "$dstdir" || return 255
280 if [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" ]; then
281 # move the OFED kernel-ib-devel tree as well
282 mv "${builddir%/*}/kernel-ib-devel/usr/src/ofa_kernel" "${dstdir%/*}" || return 255
286 local kernelrpmname="kernel-lustre-${KERNCONFSMPTYPE}-${lnxmaj}-${EXTRA_VERSIONnew}.${TARGET_ARCH}.rpm"
287 [ -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" ] || kernelrpmname="kernel-${KERNCONFSMPTYPE}-${lnxmaj}-${EXTRA_VERSNnew}.${TARGET_ARCH}.rpm"
288 ( $PATCHLESS ) && [ -f "$KERNELRPM" ] && kernelrpmname="$KERNELRPMnew"
289 if [ "$rpmonly" = "rpmonly" ] && [ -f "${REUSEBUILD}/${TIMESTAMP}/${kernelrpmname}" ]; then
290 echo "RPM already exist in store directory tree"
292 [ -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" ] && cp -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" "${REUSEBUILD}/${TIMESTAMP}/"
294 #store kernel source rpm
295 kernelrpmname="kernel-lustre-source-${lnxmaj}-${EXTRA_VERSIONnew}.${TARGET_ARCH}.rpm"
296 [ -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" ] || kernelrpmname="kernel-source-${lnxmaj}-${EXTRA_VERSIONnew}.${TARGET_ARCH}.rpm"
297 ( $PATCHLESS ) && [ -f "$KERNELSOURCERPM" ] && kernelrpmname=$(basename "$KERNELSOURCERPM")
298 if [ "$rpmonly" = "rpmonly" ] && [ -f "${REUSEBUILD}/${TIMESTAMP}/${kernelrpmname}" ]; then
299 echo "RPM already exist in store directory tree"
301 [ -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" ] && cp -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" "${REUSEBUILD}/${TIMESTAMP}/"
303 if [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" ]; then
304 # store kernel-ib RPMs
306 local ofed_version=$(echo $OFED_VERSION |
307 sed -re 's/-(20[0-9]{6,6}-[0-9]{4,4}|rc[0-9]*)$//')
308 for rpmname in "kernel-ib" "kernel-ib-devel"; do
309 rpmname="${rpmname}-${ofed_version}"
311 rpmname="${rpmname}-${LINUXRELEASE//-/_}"
313 rpmname="${rpmname}-${lnxmaj}${EXTRA_VERSION_DELIMITER//-/_}${EXTRA_VERSIONnew}${TARGET_DELIMITER//-/_}${KERNCONFSMPTYPE}"
315 rpmname="${rpmname}.${TARGET_ARCH}.rpm"
316 if [ "$rpmonly" = "rpmonly" ] && [ -f "${REUSEBUILD}/${TIMESTAMP}/${rpmname}" ]; then
317 echo "RPM already exist in store directory tree"
319 [ -f "RPMS/${TARGET_ARCH}/${rpmname}" ] && cp -f "RPMS/${TARGET_ARCH}/${rpmname}" "${REUSEBUILD}/${TIMESTAMP}/"
325 #look for kernel source RPM
326 find_linux_source_rpm() {
331 [ ! "$TARGET_ARCH" = "" ] && arch=$TARGET_ARCH && findarch=false
334 pathtorpms="${KERNELRPMSBASE}/${lnxmaj}/${DISTRO}/${arch}"
335 [ -d $pathtorpms ] || return 255
338 rpmfile="kernel-${lnxmaj}-${lnxrel}.src.rpm"
341 rpmfile="kernel-source-${lnxmaj}.${lnxrel}.${arch}.rpm"
344 rpmfile="kernel-source-${lnxmaj}-${lnxrel}.${arch}.rpm"
347 [ -f "${pathtorpms}/${rpmfile}" ] || return 255
348 KERNELSOURCERPM="${pathtorpms}/${rpmfile}"
350 for arch in $TARGET_ARCHS_ALL; do
351 pathtorpms="${KERNELRPMSBASE}/${lnxmaj}/${DISTRO}/${arch}"
352 [ -d $pathtorpms ] || continue
355 rpmfile="kernel-${lnxmaj}-${lnxrel}.src.rpm"
358 rpmfile="kernel-source-${lnxmaj}.${lnxrel}.${arch}.rpm"
361 rpmfile="kernel-source-${lnxmaj}-${lnxrel}.${arch}.rpm"
364 [ -f "${pathtorpms}/${rpmfile}" ] || continue
365 KERNELSOURCERPM="${pathtorpms}/${rpmfile}"
370 [ -f "${KERNELSOURCERPM}" ] || return 255
373 #unpack and make symlinks for reusing kernel RPM
376 local pathtokernelibrpm=$2
377 [ "$pathtorpm" = "" ] && return 255
378 [ -f "$pathtorpm" ] || return 255
379 [ -d $TOPDIR/reused ] || mkdir $TOPDIR/reused
380 pushd $TOPDIR/reused || return 255
382 rpm2cpio < $pathtorpm | cpio -idc
383 [ ${PIPESTATUS[0]} -eq 0 ] || return 255
385 if [ -n "$pathtokernelibrpm" ] && [ -f "$pathtokernelibrpm" ]; then
386 rpm2cpio < $pathtokernelibrpm | cpio -idc
387 [ ${PIPESTATUS[0]} -eq 0 -o ${PIPESTATUS[1]} -eq 0 ] || return 255
388 CONFIGURE_FLAGS="--with-o2ib=$(pwd)/usr/src/ofa_kernel ${CONFIGURE_FLAGS}"
392 if pushd usr/src/linux-*-obj/${TARGET_ARCH}; then
393 local smptypes="$SMPTYPES"
394 [ "$RPMSMPTYPE" = "" ] || smptypes=$RPMSMPTYPE
395 ( ! $PATCHLESS ) && [ ! "$KERNCONFSMPTYPE" = "" ] && smptypes="$KERNCONFSMPTYPE"
397 for cursmptype in $smptypes; do
398 [ "$cursmptype" = "''" ] && continue
399 [ -d $cursmptype ] && smptype=$cursmptype
400 [ -d $smptype ] && break
404 if [ "${smptype}" = "" ]; then
406 return 255 # cannot detect smp type
408 if pushd usr/src/linux-*-obj/${TARGET_ARCH}/$smptype/include2; then
409 local base=$(readlink asm)
410 if [ ! -d "/${base}/" ]; then
412 base=$(basename "$base")
413 if pushd ../../../../linux-*/include; then
416 [ -d "$lsrc/${base}" ] && ln -s $lsrc/${base} asm
420 read a b < <(echo $(pwd)/usr/src/linux-*)
421 if [[ $a == $(pwd)/* && $b = $(pwd)/* ]]; then
422 cp -f $a/include/linux/config.h $b/${TARGET_ARCH}/$smptype/include/linux/
423 cp $b/${TARGET_ARCH}/$smptype/.config $a/
424 [ -f "$b/${TARGET_ARCH}/$smptype/.config" ] && KERNELRPMCONFIG="$b/${TARGET_ARCH}/$smptype/.config"
425 cp $b/${TARGET_ARCH}/$smptype/.kernelrelease $a/
426 [ -f "$b/${TARGET_ARCH}/$smptype/.kernelrelease" ] && KERNELRPMRELEASE="$b/${TARGET_ARCH}/$smptype/.kernelrelease"
428 LINUXOBJ=$b/${TARGET_ARCH}/$smptype
429 # local fname=$(basename $kernel_rpm)
430 # KERNELRPMSDIR=${kernel_rpm%$fname}
434 [ "$LINUX" = "" ] && return 255
435 [ -d "$LINUX" ] || return 255
438 #build linux kernel rpm
440 pushd $LINUX || return 255
441 make binrpm-pkg || ( popd ; return 255 )
443 [ -f ".version" ] && addlnxrel="-$(cat .version)"
446 for arch in $TARGET_ARCHS_ALL; do
447 [ -f "/usr/src/rpm/RPMS/$arch/kernel-$lnxmaj.${lnxrel}${addlnxrel}.$arch.rpm" ] && \
448 KERNELRPM="/usr/src/rpm/RPMS/$arch/kernel-$lnxmaj.${lnxrel}${addlnxrel}.$arch.rpm" && \
450 [ -f "/usr/src/packages/RPMS/$arch/kernel-$lnxmaj.${lnxrel}${addlnxrel}.$arch.rpm" ] && \
451 KERNELRPM="/usr/src/packages/RPMS/$arch/kernel-$lnxmaj.${lnxrel}${addlnxrel}.$arch.rpm" && \
454 [ "$KERNELRPM" = "" ] || return
461 local nocopykernel=$2
462 pushd $LINUX || fatal 1 "Kernel source not found"
463 [ "$nofullmake" = "nofullmake" ] || make mrproper
464 [ "$nofullmake" = "nofullmake" ] || rm -f rpm-release
465 # [ "$nocopykernel" = "copyrpmkernel" ] || rm -f localversion-*
466 [ "$nocopykernel" = "copykernel" ] && [ -f "$CONFIG_FILE" ] && cp $CONFIG_FILE .config
467 if [ "$nocopykernel" = "copyrpmkernel" ]; then
468 [ -f "$KERNELRPMCONFIG" ] && cp $KERNELRPMCONFIG .config
469 if [ -f "$KERNELRPMRELEASE" ]; then
470 cp $KERNELRPMRELEASE .
472 sed -e "s/^EXTRAVERSION\s\+=\s\+.*$/EXTRAVERSION = -${lnxrel}/" < Makefile > Makefile.new
473 [ -f "Makefile.new" ] && mv Makefile.new Makefile
476 [ -f ".config" ] || ( popd ; echo "Cannot find .config file"; return 255 )
477 make oldconfig || ( popd ; return 255 )
478 make include/linux/version.h
479 if [ ! "$nofullmake" = "nofullmake" ]; then
480 make || ( popd ; return 255 )
486 #build patchless lustre
487 patchless_build_sequence() {
488 if [ -f $LINUX/Makefile ]; then
489 # Get the correct kernel release - I'm unsure how this can ever
490 # work otherwise, unless you're using the exact same kernel version
491 # Lustre is shipped with.
493 local LINUXRELEASE=$(find_linux_release ${LINUXOBJ:-$LINUX})
494 if [ -z "$LINUXRELEASE" ]; then
495 echo "Failed to find linux release in ${LINUXOBJ:-$LINUX}"
499 lnxmaj=$(echo $LINUXRELEASE | cut -f1 -d-)
500 EXTRA_VERSION=$(echo $LINUXRELEASE | cut -f2 -d-)_lustre.$LUSTRE_VERSION
502 build_lustre && buildsuccess=true
504 #try to build from kernel-devel RPM (RHEL)
508 local buildsuccess=false
509 local storeforreuse=false
510 if [ "$KERNELRPMSBASE" = "" ] || [ ! -d "$KERNELRPMSBASE" ]; then
513 [ -d $TOPDIR/reused ] && rm -rf $TOPDIR/reused
515 local delimiter=${EXTRA_VERSION_DELIMITER:-"-"}
517 # default to source type -source and special case below
525 local kernel_devel_rpm
527 if ! kernel_devel_rpm=$(find_linux_rpm "$type" "$delimiter"); then
528 fatal 1 "Could not find the kernel$type RPM in ${KERNELRPMSBASE}/${lnxmaj}/${DISTRO}"
531 # find_linux_rpm() used to set these globals, but now it's a function
532 # run in a subshell so it's unable to set globals in our namespace
533 TARGET_ARCH=$(rpm -q --queryformat "%{ARCH}" -p "$kernel_devel_rpm")
534 BUILD_ARCHS="$TARGET_ARCH"
536 unpack_linux_devel_rpm "$kernel_devel_rpm" "$delimiter" && rpmfound=true
538 [ -d SRPMS ] || mkdir SRPMS
539 [ -d RPMS ] || mkdir RPMS
540 [ -d BUILD ] || mkdir BUILD
541 [ -d SOURCES ] || mkdir SOURCES
543 # first build kernel-ib
544 if [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" ]; then
545 $rpmfound && build_kernel_ib
547 ( $rpmfound ) && build_lustre && buildsuccess=true && find_linux_source_rpm
550 if $buildsuccess; then
551 [ -d "RPMS/${TARGET_ARCH}" ] && [ -f "$KERNELRPM" ] && \
552 cp "$KERNELRPM" RPMS/${TARGET_ARCH}/
553 [ -d "RPMS/${TARGET_ARCH}" ] && [ -f "$KERNELSOURCERPM" ] && \
554 cp "$KERNELSOURCERPM" RPMS/${TARGET_ARCH}/
555 KERNELCOMPILEDIR="$LINUX"
556 if $storeforreuse; then
557 store_for_reuse || echo "Cannot store for future reuse"
561 elif ! $rpmfound; then
562 echo "COULD NOT FIND VENDOR -devel or -source RPM for $DISTRO/$TARGET_ARCH: $lnxmaj-$lnxrel in $KERNELRPMSBASE"
565 echo "Patchless build failed."
570 #check timestamp value. should bi 14-digits string
573 local timestampnodig=$(echo $invalue | sed -e s/[0-9]*//g)
574 [ "$timestampnodig" = "" ] || return 255
575 local timestamplength="${#invalue}"
576 [ $timestamplength -eq 14 ] || return 255
579 # get list of suitable directories with potential reused staff
580 get_reuse_dir_list() {
582 local reusedkernelmasknew=$2
583 local buildtimestamp=
585 local sourcelastdate=$(get_last_source_date)
586 for buildtimestamp in $(ls "$REUSEBUILD/" 2>&1); do
587 [ -d "$REUSEBUILD/$buildtimestamp" ] || continue
588 check_timestamp "$buildtimestamp" || continue
589 local buildtimestampstr=$(echo $buildtimestamp | \
590 sed -e "s^\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)^\1-\2-\3 \4:\5:\6 GMT^g")
591 local buildtimestampepoch=$(date --date="$buildtimestampstr" +%s )
592 #check for suitable date
593 if ! $PATCHLESS; then
594 [ $buildtimestampepoch -ge $sourcelastdate ] || continue
596 #check for suitable version
597 if [ "$rpmonly" = "rpmonly" ]; then
598 local reusedkernelprefix="kernel-lustre-"
599 ( $PATCHLESS ) && reusedkernelprefix=
600 local rpmmask="${reusedkernelprefix}${REUSEDKERNELMASK}"
601 [ "$reusedkernelmasknew" = "" ] || rpmmask="$reusedkernelmasknew"
602 [ -f $REUSEBUILD/$buildtimestamp/${rpmmask}.rpm ] && \
603 dirsforreuse="$dirsforreuse $REUSEBUILD/$buildtimestamp"
605 local rpmmask="$REUSEDKERNELMASK"
606 [ "$reusedkernelmasknew" = "" ] || rpmmask="$reusedkernelmasknew"
607 pushd $REUSEBUILD/$buildtimestamp/linux-${rpmmask} > /dev/null 2>&1 || continue
609 dirsforreuse="$dirsforreuse $curdir"
616 #try to reuse old RPM
617 build_sequence_rpm_reuse() {
619 [ "$REUSERPM" = "" ] && [ "$REUSEBUILD" = "" ] && return 255
621 if ! [ "$REUSEBUILD" = "" ] && [ -d "$REUSEBUILD" ]; then #try to reuse RPM
622 local REUSEDKERNELMASKnew=$(echo $REUSEDKERNELMASK | sed -e "s/^[^0-9]*//")
623 REUSEDKERNELMASKnew="kernel-lustre-source-${REUSEDKERNELMASKnew}"
624 local dirsforreuse="$(get_reuse_dir_list rpmonly $REUSEDKERNELMASKnew)"
625 local buildsuccess=false
627 for curdir in $(echo $dirsforreuse); do
628 [ -d "$curdir" ] || continue
629 local reusedkernelprefix="kernel-lustre-"
630 local reusedkernelrpm=
631 [ -f ${curdir}/${reusedkernelprefix}${REUSEDKERNELMASK}.rpm ] && \
632 reusedkernelrpm=$(ls ${curdir}/${reusedkernelprefix}${REUSEDKERNELMASK}.rpm | head -1 )
633 [ -f "$reusedkernelrpm" ] || continue
635 local reusedkernelsourcerpm=
636 [ -f ${curdir}/${REUSEDKERNELMASKnew}.rpm ] && \
637 reusedkernelsourcerpm=$(ls ${curdir}/${REUSEDKERNELMASKnew}.rpm | head -1 )
638 [ -f "$reusedkernelsourcerpm" ] || continue
640 # don't need to check for kernel-ib RPM reuse here because sles9 is not supported
641 # by OFED >= 1.3.0 and this function appears to only be used for sles9
643 [ -d $TOPDIR/reused ] && rm -rf $TOPDIR/reused
644 reuse_kernel_rpm "$reusedkernelsourcerpm" "" && build_linux nofullmake copyrpmkernel && build_lustre && buildsuccess=true
645 ( $buildsuccess ) || continue
646 if ( ! $NORPM ) && ( ! $PATCHLESS ) ; then
647 [ -f "$reusedkernelrpm" ] && \
648 cp -f "$reusedkernelrpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1
650 [ -f "$reusedkernelsourcerpm" ] && \
651 cp -f "$reusedkernelsourcerpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1 && \
652 touch RPMS/${TARGET_ARCH}/kernel_was_reused
660 #try to reuse old BUILD dir
661 build_sequence_reuse() {
663 [ "$REUSERPM" = "" ] && [ "$REUSEBUILD" = "" ] && return 255
665 if [ ! "$REUSEBUILD" = "" ] && [ -d "$REUSEBUILD" ]; then #try to reuse old kernel build directory
666 local dirsforreuse="$(get_reuse_dir_list)"
667 local buildsuccess=false
669 local REUSEDKERNELMASKnew=$(echo $REUSEDKERNELMASK | sed -e "s/^[^0-9]*//")
670 for curdir in $(echo $dirsforreuse); do
671 local reusedkernelrpm=
672 local reusedkernelsourcerpm=
673 local reusedkernelibrpm=
674 [ -d "$curdir" ] || continue
675 [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" -a
676 ! -d "${curdir%/*}/ofa_kernel" ] && continue
677 local reusedkernelprefix="kernel-lustre-"
678 ( $PATCHLESS ) && reusedkernelprefix=
679 [ -f ${curdir}/../${reusedkernelprefix}${REUSEDKERNELMASK}.rpm ] && \
680 reusedkernelrpm=$(ls ${curdir}/../${reusedkernelprefix}${REUSEDKERNELMASK}.rpm | head -1 )
681 reusedkernelprefix="kernel-lustre-source-"
682 [ -f ${curdir}/../${reusedkernelprefix}${REUSEDKERNELMASKnew}.rpm ] && \
683 reusedkernelsourcerpm=$(ls ${curdir}/../${reusedkernelprefix}${REUSEDKERNELMASKnew}.rpm | head -1 )
684 if [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" ]; then
686 reusedkernelprefix="kernel-ib-"
687 [ -f ${curdir}/../${reusedkernelprefix}${OFED_VERSION}-${LUSTRE_EXTRA_VERSION}.${TARGET_ARCH}.rpm ] && \
688 reusedkernelibrpm=$(ls ${curdir}/../${reusedkernelprefix}${OFED_VERSION}-${LUSTRE_EXTRA_VERSION}.${TARGET_ARCH}.rpm | head -1 )
689 reusedkernelibdevelrpm=$(ls ${curdir}/../${reusedkernelprefix}devel-${OFED_VERSION}-${LUSTRE_EXTRA_VERSION}.${TARGET_ARCH}.rpm | head -1 )
691 if ! ( $NORPM ) && ! [ -f "$reusedkernelrpm" ]; then #kernel rpm not found. Build all
694 if ! ( $NORPM ) && ! [ -f "$reusedkernelsourcerpm" ]; then #kernel source rpm not found. Build all
697 if [ -n "$OFED_VERSION" ]; then
698 if [ "$OFED_VERSION" != "inkernel" ]; then
699 if ! ( $NORPM ) && [ ! -f "$reusedkernelibrpm" -o ! -f "$reusedkernelibdevelrpm"]; then #kernel-ib{,-devel} rpm not found. Build all
702 CONFIGURE_FLAGS="--with-o2ib=${curdir%/*}/ofa_kernel ${CONFIGURE_FLAGS}"
704 CONFIGURE_FLAGS="--with-o2ib=yes ${CONFIGURE_FLAGS}"
708 build_lustre || continue
711 if ( ! $NORPM ) && ( ! $PATCHLESS ) ; then
712 [ -f "$reusedkernelrpm" ] && \
713 cp -f "$reusedkernelrpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1 && \
714 touch RPMS/${TARGET_ARCH}/kernel_was_reused
715 [ -f "$reusedkernelsourcerpm" ] && \
716 cp -f "$reusedkernelsourcerpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1
717 [ -f "$reusedkernelibrpm" ] && \
718 cp -f "$reusedkernelibrpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1
719 cp -f "$reusedkernelibdevelrpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1
734 prep_kernel_build || return 255
735 clean_lustre || return 255
737 build_kernel || return 255
740 old_school_download_kernel() {
742 if [ "$KERNELDIR" ] ; then
743 KERNEL_FILE="$KERNELDIR/$KERNEL"
744 if [ ! -r "$KERNEL_FILE" ] ; then
745 # see if we have an SRPM we can build a tarball for
746 KERNEL_SRPM=kernel-${lnxmaj}-${lnxrel}.src.rpm
747 if [ -r "$KERNELDIR/$KERNEL_SRPM" ] ; then
748 build_tarball $CANONICAL_TARGET $KERNEL_SRPM
751 echo "Downloading http://downloads.lustre.org/public/kernels/$DISTRO/old/$KERNEL..."
752 if ! wget -nv "http://downloads.lustre.org/public/kernels/$DISTRO/old/$KERNEL" -O "$KERNELDIR/$KERNEL" ; then
753 # see if we can do it with an SRPM from the download site
754 download_and_build_tarball $CANONICAL_TARGET $KERNEL_FILE
756 [ -s "$KERNELDIR/$KERNEL" ] || {
757 rm -rf "$KERNELDIR/$KERNEL"
758 fatal 1 "Target $TARGET's kernel $KERNEL not found in directory $KERNELDIR."
762 fatal 1 "Target $TARGET's kernel file $KERNEL not found in kernel directory $KERNELDIR."