Whamcloud - gitweb
Branch b1_8
[fs/lustre-release.git] / build / lbuild
index 27163e5..d09899a 100755 (executable)
@@ -16,7 +16,7 @@ RELEASE=false
 #       search through this file (and lbuild.old_school -- but that will
 #       be going away soon) for "-bb" and see how many places
 #       simply don't account for this option
-DO_SRC=false
+DO_SRC=true
 DOWNLOAD=true
 TAG=
 CANONICAL_TARGET=
@@ -46,6 +46,8 @@ XEN=false
 LINUXOBJ=
 DISTRO=
 KERNELTREE=
+# default to not adding -lustre- into the kernel RPM package names
+KERNEL_LUSTRE_NAMING=false
 
 # patchless build
 KERNELRPMSBASE=
@@ -279,6 +281,12 @@ check_options() {
         2.6-sles10)
             CANONICAL_TARGET="sles10-2.6"
             ;;
+        2.6-sles11)
+            CANONICAL_TARGET="sles11"
+            ;;
+        2.6-oel5)
+            CANONICAL_TARGET="oel5"
+            ;;
         hp_pnnl-2.4)
             CANONICAL_TARGET="hp-pnnl-2.4"
             ;;
@@ -367,28 +375,39 @@ uniqify() {
 download_srpm() {
     local target=$1
     local srpm=$2
+    local force="${3:-false}"
 
-    echo "Downloading http://downloads.lustre.org/public/kernels/$target/old/$srpm..."
-    if ! wget -nv "http://downloads.lustre.org/public/kernels/$target/old/$srpm" \
-        -O "$KERNELDIR/$srpm"; then
-        fatal 1 "Could not download target $target's kernel SRPM $srpm from downloads.lustre.org."
+    if $force || [ ! -r "$KERNELDIR/$srpm" ] ||
+       [ ! -s "$KERNELDIR/$srpm" ]; then
+        if $DOWNLOAD; then
+            local location="http://downloads.lustre.org/public/kernels/$target/old"
+            echo "Downloading $location/$srpm..."
+            if ! wget -nv "$location/$srpm" -O "$KERNELDIR/$srpm" ||
+               [ ! -s "$KERNELDIR/$srpm" ]; then
+                rm -f $KERNELDIR/$srpm
+                fatal 1 "Could not download target $target's kernel SRPM" \
+                        "$srpm from $location."
+            fi
+        else
+            fatal 1 "$srpm not found in directory $KERNELDIR."
+        fi
     fi
-    [ -s "$KERNELDIR/$srpm" ] || {
-        rm -rf $KERNELDIR/$srpm
-        fatal 1 "Could not download target $target's kernel SRPM $srpm from downloads.lustre.org."
-    }
 
 }
 
 download_ofed() {
+    local force="${1:-false}"
 
-    if [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" ] && \
-       [ ! -r "$KERNELTREE/OFED-${OFED_VERSION}.tgz" ]; then
+    if [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" ] &&
+       ( $force || [ ! -r "$KERNELTREE/OFED-${OFED_VERSION}.tgz" ] ||
+           [ ! -s "$KERNELTREE/OFED-${OFED_VERSION}.tgz" ] ); then
         if $DOWNLOAD; then
             local location="http://downloads.lustre.org/public/OFED/"
             echo "Downloading $location/OFED-${OFED_VERSION}.tgz..."
             if ! wget -nv "$location/OFED-${OFED_VERSION}.tgz" \
-                -O "$KERNELTREE/OFED-${OFED_VERSION}.tgz"; then
+                -O "$KERNELTREE/OFED-${OFED_VERSION}.tgz" ||
+               [ ! -s "$KERNELTREE/OFED-${OFED_VERSION}.tgz" ]; then
+                rm -f $KERNELTREE/OFED-${OFED_VERSION}.tgz
                 fatal 1 "Could not download OFED-${OFED_VERSION}.tgz" \
                         "from downloads.lustre.org."
             fi
@@ -528,7 +547,9 @@ untar() {
 
 unpack_ofed() {
 
-    untar "$KERNELTREE/OFED-${OFED_VERSION}.tgz" || fatal 1 "Error unpacking OFED tarball"
+    if ! untar "$KERNELTREE/OFED-${OFED_VERSION}.tgz"; then
+        return 1
+    fi
     [ -d OFED ] || ln -sf OFED-[0-9].[0-9]* OFED
 
 }
@@ -626,6 +647,11 @@ build_lustre() {
         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
     fi
@@ -716,6 +742,7 @@ stage() {
     done
 
     cp -v "$LUSTRE" "$STAGEDIR"
+
 }
 
 #check if we need to build separate ldiskfs RPM
@@ -733,6 +760,11 @@ skeep_ldiskfs_rpm() {
                 [[ $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
 
 }
@@ -761,6 +793,10 @@ set_rpm_smp_type() {
         [ $infact_arch == $smp_type ] && RPMSMPTYPE=bigsmp && break
     done
 
+    for smp_type in $DEFAULT_ARCHS; do
+        [ $infact_arch == $smp_type ] && RPMSMPTYPE=default && break
+    done
+
 }
 
 # This function takes a linux source pool and digs out the linux release
@@ -777,6 +813,8 @@ 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 delimiter=${2:-"-"}
@@ -811,7 +849,7 @@ find_linux_rpm() {
 # needs to completely refactored.  It completely ingores that $BUILD_ARCHS may
 # contain a list of arches for which rpmbuild commands (including the one for
 # lustre itself)
-unpack_linux_rpm() {
+unpack_linux_devel_rpm() {
     local kernelrpm="${1}"
     # it's worth noting that neither sles10 nor rhel5 appear to use their
     # extra_version delimiter for the dirname under /usr/src, so we could
@@ -819,17 +857,36 @@ unpack_linux_rpm() {
     local delimiter=${2:-"-"}
 
     [ -f "$kernelrpm" ] || return 255
-    [ -d $TOPDIR/reused ] || mkdir $TOPDIR/reused
+    [ -d $TOPDIR/reused ] || mkdir $TOPDIR/reused || return 255
 
     pushd $TOPDIR/reused || return 255
 
+    if ! rpm2cpio < "$kernelrpm" | cpio -id > /dev/null 2>&1; then
+        return 255
+    fi
+
+    # call a distro specific hook, if available
+    if type -p unpack_linux_devel_rpm-$DISTRO; then
+        unpack_linux_devel_rpm-$DISTRO "$kernelrpm"
+    fi
+
+    popd
+
+    find_linux_devel_paths $TOPDIR/reused
+
+    return 0
+
+}
+
+# XXX - this rhel/sles goop needs abstracting out into the
+#       lbuild-{rhel5,sles10} method files
+find_linux_devel_paths() {
+    local path="$1"
+
     local RC=0
 
-    rpm2cpio < "$kernelrpm" | cpio -id > /dev/null 2>&1
-    if [ ${PIPESTATUS[0]} -eq 0 ]; then
+    pushd $path
         # RHEL-style and SLES-style rpms
-        # XXX - this rhel/sles goop needs abstracting out into the
-        #       lbuild-{rhel5,sles10} method files
         # XXX - until bug 19336 cleans this up, we need to extricate the
         #       ${lnxmin}- from the $lnxrel
         local paths="kernels/${lnxmaj}${lnxmin}${delimiter}${lnxrel}-${TARGET_ARCH} linux-${lnxmaj}${lnxmin}${delimiter}${lnxrel##${lnxmin#.}-}"
@@ -866,9 +923,6 @@ unpack_linux_rpm() {
                 RC=255
             fi
         fi
-    else
-        RC=255
-    fi
     popd
     return $RC
 }
@@ -896,20 +950,12 @@ build_kernel_ib() {
              --define "KVERSION ${LINUXRELEASE}" \
              --define "$K_SRC ${LINUXOBJ:-${LINUX}}" \
              --define "LIB_MOD_DIR /lib/modules/${LINUXRELEASE}/updates" \
-             --define "configure_options --without-quilt --with-core-mod --with-user_mad-mod --with-user_access-mod --with-addr_trans-mod --with-srp-target-mod --with-core-mod --with-mthca-mod --with-mlx4-mod --with-cxgb3-mod --with-nes-mod --with-ipoib-mod --with-sdp-mod --with-srp-mod --without-srp-target-mod --with-rds-mod --with-iser-mod --with-qlgc_vnic-mod --with-madeye-mod $configure_options" ${TOPDIR}/OFED/SRPMS/ofa_kernel-${OFED_VERSION}-ofed${OFED_VERSION}.src.rpm
+             --define "configure_options --without-quilt --with-core-mod --with-user_mad-mod --with-user_access-mod --with-addr_trans-mod --with-srp-target-mod --with-core-mod --with-mthca-mod --with-mlx4-mod --with-mlx4_en-mod --with-cxgb3-mod --with-nes-mod --with-ipoib-mod --with-sdp-mod --with-srp-mod --with-rds-mod --with-iser-mod --with-qlgc_vnic-mod --with-madeye-mod $configure_options" ${TOPDIR}/OFED/SRPMS/ofa_kernel-*.src.rpm
 
     if [ ${PIPESTATUS[0]} != 0 ]; then
         fatal 1 "Error building kernel-ib"
     fi
 
-    pushd "$TOPDIR" >/dev/null
-    rm -rf kernel-ib-devel
-    mkdir kernel-ib-devel
-    cd kernel-ib-devel
-    local rpm=$(ls $TOPDIR/RPMS/*/kernel-ib-devel-${OFED_VERSION}-${LINUXRELEASE//-/_}.*.rpm)
-    rpm2cpio -itv < $rpm | cpio -id
-    CONFIGURE_FLAGS="--with-o2ib=$(pwd)/usr/src/ofa_kernel ${CONFIGURE_FLAGS}"
-    popd >/dev/null
 }
 
 store_for_reuse() {
@@ -926,6 +972,11 @@ store_for_reuse() {
 
         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
@@ -1032,7 +1083,7 @@ find_rpm() {
         fatal 1 "Unable to chdir to directory \"$dir\" in find_rpm()"
 
     local file
-    for file in $(ls); do
+    for file in $(ls *.rpm); do
         if [ ! -f "$file" ]; then
             continue
         fi
@@ -1064,7 +1115,7 @@ build_kernel_with_srpm() {
     # get an md5sum of the kernel patch + config for reuse check
     # XXX really, there needs to be a signature and a CONFIG_FILE per arch
     #     in BUILD_ARCHS
-    local REUSE_SIGNATURE=$(cat $CONFIG_FILE $TARGET_FILE $FULL_PATCH | md5sum | cut -d" " -f1)
+    local REUSE_SIGNATURE=$({ echo $BUILD_GEN; cat $CONFIG_FILE $TARGET_FILE $FULL_PATCH; } | md5sum | cut -d" " -f1)
 
     # see if we can link to the reuse pool
     # XXX - hrm.  i'm not convinced this doesn't belong in the reuse "library"
@@ -1078,29 +1129,23 @@ build_kernel_with_srpm() {
     # the extra version string to use for the kernel (which might be a reused
     # kernel, remember)
     local kernel_extra_version=""
-    if $REUSERPM && reuse kernel "$TOPDIR" "$CAN_LINK_FOR_REUSE" \
-                                 "$REUSE_SIGNATURE"; then
-        # figure out the EXTRA_VERSION of the kernel we are re-using
-        local KERNEL_RPM
-        if ! KERNEL_RPM=$(find_rpm "$TOPDIR/RPMS/$TARGET_ARCH/" provides "^kernel ="); then
-            fatal 1 "Failed to find a kernel RPM in $TOPDIR/RPMS/$TARGET_ARCH/"
-        fi
-        kernel_extra_version=$(rpm -q --queryformat "%{RELEASE}" -p $TOPDIR/RPMS/$TARGET_ARCH/$KERNEL_RPM)
-    else
+    if $REUSERPM && ! reuse kernel "$TOPDIR" "$CAN_LINK_FOR_REUSE" \
+                                   "$REUSE_SIGNATURE"; then
         # nothing cached, build from scratch
         if [ ! -r "$KERNELDIR/$KERNEL_SRPM" ]; then
-            download_srpm "$CANONICAL_TARGET" "$KERNEL_SRPM"
+            download_srpm "$CANONICAL_TARGET" "$KERNEL_SRPM" >&2
         fi
 
-        rpm -ivh $KERNELDIR/$KERNEL_SRPM --define "_topdir $TOPDIR" >&2 || {
-       # should we clean this up or leave it for analysis?
+        if ! rpm -ivh $KERNELDIR/$KERNEL_SRPM \
+                  --define "_topdir $TOPDIR" >&2; then
+            # should we clean this up or leave it for analysis?
             #rm -rf $RPMTOPDIR
             fatal 1 "Error installing kernel SRPM."
-        }
+        fi
 
         # put the Lustre kernel patch into the RPM build tree
         cp $FULL_PATCH $TOPDIR/SOURCES/linux-${lnxmaj}-lustre.patch
-        prepare_and_build_srpm
+        prepare_and_build_srpm >&2
 
         # store the resulting kernel RPM build tree for future use
         if ! store_for_reuse "$TOPDIR/{SPECS,SOURCES,BUILD,SRPMS,RPMS}" \
@@ -1110,9 +1155,15 @@ build_kernel_with_srpm() {
             echo "unknown"
             return 1
         fi
-        kernel_extra_version=$EXTRA_VERSION
     fi # build reuse
 
+    # figure out the EXTRA_VERSION of the kernel we built or are re-using
+    local KERNEL_RPM
+    if ! KERNEL_RPM=$(find_rpm "$TOPDIR/RPMS/$TARGET_ARCH/" provides "^kernel ="); then
+        fatal 1 "Failed to find a kernel RPM in $TOPDIR/RPMS/$TARGET_ARCH/"
+    fi
+    kernel_extra_version=$(rpm -q --queryformat "%{RELEASE}" -p $TOPDIR/RPMS/$TARGET_ARCH/$KERNEL_RPM)
+
     # should now have the following RPMs
     # $TOPDIR/RPMS/$arch/kernel-lustre-2.6.18-53.1.21.el5_lustre.1.6.5.1.$arch.rpm
     # $TOPDIR/RPMS/$arch/kernel-lustre-devel-2.6.18-53.1.21.el5_lustre.1.6.5.1.$arch.rpm
@@ -1136,14 +1187,14 @@ build_with_srpm() {
         for arch in $BUILD_ARCHS; do
 
             local kernel_devel_rpm
-            if ! kernel_devel_rpm=$(find_rpm "$TOPDIR/RPMS/$arch/" provides "^$(devel_kernel_name true) ="); then
+            if ! kernel_devel_rpm=$(find_rpm "$TOPDIR/RPMS/$arch/" provides "^$(devel_kernel_name $KERNEL_LUSTRE_NAMING) ="); then
                 fatal 1 "Failed to find a kernel development RPM in $TOPDIR/RPMS/$arch/"
             fi
 
             # install the -devel RPM in preparation for the lustre build
             # note that the EXTRA_VERSION_DELIMITER is *NOT* used in the
             # version of the directory name under /usr/src
-            if ! lnxrel="$kernel_extra_version" unpack_linux_rpm \
+            if ! lnxrel="$kernel_extra_version" unpack_linux_devel_rpm \
                            "$TOPDIR/RPMS/$arch/$kernel_devel_rpm" "-"; then
                 fatal 1 "Could not find the Linux tree in $TOPDIR/RPMS/$arch/$kernel_devel_rpm"
             fi
@@ -1155,7 +1206,7 @@ build_with_srpm() {
         if ! kernelrpm=$(find_linux_rpm "-$DEVEL_KERNEL_TYPE" ${EXTRA_VERSION_DELIMITER:-"-"}); then
             fatal 1 "Could not find the kernel-$DEVEL_KERNEL_TYPE RPM in ${KERNELRPMSBASE}/${lnxmaj}/${DISTRO}"
         fi
-        if ! lnxrel="$lnxrel" unpack_linux_rpm "$kernelrpm" "-"; then
+        if ! lnxrel="$lnxrel" unpack_linux_devel_rpm "$kernelrpm" "-"; then
             fatal 1 "Could not find the Linux tree in $kernelrpm"
         fi
     fi
@@ -1196,6 +1247,19 @@ build_with_srpm() {
             # put the stuff we stashed away back
             mv_back
         fi
+
+        pushd "$TOPDIR" >/dev/null
+        rm -rf kernel-ib-devel
+        mkdir kernel-ib-devel
+        cd kernel-ib-devel
+        # the actual ofed RPMs don't have the -rc$n or -$date string appened that
+        # might be present on the file
+        local 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
+        CONFIGURE_FLAGS="--with-o2ib=$(pwd)/usr/src/ofa_kernel ${CONFIGURE_FLAGS}"
+        popd >/dev/null
     fi
 
     # now build Lustre
@@ -1217,17 +1281,23 @@ build_with_srpm() {
                 fi
             done
         popd
+    else
+        return 1
     fi
+
 }
 
 create_rpmbuild_dirs() {
 
-    if [ ! -d RPMS ]; then
-        mkdir -p RPMS
-        for arch in $BUILD_ARCHS; do
-            mkdir RPMS/$arch
-        done
-    fi
+    [ -d RPMS ] || mkdir RPMS
+    for arch in $BUILD_ARCHS; do
+        if [[ $arch = i?86 ]]; then
+            # some stupidity in the sles11 kernel spec requires an RPMS/i386
+            # even if the target arch is i686
+            [ -d RPMS/i386 ] || mkdir RPMS/i386
+        fi
+        [ -d RPMS/$arch ] || mkdir RPMS/$arch
+    done
     [ -d BUILD ] || mkdir BUILD
     [ -d SOURCES ] || mkdir SOURCES
     [ -d SPECS ] || mkdir SPECS
@@ -1464,7 +1534,7 @@ EXTRA_VERSION_DELIMITER=${EXTRA_VERSION_DELIMITER:-"-"}
 
 if [ -n "$OFED_VERSION" -a "$OFED_VERSION" != "inkernel" ]; then
     download_ofed
-    unpack_ofed
+    unpack_ofed || fatal 1 "Error unpacking OFED tarball"
 fi
 
 # make sure the RPM build environment is set up