3 # vim:expandtab:shiftwidth=4:softtabstop=4:tabstop=4:
9 # CVSROOT is inherited from the environment
19 TARGET_ARCH=$(uname -m)
21 TARGET_ARCHS_ALL=$TARGET_ARCH
22 [ "$TARGET_ARCH" = "i686" ] && TARGET_ARCHS_ALL="i686 i586 i386"
28 TMPDIR=${TMPDIR:-"/var/tmp"}
34 SKIPLDISKFSRPM="v1_4_* b1_4"
35 SMPTYPES="smp bigsmp default ''"
79 # Readlink is not present on some older distributions: emulate it.
83 if [ -L "$path" ]; then
84 ll="$(LC_ALL=C ls -l "$path" 2> /dev/null)" &&
98 [ "$1" ] && echo -e "\n${0##*/}: $1"
110 echo -n "Available targets:"
111 for target in $TOPDIR/lustre/lustre/kernel_patches/targets/*.target ; do
112 target_file=${target##*/}
113 echo -n " ${target_file%%.target}"
121 Usage: ${0##*/} [OPTION]... [-- <lustre configure options>]
124 Specifies the CVS Root to use when pulling files from CVS. The
125 environment variable \$CVSROOT is used if this option is not
128 --external-patches=EXTERNAL_PATCHES
129 Directory similar to lustre/lustre/kernel_patches/ that lbuild should
130 look for seres and config files in before looking in the lustre
133 --extraversion=EXTRAVERSION
134 Text to use for the rpm release and kernel extraversion.
136 --kerneldir=KERNELDIR
137 Directory containing Linux source tarballs referenced by target
140 --timestamp=TIMESTAMP
141 Date of building lustre in format YYYYMMDDhhmmss
144 Try to reuse old kernel RPMs from DIR
147 Try to reuse old kernel builds from DIR
150 Path to distro kernel RPM collection
156 Do not build RPMs (compile only mode)
159 Build lustre client only
162 Which distro using. Autodetect by default
164 --kerneltree=KERNELTREE
165 Directory containing dirs with Linux source tarballs referenced by target
166 files. Dir names in format kernel version ('2.6.9', etc.)
169 Directory of Linux kernel sources. When this option is used, only
170 Lustre modules and userspace are built.
173 Path to an existing lustre source tarball to use instead of
177 Do not try to download a kernel from downloads.lustre.org
180 Do not build a .src.rpm, a full kernel patch, or a patched kernel
184 Do ldiskfs RPM. Now true by default
190 Specifies that the files generated do not include timestamps, and
191 that this is an official release.
194 Build a .src.rpm, a full kernel patch, and a patched kernel tarball.
197 Directory used to stage packages for release. RPMs will be placed
198 more or less in DIR/<target>-<arch>, and the tarball will be
202 A CVS branch/tag name to build from when pulling from CVS.
205 The name of the target to build. The available targets are listed
208 --target-archs=TARGET_ARCHS
209 A (space delimited) list of architectures to build. By default,
210 all of the archs supported by the TARGET will be built, in
211 addition to a .src.rpm. This option can limit those, for machines
212 that can only build certain archs or if you only want a certain
213 arch built (for testing, or a one-off kernel).
215 Also note that by using a non-"base" arch (eg, i386) only kernels
216 will be built - there will be no lustre-lite-utils package.
219 Prevents the datestamp flag (-D) from being passed to cvs for
220 checkouts. This is a workaround for a problem encountered when
221 using lbuild with tinderbox.
232 if [ "$LUSTRE" ] ; then
233 [ -r "$LUSTRE" ] || \
234 usage 1 "Could not find Lustre source tarball '$LUSTRE'."
237 usage 1 "Either specify a CVS Root with -d, or a Lustre source tarball with --lustre."
239 usage 1 "A branch/tag name must be specified with --tag when not building from a tarball."
242 if [ -z "$LINUX" ] ; then
243 [ "$KERNELDIR" -o "$KERNELTREE" ] || \
244 usage 1 "A kernel directory must be specified with --kerneldir or --kerneltree."
246 [ -d "$KERNELDIR" -o -d "$KERNELTREE" ] || \
247 usage 1 "$KERNELDIR and $KERNELTREE are not a directory."
251 usage 1 "When building a snapshot, a tag name must be used."
254 [ "$TARGET" ] || usage 1 "A target must be specified with --target."
255 # TARGET_FILE="$TOPDIR/lustre/kernel_patches/targets/$TARGET.target"
256 # [ -r "$TARGET_FILE" ] || \
257 # usage 1 "Target '$TARGET' was not found."
262 CANONICAL_TARGET="rhel5"
265 CANONICAL_TARGET="rhel-2.6"
268 CANONICAL_TARGET="sles-2.6"
271 CANONICAL_TARGET="sles10-2.6"
274 CANONICAL_TARGET="hp-pnnl-2.4"
282 CANONICAL_TARGET="$TARGET"
286 local timestampnodig=$(echo $TIMESTAMP | sed -e s/[0-9]*//g)
287 [ "$timestampnodig" = "" ] || TIMESTAMP=$(date -d "$DATE" "+%Y%m%d%H%M%S")
288 local timestamplength="${#TIMESTAMP}"
289 if [ $timestamplength -eq 12 ]; then
290 TIMESTAMP="${TIMESTAMP}00"
291 elif [ $timestamplength -ne 14 ]; then
292 TIMESTAMP=$(date -d "$DATE" "+%Y%m%d%H%M%S")
295 RPMBUILD=$(which rpmbuild 2>/dev/null | head -1)
296 if [ ! "$RPMBUILD" -o "$RPMBUILD" == "" ]; then
297 RPMBUILD=$(which rpm 2>/dev/null | head -1)
298 if [ ! "$RPMBUILD" -o "$RPMBUILD" == "" ]; then
299 usage 1 "Could not find binary for making rpms (tried rpmbuild and rpm)."
303 if [ -n "$CCACHE" ]; then
304 which "$CCACHE" 2>/dev/null && export CCACHE && export CC="ccache gcc"
305 which "$DISTCC" 2>/dev/null && export DISTCC RPM_BUILD_NCPUS
306 local bindir="/cache/build/bin"
307 [ -d $bindir ] || mkdir -p $bindir
308 [ -d $bindir ] && rm ${bindir}/* > /dev/null 2>&1
309 which "$CCACHE" 2>/dev/null && [ -d $bindir ] && ln -s `which "$CCACHE"` ${bindir}/ccache
310 which "$CCACHE" 2>/dev/null && [ -d $bindir ] && ln -s `which "$CCACHE"` ${bindir}/cc
311 which "$CCACHE" 2>/dev/null && [ -d $bindir ] && ln -s `which "$CCACHE"` ${bindir}/gcc
312 [ -d $bindir ] && export PATH=$bindir:$PATH
315 [ -z "$DISTRO" ] && autodetect_distro
318 #autodetect used Distro
321 if [ -f /etc/SuSE-release ]; then
323 elif [ -f /etc/redhat-release ]; then
324 local distroname=$(head -1 /etc/redhat-release | grep -e "CentOS\|Red")
325 if [ ! "$distroname" = "" ]; then
326 local version=$(echo "$distroname" | sed -e s/[^0-9.]*//g | sed -e s/\\..*// )
328 [ "$version" = "" ] || DISTRO="${distroname}${version}"
331 [ "$DISTRO" = "" ] && DISTRO="sles9" #default distro
336 echo $(echo "$*" | xargs -n 1 | sort -u)
343 if [ "$TARGET" = "rhel-2.6" -o "$TARGET" = "rhel-2.4" ]; then
345 if [ "$TARGET" = "rhel-2.6" ]; then
347 OLDCONFIG=nonint_oldconfig
348 elif [ "$TARGET" = "rhel-2.4" ]; then
353 RPMTOPDIR=$(mktemp -d $KERNELDIR/rpm_XXXXXX)
354 mkdir $RPMTOPDIR/BUILD/
355 rpm -ivh $KERNELDIR/$SRPM --define "_topdir $RPMTOPDIR" || \
356 { rm -rf $RPMTOPDIR; fatal 1 "Error installing kernel SRPM."; }
357 $RPMBUILD -bp --nodeps --target i686 $RPMTOPDIR/SPECS/$SPEC --define "_topdir $RPMTOPDIR"
358 pushd $RPMTOPDIR/BUILD/kernel-${lnxmaj}/linux-${lnxmaj} && {
360 cp configs/kernel-${lnxmaj}-i686-smp.config .config
361 if ! make $OLDCONFIG > /dev/null; then
362 fatal 1 "error trying to make $OLDCONFIG while building a tarball from SRPM."
364 make include/linux/version.h
367 tar cjf $KERNEL_FILE linux-${lnxmaj}
374 download_and_build_tarball() {
378 local srpm=kernel-${lnxmaj}-${lnxrel}.src.rpm
380 echo "Downloading http://downloads.lustre.org/public/kernels/$target/old/$srpm..."
381 if ! wget -nv "http://downloads.lustre.org/public/kernels/$target/old/$srpm" \
382 -O "$KERNELDIR/$srpm" ; then
383 fatal 1 "Could not download target $kernel_file's kernel SRPM $srpm from downloads.lustre.org."
386 build_tarball $target $srpm
391 EXTRA_VERSION_save="$EXTRA_VERSION"
392 for patchesdir in "$EXTERNAL_PATCHES" "$TOPDIR/lustre/lustre/kernel_patches" ; do
393 TARGET_FILE="$patchesdir/targets/$TARGET.target"
394 [ -r "$TARGET_FILE" ] && break
396 [ -r "$TARGET_FILE" ] || \
397 fatal 1 "Target $TARGET was not found."
399 echo "Loading target config file $TARGET.target..."
403 [ "$KERNEL" ] || fatal 1 "Target $TARGET did not specify a kernel."
404 [ "$VERSION" ] || fatal 1 "Target $TARGET did not specify a kernel version."
406 #CC was overwriten in TARGET_FILE
407 which "$CCACHE" 2>/dev/null && export CCACHE && export CC="ccache gcc"
409 if [ ! "$KERNELTREE" = "" ] && [ -d "$KERNELTREE" ]; then
410 KERNELDIR="$KERNELTREE/${lnxmaj}"
411 [ -d "$KERNELDIR" ] || mkdir "$KERNELDIR"
414 if [ "$KERNELDIR" ] ; then
415 KERNEL_FILE="$KERNELDIR/$KERNEL"
416 if [ ! -r "$KERNEL_FILE" ] ; then
417 # see if we have an SRPM we can build a tarball for
418 KERNEL_SRPM=kernel-${lnxmaj}-${lnxrel}.src.rpm
419 if [ -r "$KERNELDIR/$KERNEL_SRPM" ] ; then
420 build_tarball $CANONICAL_TARGET $KERNEL_SRPM
422 if (( $DOWNLOAD )) ; then
423 echo "Downloading http://downloads.lustre.org/public/kernels/$CANONICAL_TARGET/old/$KERNEL..."
424 if ! wget -nv "http://downloads.lustre.org/public/kernels/$CANONICAL_TARGET/old/$KERNEL" -O "$KERNELDIR/$KERNEL" ; then
425 # see if we can do it with an SRPM from the download site
426 download_and_build_tarball $CANONICAL_TARGET $KERNEL_FILE
429 fatal 1 "Target $TARGET's kernel file $KERNEL not found in kernel directory $KERNELDIR."
435 if [ "$SERIES" ] ; then
436 for series in $SERIES ; do
437 for patchesdir in "$EXTERNAL_PATCHES" "$TOPDIR/lustre/lustre/kernel_patches" ; do
438 [ -r "$patchesdir/series/$series" ] && continue 2
440 fatal 1 "Target $TARGET's series $SERIES could not be found.\nSearched:\n\t$EXTERNAL_PATCHES/series\n\t$TOPDIR/lustre/lustre/kernel_patches/series."
444 if [ -f $TOPDIR/lustre/lustre/kernel_patches/kernel_configs/kernel-$lnxmaj-$TARGET-$TARGET_ARCH.config ]; then
445 CONFIG_FILE="$TOPDIR/lustre/lustre/kernel_patches/kernel_configs/kernel-$lnxmaj-$TARGET-$TARGET_ARCH.config"
448 for smptype in $SMPTYPES; do
449 [ "$smptype" = "''" ] && smptype=
450 if [ -f $TOPDIR/lustre/lustre/kernel_patches/kernel_configs/kernel-$lnxmaj-$TARGET-$TARGET_ARCH-${smptype}.config ]; then
451 CONFIG_FILE="$TOPDIR/lustre/lustre/kernel_patches/kernel_configs/kernel-$lnxmaj-$TARGET-$TARGET_ARCH-${smptype}.config"
452 KERNCONFSMPTYPE=$smptype
456 local lnxrelnew=$( echo ${lnxrel} | sed s/-/_/g )
458 [ -f "$CONFIG_FILE" ] || \
459 fatal 1 "Config file for target $TARGET missing from $TOPDIR/lustre/lustre/kernel_patches/kernel_configs/."
460 if [ "$EXTRA_VERSION_save" ] ; then
461 EXTRA_VERSION="$EXTRA_VERSION_save"
462 elif ! $RELEASE; then
463 # if there is no patch series, then this is not a lustre specific
464 # kernel. don't make it look like one
465 if [ -n "$SERIES" ]; then
466 #remove the @VERSION@ (lustre version)
467 # EXTRA_VERSION=$(echo $EXTRA_VERSION | sed -e "s/\(.*_lustre\)\..*/\1/")
468 # EXTRA_VERSION="${EXTRA_VERSION}-${TAG}.${TIMESTAMP}"
469 ! ( $PATCHLESS ) && EXTRA_VERSION="${EXTRA_VERSION}.${TIMESTAMP}"
472 # EXTRA_VERSION=${EXTRA_VERSION//-/_}
474 [ -z $REUSEDKERNELMASK ] && \
475 # create mask for kernel RPM/builddir which could be reused
477 REUSEDKERNELMASK=${KERNCONFSMPTYPE}-${lnxmaj}-${lnxrelnew}_lustre.${LUSTRE_VERSION}.*${TARGET_ARCH}
479 REUSEDKERNELMASK=${KERNCONFSMPTYPE}-${lnxmaj}-${lnxrelnew}_lustre.${LUSTRE_VERSION}.${TARGET_ARCH}
481 REUSEDKERNELMASK=${KERNCONFSMPTYPE}-${lnxmaj}-${lnxrelnew}_lustre.${LUSTRE_VERSION}.${TIMESTAMP}.${TARGET_ARCH}
483 # kernel-lustre-smp-2.6.9-55.0.2.EL_lustre.1.6.1.i686.rpm
485 ALL_ARCHS="$BASE_ARCHS $BIGMEM_ARCHS $BOOT_ARCHS $JENSEN_ARCHS $SMP_ARCHS $BIGSMP_ARCHS $PSERIES64_ARCHS $UP_ARCHS"
488 for arch in $(uniqify "$ALL_ARCHS") ; do
489 if [ -z "$TARGET_ARCHS" ] || echo "$TARGET_ARCHS" | grep "$arch" >/dev/null 2>/dev/null ; then
490 BUILD_ARCHS="$BUILD_ARCHS $arch"
493 [ "$BUILD_ARCHS" ] || usage 1 "No available target archs to build."
494 echo "Building for: $BUILD_ARCHS"
501 fatal 1 "tarflags(): File name argument missing."
513 fatal 1 "tarflags(): Unrecognized tar extension in file: $1"
520 echo "Untarring ${1##*/}..."
521 tar $(tarflags "$1") "$1"
526 DIRNAME="lustre-$TAG-$TIMESTAMP"
527 if [ "$LUSTRE" ] ; then
529 [ -d lustre ] || ln -sf lustre-[0-9].[0-9]* lustre
531 if [ "$USE_DATESTAMP" ]; then
532 DATESTAMP="-D '$DATE'"
537 cvs -d "$CVSROOT" -qz3 co $DATESTAMP -d "$DIRNAME" lustre || \
538 fatal 1 "There was an error checking out toplevel Lustre from CVS."
539 pushd "$DIRNAME" > /dev/null
540 ./lustrecvs "$TAG" || \
541 fatal 1 "There was an error checking out Lustre/Portals/Build from CVS."
542 echo "Creating lustre tarball..."
543 sh autogen.sh || fatal 1 "There was an error running autogen.sh."
544 ./configure --disable-{modules,utils,liblustre,tests,doc} || \
545 fatal 1 "There was an error running ./configure to create makefiles."
546 make dist || fatal 1 "There was an error running 'make dist'."
548 fname=$(basename $DIRNAME/lustre-*.tar.gz)
549 cp $DIRNAME/$fname . || fatal 1 "There was an error copying lustre tarball."
551 ln -sf "$DIRNAME" lustre
558 [ -d linux ] || ln -sf linux* linux
563 [ "$SERIES" ] || return 0
564 FULL_PATCH="$PWD/lustre-kernel-${TARGET}${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}.patch"
565 [ -f "$FULL_PATCH" ] && rm -f "$FULL_PATCH"
566 pushd linux >/dev/null
567 for series in $SERIES ; do
568 echo -n "Applying series $series:"
569 for patchesdir in "$EXTERNAL_PATCHES" "$TOPDIR/lustre/lustre/kernel_patches" ; do
570 [ -r "$patchesdir/series/$series" ] || continue
571 SERIES_FILE="$patchesdir/series/$series"
572 for patch in $(<"$SERIES_FILE") ; do
574 PATCH_FILE="$patchesdir/patches/$patch"
575 [ -r "$PATCH_FILE" ] || \
576 fatal 1 "Patch $patch does not exist in Lustre tree."
577 cat "$PATCH_FILE" >> "$FULL_PATCH" || \
578 fatal 1 "Error adding patch $patch to full patch."
579 patch -s -p1 < "$PATCH_FILE" || fatal 1 "Error applying patch $patch."
586 echo "Full patch has been saved in ${FULL_PATCH##*/}."
587 echo "Replacing .config files..."
588 [ -d linux/configs ] || mkdir linux/configs || \
589 fatal 1 "Error creating configs directory."
590 rm -f linux/configs/*
592 for patchesdir in "$EXTERNAL_PATCHES" "lustre/lustre/kernel_patches" ; do
593 [ "$patchesdir" ] && \
594 cp -v $patchesdir/kernel_configs/kernel-${VERSION}-${TARGET}*.config linux/configs/ >/dev/null && copysuccess=1
596 [ "$copysuccess" = "1" ] || \
597 fatal 1 "Error copying in kernel configs."
602 TARBALL="$(readlink linux)-$EXTRA_VERSION.tar.gz"
603 echo "Creating patched linux tarball $TARBALL..."
604 tar zcf "$TARBALL" "$(readlink linux)" \
605 --exclude "CVS" --exclude ".cvsignore" || \
606 --exclude "*.orig" --exclude "*~" --exclude "*.rej" || \
607 fatal 1 "Error creating patched Linux tarball."
612 [ -d linux ] || return 0
613 echo "Cleaning linux..."
614 [ -L linux ] && rm -rf $(readlink linux)
621 ENABLE_INIT_SCRIPTS=""
623 -e "s^@BASE_ARCHS@^$BASE_ARCHS^g" \
624 -e "s^@BIGMEM_ARCHS@^$BIGMEM_ARCHS^g" \
625 -e "s^@BIGSMP_ARCHS@^$BIGSMP_ARCHS^g" \
626 -e "s^@BOOT_ARCHS@^$BOOT_ARCHS^g" \
627 -e "s^@CONFIGURE_FLAGS@^$CONFIGURE_FLAGS^g" \
628 -e "s^@ENABLE_INIT_SCRIPTS@^$ENABLE_INIT_SCRIPTS^g" \
629 -e "s^@JENSEN_ARCHS@^$BOOT_ARCHS^g" \
630 -e "s^@KERNEL_EXTRA_VERSION@^$EXTRA_VERSION^g" \
631 -e "s^@KERNEL_EXTRA_VERSION_DELIMITER@^$EXTRA_VERSION_DELIMITER^g" \
632 -e "s^@KERNEL_TARGET_DELIMITER@^$TARGET_DELIMITER^g" \
633 -e "s^@KERNEL_RELEASE@^${EXTRA_VERSION//-/_}^g" \
634 -e "s^@KERNEL_SOURCE@^$KERNEL^g" \
635 -e "s^@KERNEL_VERSION@^$VERSION^g" \
636 -e "s^@LINUX26@^$LINUX26^g" \
637 -e "s^@LUSTRE_SOURCE@^${LUSTRE##*/}^g" \
638 -e "s^@LUSTRE_TARGET@^$TARGET^g" \
639 -e "s^@PSERIES64_ARCHS@^$PSERIES64_ARCHS^g" \
640 -e "s^@RHBUILD@^$RHBUILD^g" \
641 -e "s^@SMP_ARCHS@^$SMP_ARCHS^g" \
642 -e "s^@SUSEBUILD@^$SUSEBUILD^g" \
643 -e "s^@UP_ARCHS@^$UP_ARCHS^g" \
644 < $TOPDIR/lustre/build/lustre-kernel-2.4.spec.in \
645 > lustre-kernel-2.4.spec
646 [ -d SRPMS ] || mkdir SRPMS
647 [ -d RPMS ] || mkdir RPMS
648 [ -d BUILD ] || mkdir BUILD
649 [ -d SOURCES ] || mkdir SOURCES
650 for script in linux-{rhconfig.h,merge-config.awk,merge-modules.awk} \
651 suse-{functions.sh,post.sh,postun.sh,trigger-script.sh.in} \
652 sles8-{pre,post,postun,update_{INITRD_MODULES,rcfile_setting}}.sh ; do
653 cp $TOPDIR/lustre/build/$script SOURCES
655 cp "$LUSTRE" "$KERNEL_FILE" SOURCES
656 if [ "$EXTERNAL_PATCHES" -a -d "$EXTERNAL_PATCHES" ] ; then
657 tar zcf SOURCES/external-patches.tar.gz -C "$EXTERNAL_PATCHES" series targets patches kernel_configs
659 touch SOURCES/external-patches.tar.gz
665 [ -d lustre ] || return 0
666 echo "Cleaning Lustre..."
667 [ -L lustre ] && rm -rf $(readlink lustre)
673 echo "Building kernel + Lustre RPMs for: $BUILD_ARCHS..."
675 for arch in $BUILD_ARCHS ; do
676 targets="--target $arch $targets"
679 local rpmbuildopt='-bb'
682 # echo NORPM mode. Only compiling.
683 # echo "XXX: need to fix lmake - add options to do rpmbuild -bc instead of -bb"
686 $RPMBUILD $targets $rpmbuildopt lustre-kernel-2.4.spec \
687 --define "_tmppath $TMPDIR" \
688 --define "_topdir $TOPDIR" || \
689 fatal 1 "Error building rpms for $BUILD_ARCHS."
691 if (( $DO_SRC )) ; then
692 $RPMBUILD -bs lustre-kernel-2.4.spec \
693 --define "_tmppath $TMPDIR" \
694 --define "_topdir $TOPDIR" || \
695 fatal 1 "Error building .src.rpm."
698 ( $(skeep_ldiskfs_rpm $TAG) ) && return
700 pushd $TOPDIR/BUILD/lustre*/ldiskfs || return 255
702 if [ "$?" != "0" ] ; then
706 cp lustre-ldiskfs*.tar.gz $TOPDIR/SOURCES
710 local ldiskfs_spec=lustre-ldiskfs.spec
711 [ -f "$ldiskfs_spec" ] && sed \
712 -e "s^Release: .*$^Release: $LUSTRE_EXTRA_VERSION^" \
714 > ../lustre-ldiskfs.spec
716 $RPMBUILD $targets $rpmbuildopt ../lustre-ldiskfs.spec \
717 --define "_tmppath /var/tmp" \
718 --define "_topdir $TOPDIR"
719 if [ "$?" != "0" ] ; then
724 if (( $DO_SRC )) ; then
725 $RPMBUILD -bs ../lustre-ldiskfs.spec \
726 --define "_tmppath /var/tmp" \
727 --define "_topdir $TOPDIR"
728 if [ "$?" != "0" ] ; then
738 [ -d SRPMS ] || mkdir SRPMS
739 [ -d RPMS ] || mkdir RPMS
740 [ -d BUILD ] || mkdir BUILD
741 [ -d SOURCES ] || mkdir SOURCES
745 pushd lustre >/dev/null
747 echo "Building Lustre RPMs for: $BUILD_ARCHS..."
749 for arch in $BUILD_ARCHS ; do
750 targets="--target $arch $targets"
753 local confoptions="--with-linux=${LINUX}"
755 confoptions="--with-linux=${LINUX} --disable-server"
757 if [ ! "$LINUXOBJ" = "" ]; then
758 confoptions="$confoptions --with-linux-obj=${LINUXOBJ}"
761 ./configure $confoptions ${CONFIGURE_FLAGS}
762 if [ "$?" != "0" ] ; then
763 local saved_config="../config.log.$(date +%s)"
764 cp config.log $saved_config
765 chmod a+r $saved_config
766 echo "Saved config.log is at $saved_config"
773 # hack. Somebody move build/lustre.spec to lustre.spec for b1_6
775 [ -f lustre.spec ] && lustre_spec=lustre.spec
776 [ -f build/lustre.spec ] && lustre_spec=build/lustre.spec
778 [ -f "$lustre_spec" ] && sed \
779 -e "s^Release: .*$^Release: $LUSTRE_EXTRA_VERSION^" \
783 local rpmbuildopt='-bb'
786 echo NORPM mode. Only compiling.
789 $RPMBUILD $targets $rpmbuildopt ../lustre.spec \
790 --define "_tmppath $TMPDIR" \
791 --define "_topdir $TOPDIR" || \
792 fatal 1 "Error building rpms for $BUILD_ARCHS."
795 ( $(skeep_ldiskfs_rpm $TAG) ) && return
797 pushd lustre/ldiskfs || return 255
799 if [ "$?" != "0" ] ; then
803 cp lustre-ldiskfs*.tar.gz $TOPDIR/SOURCES
807 local ldiskfs_spec=lustre-ldiskfs.spec
808 [ -f "$ldiskfs_spec" ] && sed \
809 -e "s^Release: .*$^Release: $LUSTRE_EXTRA_VERSION^" \
811 > ../lustre-ldiskfs.spec
813 $RPMBUILD $targets $rpmbuildopt ../lustre-ldiskfs.spec \
814 --define "_tmppath /var/tmp" \
815 --define "_topdir $TOPDIR"
816 if [ "$?" != "0" ] ; then
821 if (( $DO_SRC )) ; then
822 $RPMBUILD -bs ../lustre-ldiskfs.spec \
823 --define "_tmppath /var/tmp" \
824 --define "_topdir $TOPDIR"
825 if [ "$?" != "0" ] ; then
835 [ "$STAGEDIR" ] || return 0
837 for arch in $BUILD_ARCHS ; do
838 rpmdir="${STAGEDIR}/${CANONICAL_TARGET}-${arch}"
839 echo "${0##*/}: Copying RPMs into ${rpmdir}"
841 cp -v RPMS/${arch}/*.rpm "${rpmdir}"
842 if [ -d RPMS/noarch ] ; then
843 cp -v RPMS/noarch/*.rpm "${rpmdir}"
847 cp -v "$LUSTRE" "$STAGEDIR"
850 #check if we need to build separate ldiskfs RPM
855 if ! $LDISKFSRPM; then
857 elif $PATCHLESS; then
860 for skiptag in $SKIPLDISKFSRPM; do
861 [[ $tag == $skiptag ]] && skip=true && break
867 #get date of last changed target/config/series/patches
868 get_last_source_date()
870 local filelist="${TOPDIR}/lustre/lustre/kernel_patches/series/${SERIES} \
872 local TOPDIRnew=$(echo ${TOPDIR} | sed -e s/\\//\\\\\\//g)
873 filelist="$filelist $( \
874 cat ${TOPDIR}/lustre/lustre/kernel_patches/series/${SERIES} | \
875 sed -e s/^/${TOPDIRnew}\\/lustre\\/lustre\\/kernel_patches\\/patches\\// 2>&1)"
876 local sourcelastdate=$( find ${filelist} -name CVS -prune -o \
877 -type f -printf "%T@\n" 2>&1 | sort | tail -1 )
878 is_integer $sourcelastdate && echo $sourcelastdate
881 #check if variable is integer
885 [ "$invariable" = "" ] && return 255
886 local invariableint=$( echo $invariable | sed -e s/[^0-9]//g )
887 [ "$invariable" = "$invariableint" ] || return 255
890 #generate LUSTRE_EXTRA_VERSION from EXTRA_VERSION
894 [ "$KERNCONFSMPTYPE" = "" ] || smptype=$KERNCONFSMPTYPE
895 [ "$RPMSMPTYPE" = "" ] || smptype=$RPMSMPTYPE
897 LUSTRE_EXTRA_VERSION="${lnxmaj}-${EXTRA_VERSION}"
898 if [ "$PATCHLESS" = "true" -a "$DISTRO" = "sles10" ]; then
899 LUSTRE_EXTRA_VERSION="${LUSTRE_EXTRA_VERSION}-${smptype}"
901 LUSTRE_EXTRA_VERSION="${LUSTRE_EXTRA_VERSION}${smptype}"
903 LUSTRE_EXTRA_VERSION=$( echo $LUSTRE_EXTRA_VERSION | sed -e "s^-^_^g" )
906 #store RPMs and/or BUILD dir for future reuse
910 if [ ! "$REUSEBUILD" = "" ] && [ -d "/$REUSEBUILD/" ] ; then
911 [ -d "${REUSEBUILD}/${TIMESTAMP}" ] || mkdir "${REUSEBUILD}/${TIMESTAMP}"
912 [ -d "${REUSEBUILD}/${TIMESTAMP}" ] || return 255
917 local lnxrelnew=$( echo ${lnxrel} | sed s/-/_/g )
918 local EXTRA_VERSIONnew=$( echo ${EXTRA_VERSION} | sed s/-/_/g )
919 local KERNELRPMnew=$(basename "$KERNELRPM")
920 if [ ! "$rpmonly" = "rpmonly" ]; then
922 if [ ! "$KERNELCOMPILEDIR" = "" ]; then
923 builddir="$KERNELCOMPILEDIR"
925 builddir="BUILD/lustre-kernel-${lnxmaj}/lustre/linux-${lnxmaj}"
926 [ "$KERNELCOMPILEDIR" = "" ] || builddir="$KERNELCOMPILEDIR"
927 [ -d "$builddir" ] || builddir="BUILD/lustre-kernel-${lnxmaj}/lustre/linux-${lnxmaj}.${lnxrel}"
928 [ -d "$builddir" ] || builddir="BUILD/lustre-kernel-${lnxmaj}/lustre/linux-${lnxmaj}-${lnxrel}"
929 if [ ! -d "$builddir" ]; then
930 pushd "BUILD/lustre-kernel-${lnxmaj}/lustre/" || return 255
931 local basebuilddir=$(ls -d linux-${lnxmaj}* | head -1)
932 [ "$basebuilddir" = "" ] || builddir="BUILD/lustre-kernel-${lnxmaj}/lustre/${basebuilddir}"
936 [ -d "$builddir" ] || return 255
937 local dstdir="${REUSEBUILD}/${TIMESTAMP}/linux-${KERNCONFSMPTYPE}-${lnxmaj}-${EXTRA_VERSIONnew}.${TARGET_ARCH}"
938 ( $PATCHLESS ) && dstdir="${REUSEBUILD}/${TIMESTAMP}/linux-$KERNELRPMnew" && \
939 dstdir="${dstdir%.rpm}"
940 [ -d "$dstdir" ] && rm -rf "$dstdir"
941 mv "${builddir}" "$dstdir" || return 255
944 local kernelrpmname="kernel-lustre-${KERNCONFSMPTYPE}-${lnxmaj}-${EXTRA_VERSIONnew}.${TARGET_ARCH}.rpm"
945 [ -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" ] || kernelrpmname="kernel-${KERNCONFSMPTYPE}-${lnxmaj}-${EXTRA_VERSNnew}.${TARGET_ARCH}.rpm"
946 ( $PATCHLESS ) && [ -f "$KERNELRPM" ] && kernelrpmname="$KERNELRPMnew"
947 if [ "$rpmonly" = "rpmonly" ] && [ -f "${REUSEBUILD}/${TIMESTAMP}/${kernelrpmname}" ]; then
948 echo "RPM already exist in store directory tree"
950 [ -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" ] && cp -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" "${REUSEBUILD}/${TIMESTAMP}/"
952 #store kernel source rpm
953 kernelrpmname="kernel-lustre-source-${lnxmaj}-${EXTRA_VERSIONnew}.${TARGET_ARCH}.rpm"
954 [ -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" ] || kernelrpmname="kernel-source-${lnxmaj}-${EXTRA_VERSIONnew}.${TARGET_ARCH}.rpm"
955 ( $PATCHLESS ) && [ -f "$KERNELSOURCERPM" ] && kernelrpmname=$(basename "$KERNELSOURCERPM")
956 if [ "$rpmonly" = "rpmonly" ] && [ -f "${REUSEBUILD}/${TIMESTAMP}/${kernelrpmname}" ]; then
957 echo "RPM already exist in store directory tree"
959 [ -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" ] && cp -f "RPMS/${TARGET_ARCH}/${kernelrpmname}" "${REUSEBUILD}/${TIMESTAMP}/"
966 for smp_type in $SMP_ARCHS; do
967 [ $TARGET_ARCH == $smp_type ] && RPMSMPTYPE=smp && break
970 for smp_type in $BIGSMP_ARCHS; do
971 [ $TARGET_ARCH == $smp_type ] && RPMSMPTYPE=bigsmp && break
975 #unpack kernel(/source/devel) RPM
979 local delimiter=${2:-"-"}
980 local pathtorpms="${KERNELRPMSBASE}/${lnxmaj}/${DISTRO}"
981 local kernelbinaryrpm=
982 [ -d $pathtorpms ] || return 255
984 local wanted_kernel="${lnxmaj}${delimiter}${lnxrel}"
985 for arch in $TARGET_ARCHS_ALL; do
986 for rpm in ${pathtorpms}/${arch}/*.rpm; do
987 local provides=$(rpm -q --provides -p $rpm)
988 if (echo $provides | grep -q "kernel${prefix} = $wanted_kernel"); then
992 [ -f "$KERNELRPM" ] && TARGET_ARCH="$arch" && BUILD_ARCHS="$arch" && break
998 [ -f "$KERNELRPM" ] || return 255
999 [ -d $TOPDIR/reused ] || mkdir $TOPDIR/reused
1000 pushd $TOPDIR/reused || return 255
1002 rpm2cpio < "$KERNELRPM" | cpio -idc > /dev/null 2>&1
1003 if [ ${PIPESTATUS[0]} -eq 0 ]; then
1004 # RHEL-style and SLES-style rpms
1005 local paths="kernels/${lnxmaj}${delimiter}${lnxrel}-${TARGET_ARCH} linux-${lnxmaj}${delimiter}${lnxrel}"
1007 for path in $paths; do
1010 if [ -d "$src/$path/" ]; then
1011 LINUX="$(pwd)/$src/$path"
1013 # SLES has a separate -obj tree
1014 if [ -d "$src/${path}-obj" ]; then
1015 src="$src/${path}-obj"
1016 local objects="$TARGET_ARCH/$RPMSMPTYPE"
1018 # Novell, are you *TRYING* to make life hard for me?
1019 if [ -d "$src/powerpc" ]; then
1020 objects="powerpc/$TARGET_ARCH"
1021 elif [ $TARGET_ARCH == 'i686' ]; then
1022 objects="i386/$RPMSMPTYPE"
1025 LINUXOBJ="$(pwd)/$src/$objects"
1028 [ -z "$LINUX" ] && RC=255
1036 #look for kernel source RPM
1037 find_linux_source_rpm()
1043 [ ! "$TARGET_ARCH" = "" ] && arch=$TARGET_ARCH && findarch=false
1045 if ! $findarch; then
1046 pathtorpms="${KERNELRPMSBASE}/${lnxmaj}/${DISTRO}/${arch}"
1047 [ -d $pathtorpms ] || return 255
1050 rpmfile="kernel-${lnxmaj}-${lnxrel}.src.rpm"
1053 rpmfile="kernel-source-${lnxmaj}.${lnxrel}.${arch}.rpm"
1056 rpmfile="kernel-source-${lnxmaj}-${lnxrel}.${arch}.rpm"
1059 [ -f "${pathtorpms}/${rpmfile}" ] || return 255
1060 KERNELSOURCERPM="${pathtorpms}/${rpmfile}"
1062 for arch in $TARGET_ARCHS_ALL; do
1063 pathtorpms="${KERNELRPMSBASE}/${lnxmaj}/${DISTRO}/${arch}"
1064 [ -d $pathtorpms ] || continue
1067 rpmfile="kernel-${lnxmaj}-${lnxrel}.src.rpm"
1070 rpmfile="kernel-source-${lnxmaj}.${lnxrel}.${arch}.rpm"
1073 rpmfile="kernel-source-${lnxmaj}-${lnxrel}.${arch}.rpm"
1076 [ -f "${pathtorpms}/${rpmfile}" ] || continue
1077 KERNELSOURCERPM="${pathtorpms}/${rpmfile}"
1082 [ -f "${KERNELSOURCERPM}" ] || return 255
1085 #unpack and make symlinks for reusing kernel RPM
1089 [ "$pathtorpm" = "" ] && return 255
1090 [ -f "$pathtorpm" ] || return 255
1091 [ -d $TOPDIR/reused ] || mkdir $TOPDIR/reused
1092 pushd $TOPDIR/reused || return 255
1094 rpm2cpio < $pathtorpm | cpio -idc
1095 [ ${PIPESTATUS[0]} -eq 0 ] || return 255
1098 if pushd usr/src/linux-*-obj/${TARGET_ARCH}; then
1099 local smptypes="$SMPTYPES"
1100 [ "$RPMSMPTYPE" = "" ] || smptypes=$RPMSMPTYPE
1101 ( ! $PATCHLESS ) && [ ! "$KERNCONFSMPTYPE" = "" ] && smptypes="$KERNCONFSMPTYPE"
1103 for cursmptype in $smptypes; do
1104 [ "$cursmptype" = "''" ] && continue
1105 [ -d $cursmptype ] && smptype=$cursmptype
1106 [ -d $smptype ] && break
1110 if [ "${smptype}" = "" ]; then
1112 return 255 # cannot detect smp type
1114 if pushd usr/src/linux-*-obj/${TARGET_ARCH}/$smptype/include2; then
1115 local base=$(readlink asm)
1116 if [ ! -d "/${base}/" ]; then
1118 base=$(basename "$base")
1119 if pushd ../../../../linux-*/include; then
1122 [ -d "$lsrc/${base}" ] && ln -s $lsrc/${base} asm
1126 read a b < <(echo $(pwd)/usr/src/linux-*)
1127 if [[ $a == $(pwd)/* && $b = $(pwd)/* ]]; then
1128 cp -f $a/include/linux/config.h $b/${TARGET_ARCH}/$smptype/include/linux/
1129 cp $b/${TARGET_ARCH}/$smptype/.config $a/
1130 [ -f "$b/${TARGET_ARCH}/$smptype/.config" ] && KERNELRPMCONFIG="$b/${TARGET_ARCH}/$smptype/.config"
1131 cp $b/${TARGET_ARCH}/$smptype/.kernelrelease $a/
1132 [ -f "$b/${TARGET_ARCH}/$smptype/.kernelrelease" ] && KERNELRPMRELEASE="$b/${TARGET_ARCH}/$smptype/.kernelrelease"
1134 LINUXOBJ=$b/${TARGET_ARCH}/$smptype
1135 # local fname=$(basename $kernel_rpm)
1136 # KERNELRPMSDIR=${kernel_rpm%$fname}
1140 [ "$LINUX" = "" ] && return 255
1141 [ -d "$LINUX" ] || return 255
1144 #build linux kernel rpm
1147 pushd $LINUX || return 255
1148 make binrpm-pkg || ( popd ; return 255 )
1150 [ -f ".version" ] && addlnxrel="-$(cat .version)"
1153 for arch in $TARGET_ARCHS_ALL; do
1154 [ -f "/usr/src/rpm/RPMS/$arch/kernel-$lnxmaj.${lnxrel}${addlnxrel}.$arch.rpm" ] && \
1155 KERNELRPM="/usr/src/rpm/RPMS/$arch/kernel-$lnxmaj.${lnxrel}${addlnxrel}.$arch.rpm" && \
1157 [ -f "/usr/src/packages/RPMS/$arch/kernel-$lnxmaj.${lnxrel}${addlnxrel}.$arch.rpm" ] && \
1158 KERNELRPM="/usr/src/packages/RPMS/$arch/kernel-$lnxmaj.${lnxrel}${addlnxrel}.$arch.rpm" && \
1161 [ "$KERNELRPM" = "" ] || return
1169 local nocopykernel=$2
1170 pushd $LINUX || fatal 1 "Kernel source not found"
1171 [ "$nofullmake" = "nofullmake" ] || make mrproper
1172 [ "$nofullmake" = "nofullmake" ] || rm -f rpm-release
1173 # [ "$nocopykernel" = "copyrpmkernel" ] || rm -f localversion-*
1174 [ "$nocopykernel" = "copykernel" ] && [ -f "$CONFIG_FILE" ] && cp $CONFIG_FILE .config
1175 if [ "$nocopykernel" = "copyrpmkernel" ]; then
1176 [ -f "$KERNELRPMCONFIG" ] && cp $KERNELRPMCONFIG .config
1177 if [ -f "$KERNELRPMRELEASE" ]; then
1178 cp $KERNELRPMRELEASE .
1180 sed -e "s/^EXTRAVERSION\s\+=\s\+.*$/EXTRAVERSION = -${lnxrel}/" < Makefile > Makefile.new
1181 [ -f "Makefile.new" ] && mv Makefile.new Makefile
1184 [ -f ".config" ] || ( popd ; echo "Cannot find .config file"; return 255 )
1185 make oldconfig || ( popd ; return 255 )
1186 make include/linux/version.h
1187 if [ ! "$nofullmake" = "nofullmake" ]; then
1188 make || ( popd ; return 255 )
1194 #build patchless lustre
1195 patchless_build_sequence()
1197 #try to build from kernel-devel RPM (RHEL)
1200 local rpmfound=false
1201 local buildsuccess=false
1202 local storeforreuse=false
1203 if [ "$KERNELRPMSBASE" = "" ] || [ ! -d "$KERNELRPMSBASE" ]; then
1206 [ -d $TOPDIR/reused ] && rm -rf $TOPDIR/reused
1208 local delimiter=${EXTRA_VERSION_DELIMITER:-"-"}
1209 # default to source type -source and special case below
1217 unpack_linux_rpm $type $delimiter && rpmfound=true
1218 ( $rpmfound ) && build_lustre && buildsuccess=true && find_linux_source_rpm
1220 if $buildsuccess; then
1221 [ -d "RPMS/${TARGET_ARCH}" ] && [ -f "$KERNELRPM" ] && \
1222 cp "$KERNELRPM" RPMS/${TARGET_ARCH}/
1223 [ -d "RPMS/${TARGET_ARCH}" ] && [ -f "$KERNELSOURCERPM" ] && \
1224 cp "$KERNELSOURCERPM" RPMS/${TARGET_ARCH}/
1225 KERNELCOMPILEDIR="$LINUX"
1226 if $storeforreuse; then
1227 store_for_reuse || echo "Cannot store for feature reuse"
1231 elif ! $rpmfound; then
1232 echo "COULD NOT FIND VENDOR -devel or -source RPM for $DISTRO/$TARGET_ARCH: $lnxmaj-$lnxrel in $KERNELRPMSBASE"
1235 echo "Patchless build failed."
1240 #check timestamp value. should bi 14-digits string
1244 local timestampnodig=$(echo $invalue | sed -e s/[0-9]*//g)
1245 [ "$timestampnodig" = "" ] || return 255
1246 local timestamplength="${#invalue}"
1247 [ $timestamplength -eq 14 ] || return 255
1250 # get list of suitable directories with potential reused staff
1251 get_reuse_dir_list()
1254 local reusedkernelmasknew=$2
1255 local buildtimestamp=
1257 local sourcelastdate=$(get_last_source_date)
1258 for buildtimestamp in $(ls "$REUSEBUILD/" 2>&1); do
1259 [ -d "$REUSEBUILD/$buildtimestamp" ] || continue
1260 check_timestamp "$buildtimestamp" || continue
1261 local buildtimestampstr=$(echo $buildtimestamp | \
1262 sed -e "s^\(....\)\(..\)\(..\)\(..\)\(..\)\(..\)^\1-\2-\3 \4:\5:\6 GMT^g")
1263 local buildtimestampepoch=$(date --date="$buildtimestampstr" +%s )
1264 #check for suitable date
1265 if ! $PATCHLESS; then
1266 [ $buildtimestampepoch -ge $sourcelastdate ] || continue
1268 #check for suitable version
1269 if [ "$rpmonly" = "rpmonly" ]; then
1270 local reusedkernelprefix="kernel-lustre-"
1271 ( $PATCHLESS ) && reusedkernelprefix=
1272 local rpmmask="${reusedkernelprefix}${REUSEDKERNELMASK}"
1273 [ "$reusedkernelmasknew" = "" ] || rpmmask="$reusedkernelmasknew"
1274 [ -f $REUSEBUILD/$buildtimestamp/${rpmmask}.rpm ] && \
1275 dirsforreuse="$dirsforreuse $REUSEBUILD/$buildtimestamp"
1277 local rpmmask="$REUSEDKERNELMASK"
1278 [ "$reusedkernelmasknew" = "" ] || rpmmask="$reusedkernelmasknew"
1279 pushd $REUSEBUILD/$buildtimestamp/linux-${rpmmask} > /dev/null 2>&1 || continue
1281 dirsforreuse="$dirsforreuse $curdir"
1285 echo "$dirsforreuse"
1288 #try to reuse old RPM
1289 build_sequence_rpm_reuse()
1292 [ "$REUSERPM" = "" ] && [ "$REUSEBUILD" = "" ] && return 255
1294 if ! [ "$REUSEBUILD" = "" ] && [ -d "$REUSEBUILD" ]; then #try to reuse RPM
1295 local REUSEDKERNELMASKnew=$(echo $REUSEDKERNELMASK | sed -e "s/^[^0-9]*//")
1296 REUSEDKERNELMASKnew="kernel-lustre-source-${REUSEDKERNELMASKnew}"
1297 local dirsforreuse="$(get_reuse_dir_list rpmonly $REUSEDKERNELMASKnew)"
1298 local buildsuccess=false
1300 for curdir in $(echo $dirsforreuse); do
1301 [ -d "$curdir" ] || continue
1302 local reusedkernelprefix="kernel-lustre-"
1303 local reusedkernelrpm=
1304 [ -f ${curdir}/${reusedkernelprefix}${REUSEDKERNELMASK}.rpm ] && \
1305 reusedkernelrpm=$(ls ${curdir}/${reusedkernelprefix}${REUSEDKERNELMASK}.rpm | head -1 )
1306 [ -f "$reusedkernelrpm" ] || continue
1308 local reusedkernelsourcerpm=
1309 [ -f ${curdir}/${REUSEDKERNELMASKnew}.rpm ] && \
1310 reusedkernelsourcerpm=$(ls ${curdir}/${REUSEDKERNELMASKnew}.rpm | head -1 )
1311 [ -f "$reusedkernelsourcerpm" ] || continue
1313 [ -d $TOPDIR/reused ] && rm -rf $TOPDIR/reused
1314 reuse_kernel_rpm "$reusedkernelsourcerpm" && build_linux nofullmake copyrpmkernel && build_lustre && buildsuccess=true
1315 ( $buildsuccess ) || continue
1316 if ( ! $NORPM ) && ( ! $PATCHLESS ) ; then
1317 [ -f "$reusedkernelrpm" ] && \
1318 cp -f "$reusedkernelrpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1
1320 [ -f "$reusedkernelsourcerpm" ] && \
1321 cp -f "$reusedkernelsourcerpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1 && \
1322 touch RPMS/${TARGET_ARCH}/kernel_was_reused
1330 #try to reuse old BUILD dir
1331 build_sequence_reuse()
1334 [ "$REUSERPM" = "" ] && [ "$REUSEBUILD" = "" ] && return 255
1336 if [ ! "$REUSEBUILD" = "" ] && [ -d "$REUSEBUILD" ]; then #try to reuse old kernel build directory
1337 local dirsforreuse="$(get_reuse_dir_list)"
1338 local buildsuccess=false
1340 local REUSEDKERNELMASKnew=$(echo $REUSEDKERNELMASK | sed -e "s/^[^0-9]*//")
1341 for curdir in $(echo $dirsforreuse); do
1342 local reusedkernelrpm=
1343 local reusedkernelsourcerpm=
1344 [ -d "$curdir" ] || continue
1345 local reusedkernelprefix="kernel-lustre-"
1346 ( $PATCHLESS ) && reusedkernelprefix=
1347 [ -f ${curdir}/../${reusedkernelprefix}${REUSEDKERNELMASK}.rpm ] && \
1348 reusedkernelrpm=$(ls ${curdir}/../${reusedkernelprefix}${REUSEDKERNELMASK}.rpm | head -1 )
1349 reusedkernelprefix="kernel-lustre-source-"
1350 [ -f ${curdir}/../${reusedkernelprefix}${REUSEDKERNELMASKnew}.rpm ] && \
1351 reusedkernelsourcerpm=$(ls ${curdir}/../${reusedkernelprefix}${REUSEDKERNELMASKnew}.rpm | head -1 )
1352 if ! ( $NORPM ) && ! [ -f "$reusedkernelrpm" ]; then #kernel rpm not found. Build all
1355 if ! ( $NORPM ) && ! [ -f "$reusedkernelsourcerpm" ]; then #kernel source rpm not found. Build all
1359 build_lustre || continue
1362 if ( ! $NORPM ) && ( ! $PATCHLESS ) ; then
1363 [ -f "$reusedkernelrpm" ] && \
1364 cp -f "$reusedkernelrpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1 && \
1365 touch RPMS/${TARGET_ARCH}/kernel_was_reused
1366 [ -f "$reusedkernelsourcerpm" ] && \
1367 cp -f "$reusedkernelsourcerpm" RPMS/${TARGET_ARCH}/ > /dev/null 2>&1
1378 if (( $DO_SRC )) ; then
1384 prep_kernel_build || return 255
1385 clean_lustre || return 255
1387 build_kernel || return 255
1390 [ -r ~/.lbuildrc ] && . ~/.lbuildrc
1392 options=$(getopt -o d:D:h -l kerneltree:,distro:,kernelrpm:,reusebuild:,patchless,ldiskfs,ccache,reuse:,norpm,disable-datestamp,external-patches:,timestamp:,extraversion:,kerneldir:,linux:,lustre:,nodownload,nosrc,publish,release,src,stage:,tag:,target:,target-archs:,with-linux: -- "$@")
1394 if [ $? != 0 ] ; then
1398 eval set -- "$options"
1436 --linux | --with-linux)
1511 --disable-datestamp)
1518 CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-liblustre --enable-liblustre-tests"
1522 usage 1 "Unrecognized option: $1"
1532 EXTRA_VERSION_DELIMITER=${EXTRA_VERSION_DELIMITER:-"-"}
1536 patchless_build_sequence && build_success=true
1537 elif [ -z "$LINUX" ] ; then
1538 [ "$DISTRO" = "sles9" ] && build_sequence_rpm_reuse && build_success=true
1539 if ! $build_success; then
1540 build_sequence_reuse && build_success=true
1541 if ! $build_success; then
1542 build_sequence && build_success=true
1543 if $build_success; then
1544 store_for_reuse || echo "Cannot store for feature reuse"
1551 ( $build_success ) || fatal 1 "Cannot build lustre"