X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=build%2Flbuild;h=20ed08bb677f16fc161a9096a563226014abb333;hp=b14ebb732f0bb613feaaa59184dc813f462eb9ab;hb=8fd9914d125989b924fc6c0e1d50dfd193a73438;hpb=864c1cef52710ce1980f32592bd1af364c6a75ed diff --git a/build/lbuild b/build/lbuild index b14ebb7..20ed08b 100755 --- a/build/lbuild +++ b/build/lbuild @@ -17,10 +17,18 @@ shopt -s extdebug # include the exit_traps library . ${0%/lbuild}/exit_traps.sh +. ${0%/lbuild}/funcs.sh # our children should die when we do push_exit_trap "kill -INT -$$ || true" kill_children +# increment this if you have made a change that should force a new kernel +# to build built +#BUILD_GEN=1 +#BUILD_GEN=2 # bz19952: remove -lustre tag from kernel RPM names +#BUILD_GEN=3 # bz19975: enable the building of src.rpms by default +BUILD_GEN=4 # bz22281: use the git hash in the kernel extra version + TOPDIR=$PWD # CVSROOT is inherited from the environment @@ -37,14 +45,14 @@ DOWNLOAD=true TAG= CANONICAL_TARGET= TARGET= -TARGET_ARCH=$(uname -m) -TARGET_ARCHS= -TARGET_ARCHS_ALL=$TARGET_ARCH +TARGET_ARCH="$(uname -m)" +# change default behavior to only build for the current arch +TARGET_ARCHS="$TARGET_ARCH" +TARGET_ARCHS_ALL="$TARGET_ARCH" [ "$TARGET_ARCH" = "i686" ] && TARGET_ARCHS_ALL="i686 i586 i386" CONFIGURE_FLAGS= EXTERNAL_PATCHES= EXTRA_VERSION= -LUSTRE_EXTRA_VERSION= STAGEDIR= TMPDIR=${TMPDIR:-"/var/tmp"} TIMESTAMP= @@ -110,26 +118,6 @@ readlink() { fi } -cleanup() { - - true -} - -error() { - local msg="$1" - - [ -n "$msg" ] && echo -e "\n${0##*/}: $msg" >&3 - -} - -fatal() { - - cleanup - error "$2" - exit $1 - -} - usage() { cat <] @@ -237,6 +225,9 @@ Usage: ${0##*/} [OPTION]... [-- ] --xen Builds a Xen domX kernel. + --set-value + Set's a variable to a given value. + EOF # list_targets @@ -244,7 +235,22 @@ EOF fatal "$1" "$2" } -# canonicalize a relative path +# canonicalize a relative path to a file +canon_filepath() { + local PATH="$1" + + if [ ! -f "$PATH" ]; then + return 1 + fi + + local FILE=${PATH##*/} + local DIR=${PATH%/*} + + echo $(canon_path "$DIR")/$FILE + return 0 +} + +# canonicalize a relative path to a dir canon_path() { local PATH="$1" @@ -272,6 +278,8 @@ check_options() { usage 1 "A branch/tag name must be specified with --tag when not building from a tarball." fi + [ -z "$DISTRO" ] && DISTRO=$(autodetect_distro) + if [ -z "$LINUX" ]; then [ "$KERNELDIR" -o "$KERNELTREE" ] || \ usage 1 "A kernel directory must be specified with --kerneldir or --kerneltree." @@ -284,13 +292,16 @@ check_options() { usage 1 "When building a snapshot, a tag name must be used." fi - [ "$TARGET" ] || usage 1 "A target must be specified with --target." + [ "$TARGET" ] || TARGET=$(autodetect_target "$DISTRO") # TARGET_FILE="$TOPDIR/lustre/kernel_patches/targets/$TARGET.target" # [ -r "$TARGET_FILE" ] || \ # usage 1 "Target '$TARGET' was not found." fi case $TARGET in + 2.6-rhel6) + CANONICAL_TARGET="rhel6" + ;; 2.6-rhel5) CANONICAL_TARGET="rhel5" ;; @@ -367,39 +378,34 @@ check_options() { fi fi - [ -z "$DISTRO" ] && DISTRO=$(autodetect_distro) - return 0 } -# autodetect used Distro -autodetect_distro() { - - local name - local version - - if [ -f /etc/SuSE-release ]; then - name=sles - version=$(grep ^VERSION /etc/SuSE-release) - version=${version#*= } - elif [ -f /etc/redhat-release ]; then - name=$(head -1 /etc/redhat-release) - version=$(echo "$distroname" | - sed -e 's/^[^0-9.]*//g' | sed -e 's/[ \.].*//') - fi - if [ -z "$name" -o -z "$version" ]; then - fatal 1 "I don't know how to determine distro type/version.\nEither update autodetect_distro() or use the --distro argument" - fi +uniqify() { - echo ${name}${version} - return 0 + echo $(echo "$*" | xargs -n 1 | sort -u) } -uniqify() { +fetch_url() { + local url="$1" + local target="$2" - echo $(echo "$*" | xargs -n 1 | sort -u) + local rc=0 + if which wget >/dev/null 2>&1; then + if ! wget -nv "$url" -O "$target"; then + rc=${PIPESTATUS[0]} + fi + elif which curl >/dev/null 2>&1; then + if ! curl -L -s -o "$target" "$url"; then + rc=${PIPESTATUS[0]} + fi + else + fatal 1 "Could not find either wget or curl to fetch URLs." + fi + + return $rc } @@ -412,11 +418,22 @@ download_srpm() { [ ! -s "$KERNELDIR/$srpm" ]; then if $DOWNLOAD; then local location="http://downloads.lustre.org/public/kernels/$target/old" + # get the location from a distro specific method if it exists + if type -p kernel_srpm_location; then + location=$(kernel_srpm_location) + fi echo "Downloading $location/$srpm..." - if ! wget -nv "$location/$srpm" -O "$KERNELDIR/$srpm" 2>&1 || + if ! fetch_url "$location/$srpm" "$KERNELDIR/$srpm" 2>&1 || [ ! -s "$KERNELDIR/$srpm" ]; then rm -f $KERNELDIR/$srpm - fatal 1 "Could not download target $target's kernel SRPM $srpm from $location." + # punt to a distro specific method if it exists + if ! type -p download_srpm-$DISTRO; then + fatal 1 "Could not download target $target's kernel SRPM $srpm from $location." + else + if ! download_srpm-$DISTRO "$target" "$srpm" "$force"; then + fatal 1 "Could not download target $target's kernel SRPM $srpm using download_srpm-$DISTRO." + fi + fi fi else fatal 1 "$srpm not found in directory $KERNELDIR." @@ -489,7 +506,7 @@ download_file() { # flag others so they don't try to download also push_exit_trap "rm -f $to $semaphore" "download" touch $semaphore - if ! wget -nv "$from" -O "$to" || [ ! -s "$to" ]; then + if ! fetch_url "$from" "$to" || [ ! -s "$to" ]; then # the trap will remove the files via the fatal below fatal 1 "Could not download ${to##*/} from ${from%/*}/." fi @@ -507,6 +524,10 @@ download_file() { download_ofed() { local force="${1:-false}" + if [ -z "$OFED_VERSION" -o "$OFED_VERSION" = "inkernel" ]; then + return 0 + fi + local location="http://www.openfabrics.org/downloads/OFED/ofed-${OFED_VERSION}/" if [[ $OFED_VERSION = daily-* ]]; then @@ -522,10 +543,6 @@ download_ofed() { fi fi - if [ -z "$OFED_VERSION" -o "$OFED_VERSION" = "inkernel" ]; then - return 0 - fi - local file="OFED-${OFED_VERSION}.tgz" download_file "$location/$file" "$KERNELTREE" "$force" @@ -612,7 +629,9 @@ load_target() { if $PATCHLESS || [ -n "$SERIES" ]; then EXTRA_VERSION=$(echo $EXTRA_VERSION | sed -e "s/\(.*_lustre\)\..*/\1/") # EXTRA_VERSION="${EXTRA_VERSION}-${TAG}.${TIMESTAMP}" - EXTRA_VERSION="${EXTRA_VERSION}.${TIMESTAMP}" + if ! $PATCHLESS && [ -n "$BUILDID" ]; then + EXTRA_VERSION="${EXTRA_VERSION}.${BUILDID}" + fi fi fi # EXTRA_VERSION=${EXTRA_VERSION//-/_} @@ -690,7 +709,7 @@ unpack_lustre() { fatal 1 "There was an error checking out Lustre/Portals/Build from CVS." echo "Creating lustre tarball..." sh autogen.sh || fatal 1 "There was an error running autogen.sh." - ./configure --disable-{modules,utils,liblustre,tests,doc} || \ + ./configure --enable-dist || \ fatal 1 "There was an error running ./configure to create makefiles." make dist || fatal 1 "There was an error running 'make dist'." LUSTRE=$PWD/lustre-*.tar.gz @@ -753,46 +772,70 @@ build_lustre() { targets="--target $arch $targets" done - local confoptions="--with-linux=${linux}" + local confoptions="" + if $PATCHLESS; then - confoptions="--with-linux=${linux} --disable-server" - fi - if [ "$linuxobj" != "" ]; then - confoptions="$confoptions --with-linux-obj=${linuxobj}" + confoptions="$confoptions --disable-server" fi - ./configure $confoptions ${CONFIGURE_FLAGS} 2>&1 - if [ "$?" != "0" ]; then - local saved_config="../config.log.$(date +%s)" - cp config.log $saved_config - chmod a+r $saved_config - echo "Saved config.log is at $saved_config" - cat /proc/mounts - ls -l /proc/$$ - pwd - echo "config.log contents:" - cat config.log - popd - return 255 + local rpmbuildopt='-tb' + if $NORPM; then + rpmbuildopt='-tc' + echo NORPM mode. Only compiling. fi - gen_lustre_version + ( $(skeep_ldiskfs_rpm $TAG) ) || { - # hack. Somebody move build/lustre.spec to lustre.spec for b1_6 - local lustre_spec - [ -f lustre.spec ] && lustre_spec=lustre.spec - [ -f build/lustre.spec ] && lustre_spec=build/lustre.spec + pushd ldiskfs > /dev/null || return 255 - [ -f "$lustre_spec" ] && sed \ - -e "s^Release: .*$^Release: $LUSTRE_EXTRA_VERSION^" \ - < $lustre_spec \ - > ../lustre.spec + if ! ./configure --enable-dist; then + echo "failed to configure in ldiskfs" + popd >/dev/null # pushd ldiskfs + popd >/dev/null # pushd lustre + return 255 + fi - local rpmbuildopt='-bb' - if $NORPM; then - rpmbuildopt='-bc' - echo NORPM mode. Only compiling. - fi + if ! make dist 2>&1; then + popd >/dev/null # pushd ldiskfs + popd >/dev/null # pushd lustre + return 255 + fi + + #cp lustre-ldiskfs*.tar.gz $TOPDIR/SOURCES || \ + # fatal 1 "Could not copy lustre-ldiskfs*.tar.gz to $TOPDIR/SOURCES" + + if ! $RPMBUILD $targets $rpmbuildopt lustre-ldiskfs*.tar.gz \ + --define "configure_args $confoptions ${CONFIGURE_FLAGS}" \ + --define "kdir $linux" \ + ${linuxobj:+--define "kobjdir $linuxobj"} \ + --define "_tmppath /var/tmp" \ + --define "_topdir $TOPDIR" 2>&1; then + popd >/dev/null # pushd ldiskfs + popd >/dev/null # pushd lustre + return 255 + fi + + if $DO_SRC; then + if ! $RPMBUILD -ts lustre-ldiskfs*.tar.gz \ + --define "configure_args $confoptions ${CONFIGURE_FLAGS}" \ + --define "kdir $linux" \ + ${linuxobj:+--define "kobjdir $linuxobj"} \ + --define "_tmppath /var/tmp" \ + --define "_topdir $TOPDIR" 2>&1; then + popd >/dev/null # pushd ldiskfs + popd >/dev/null # pushd lustre + return 255 + fi + fi + popd >/dev/null # pushd ldiskfs + + # tell lustre where ldiskfs is + # XXX - pointing to the RPM BUILD dir is a hack. we need to flesh + # out the ldiskfs RPM build so that it builds a + # lustre-ldiskfs-devel RPM and install that and point lustre + # to that instead + confoptions="$confoptions --with-ldiskfs=$(ls -d $TOPDIR/BUILD/lustre-ldiskfs-*)" + } # convert the $PATCHLESS boolean to an empty/not-empty boolean # as silly as this seems, it makes the syntax of the rpmbuild command @@ -808,50 +851,32 @@ build_lustre() { lustre_tests="no" fi - $RPMBUILD $targets $rpmbuildopt ../lustre.spec \ + $RPMBUILD $targets $rpmbuildopt "$LUSTRE" \ ${is_patchless:+--define "lustre_name lustre-client"} \ ${lustre_tests:+--define "build_lustre_tests 0"} \ ${FIND_REQUIRES:+--define "__find_requires $FIND_REQUIRES"} \ --define "configure_args $confoptions ${CONFIGURE_FLAGS}" \ + --define "kdir $linux" \ + ${linuxobj:+--define "kobjdir $linuxobj"} \ --define "_tmppath $TMPDIR" \ --define "_topdir $TOPDIR" 2>&1 || \ fatal 1 "Error building rpms for $BUILD_ARCHS." - popd >/dev/null - ( $(skeep_ldiskfs_rpm $TAG) ) && return - - pushd lustre/ldiskfs || return 255 - make dist 2>&1 - if [ "$?" != "0" ]; then - popd - return 255 - fi - cp lustre-ldiskfs*.tar.gz $TOPDIR/SOURCES - - gen_lustre_version - - local ldiskfs_spec=lustre-ldiskfs.spec - [ -f "$ldiskfs_spec" ] && sed \ - -e "s^Release: .*$^Release: $LUSTRE_EXTRA_VERSION^" \ - < $ldiskfs_spec \ - > ../lustre-ldiskfs.spec - - if ! $RPMBUILD $targets $rpmbuildopt ../lustre-ldiskfs.spec \ - --define "_tmppath /var/tmp" \ - --define "_topdir $TOPDIR" 2>&1; then - popd - return 255 - fi - if $DO_SRC; then - if ! $RPMBUILD -bs ../lustre-ldiskfs.spec \ - --define "_tmppath /var/tmp" \ - --define "_topdir $TOPDIR" 2>&1; then + if ! $RPMBUILD -ts "$LUSTRE" \ + ${is_patchless:+--define "lustre_name lustre-client"} \ + ${lustre_tests:+--define "build_lustre_tests 0"} \ + ${FIND_REQUIRES:+--define "__find_requires $FIND_REQUIRES"} \ + --define "configure_args $confoptions ${CONFIGURE_FLAGS}" \ + --define "kdir $linux" \ + ${linuxobj:+--define "kobjdir $linuxobj"} \ + --define "_tmppath $TMPDIR" \ + --define "_topdir $TOPDIR" 2>&1; then popd return 255 fi fi - popd + popd >/dev/null } @@ -875,33 +900,21 @@ stage() { #check if we need to build separate ldiskfs RPM skeep_ldiskfs_rpm() { - local tag="$1" - - local skip=false - - if ! $LDISKFSRPM; then - skip=true - elif $PATCHLESS; then - skip=true - else - for skiptag in $SKIPLDISKFSRPM; do - [[ $tag == $skiptag ]] && skip=true && break - done - fi - - pushd $TOPDIR/BUILD/lustre-[1-9]* >/dev/null - grep -q '^SERVER_TRUE[ \t]=[ \t]#$' autoMakefile && skip=true - popd >/dev/null - - echo $skip + local tag="$1" -} + local skip=false -#generate LUSTRE_EXTRA_VERSION from EXTRA_VERSION -gen_lustre_version() { + if ! $LDISKFSRPM; then + skip=true + elif $PATCHLESS; then + skip=true + else + for skiptag in $SKIPLDISKFSRPM; do + [[ $tag == $skiptag ]] && skip=true && break + done + fi - LUSTRE_EXTRA_VERSION="${lnxmaj}-${EXTRA_VERSION}${FLAVOR_DELIMITER}${RPMSMPTYPE}" - LUSTRE_EXTRA_VERSION=${LUSTRE_EXTRA_VERSION//-/_} + echo $skip } @@ -945,36 +958,6 @@ find_linux_release() { } -# XXX this needs to be re-written as a wrapper around find_rpm -# or just gotten rid of. :-) -find_linux_rpm() { - local prefix="$1" - - local pathtorpms="${KERNELRPMSBASE}/${lnxmaj}/${DISTRO}" - [ -d $pathtorpms ] || return 255 - - local kernelbinaryrpm rpmfile - local wanted_kernel="${lnxmaj}${lnxmin}-${lnxrel}" - - local arch ret=1 - for arch in $TARGET_ARCHS_ALL; do - local found_rpm="" rpm - for rpm in ${pathtorpms}/${arch}/*.rpm; do - if rpm -q --provides -p "$rpm" 2>&3 | grep -q "kernel${prefix} = $wanted_kernel" 2>&3; then - - found_rpm="$rpm" - ret=0 - break - fi - done - [ -f "$found_rpm" ] && break - done - - echo "$found_rpm" - return $ret - -} - # unpack kernel(/source/devel) RPM # # This function and it's setting of $LINUX and $LINUXOBJ is a total hack that @@ -1083,45 +1066,60 @@ EOF } store_for_reuse() { - local articles="$1" - local module="$2" - local location="$3" - local signature="$4" - local use_links="$5" + local articles="$1" + local module="$2" + local location="$3" + local signature="$4" + local use_links="$5" - local linkflag="" - if $use_links; then - linkflag="l" - fi + local linkflag="" + if $use_links; then + linkflag="l" + fi - location="$location"/"$signature"/"$module" - mkdir -p "$location" - # the cleanup script removes any directory that doesn't have a - # .lastused, so let's try to prevent that as soon as we can - # this solution still slightly racy with the cleanup script - # but the race is a lot tighter now - touch -t 197001010000 "$location/.lastused" - ## use eval/echo here to make sure shell expansions are performed - #if ! cp -a${linkflag} $(eval echo $articles) "$location"; then - local article - for article in $(eval echo $articles); do - if ! cp -a${linkflag} "$article" "$location"; then - error "Failed to copy \"$article\" to \"$location\" in store_for_reuse()" - # rename the cache location so that it's not cached - # product, but is around for analysis - mv "$location"{,-bad-$(date +%s)} || - error "failed to clean up a failed cache attempt" \ - "in \"$location\" -- manual cleanup will be" \ - "necessary" - return 1 - fi - done + local default_iface=$(/sbin/ip route get 192.1.1.1 | sed -ne 's/.* dev \(.*\) * src .*/\1/p') + if [ -z "$default_iface" ]; then + fatal 1 "Failed to determine the default route interface" + fi + local unique_id=$(/sbin/ip addr show dev $default_iface | sed -ne '/ inet /s/ *inet \(.*\)\/.*/\1/p' | head -1) + if [ -z "$unique_id" ]; then + fatal 1 "Failed to determine a unique id from interface $default_interface" + fi - # flag the cache as complete (i.e. in case lbuild was previously - # interrupted while caching) - touch "$location/.lastused" + local finallocation="$location"/"$signature"/"$module" + location="$location"/"$signature-${unique_id}"/"$module" + mkdir -p "$location" + # the cleanup script removes any directory that doesn't have a + # .lastused, so let's try to prevent that as soon as we can + # this solution still slightly racy with the cleanup script + # but the race is a lot tighter now + touch -t 197001010000 "$location/.lastused" + ## use eval/echo here to make sure shell expansions are performed + #if ! cp -a${linkflag} $(eval echo $articles) "$location"; then + local article + for article in $(eval echo $articles); do + if ! cp -a${linkflag} "$article" "$location"; then + error "Failed to copy \"$article\" to \"$location\" in store_for_reuse()" + # rename the cache location so that it's not cached + # product, but is around for analysis + mv "$location"{,-bad-$(date +%s)} || + error "failed to clean up a failed cache attempt" \ + "in \"$location\" -- manual cleanup will be" \ + "necessary" + return 1 + fi + done - return 0 + # flag the cache as complete (i.e. in case lbuild was previously + # interrupted while caching) + touch "$location/.lastused" + + # put the temporary location into the final location + # (last one wins) + mkdir -p "${finallocation%/*}" + mv "$location" "$finallocation" + rmdir "${location%/*}" + return 0 } @@ -1174,7 +1172,6 @@ reuse() { find $dir -type f | xargs ln -t $dest/RPMS/${dir##*/} -s done - fi return 0 else @@ -1193,42 +1190,6 @@ basearch() { } -# -# in a given directory, find the first rpm matching given requirements -# -find_rpm() { - local dir="$1" - local match_type="$2" - local match="$3" - - pushd "$dir" > /dev/null || \ - fatal 1 "Unable to chdir to directory \"$dir\" in find_rpm()" - - local file - for file in $(ls *.rpm); do - if [ ! -f "$file" ]; then - continue - fi - case "$match_type" in - provides) - # match is any valid ERE (i.e. given to egrep) match - if rpm -q --provides -p "$file" 2>&3 | egrep -q "$match"; then - echo "$file" - popd >/dev/null - return 0 - fi - ;; - *) - popd >/dev/null - fatal 1 "Unknown match type \"$match_type\" given to find_rpm()" - ;; - esac - done - - popd >/dev/null - return 1 -} - build_kernel_with_srpm() { local outfd=$1 @@ -1330,11 +1291,30 @@ build_ofed() { local linux="$1" local ofed_version="$2" - # before lustre, build kernel-ib - if [ -z "$ofed_version" -o "$ofed_version" = "inkernel" ]; then + # if an ofed version is given, then it means use OFED proper, + # not any vendor specific "inkernel" version + if [ -z "$ofed_version" ]; then return 0 fi + if [ "$ofed_version" = "inkernel" ]; then + # see if there is a distro specific override for this and use + # that if it exists + # XXX we need to better integrate a distro specific override with + # the rest of this function so that all of the reuse cache + # stuff is leveraged given that 80% of this function is reuse + if type -p build_ofed-${DISTRO}; then + local ofed_location + ofed_location=$(build_ofed-${DISTRO} ${STDOUT}) + local rc=${PIPESTATUS[0]} + CONFIGURE_FLAGS="--with-o2ib=${ofed_location} ${CONFIGURE_FLAGS}" + return $rc + else + return 0 + fi + fi + + # build kernel-ib if $USE_BUILD_CACHE && [ -n "$REUSEBUILD" ]; then local REUSE_SIGNATURE=$({ echo "$ofed_version"; echo "$(find_linux_release ${linux})"; @@ -1395,7 +1375,9 @@ build_ofed() { ofed_version=$(echo $ofed_version | sed -re 's/-(20[0-9]{6,6}-[0-9]{4,4}|rc[0-9]*)$//') local rpm=$(ls $TOPDIR/RPMS/*/kernel-ib-devel-${ofed_version}-${linuxrelease//-/_}.*.rpm) - rpm2cpio -itv < $rpm | cpio -id + if ! rpm2cpio < $rpm | cpio -id; then + fatal 1 "could not unpack the kernel-ib-devel rpm." + fi CONFIGURE_FLAGS="--with-o2ib=$(pwd)/usr/src/ofa_kernel ${CONFIGURE_FLAGS}" popd >/dev/null @@ -1474,19 +1456,35 @@ EOF # in RPMS/$arch to real files so that that that huge mess of # complication known as LTS can copy them yet somewhere else. # is it any wonder this whole process is so damn so? anyone ever - # heard of hardlinks? it this cool new thing that allows you save + # heard of hardlinks? it's this cool new thing that allows you save # tons of time and space by creating... well you can go read about # them if you have not heard about them yet. # can i say how much the implemenation of all of this really impedes # RPM reuse? - pushd RPMS/$TARGET_ARCH - for file in *; do + local dir + for dir in RPMS/*; do + pushd $dir + for file in $(ls); do if [ -h $file ]; then cp $file foo mv foo $file fi done - popd + popd + done + # also, for i?86, make sure all of the RPMs are in RPMS/$TARGET_ARCH + # as that's where LTS expects to find them + for dir in RPMS/*; do + if [ $dir = RPMS/$TARGET_ARCH ]; then + continue + fi + pushd $dir + local files=$(ls) + if [ -n "$files" ]; then + cp -al $files ../$TARGET_ARCH + fi + popd + done else return 1 fi @@ -1701,7 +1699,9 @@ while [ "$1" ]; do shift 2 ;; --lustre) - LUSTRE=$2 + if ! LUSTRE=$(canon_filepath "$2"); then + fatal 1 "Could not determine the canonical location of $2" + fi shift 2 ;; --nodownload) @@ -1776,6 +1776,10 @@ check_options unpack_lustre +# XXX - should we _always_ get the buildid from the META file? what are the +# other (i.e. non-lustre-tarball use cases of lbuild)? +BUILDID=$(sed -ne '/^BUILDID =/s/.*= *//p' lustre/META) + load_target if [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" ]; then