Whamcloud - gitweb
LU-5710 all: second batch of corrected typos and grammar errors
[fs/lustre-release.git] / contrib / lbuild / lbuild
index 7c0dac1..186118b 100755 (executable)
@@ -60,9 +60,6 @@ EXTRA_VERSION=
 STAGEDIR=
 TMPDIR=${TMPDIR:-"/var/tmp"}
 TIMESTAMP=
 STAGEDIR=
 TMPDIR=${TMPDIR:-"/var/tmp"}
 TIMESTAMP=
-# this is a dir to try reuse old kernel RPMs in (although, it seems to be
-# unused in any real manner
-REUSERPM=
 # this is the dir that should be used to store reuse products
 REUSEBUILD=
 # should cached products be used or force rebuilding?
 # this is the dir that should be used to store reuse products
 REUSEBUILD=
 # should cached products be used or force rebuilding?
@@ -74,6 +71,7 @@ OSDLDISKFSRPM=true
 OSDZFSRPM=false
 SMPTYPES="smp bigsmp default ''"
 PATCHLESS=false
 OSDZFSRPM=false
 SMPTYPES="smp bigsmp default ''"
 PATCHLESS=false
+WITH_ZFS=""
 XEN=false
 LINUXOBJ=
 DISTRO=
 XEN=false
 LINUXOBJ=
 DISTRO=
@@ -137,9 +135,6 @@ Usage: ${0##*/} [OPTION]... [-- <lustre configure options>]
   --timestamp=TIMESTAMP
     Date of building lustre in format YYYYMMDDhhmmss
 
   --timestamp=TIMESTAMP
     Date of building lustre in format YYYYMMDDhhmmss
 
-  --reuserpm=DIR
-    Try to reuse old kernel RPMs from DIR
-
   --reusebuild=DIR
     Try to reuse old kernel builds from DIR
 
   --reusebuild=DIR
     Try to reuse old kernel builds from DIR
 
@@ -174,7 +169,7 @@ Usage: ${0##*/} [OPTION]... [-- <lustre configure options>]
     Path to an existing lustre source tarball to use.
 
   --nodownload
     Path to an existing lustre source tarball to use.
 
   --nodownload
-    Do not try to download a kernel from downloads.lustre.org
+    Do not try to download a kernel from downloads.hpdd.intel.com
 
   --nosrc
     Do not build a .src.rpm, a full kernel patch, or a patched kernel
 
   --nosrc
     Do not build a .src.rpm, a full kernel patch, or a patched kernel
@@ -193,6 +188,9 @@ Usage: ${0##*/} [OPTION]... [-- <lustre configure options>]
     Specifies that the files generated do not include timestamps, and
     that this is an official release.
 
     Specifies that the files generated do not include timestamps, and
     that this is an official release.
 
+  --disable-zfs
+    Build Lustre without ZFS.
+
   --src
     Build a .src.rpm, a full kernel patch, and a patched kernel tarball.
 
   --src
     Build a .src.rpm, a full kernel patch, and a patched kernel tarball.
 
@@ -267,11 +265,10 @@ check_options() {
 
     if [ -z "$DISTRO" ] ; then
         DISTRO=$(autodetect_distro)
 
     if [ -z "$DISTRO" ] ; then
         DISTRO=$(autodetect_distro)
-        # remove minor version only for rhel and oel
-        [[ $DISTRO =~ "el-" ]] && DISTRO=${DISTRO%%.*}
         # remove separator
         DISTRO=${DISTRO/-/}
     fi
         # remove separator
         DISTRO=${DISTRO/-/}
     fi
+    DISTROMAJ=${DISTRO%%.*}
 
     [ -z "$TARGET" ] && TARGET=$(autodetect_target "$DISTRO")
 
 
     [ -z "$TARGET" ] && TARGET=$(autodetect_target "$DISTRO")
 
@@ -288,7 +285,10 @@ check_options() {
     fi
 
     case $TARGET in
     fi
 
     case $TARGET in
-        2.6-rhel6)
+        3.10-rhel7)
+            CANONICAL_TARGET="rhel7"
+            ;;
+        2.6-rhel6*)
             CANONICAL_TARGET="rhel6"
             ;;
         2.6-rhel5)
             CANONICAL_TARGET="rhel6"
             ;;
         2.6-rhel5)
@@ -435,7 +435,7 @@ download_srpm() {
     if $force || [ ! -r "$KERNELDIR/$srpm" ] ||
        [ ! -s "$KERNELDIR/$srpm" ]; then
         if $DOWNLOAD; then
     if $force || [ ! -r "$KERNELDIR/$srpm" ] ||
        [ ! -s "$KERNELDIR/$srpm" ]; then
         if $DOWNLOAD; then
-            local location="http://downloads.lustre.org/public/kernels/$target/old"
+            local location="https://downloads.hpdd.intel.com/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)
             # get the location from a distro specific method if it exists
             if type -p kernel_srpm_location; then
                 location=$(kernel_srpm_location)
@@ -445,11 +445,11 @@ download_srpm() {
                [ ! -s "$KERNELDIR/$srpm" ]; then
                 rm -f $KERNELDIR/$srpm
                 # punt to a distro specific method if it exists
                [ ! -s "$KERNELDIR/$srpm" ]; then
                 rm -f $KERNELDIR/$srpm
                 # punt to a distro specific method if it exists
-                if ! type -p download_srpm-$DISTRO; then
+                if ! type -p download_srpm-$DISTROMAJ; then
                     fatal 1 "Could not download target $target's kernel SRPM $srpm from $location."
                 else
                     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."
+                    if ! download_srpm-$DISTROMAJ "$target" "$srpm" "$force"; then
+                        fatal 1 "Could not download target $target's kernel SRPM $srpm using download_srpm-$DISTROMAJ."
                     fi
                 fi
             fi
                     fi
                 fi
             fi
@@ -551,22 +551,21 @@ download_ofed() {
         OFED_BASE_VERSION=${OFED_VERSION%.*}
     fi
 
         OFED_BASE_VERSION=${OFED_VERSION%.*}
     fi
 
-    local location="http://www.openfabrics.org/downloads/OFED/ofed-${OFED_BASE_VERSION}/"
+    local location="https://www.openfabrics.org/downloads/OFED/ofed-${OFED_BASE_VERSION}/"
 
     if [[ $OFED_VERSION = *-[rR][cC][0-9] ]]; then
         local Mmv
         Mmv=${OFED_VERSION%%-[rR][cC][0-9]}
 
     if [[ $OFED_VERSION = *-[rR][cC][0-9] ]]; then
         local Mmv
         Mmv=${OFED_VERSION%%-[rR][cC][0-9]}
-        location="http://www.openfabrics.org/downloads/OFED/ofed-${Mmv}/"
+        location="https://www.openfabrics.org/downloads/OFED/ofed-${Mmv}/"
     fi
 
     if [[ $OFED_VERSION = daily-* ]]; then
     fi
 
     if [[ $OFED_VERSION = daily-* ]]; then
-        local Mmv daily
-        OFED_VERSION=${OFED_VERSION/daily-/}
-        Mmv=${OFED_VERSION%%-*}
+        local Mmv
+        Mmv=${OFED_VERSION/daily-/}
         daily=${OFED_VERSION##$Mmv-}
         daily=${OFED_VERSION##$Mmv-}
-        location="http://www.openfabrics.org/downloads/OFED/ofed-${Mmv}-daily/"
+        location="https://www.openfabrics.org/downloads/OFED/ofed-${Mmv}-daily/"
         # find the filename for the version for the date specified
         # find the filename for the version for the date specified
-        OFED_VERSION=$(curl -s "$location" | sed -nre "/${daily}-/s/.*href=\"OFED-(${Mmv//./\\.}-${daily}-[0-9]{4,4}).tgz.*$/\1/p" | tail -1)
+        OFED_VERSION=$(curl -s "$location" | sed -nre "/${Mmv}-/s/.*href=\"OFED-(${Mmv}-[0-9]{8,8}-[0-9]{4,4}).tgz.*$/\1/p" | tail -1)
         if [ -z "$OFED_VERSION" ]; then
             fatal 1 "Could not determine the filename of the OFED snapshot for ${daily}"
         fi
         if [ -z "$OFED_VERSION" ]; then
             fatal 1 "Could not determine the filename of the OFED snapshot for ${daily}"
         fi
@@ -599,8 +598,12 @@ parse_mpss_info() {
     for url in $urls; do
         local ver2=""
         local ver3=""
     for url in $urls; do
         local ver2=""
         local ver3=""
+        # Try to match with MPSS 3.3 package
+        if [[ $url =~ mpss-[0-9].[0-9](.[0-9]*)?-linux.tar ]]; then
+            ver3=${url##*mpss-}
+            ver3=${ver3%%-linux.tar}
         # Try to match with MPSS 3.x or 3.x.x distro package
         # Try to match with MPSS 3.x or 3.x.x distro package
-        if [[ $url =~ mpss-[0-9].[0-9](.[0-9]*)?-$distro.tar ]]; then
+        elif [[ $url =~ mpss-[0-9].[0-9](.[0-9]*)?-$distro.tar ]]; then
             ver3=${url##*mpss-}
             ver3=${ver3%%-$distro.tar}
         # Try to match with MPSS 3.x or 3.x.x source package
             ver3=${url##*mpss-}
             ver3=${ver3%%-$distro.tar}
         # Try to match with MPSS 3.x or 3.x.x source package
@@ -618,15 +621,10 @@ parse_mpss_info() {
         fi
 
         if [ -n "$ver3" ]; then
         fi
 
         if [ -n "$ver3" ]; then
-            # Check for MPSS 3.x or MPSS 3.x.x
-            if [[ $ver3 =~ [0-9].[0-9].[0-9]* ]]; then
-                ver3="${ver3}-0"
-            else
-                ver3="${ver3}.0-0"
-            fi
+            ver3="${ver3}-0"
             if [ -z "$build" ]; then
                 res3="$ver3"
             if [ -z "$build" ]; then
                 res3="$ver3"
-            elif [ "$build" = "$ver3" ]; then
+            elif [ "${build%%-*}" = "${ver3%%-*}" ]; then
                 res3="$res3 $url"
             fi
         elif [ -n "$ver2" ]; then
                 res3="$res3 $url"
             fi
         elif [ -n "$ver2" ]; then
@@ -647,24 +645,8 @@ parse_mpss_info() {
             echo "$res2"
         fi
     elif [ "${build%%.*}" = "3" ]; then
             echo "$res2"
         fi
     elif [ "${build%%.*}" = "3" ]; then
-        local ver=${build%%-*}
-        local bid=${build##*-}
-        if [ $bid -eq 0 ]; then
-            # return URLs from MPSS info file
-            echo "$res3"
-        else
-            # Check for MPSS 3.x or MPSS 3.x.x
-            if [ ${ver##*.} -eq 0 ]; then
-                ver=${ver%.*}
-            fi
-            # return URLs from internal site with MPSS builds
-            # kernel sources:
-            echo "${MPSS_BUILDS:-"http://mic-bld.pdx.intel.com/release"}/$ver/$bid/release/knightscorner/package/mpss-src-$ver.tar"
-            # kernel configs:
-            echo "${MPSS_BUILDS:-"http://mic-bld.pdx.intel.com/release"}/$ver/$bid/release/knightscorner/package/mpss-$ver-k1om.tar"
-            # OFED headers:
-            echo "${MPSS_BUILDS:-"http://mic-bld.pdx.intel.com/release"}/$ver/$bid/release/knightscorner/package/mpss-$ver-$distro.tar"
-        fi
+        # return URLs from MPSS info file
+        echo "$res3"
     else
         # return URLs from MPSS info file
         echo "$res2"
     else
         # return URLs from MPSS info file
         echo "$res2"
@@ -686,15 +668,12 @@ download_mpss() {
     local force="${2:-false}"
     local urls=$(parse_mpss_info "$file" ${MPSS_VERSION} ${MPSS_DISTRO})
 
     local force="${2:-false}"
     local urls=$(parse_mpss_info "$file" ${MPSS_VERSION} ${MPSS_DISTRO})
 
-    [ -z "$urls" ] && fatal 1 "Could not determine the URLs of MPSS $MPSS_VERSION"
-
-    # force re-download if build number is zero
-    [[ $MPSS_VERSION = [0-9].[0-9].[0-9]*-0 ]] && force=true
+    [ -z "$urls" ] && return 0
 
     local url
     local i=0
     for url in $urls; do
 
     local url
     local i=0
     for url in $urls; do
-        file="$KERNELTREE/mpss_src-${MPSS_VERSION}-${MPSS_DISTRO}-part$i.tar"
+        file="$KERNELTREE/mpss_src-${MPSS_VER}-${MPSS_BLD}-${MPSS_DISTRO}-part$i.tar"
         download_file "$url" "$file" "$force"
         i=$((i+1))
     done
         download_file "$url" "$file" "$force"
         i=$((i+1))
     done
@@ -731,7 +710,7 @@ load_target() {
     #       go away and the target just specify the $RPMSMPTYPE
     [ -z "$RPMSMPTYPE" ] && set_rpm_smp_type
 
     #       go away and the target just specify the $RPMSMPTYPE
     [ -z "$RPMSMPTYPE" ] && set_rpm_smp_type
 
-    # CC might have been overwriten in TARGET_FILE
+    # CC might have been overwritten in TARGET_FILE
     if [[ $CC != ccache\ * ]] && which "$CCACHE" &>/dev/null; then
         export CCACHE && export CC="ccache $CC"
     fi
     if [[ $CC != ccache\ * ]] && which "$CCACHE" &>/dev/null; then
         export CCACHE && export CC="ccache $CC"
     fi
@@ -803,18 +782,19 @@ load_target() {
 tarflags() {
     local file="$1"
 
 tarflags() {
     local file="$1"
 
+    echo -n '--wildcards '
     case "$file" in
         '')
             fatal 1 "tarflags(): File name argument missing."
             ;;
         *.tar.gz | *.tgz)
     case "$file" in
         '')
             fatal 1 "tarflags(): File name argument missing."
             ;;
         *.tar.gz | *.tgz)
-            echo 'zxf'
+            echo '-zxf'
             ;;
         *.tar.bz2)
             ;;
         *.tar.bz2)
-            echo 'jxf'
+            echo '-jxf'
             ;;
         *.tar)
             ;;
         *.tar)
-            echo 'xf'
+            echo '-xf'
             ;;
         *)
             fatal 1 "tarflags(): Unrecognized tar extension in file: $1"
             ;;
         *)
             fatal 1 "tarflags(): Unrecognized tar extension in file: $1"
@@ -853,51 +833,51 @@ unpack_mpss() {
 
     [ -d mpss ] && return 0
 
 
     [ -d mpss ] && return 0
 
-    if [ "${MPSS_VERSION%%.*}" = "3" ]; then
-        local ver=${MPSS_VERSION%%-*}
+    if [ "$MPSS_MAJ" = "3" ]; then
         local file
         local i
         local file
         local i
-        # Check for MPSS 3.x or MPSS 3.x.x
-        if [ ${ver##*.} -eq 0 ]; then
-            ver=${ver%.*}
-        fi
         for i in $(seq 0 9); do
         for i in $(seq 0 9); do
-            file="$KERNELTREE/mpss_src-${MPSS_VERSION}-${MPSS_DISTRO}-part$i.tar"
+            file="$KERNELTREE/mpss_src-${MPSS_VER}-${MPSS_BLD}-${MPSS_DISTRO}-part$i.tar"
             if [ -r "$file" ]; then
                 untar "$file" \
             if [ -r "$file" ]; then
                 untar "$file" \
-                    "mpss-$ver/*/linux-*.tar.bz2" \
-                    "mpss-$ver/*/kernel-dev-*.rpm" \
-                    "mpss-$ver/*/ofed-driver-*-devel-*.rpm"
+                    "mpss-$MPSS_VER/*/linux-*.tar.bz2" \
+                    "mpss-$MPSS_VER/*/kernel-dev-*.rpm" \
+                    "mpss-$MPSS_VER/*/ofed-driver-devel-*.rpm" \
+                    "mpss-$MPSS_VER/*/ofed-driver-*-devel-*.rpm"
             fi
         done
         # Extract kernel configs
             fi
         done
         # Extract kernel configs
-        file=$(find mpss-$ver -type f -path "*/kernel-dev-*.rpm")
+        file=$(find mpss-$MPSS_VER -type f -path "*/kernel-dev-*.rpm" -print -quit)
         if ! rpm2cpio "$file" | cpio -idm; then
             echo "Error extracting MPSS kernel configs"
             return 1
         fi
         # Unpack kernel sources
         if ! rpm2cpio "$file" | cpio -idm; then
             echo "Error extracting MPSS kernel configs"
             return 1
         fi
         # Unpack kernel sources
-        file=$(find mpss-$ver -type f -path "*/linux-*.tar.bz2")
+        file=$(find mpss-$MPSS_VER -type f -path "*/linux-*.tar.bz2" -print -quit)
         if ! untar "$file"; then
             echo "Error unpacking MPSS kernel sources"
             return 1
         fi
         # Extract OFED headers
         if ! untar "$file"; then
             echo "Error unpacking MPSS kernel sources"
             return 1
         fi
         # Extract OFED headers
-        file=$(find mpss-$ver -type f -path "*/ofed-driver-*-devel-*.rpm")
+        file=$(find mpss-$MPSS_VER -type f -path "*/ofed-driver-*-devel-*.rpm" -print -quit)
         if ! rpm2cpio "$file" | cpio -idm; then
         if ! rpm2cpio "$file" | cpio -idm; then
-            echo "Error extracting MPSS OFED headers"
-            return 1
+            # Name was changed in MPSS 3.3
+            file=$(find mpss-$MPSS_VER -type f -path "*/ofed-driver-devel-*.rpm" -print -quit)
+            if ! rpm2cpio "$file" | cpio -idm; then
+                echo "Error extracting MPSS OFED headers"
+                return 1
+            fi
         fi
         # Remove unpacked archives to save space
         fi
         # Remove unpacked archives to save space
-        rm -rf mpss-$ver
+        rm -rf mpss-$MPSS_VER
         # Make link to MPSS kernel sources
         ln -sf linux-* mpss
     else
         # Make link to MPSS kernel sources
         ln -sf linux-* mpss
     else
-        local dir="mpss-${MPSS_VERSION}-${MPSS_DISTRO%%-*}"
+        local dir="mpss-${MPSS_VER}-${MPSS_BLD}-${MPSS_DISTRO%%-*}"
 
         mkdir $dir || return 255
         pushd $dir >/dev/null || return 255
 
         mkdir $dir || return 255
         pushd $dir >/dev/null || return 255
-        if ! untar "$KERNELTREE/mpss_src-${MPSS_VERSION}-${MPSS_DISTRO}-part0.tar" "*/gpl/*full_src*"; then
+        if ! untar "$KERNELTREE/mpss_src-${MPSS_VER}-${MPSS_BLD}-${MPSS_DISTRO}-part0.tar" "*/gpl/*full_src*"; then
             popd >/dev/null
             rm -rf $dir
             echo "Error unpacking MPSS tarball 1"
             popd >/dev/null
             rm -rf $dir
             echo "Error unpacking MPSS tarball 1"
@@ -961,18 +941,17 @@ build_lustre() {
 
     pushd lustre >/dev/null
 
 
     pushd lustre >/dev/null
 
+    if ! build_lustre_dkms; then
+        popd >/dev/null # pushd lustre
+        return 255
+    fi
+
     echo "Building Lustre RPMs for: $BUILD_ARCHS..."
     local targets arch
     for arch in $BUILD_ARCHS; do
         targets="--target $arch $targets"
     done
 
     echo "Building Lustre RPMs for: $BUILD_ARCHS..."
     local targets arch
     for arch in $BUILD_ARCHS; do
         targets="--target $arch $targets"
     done
 
-    local confoptions=""
-
-    if $PATCHLESS; then
-        confoptions="$confoptions --disable-server"
-    fi
-
     local rpmbuildopt='-tb'
     if $NORPM; then
         rpmbuildopt='-tc'
     local rpmbuildopt='-tb'
     if $NORPM; then
         rpmbuildopt='-tc'
@@ -983,7 +962,7 @@ build_lustre() {
     # These are required prior to the building of lustre server. Client does
     # not require spl/zfs. Use !PATCHLESS to indicate server which follows the
     # line above so is at least consistant.
     # These are required prior to the building of lustre server. Client does
     # not require spl/zfs. Use !PATCHLESS to indicate server which follows the
     # line above so is at least consistant.
-    if [ $PATCHLESS == false ] && [ "x$ZFSNOTSUPPORTED" == "x" ]; then
+    if [ $PATCHLESS == false ] && [ "x$WITH_ZFS" == "x" ]; then
         if ! build_spl_zfs; then
             popd >/dev/null # pushd lustre
             return 255
         if ! build_spl_zfs; then
             popd >/dev/null # pushd lustre
             return 255
@@ -1017,7 +996,7 @@ build_lustre() {
     fi
 
     RPMBUILD_DEFS="$RPMBUILD_DEFS ${FIND_REQUIRES:+--define \"__find_requires $FIND_REQUIRES\"}"
     fi
 
     RPMBUILD_DEFS="$RPMBUILD_DEFS ${FIND_REQUIRES:+--define \"__find_requires $FIND_REQUIRES\"}"
-    RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"configure_args $confoptions ${CONFIGURE_FLAGS}\""
+    RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"configure_args ${CONFIGURE_FLAGS}\""
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"kdir $linux\""
     RPMBUILD_DEFS="$RPMBUILD_DEFS ${linuxobj:+--define \"kobjdir $linuxobj\"}"
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"_tmppath $TMPDIR\""
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"kdir $linux\""
     RPMBUILD_DEFS="$RPMBUILD_DEFS ${linuxobj:+--define \"kobjdir $linuxobj\"}"
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"_tmppath $TMPDIR\""
@@ -1038,6 +1017,16 @@ build_lustre() {
 
 }
 
 
 }
 
+build_lustre_dkms() {
+    [ -n "$MPSS_VERSION" ] && return 0
+    local ver=$(eval echo  $(awk '/LUSTRE_VERSION_STRING/ {print $3}'  lustre/include/lustre_ver.h))
+    echo "Building Lustre DKMS RPMs for: $BUILD_ARCHS..."
+    ./configure --enable-dist || return 255
+    $RPMBUILD --define="_topdir $TOPDIR" -bs lustre-dkms.spec || return 255
+    $RPMBUILD --rebuild --define="_topdir $TOPDIR" $TOPDIR/SRPMS/lustre-dkms-$ver-*.src.rpm || return 255
+    return 0
+}
+
 ###
 # build_spl_zfs
 #
 ###
 # build_spl_zfs
 #
@@ -1058,8 +1047,8 @@ build_spl_zfs() {
     # The spl/zfs spec files expect RPM_BUILD_ROOT to point to the root of the
     # destination for the rpms
     export RPM_BUILD_ROOT=$TOPDIR
     # The spl/zfs spec files expect RPM_BUILD_ROOT to point to the root of the
     # destination for the rpms
     export RPM_BUILD_ROOT=$TOPDIR
-    SPLZFSVER=${SPLZFSVER:-0.6.2}
-    SPLZFSTAG=${SPLZFSTAG:-upstream-master}
+    SPLZFSVER=${SPLZFSVER:-0.6.3-1.2}
+    SPLZFSTAG=${SPLZFSTAG:-}
 
     # The files expect a kver to be set to the kernel version .
     local kver=$(find_linux_release)
 
     # The files expect a kver to be set to the kernel version .
     local kver=$(find_linux_release)
@@ -1157,7 +1146,7 @@ build_spl_zfs() {
             # https://github.com/zfsonlinux/zfs/issues/2329
             # and it looks like it could be one day soon:
             # https://github.com/zfsonlinux/zfs/pull/2341
             # https://github.com/zfsonlinux/zfs/issues/2329
             # and it looks like it could be one day soon:
             # https://github.com/zfsonlinux/zfs/pull/2341
-            local devel_rpms=$(ls -1 $TOPDIR/RPMS/*/{$pkg-devel,$pkg-$SPLZFSVER}-*.rpm)
+            local devel_rpms=$(ls -1 $TOPDIR/RPMS/*/{$pkg-devel,$pkg-$SPLZFSVER,lib*}-*.rpm)
             for rpm in $devel_rpms; do
                 rpm2cpio $rpm | cpio -id
             done
             for rpm in $devel_rpms; do
                 rpm2cpio $rpm | cpio -id
             done
@@ -1177,7 +1166,7 @@ build_spl_zfs() {
 prepare_mpss() {
 
     pushd mpss >/dev/null || return 255
 prepare_mpss() {
 
     pushd mpss >/dev/null || return 255
-    if [ "${MPSS_VERSION%%.*}" = "3" ]; then
+    if [ "$MPSS_MAJ" = "3" ]; then
         cp -f ../boot/config-* .config
         if ! make ARCH=k1om silentoldconfig ; then
             popd >/dev/null
         cp -f ../boot/config-* .config
         if ! make ARCH=k1om silentoldconfig ; then
             popd >/dev/null
@@ -1286,8 +1275,8 @@ unpack_linux_devel_rpm() {
     fi
 
     # call a distro specific hook, if available
     fi
 
     # call a distro specific hook, if available
-    if type -p unpack_linux_devel_rpm-$DISTRO; then
-        if ! unpack_linux_devel_rpm-$DISTRO "$kernelrpm"; then
+    if type -p unpack_linux_devel_rpm-$DISTROMAJ; then
+        if ! unpack_linux_devel_rpm-$DISTROMAJ "$kernelrpm"; then
             return 255
         fi
     fi
             return 255
         fi
     fi
@@ -1312,13 +1301,13 @@ build_kernel_ib() {
         K_SRC="KSRC"
     fi
 
         K_SRC="KSRC"
     fi
 
-    local OFED_CORE="--with-core-mod --with-ipoib-mod --with-sdp-mod --with-user_mad-mod --with-user_access-mod --with-addr_trans-mod"
-    local OFED_HARDWARE="--with-mthca-mod --with-mlx4-mod --with-mlx4_en-mod --with-cxgb3-mod --with-nes-mod"
+    local OFED_CORE="--with-core-mod --with-ipoib-mod --with-user_mad-mod --with-user_access-mod --with-addr_trans-mod"
+    local OFED_HARDWARE="--with-mthca-mod --with-mlx4-mod --with-mlx4_en-mod --with-cxgb3-mod --with-nes-mod --with-qib-mod"
 
     if compare_version $OFED_VERSION 3.0; then
        OFED_CORE="$OFED_CORE --with-madeye-mod --with-rds-mod"
     else
 
     if compare_version $OFED_VERSION 3.0; then
        OFED_CORE="$OFED_CORE --with-madeye-mod --with-rds-mod"
     else
-       OFED_HARDWARE="$OFED_HARDWARE --with-cxgb4-mod"
+       OFED_HARDWARE="$OFED_HARDWARE --with-mlx5-mod --with-cxgb4-mod --with-ocrdma-mod --with-qib-mod"
     fi
 
     # some I/B drivers are architecture dependent and kernel-ib's configure
     fi
 
     # some I/B drivers are architecture dependent and kernel-ib's configure
@@ -1549,8 +1538,11 @@ build_kernel_with_srpm() {
     if $USE_BUILD_CACHE && [ -n "$REUSEBUILD" ]; then
         local REUSE_SIGNATURE=$({ echo -en $release_str;
                                   echo $BUILD_GEN;
     if $USE_BUILD_CACHE && [ -n "$REUSEBUILD" ]; then
         local REUSE_SIGNATURE=$({ echo -en $release_str;
                                   echo $BUILD_GEN;
-                                  cat $CONFIG_FILE $TARGET_FILE $FULL_PATCH;
-                                  cat $LBUILD_DIR/lbuild $LBUILD_DIR/lbuild-${DISTRO}; } |
+                                  cat "$CONFIG_FILE";
+                                  cat "$TARGET_FILE";
+                                  cat "$FULL_PATCH";
+                                  cat "$LBUILD_DIR/lbuild";
+                                  cat "$LBUILD_DIR/lbuild-$DISTROMAJ"; } |
                                 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
                                 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
@@ -1644,9 +1636,9 @@ build_ofed() {
         # 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
         # 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
+        if type -p build_ofed-$DISTROMAJ; then
             local ofed_location
             local ofed_location
-            ofed_location=$(build_ofed-${DISTRO} ${STDOUT})
+            ofed_location=$(build_ofed-$DISTROMAJ ${STDOUT})
             local rc=${PIPESTATUS[0]}
             CONFIGURE_FLAGS="--with-o2ib=${ofed_location} ${CONFIGURE_FLAGS}"
             return $rc
             local rc=${PIPESTATUS[0]}
             CONFIGURE_FLAGS="--with-o2ib=${ofed_location} ${CONFIGURE_FLAGS}"
             return $rc
@@ -1667,8 +1659,8 @@ build_ofed() {
                                   echo "$(find_linux_release;
                                   echo "$BUILD_GEN")";
                                   cat "${linux}/include/linux/autoconf.h";
                                   echo "$(find_linux_release;
                                   echo "$BUILD_GEN")";
                                   cat "${linux}/include/linux/autoconf.h";
-                                  cat "$LBUILD_DIR/lbuild" ;
-                                  cat "$LBUILD_DIR/lbuild-${DISTRO}"; } |
+                                  cat "$LBUILD_DIR/lbuild";
+                                  cat "$LBUILD_DIR/lbuild-$DISTROMAJ"; } |
                                 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
                                 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
@@ -1768,7 +1760,7 @@ build_with_srpm() {
         # client build
         local kernelrpm
         if ! kernelrpm=$(find_linux_rpm "-$DEVEL_KERNEL_TYPE"); then
         # client build
         local kernelrpm
         if ! kernelrpm=$(find_linux_rpm "-$DEVEL_KERNEL_TYPE"); then
-            fatal 1 "Could not find the kernel-$DEVEL_KERNEL_TYPE RPM in ${KERNELRPMSBASE}/${lnxmaj}/${DISTRO}"
+            fatal 1 "Could not find the kernel-$DEVEL_KERNEL_TYPE RPM in $KERNELRPMSBASE/$lnxmaj/$DISTROMAJ"
         fi
         if ! lnxrel="$lnxrel" unpack_linux_devel_rpm "$kernelrpm" "-"; then
             fatal 1 "Could not find the Linux tree in $kernelrpm"
         fi
         if ! lnxrel="$lnxrel" unpack_linux_devel_rpm "$kernelrpm" "-"; then
             fatal 1 "Could not find the Linux tree in $kernelrpm"
@@ -1968,7 +1960,7 @@ set -E
 
 [ -r ~/.lbuildrc ] && . ~/.lbuildrc
 
 
 [ -r ~/.lbuildrc ] && . ~/.lbuildrc
 
-options=$(getopt -o D:h -l kerneltree:,distro:,kernelrpm:,reusebuild:,patchless,ldiskfs,ccache,reuse:,norpm,disable-datestamp,external-patches:,timestamp:,extraversion:,kerneldir:,linux:,lustre:,nodownload,nosrc,noiokit,ofed-version:,mpss-version:,publish,release,set-value:,src,stage:,tag:,target:,target-archs:,with-linux:,xen -- "$@")
+options=$(getopt -o D:h -l kerneltree:,distro:,kernelrpm:,reusebuild:,patchless,ccache,norpm,external-patches:,timestamp:,extraversion:,kerneldir:,linux:,lustre:,nodownload,nosrc,noiokit,ofed-version:,mpss-version:,publish,disable-zfs,release,set-value:,src,stage:,target:,target-archs:,with-linux:,xen -- "$@")
 
 if [ $? != 0 ]; then
     usage 1
 
 if [ $? != 0 ]; then
     usage 1
@@ -2020,10 +2012,6 @@ while [ "$1" ]; do
             DISTRO=$2
             shift 2
             ;;
             DISTRO=$2
             shift 2
             ;;
-        --reuserpm)
-            REUSERPM=$2
-            shift 2
-            ;;
         --reusebuild)
             if ! REUSEBUILD=$(canon_path "$2"); then
                 fatal 1 "Could not determine the canonical location of $2"
         --reusebuild)
             if ! REUSEBUILD=$(canon_path "$2"); then
                 fatal 1 "Could not determine the canonical location of $2"
@@ -2034,10 +2022,6 @@ while [ "$1" ]; do
             NORPM=true
             shift
             ;;
             NORPM=true
             shift
             ;;
-        --ldiskfs)
-           echo "WARNING: \"--ldiskfs\" is deprecated" > 2
-            shift
-            ;;
         --noiokit)
             IOKITRPM=false
             shift
         --noiokit)
             IOKITRPM=false
             shift
@@ -2081,6 +2065,10 @@ while [ "$1" ]; do
         --publish)
             shift
             ;;
         --publish)
             shift
             ;;
+       --disable-zfs)
+           WITH_ZFS="no"
+           shift
+           ;;
         --release)
             RELEASE=true
             shift
         --release)
             RELEASE=true
             shift
@@ -2093,10 +2081,6 @@ while [ "$1" ]; do
             STAGEDIR=$2
             shift 2
             ;;
             STAGEDIR=$2
             shift 2
             ;;
-        --tag)
-            shift 2
-            echo "WARNING: \"--tag\" is deprecated" > 2
-            ;;
         --target)
             TARGET=$2
             shift 2
         --target)
             TARGET=$2
             shift 2
@@ -2135,8 +2119,7 @@ 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)?
 
 # 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)
-VERSION=$(sed -ne '/^VERSION =/s/.*= *//p' lustre/META)
+BUILDID=$(sed -n -e 's/^BUILDID = //p' lustre/META)
 
 load_target
 
 
 load_target
 
@@ -2153,19 +2136,23 @@ if [ -n "$MPSS_VERSION" ]; then
 
     if [ "$MPSS_VERSION" = "last" ]; then
         MPSS_VERSION=$(parse_mpss_info "$MPSS_INFO" "" ${MPSS_DISTRO})
 
     if [ "$MPSS_VERSION" = "last" ]; then
         MPSS_VERSION=$(parse_mpss_info "$MPSS_INFO" "" ${MPSS_DISTRO})
-        [ -z "$MPSS_VERSION" ] && fatal 1 "Could not determine the last MPSS version"
-    elif [[ $MPSS_VERSION != [0-9].[0-9].[0-9]*-[0-9]* ]]; then
-        fatal 1 "Incorrect MPSS version $MPSS_VERSION"
+        [ -z "$MPSS_VERSION" ] &&
+            fatal 1 "Could not determine the last MPSS version"
     fi
 
     fi
 
+    MPSS_MAJ=${MPSS_VERSION%%.*}
+    MPSS_VER=${MPSS_VERSION%%-*}
+    MPSS_BLD=${MPSS_VERSION##*-}
+    [ "$MPSS_VER" = "$MPSS_BLD" ] && MPSS_BLD=0
+
     download_mpss "$MPSS_INFO"
     [ -r "$MPSS_INFO" ] && rm -f "$MPSS_INFO"
     download_mpss "$MPSS_INFO"
     [ -r "$MPSS_INFO" ] && rm -f "$MPSS_INFO"
-    echo "Building with MPSS $MPSS_VERSION"
+    echo "Building with MPSS $MPSS_VER-$MPSS_BLD"
     unpack_mpss  || fatal 1 "Error unpacking MPSS tarballs"
     prepare_mpss || fatal 1 "Error preparing MPSS for kernel modules build"
 
     if [ -z "$MPSS_OFED" ]; then
     unpack_mpss  || fatal 1 "Error unpacking MPSS tarballs"
     prepare_mpss || fatal 1 "Error preparing MPSS for kernel modules build"
 
     if [ -z "$MPSS_OFED" ]; then
-        MPSS_OFED=$(find $PWD -type f -path "*/ofed-driver-*/Module.symvers")
+        MPSS_OFED=$(find $PWD -type f -path "*/ofed-driver*/Module.symvers" -print -quit)
         if [ -n "$MPSS_OFED" ]; then
             MPSS_OFED="--with-o2ib=$(dirname $MPSS_OFED)"
         else
         if [ -n "$MPSS_OFED" ]; then
             MPSS_OFED="--with-o2ib=$(dirname $MPSS_OFED)"
         else
@@ -2177,22 +2164,24 @@ if [ -n "$MPSS_VERSION" ]; then
     PATCHLESS=true
     IOKITRPM=false
     LDISKFSRPM=false
     PATCHLESS=true
     IOKITRPM=false
     LDISKFSRPM=false
-    ZFSNOTSUPPORTED="yes"
+    WITH_ZFS="no"
 
     # define variables for cross compilation:
     CROSS_SUFFIX="-mic"
 
     # define variables for cross compilation:
     CROSS_SUFFIX="-mic"
-    if [ "${MPSS_VERSION%%.*}" = "3" ]; then
+    if [ "$MPSS_MAJ" = "3" ]; then
         CC_TARGET_ARCH=k1om-mpss-linux
         LINUX="$TOPDIR/mpss"
         CC_TARGET_ARCH=k1om-mpss-linux
         LINUX="$TOPDIR/mpss"
+        RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"cross_requires /bin/sh\""
     else
         CC_TARGET_ARCH=x86_64-k1om-linux
         LINUX="$TOPDIR/mpss/card/kernel"
     else
         CC_TARGET_ARCH=x86_64-k1om-linux
         LINUX="$TOPDIR/mpss/card/kernel"
-        RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"cross_requires intel-mic-gpl = ${MPSS_VERSION%%-*}\""
+        RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"cross_requires intel-mic-gpl = $MPSS_VER\""
     fi
     fi
+    LUSTRE_VERSION=$(sed -n -e 's/^VERSION = //p' lustre/META)
     CONFIGURE_FLAGS="$CONFIGURE_FLAGS $MPSS_OFED --host=$CC_TARGET_ARCH --build=x86_64-pc-linux"
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"post_script build/gen_filelist.sh\""
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"make_args ARCH=k1om CROSS_COMPILE=${CC_TARGET_ARCH}-\""
     CONFIGURE_FLAGS="$CONFIGURE_FLAGS $MPSS_OFED --host=$CC_TARGET_ARCH --build=x86_64-pc-linux"
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"post_script build/gen_filelist.sh\""
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"make_args ARCH=k1om CROSS_COMPILE=${CC_TARGET_ARCH}-\""
-    RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"cross_path ${CROSS_PATH:=/opt/lustre/${VERSION}/${CC_TARGET_ARCH}}\""
+    RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"cross_path ${CROSS_PATH:=/opt/lustre/${LUSTRE_VERSION}/${CC_TARGET_ARCH}}\""
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"rootdir %{cross_path}\""
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"_prefix %{cross_path}/usr\""
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"_mandir %{_prefix}/share/man\""
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"rootdir %{cross_path}\""
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"_prefix %{cross_path}/usr\""
     RPMBUILD_DEFS="$RPMBUILD_DEFS --define \"_mandir %{_prefix}/share/man\""
@@ -2216,10 +2205,10 @@ if [ -n "$LINUX" ]; then
         fatal 1 "error building OFED"
     build_lustre "$LINUX" "$LINUXOBJ"
 else
         fatal 1 "error building OFED"
     build_lustre "$LINUX" "$LINUXOBJ"
 else
-    if [ ! -f "${LBUILD_DIR}/lbuild-$DISTRO" ]; then
-        fatal 1 "${LBUILD_DIR}/lbuild-$DISTRO not found"
+    if [ ! -f "${LBUILD_DIR}/lbuild-$DISTROMAJ" ]; then
+        fatal 1 "${LBUILD_DIR}/lbuild-$DISTROMAJ not found"
     fi
     fi
-    source ${LBUILD_DIR}/lbuild-$DISTRO
+    source ${LBUILD_DIR}/lbuild-$DISTROMAJ
     build_with_srpm || fatal 1 "Failed to build_with_srpm"
 fi
 
     build_with_srpm || fatal 1 "Failed to build_with_srpm"
 fi