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"
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" || \
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" || \
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 $RPMBUILD $targets $rpmbuildopt ../lustre-ldiskfs.spec \
207 --define "_tmppath /var/tmp" \
208 --define "_topdir $TOPDIR"
209 if [ "$?" != "0" ] ; then
215 $RPMBUILD -bs ../lustre-ldiskfs.spec \
216 --define "_tmppath /var/tmp" \
217 --define "_topdir $TOPDIR"
218 if [ "$?" != "0" ] ; then
226 #get date of last changed target/config/series/patches
227 get_last_source_date() {
228 local filelist="${TOPDIR}/lustre/lustre/kernel_patches/series/${SERIES} \
230 local TOPDIRnew=$(echo ${TOPDIR} | sed -e s/\\//\\\\\\//g)
231 filelist="$filelist $( \
232 cat ${TOPDIR}/lustre/lustre/kernel_patches/series/${SERIES} | \
233 sed -e s/^/${TOPDIRnew}\\/lustre\\/lustre\\/kernel_patches\\/patches\\// 2>&1)"
234 local sourcelastdate=$( find ${filelist} -name CVS -prune -o \
235 -type f -printf "%T@\n" 2>&1 | sort | tail -1 )
236 is_integer $sourcelastdate && echo $sourcelastdate
239 #check if variable is integer
242 [ "$invariable" = "" ] && return 255
243 local invariableint=$( echo $invariable | sed -e s/[^0-9]//g )
244 [ "$invariable" = "$invariableint" ] || return 255
247 #store RPMs and/or BUILD dir for future reuse
250 if [ ! "$REUSEBUILD" = "" ] && [ -d "/$REUSEBUILD/" ] ; then
251 [ -d "${REUSEBUILD}/${TIMESTAMP}" ] || mkdir "${REUSEBUILD}/${TIMESTAMP}"
252 [ -d "${REUSEBUILD}/${TIMESTAMP}" ] || return 255
257 local lnxrelnew=${lnxrel//-/_}
258 local EXTRA_VERSIONnew=${EXTRA_VERSION//-/_}
259 local KERNELRPMnew=$(basename "$KERNELRPM")
260 if [ ! "$rpmonly" = "rpmonly" ]; then
262 if [ ! "$KERNELCOMPILEDIR" = "" ]; then
263 builddir="$KERNELCOMPILEDIR"
265 builddir="BUILD/lustre-kernel-${lnxmaj}/lustre/linux-${lnxmaj}"
266 [ "$KERNELCOMPILEDIR" = "" ] || builddir="$KERNELCOMPILEDIR"
267 [ -d "$builddir" ] || builddir="BUILD/lustre-kernel-${lnxmaj}/lustre/linux-${lnxmaj}.${lnxrel}"
268 [ -d "$builddir" ] || builddir="BUILD/lustre-kernel-${lnxmaj}/lustre/linux-${lnxmaj}-${lnxrel}"
269 if [ ! -d "$builddir" ]; then
270 pushd "BUILD/lustre-kernel-${lnxmaj}/lustre/" || return 255
271 local basebuilddir=$(ls -d linux-${lnxmaj}* | head -1)
272 [ "$basebuilddir" = "" ] || builddir="BUILD/lustre-kernel-${lnxmaj}/lustre/${basebuilddir}"
276 [ -d "$builddir" ] || return 255
277 local dstdir="${REUSEBUILD}/${TIMESTAMP}/linux-${KERNCONFSMPTYPE}-${lnxmaj}-${EXTRA_VERSIONnew}.${TARGET_ARCH}"
278 ( $PATCHLESS ) && dstdir="${REUSEBUILD}/${TIMESTAMP}/linux-$KERNELRPMnew" && \
279 dstdir="${dstdir%.rpm}"
280 [ -d "$dstdir" ] && rm -rf "$dstdir"
281 mv "${builddir}" "$dstdir" || return 255
282 if [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" ]; then
283 # move the OFED kernel-ib-devel tree as well
284 mv "${builddir%/*}/kernel-ib-devel/usr/src/ofa_kernel" "${dstdir%/*}" || return 255
288 local kernelrpmname="kernel-lustre-${KERNCONFSMPTYPE}-${lnxmaj}-${EXTRA_VERSIONnew}.${TARGET_ARCH}.rpm"
289 [ -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" ] || kernelrpmname="kernel-${KERNCONFSMPTYPE}-${lnxmaj}-${EXTRA_VERSNnew}.${TARGET_ARCH}.rpm"
290 ( $PATCHLESS ) && [ -f "$KERNELRPM" ] && kernelrpmname="$KERNELRPMnew"
291 if [ "$rpmonly" = "rpmonly" ] && [ -f "${REUSEBUILD}/${TIMESTAMP}/${kernelrpmname}" ]; then
292 echo "RPM already exist in store directory tree"
294 [ -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" ] && cp -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" "${REUSEBUILD}/${TIMESTAMP}/"
296 #store kernel source rpm
297 kernelrpmname="kernel-lustre-source-${lnxmaj}-${EXTRA_VERSIONnew}.${TARGET_ARCH}.rpm"
298 [ -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" ] || kernelrpmname="kernel-source-${lnxmaj}-${EXTRA_VERSIONnew}.${TARGET_ARCH}.rpm"
299 ( $PATCHLESS ) && [ -f "$KERNELSOURCERPM" ] && kernelrpmname=$(basename "$KERNELSOURCERPM")
300 if [ "$rpmonly" = "rpmonly" ] && [ -f "${REUSEBUILD}/${TIMESTAMP}/${kernelrpmname}" ]; then
301 echo "RPM already exist in store directory tree"
303 [ -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" ] && cp -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" "${REUSEBUILD}/${TIMESTAMP}/"
305 if [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" ]; then
306 # store kernel-ib RPMs
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" "$delimeter"); then
528 fatal 1 "Could not find the kernel$type RPM in ${KERNELRPMSBASE}/${lnxmaj}/${DISTRO}"
530 unpack_linux_rpm "$kernel_devel_rpm" "$delimiter" && rpmfound=true
532 [ -d SRPMS ] || mkdir SRPMS
533 [ -d RPMS ] || mkdir RPMS
534 [ -d BUILD ] || mkdir BUILD
535 [ -d SOURCES ] || mkdir SOURCES
537 # first build kernel-ib
538 if [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" ]; then
539 $rpmfound && build_kernel_ib
541 ( $rpmfound ) && build_lustre && buildsuccess=true && find_linux_source_rpm
544 if $buildsuccess; then
545 [ -d "RPMS/${TARGET_ARCH}" ] && [ -f "$KERNELRPM" ] && \
546 cp "$KERNELRPM" RPMS/${TARGET_ARCH}/
547 [ -d "RPMS/${TARGET_ARCH}" ] && [ -f "$KERNELSOURCERPM" ] && \
548 cp "$KERNELSOURCERPM" RPMS/${TARGET_ARCH}/
549 KERNELCOMPILEDIR="$LINUX"
550 if $storeforreuse; then
551 store_for_reuse || echo "Cannot store for future reuse"
555 elif ! $rpmfound; then
556 echo "COULD NOT FIND VENDOR -devel or -source RPM for $DISTRO/$TARGET_ARCH: $lnxmaj-$lnxrel in $KERNELRPMSBASE"
559 echo "Patchless build failed."
564 #check timestamp value. should bi 14-digits string
567 local timestampnodig=$(echo $invalue | sed -e s/[0-9]*//g)
568 [ "$timestampnodig" = "" ] || return 255
569 local timestamplength="${#invalue}"
570 [ $timestamplength -eq 14 ] || return 255
573 # get list of suitable directories with potential reused staff
574 get_reuse_dir_list() {
576 local reusedkernelmasknew=$2
577 local buildtimestamp=
579 local sourcelastdate=$(get_last_source_date)
580 for buildtimestamp in $(ls "$REUSEBUILD/" 2>&1); do
581 [ -d "$REUSEBUILD/$buildtimestamp" ] || continue
582 check_timestamp "$buildtimestamp" || continue
583 local buildtimestampstr=$(echo $buildtimestamp | \
584 sed -e "s^\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)^\1-\2-\3 \4:\5:\6 GMT^g")
585 local buildtimestampepoch=$(date --date="$buildtimestampstr" +%s )
586 #check for suitable date
587 if ! $PATCHLESS; then
588 [ $buildtimestampepoch -ge $sourcelastdate ] || continue
590 #check for suitable version
591 if [ "$rpmonly" = "rpmonly" ]; then
592 local reusedkernelprefix="kernel-lustre-"
593 ( $PATCHLESS ) && reusedkernelprefix=
594 local rpmmask="${reusedkernelprefix}${REUSEDKERNELMASK}"
595 [ "$reusedkernelmasknew" = "" ] || rpmmask="$reusedkernelmasknew"
596 [ -f $REUSEBUILD/$buildtimestamp/${rpmmask}.rpm ] && \
597 dirsforreuse="$dirsforreuse $REUSEBUILD/$buildtimestamp"
599 local rpmmask="$REUSEDKERNELMASK"
600 [ "$reusedkernelmasknew" = "" ] || rpmmask="$reusedkernelmasknew"
601 pushd $REUSEBUILD/$buildtimestamp/linux-${rpmmask} > /dev/null 2>&1 || continue
603 dirsforreuse="$dirsforreuse $curdir"
610 #try to reuse old RPM
611 build_sequence_rpm_reuse() {
613 [ "$REUSERPM" = "" ] && [ "$REUSEBUILD" = "" ] && return 255
615 if ! [ "$REUSEBUILD" = "" ] && [ -d "$REUSEBUILD" ]; then #try to reuse RPM
616 local REUSEDKERNELMASKnew=$(echo $REUSEDKERNELMASK | sed -e "s/^[^0-9]*//")
617 REUSEDKERNELMASKnew="kernel-lustre-source-${REUSEDKERNELMASKnew}"
618 local dirsforreuse="$(get_reuse_dir_list rpmonly $REUSEDKERNELMASKnew)"
619 local buildsuccess=false
621 for curdir in $(echo $dirsforreuse); do
622 [ -d "$curdir" ] || continue
623 local reusedkernelprefix="kernel-lustre-"
624 local reusedkernelrpm=
625 [ -f ${curdir}/${reusedkernelprefix}${REUSEDKERNELMASK}.rpm ] && \
626 reusedkernelrpm=$(ls ${curdir}/${reusedkernelprefix}${REUSEDKERNELMASK}.rpm | head -1 )
627 [ -f "$reusedkernelrpm" ] || continue
629 local reusedkernelsourcerpm=
630 [ -f ${curdir}/${REUSEDKERNELMASKnew}.rpm ] && \
631 reusedkernelsourcerpm=$(ls ${curdir}/${REUSEDKERNELMASKnew}.rpm | head -1 )
632 [ -f "$reusedkernelsourcerpm" ] || continue
634 # don't need to check for kernel-ib RPM reuse here because sles9 is not supported
635 # by OFED >= 1.3.0 and this function appears to only be used for sles9
637 [ -d $TOPDIR/reused ] && rm -rf $TOPDIR/reused
638 reuse_kernel_rpm "$reusedkernelsourcerpm" "" && build_linux nofullmake copyrpmkernel && build_lustre && buildsuccess=true
639 ( $buildsuccess ) || continue
640 if ( ! $NORPM ) && ( ! $PATCHLESS ) ; then
641 [ -f "$reusedkernelrpm" ] && \
642 cp -f "$reusedkernelrpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1
644 [ -f "$reusedkernelsourcerpm" ] && \
645 cp -f "$reusedkernelsourcerpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1 && \
646 touch RPMS/${TARGET_ARCH}/kernel_was_reused
654 #try to reuse old BUILD dir
655 build_sequence_reuse() {
657 [ "$REUSERPM" = "" ] && [ "$REUSEBUILD" = "" ] && return 255
659 if [ ! "$REUSEBUILD" = "" ] && [ -d "$REUSEBUILD" ]; then #try to reuse old kernel build directory
660 local dirsforreuse="$(get_reuse_dir_list)"
661 local buildsuccess=false
663 local REUSEDKERNELMASKnew=$(echo $REUSEDKERNELMASK | sed -e "s/^[^0-9]*//")
664 for curdir in $(echo $dirsforreuse); do
665 local reusedkernelrpm=
666 local reusedkernelsourcerpm=
667 local reusedkernelibrpm=
668 [ -d "$curdir" ] || continue
669 [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" -a
670 ! -d "${curdir%/*}/ofa_kernel" ] && continue
671 local reusedkernelprefix="kernel-lustre-"
672 ( $PATCHLESS ) && reusedkernelprefix=
673 [ -f ${curdir}/../${reusedkernelprefix}${REUSEDKERNELMASK}.rpm ] && \
674 reusedkernelrpm=$(ls ${curdir}/../${reusedkernelprefix}${REUSEDKERNELMASK}.rpm | head -1 )
675 reusedkernelprefix="kernel-lustre-source-"
676 [ -f ${curdir}/../${reusedkernelprefix}${REUSEDKERNELMASKnew}.rpm ] && \
677 reusedkernelsourcerpm=$(ls ${curdir}/../${reusedkernelprefix}${REUSEDKERNELMASKnew}.rpm | head -1 )
678 if [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" ]; then
680 reusedkernelprefix="kernel-ib-"
681 [ -f ${curdir}/../${reusedkernelprefix}${OFED_VERSION}-${LUSTRE_EXTRA_VERSION}.${TARGET_ARCH}.rpm ] && \
682 reusedkernelibrpm=$(ls ${curdir}/../${reusedkernelprefix}${OFED_VERSION}-${LUSTRE_EXTRA_VERSION}.${TARGET_ARCH}.rpm | head -1 )
683 reusedkernelibdevelrpm=$(ls ${curdir}/../${reusedkernelprefix}devel-${OFED_VERSION}-${LUSTRE_EXTRA_VERSION}.${TARGET_ARCH}.rpm | head -1 )
685 if ! ( $NORPM ) && ! [ -f "$reusedkernelrpm" ]; then #kernel rpm not found. Build all
688 if ! ( $NORPM ) && ! [ -f "$reusedkernelsourcerpm" ]; then #kernel source rpm not found. Build all
691 if [ -n "$OFED_VERSION" ]; then
692 if [ "$OFED_VERSION" != "inkernel" ]; then
693 if ! ( $NORPM ) && [ ! -f "$reusedkernelibrpm" -o ! -f "$reusedkernelibdevelrpm"]; then #kernel-ib{,-devel} rpm not found. Build all
696 CONFIGURE_FLAGS="--with-o2ib=${curdir%/*}/ofa_kernel ${CONFIGURE_FLAGS}"
698 CONFIGURE_FLAGS="--with-o2ib=yes ${CONFIGURE_FLAGS}"
702 build_lustre || continue
705 if ( ! $NORPM ) && ( ! $PATCHLESS ) ; then
706 [ -f "$reusedkernelrpm" ] && \
707 cp -f "$reusedkernelrpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1 && \
708 touch RPMS/${TARGET_ARCH}/kernel_was_reused
709 [ -f "$reusedkernelsourcerpm" ] && \
710 cp -f "$reusedkernelsourcerpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1
711 [ -f "$reusedkernelibrpm" ] && \
712 cp -f "$reusedkernelibrpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1
713 cp -f "$reusedkernelibdevelrpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1
728 prep_kernel_build || return 255
729 clean_lustre || return 255
731 build_kernel || return 255
734 old_school_download_kernel() {
736 if [ "$KERNELDIR" ] ; then
737 KERNEL_FILE="$KERNELDIR/$KERNEL"
738 if [ ! -r "$KERNEL_FILE" ] ; then
739 # see if we have an SRPM we can build a tarball for
740 KERNEL_SRPM=kernel-${lnxmaj}-${lnxrel}.src.rpm
741 if [ -r "$KERNELDIR/$KERNEL_SRPM" ] ; then
742 build_tarball $CANONICAL_TARGET $KERNEL_SRPM
745 echo "Downloading http://downloads.lustre.org/public/kernels/$DISTRO/old/$KERNEL..."
746 if ! wget -nv "http://downloads.lustre.org/public/kernels/$DISTRO/old/$KERNEL" -O "$KERNELDIR/$KERNEL" ; then
747 # see if we can do it with an SRPM from the download site
748 download_and_build_tarball $CANONICAL_TARGET $KERNEL_FILE
750 [ -s "$KERNELDIR/$KERNEL" ] || {
751 rm -rf "$KERNELDIR/$KERNEL"
752 fatal 1 "Target $TARGET's kernel $KERNEL not found in directory $KERNELDIR."
756 fatal 1 "Target $TARGET's kernel file $KERNEL not found in kernel directory $KERNELDIR."