Whamcloud - gitweb
LU-13178 build: Update ZFS version to 0.8.3
[fs/lustre-release.git] / contrib / lbuild / lbuild
index 8be0cfa..5e19901 100755 (executable)
@@ -29,12 +29,7 @@ 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
 
 # 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
-#BUILD_GEN=5   # TT-107: don't cache the BUILD dir
-BUILD_GEN=6    # TT-1092: don't cache the BUILD dir, to rebuild external OFED
+BUILD_GEN=9
 
 TOPDIR="$PWD"
 
 
 TOPDIR="$PWD"
 
@@ -50,10 +45,6 @@ DOWNLOAD=true
 CANONICAL_TARGET=
 TARGET=
 TARGET_ARCH="$(uname -m)"
 CANONICAL_TARGET=
 TARGET=
 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=
 CONFIGURE_FLAGS=
 EXTERNAL_PATCHES=
 EXTRA_VERSION=
@@ -72,6 +63,7 @@ OSDLDISKFSRPM=true
 OSDZFSRPM=false
 SMPTYPES="smp bigsmp default ''"
 PATCHLESS=false
 OSDZFSRPM=false
 SMPTYPES="smp bigsmp default ''"
 PATCHLESS=false
+PATCHLESS_SERVER=false
 WITH_ZFS=""
 XEN=false
 LINUXOBJ=
 WITH_ZFS=""
 XEN=false
 LINUXOBJ=
@@ -79,6 +71,7 @@ DISTRO=
 KERNELTREE=
 # default to not adding -lustre- into the kernel RPM package names
 KERNEL_LUSTRE_NAMING=false
 KERNELTREE=
 # default to not adding -lustre- into the kernel RPM package names
 KERNEL_LUSTRE_NAMING=false
+ENABLE_KERNEL_DEBUG=false
 # default not use kabi check.
 USE_KABI=false
 
 # default not use kabi check.
 USE_KABI=false
 
@@ -151,6 +144,9 @@ Usage: ${0##*/} [OPTION]... [-- <lustre configure options>]
   --patchless
     Build lustre client only
 
   --patchless
     Build lustre client only
 
+  --patchless-server
+    Build lustre server without patching the kernel
+
   --distro=DISTRO
     Which distro using. Autodetect by default
 
   --distro=DISTRO
     Which distro using. Autodetect by default
 
@@ -162,6 +158,9 @@ Usage: ${0##*/} [OPTION]... [-- <lustre configure options>]
     Directory containing dirs with Linux source tarballs referenced by target
     files. Dir names in format kernel version ('2.6.9', etc.)
 
     Directory containing dirs with Linux source tarballs referenced by target
     files. Dir names in format kernel version ('2.6.9', etc.)
 
+  --enable-kernel-debug
+    Build with kernel-<version>.config-debug instead
+
   --linux=LINUX --with-linux=LINUX
     Directory of Linux kernel sources.  When this option is used, only
     Lustre modules and userspace are built.
   --linux=LINUX --with-linux=LINUX
     Directory of Linux kernel sources.  When this option is used, only
     Lustre modules and userspace are built.
@@ -170,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.hpdd.intel.com
+    Do not try to download a kernel from downloads.whamcloud.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
@@ -222,16 +221,6 @@ Usage: ${0##*/} [OPTION]... [-- <lustre configure options>]
     The name of the target to build.  The available targets are listed
     below.
 
     The name of the target to build.  The available targets are listed
     below.
 
-  --target-archs=TARGET_ARCHS
-    A (space delimited) list of architectures to build.  By default,
-    all of the archs supported by the TARGET will be built, in
-    addition to a .src.rpm.  This option can limit those, for machines
-    that can only build certain archs or if you only want a certain
-    arch built (for testing, or a one-off kernel).
-
-    Also note that by using a non-"base" arch (eg, i386) only kernels
-    will be built - there will be no lustre-lite-utils package.
-
   --xen
     Builds a Xen domX kernel.
 
   --xen
     Builds a Xen domX kernel.
 
@@ -282,6 +271,10 @@ check_options() {
         usage 1 "Could not find Lustre source tarball '$LUSTRE'."
     fi
 
         usage 1 "Could not find Lustre source tarball '$LUSTRE'."
     fi
 
+       if $PATCHLESS && $PATCHLESS_SERVER; then
+               usage 1 "Can not use both --patchless and --patchless-server."
+       fi
+
        if [ -n "${OFED_SRC}" ]; then
                if [ -z "${OFED_VERSION}" ]; then
                        usage 1 "Need to provide version for file ${OFED_SRC}."
        if [ -n "${OFED_SRC}" ]; then
                if [ -z "${OFED_VERSION}" ]; then
                        usage 1 "Need to provide version for file ${OFED_SRC}."
@@ -324,41 +317,15 @@ check_options() {
         3.12-sles12 | 4.4-sles12)
             CANONICAL_TARGET="sles12"
             ;;
         3.12-sles12 | 4.4-sles12)
             CANONICAL_TARGET="sles12"
             ;;
-        3.10-rhel7)
-            CANONICAL_TARGET="rhel7"
-            ;;
-        2.6-rhel6*)
-            CANONICAL_TARGET="rhel6"
+        4.18-rhel8*)
+            CANONICAL_TARGET="rhel8"
             ;;
             ;;
-        2.6-rhel5)
-            CANONICAL_TARGET="rhel5"
-            ;;
-        2.6-rhel4)
-            CANONICAL_TARGET="rhel-2.6"
-            ;;
-        2.6-suse)
-            CANONICAL_TARGET="sles-2.6"
-            ;;
-        2.6-sles10)
-            CANONICAL_TARGET="sles10-2.6"
+        3.10-rhel7*)
+            CANONICAL_TARGET="rhel7"
             ;;
             ;;
-        2.6-sles11 | 3.0-sles11)
+        3.0-sles11)
             CANONICAL_TARGET="sles11"
             ;;
             CANONICAL_TARGET="sles11"
             ;;
-        2.6-oel5)
-            CANONICAL_TARGET="oel5"
-            ;;
-        hp_pnnl-2.4)
-            CANONICAL_TARGET="hp-pnnl-2.4"
-            ;;
-        2.6-vanilla \
-            | suse-2.4.21-2 \
-            | rh-2.4 \
-            | rhel-2.4 \
-            | sles-2.4 \
-            | 2.6-patchless)
-                CANONICAL_TARGET="$TARGET"
-                ;;
     esac
 
     local timestampnodig=$(echo $TIMESTAMP | sed -e s/[0-9]*//g)
     esac
 
     local timestampnodig=$(echo $TIMESTAMP | sed -e s/[0-9]*//g)
@@ -447,6 +414,14 @@ compare_version () {
     return 1
 }
 
     return 1
 }
 
+# Return a numeric version code based on a version string.  The version
+# code is useful for comparison two version strings to see which is newer.
+version_code() {
+    # split arguments like "0.8.0" into "0", "8", "0"
+    eval set -- $(tr "[:punct:]" " " <<< $*)
+    echo -n "$((($1 << 16) | ($2 << 8) | $3))"
+}
+
 uniqify() {
 
     echo $(echo "$*" | xargs -n 1 | sort -u)
 uniqify() {
 
     echo $(echo "$*" | xargs -n 1 | sort -u)
@@ -489,11 +464,12 @@ download_srpm() {
 
        # let the download_file handle the concurrency
        if $DOWNLOAD; then
 
        # let the download_file handle the concurrency
        if $DOWNLOAD; then
-               local location= \
-               "https://downloads.hpdd.intel.com/public/kernels/$target/old"
+               local location
                # 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)
+               else
+                       fatal 1 "Must specify location for download kernel SRPM."
                fi
                echo "Downloading $location/$srpm..."
                if ! download_file \
                fi
                echo "Downloading $location/$srpm..."
                if ! download_file \
@@ -506,6 +482,26 @@ SRPM $srpm from $location."
        fi
 }
 
        fi
 }
 
+download_debuginfo_common() {
+       local rpm=$1
+       local force="${2:-false}"
+
+       # let the download_file handle the concurrency
+       if $DOWNLOAD; then
+               # get the location from a distro specific method if it exists
+               if type -p kernel_debuginfo_location; then
+               location=$(kernel_debuginfo_location)
+               fi
+               echo "Downloading $location/$rpm"
+               if ! download_file \
+                       "$location/$rpm" "$KERNELRPMSBASE/$lnxmaj/$DISTROMAJ/$TARGET_ARCH/$rpm" "$force" 2>&1 ||
+                       [ ! -s "$KERNELRPMSBASE/$lnxmaj/$DISTROMAJ/$TARGET_ARCH/$rpm" ]; then
+                       rm -f $KERNELRPMSBASE/$lnxmaj/$DISTROMAJ/$TARGET_ARCH/$rpm
+                       fatal 1 "Could not download $rpm from $location."
+               fi
+       fi
+}
+
 download_file() {
     local from="$1"
     local to="$2"
 download_file() {
     local from="$1"
     local to="$2"
@@ -625,7 +621,11 @@ download_ofed() {
                        # this is a work around for suse distro (sles11.3). what we need is
                        # sles11sp3. We really need to redesign how we use target and distro
                        [[ $distro_name =~ sles ]] && distro_name=${DISTRO/./sp}
                        # this is a work around for suse distro (sles11.3). what we need is
                        # sles11sp3. We really need to redesign how we use target and distro
                        [[ $distro_name =~ sles ]] && distro_name=${DISTRO/./sp}
-                       file="MLNX_OFED_LINUX-${ofed_version}-${distro_name}-${arch}.tgz"
+                       if [[ $arch = "aarch64" ]] && [[ $DISTROMAJ < "rhel8" ]]; then
+                               file="MLNX_OFED_LINUX-${ofed_version}-${distro_name}alternate-${arch}.tgz"
+                       else
+                               file="MLNX_OFED_LINUX-${ofed_version}-${distro_name}-${arch}.tgz"
+                       fi
                        download_file "$location/$file" "$KERNELTREE" "$force"
                        ;;
                ifs)
                        download_file "$location/$file" "$KERNELTREE" "$force"
                        ;;
                ifs)
@@ -699,9 +699,15 @@ load_target() {
         XENPOSTFIX="-xen"
     fi
 
         XENPOSTFIX="-xen"
     fi
 
-    if [ -f $TOPDIR/lustre/lustre/kernel_patches/kernel_configs/kernel-$lnxmaj-$TARGET-$TARGET_ARCH.config ]; then
-        CONFIG_FILE="$TOPDIR/lustre/lustre/kernel_patches/kernel_configs/kernel-$lnxmaj-$TARGET$XENPOSTFIX-$TARGET_ARCH.config"
-    fi
+       if $ENABLE_KERNEL_DEBUG; then
+               if [ -f $TOPDIR/lustre/lustre/kernel_patches/kernel_configs/kernel-$lnxmaj-$TARGET-$TARGET_ARCH.config-debug ]; then
+                       CONFIG_FILE="$TOPDIR/lustre/lustre/kernel_patches/kernel_configs/kernel-$lnxmaj-$TARGET$XENPOSTFIX-$TARGET_ARCH.config-debug"
+               fi
+       else
+               if [ -f $TOPDIR/lustre/lustre/kernel_patches/kernel_configs/kernel-$lnxmaj-$TARGET-$TARGET_ARCH.config ]; then
+                       CONFIG_FILE="$TOPDIR/lustre/lustre/kernel_patches/kernel_configs/kernel-$lnxmaj-$TARGET$XENPOSTFIX-$TARGET_ARCH.config"
+               fi
+       fi
 
     local lnxrelnew=${lnxrel//-/_}
 
 
     local lnxrelnew=${lnxrel//-/_}
 
@@ -725,18 +731,6 @@ load_target() {
         fi
     fi
     # EXTRA_VERSION=${EXTRA_VERSION//-/_}
         fi
     fi
     # EXTRA_VERSION=${EXTRA_VERSION//-/_}
-
-    ALL_ARCHS="$BASE_ARCHS $BIGMEM_ARCHS $BOOT_ARCHS $JENSEN_ARCHS $SMP_ARCHS $BIGSMP_ARCHS $PSERIES64_ARCHS $UP_ARCHS"
-
-    BUILD_ARCHS=
-    for arch in $(uniqify "$ALL_ARCHS"); do
-        if [ -z "$TARGET_ARCHS" ] ||
-           [[ \ $TARGET_ARCHS\  = *\ $arch\ * ]]; then
-            BUILD_ARCHS="$BUILD_ARCHS $arch"
-        fi
-    done
-    [ "$BUILD_ARCHS" ] || usage 1 "No available target archs to build."
-    echo "Building for: $BUILD_ARCHS"
 }
 
 tarflags() {
 }
 
 tarflags() {
@@ -802,8 +796,11 @@ unpack_ofed() {
                        # this is a work around for suse distro (sles11.3). what we need is
                        # sles11sp3. We really need to redesign how we use target and distro
                        [[ $distro_name =~ sles ]] && distro_name=${DISTRO/./sp}
                        # this is a work around for suse distro (sles11.3). what we need is
                        # sles11sp3. We really need to redesign how we use target and distro
                        [[ $distro_name =~ sles ]] && distro_name=${DISTRO/./sp}
-                       file="MLNX_OFED_LINUX-${ofed_version}-${distro_name}-${arch}"
-
+                       if [[ $arch = "aarch64" ]] && [[ $DISTROMAJ < "rhel8" ]]; then
+                               file="MLNX_OFED_LINUX-${ofed_version}-${distro_name}alternate-${arch}"
+                       else
+                               file="MLNX_OFED_LINUX-${ofed_version}-${distro_name}-${arch}"
+                       fi
                        # it's not important what distro we get the tarball since we only
                        # interest in the src
                        if ! untar "$KERNELTREE/${file}.tgz"; then
                        # it's not important what distro we get the tarball since we only
                        # interest in the src
                        if ! untar "$KERNELTREE/${file}.tgz"; then
@@ -819,6 +816,11 @@ unpack_ofed() {
                                return 1
                        fi
                        [ -d OFED ] || ln -sf MLNX_OFED_SRC-[0-9].[0-9]* OFED
                                return 1
                        fi
                        [ -d OFED ] || ln -sf MLNX_OFED_SRC-[0-9].[0-9]* OFED
+                       if compare_version $ofed_version 4.7; then
+                               [ -d OFED_RPMS ] || ln -sf ${file}/RPMS OFED_RPMS
+                       else
+                               [ -d OFED_RPMS ] || ln -sf ${file}/RPMS/MLNX_LIBS OFED_RPMS
+                       fi
                        ;;
                ifs)
                        file="IntelIB-Basic.$(echo ${distro_name%%.*} | tr '[:lower:]' '[:upper:]')-${arch}.${ofed_version}"
                        ;;
                ifs)
                        file="IntelIB-Basic.$(echo ${distro_name%%.*} | tr '[:lower:]' '[:upper:]')-${arch}.${ofed_version}"
@@ -891,7 +893,7 @@ build_lustre() {
         return 255
     fi
 
         return 255
     fi
 
-    echo "Building Lustre RPMs for: $BUILD_ARCHS..."
+    echo "Building Lustre RPMs for: $TARGET_ARCH"
 
     # If server we now build the spl and zfs modules against the lustre kernel.
     # These are required prior to the building of lustre server. Client does
 
     # If server we now build the spl and zfs modules against the lustre kernel.
     # These are required prior to the building of lustre server. Client does
@@ -934,17 +936,15 @@ build_lustre() {
     ./configure $configure_args $CONFIGURE_FLAGS 2>&1 ||
         fatal 1 "Error in configure."
 
     ./configure $configure_args $CONFIGURE_FLAGS 2>&1 ||
         fatal 1 "Error in configure."
 
-    if type -p apply_kmod_requires; then
-        apply_kmod_requires
+    if type -p apply_kmod_requires_conflicts; then
+        apply_kmod_requires_conflicts
     fi
 
     make rpms 2>&1 ||
     fi
 
     make rpms 2>&1 ||
-        fatal 1 "Error building rpms for $BUILD_ARCHS."
+        fatal 1 "Error building rpms for $TARGET_ARCH."
 
     # move RPMs into place where they are expected to be
 
     # move RPMs into place where they are expected to be
-    for arch in $BUILD_ARCHS; do
-        mv -f *lustre*.${arch}.rpm $TOPDIR/RPMS/${arch}/
-    done
+    mv -f *lustre*.${TARGET_ARCH}.rpm $TOPDIR/RPMS/${TARGET_ARCH}/
     mv -f lustre-*.src.rpm $TOPDIR/SRPMS/
 
     popd >/dev/null
     mv -f lustre-*.src.rpm $TOPDIR/SRPMS/
 
     popd >/dev/null
@@ -955,25 +955,45 @@ build_lustre() {
     return 0
 }
 
     return 0
 }
 
-# Only zfs Lustre DKMS Server is supported
 build_lustre_dkms() {
     local build_args=""
 build_lustre_dkms() {
     local build_args=""
-    local name_prefix="lustre"
     local ver=$(sed -n -e 's/^LUSTRE_VERSION = //p' LUSTRE-VERSION-FILE)
 
     local ver=$(sed -n -e 's/^LUSTRE_VERSION = //p' LUSTRE-VERSION-FILE)
 
-    echo "Building Lustre DKMS RPMs for: $BUILD_ARCHS..."
+    echo "Building Lustre DKMS RPMs for: $TARGET_ARCH"
     ./configure --enable-dist || fatal 1 "Error in DKMS configure."
 
     if $PATCHLESS; then
         build_args="--without servers"
     ./configure --enable-dist || fatal 1 "Error in DKMS configure."
 
     if $PATCHLESS; then
         build_args="--without servers"
-        name_prefix="lustre-client"
     fi
 
     rpmbuild --define "_topdir $TOPDIR" $build_args -bs lustre-dkms.spec ||
     fi
 
     rpmbuild --define "_topdir $TOPDIR" $build_args -bs lustre-dkms.spec ||
-        fatal 1 "Error building DKMS .src.rpm for $BUILD_ARCHS."
-    rpmbuild --define "_topdir $TOPDIR" $build_args \
-             --rebuild $TOPDIR/SRPMS/$name_prefix-dkms-$ver-*.src.rpm ||
-        fatal 1 "Error building DKMS .rpm for $BUILD_ARCHS."
+        fatal 1 "Error building DKMS .src.rpm for $TARGET_ARCH."
+
+    if $PATCHLESS; then
+       rpmbuild --define "_topdir $TOPDIR" $build_args \
+             --rebuild $TOPDIR/SRPMS/lustre-client-dkms-$ver-*.src.rpm ||
+        fatal 1 "Error building DKMS .rpm for $TARGET_ARCH."
+    else
+       rpmbuild --define="_topdir $TOPDIR" --with servers \
+           --with zfs --without ldiskfs -bs lustre-dkms.spec ||
+       fatal 1 "Error creating DKMS (zfs) .srpm for $TARGET_ARCH."
+       rpmbuild --define="_topdir $TOPDIR" --with servers \
+           --without zfs --with ldiskfs -bs lustre-dkms.spec ||
+       fatal 1 "Error creating DKMS (ldiskfs) .srpm for $TARGET_ARCH."
+       rpmbuild --define="_topdir $TOPDIR" --with servers \
+           --with zfs --with ldiskfs -bs lustre-dkms.spec ||
+       fatal 1 "Error creating DKMS (all) .srpm for $TARGET_ARCH."
+
+       rpmbuild --rebuild --define="_topdir $TOPDIR" --with servers \
+           --with zfs --without ldiskfs $TOPDIR/SRPMS/lustre-zfs-dkms-$ver-*.src.rpm ||
+       fatal 1 "Error building DKMS (zfs) .rpm for $TARGET_ARCH."
+       rpmbuild --rebuild --define="_topdir $TOPDIR" --with servers \
+           --without zfs --with ldiskfs $TOPDIR/SRPMS/lustre-ldiskfs-dkms-$ver-*.src.rpm ||
+       fatal 1 "Error building DKMS (ldiskfs) .rpm for $TARGET_ARCH."
+       rpmbuild --rebuild --define="_topdir $TOPDIR" --with servers \
+           --with zfs --with ldiskfs $TOPDIR/SRPMS/lustre-all-dkms-$ver-*.src.rpm ||
+       fatal 1 "Error building DKMS (all) .rpm for $TARGET_ARCH."
+    fi
 
     return 0
 }
 
     return 0
 }
@@ -998,22 +1018,25 @@ 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.5.9}
+    SPLZFSVER=${SPLZFSVER:-0.8.3}
     SPLZFSTAG=${SPLZFSTAG:-}
     SPLZFSTAG=${SPLZFSTAG:-}
+    # "spl zfs" prior to 0.8.0
+    # "zfs" for 0.8.0 and later
+    (( $(version_code $SPLZFSVER) < $(version_code 0.8.0) )) &&
+        SPLZFSPKGS="spl zfs" || SPLZFSPKGS="zfs"
 
     # The files expect a kver to be set to the kernel version .
     local kver=$(find_linux_release)
 
     # build and install the spl and zfs (and -devel) RPMs for lustre to use
     local pkg
 
     # The files expect a kver to be set to the kernel version .
     local kver=$(find_linux_release)
 
     # build and install the spl and zfs (and -devel) RPMs for lustre to use
     local pkg
-    for pkg in spl zfs; do
-
-        local rpmpkg
+    local spldir
+    for pkg in $SPLZFSPKGS; do
 
 
-        [ "$pkg" == "zfs" ] && spldir="$(ls -d $TOPDIR/usr/src/spl-*|tail -1)"
+       local rpmpkg
 
 
-        # need to fetch the repo in order to build it.
-        # default to github but allow override
+       # need to fetch the repo in order to build it.
+       # default to github but allow override
        git clone -n ${SPLZFSGITREPO:-"https://github.com/zfsonlinux"}/$pkg.git $pkg 2>&1
 
        pushd $pkg || return 255
        git clone -n ${SPLZFSGITREPO:-"https://github.com/zfsonlinux"}/$pkg.git $pkg 2>&1
 
        pushd $pkg || return 255
@@ -1025,91 +1048,98 @@ build_spl_zfs() {
        fi
        git checkout -b lbuild $tag || fatal 1 "Failed to checkout \"$tag\" for $pkg.git"
 
        fi
        git checkout -b lbuild $tag || fatal 1 "Failed to checkout \"$tag\" for $pkg.git"
 
-        # This differentiates between older zfs versions
-        if [ -f $pkg-modules.spec.in ]; then
-            rpmpkg=$pkg-modules
-            specdir=.
-            speclist="$pkg.spec $rpmpkg.spec"
-        else
-            rpmpkg=kmod-$pkg-devel
-            specdir=rpm/generic
-            speclist="$pkg.spec $pkg-kmod.spec $pkg-dkms.spec"
-        fi
-
-        sh autogen.sh || return 255
-
-        if  ! ./configure --with-linux=${LINUX} --with-linux-obj=${LINUXOBJ:-$LINUX} \
-                          ${spldir:+--with-spl="${spldir}"} 2>&1 ||
-            ! make dist 2>&1; then
-            popd
-            return 255
-        fi
-        popd
-
-        ln -f $pkg/$pkg-*.tar.gz $TOPDIR/SOURCES ||
-           error "failed to link $pkg/$pkg-*.tar.gz into $TOPDIR/SOURCES"
-        if [ -f $pkg/scripts/kmodtool ]; then
-            ln -f $pkg/scripts/kmodtool $TOPDIR/SOURCES/
-        fi
+       # This differentiates between older zfs versions
+       if [ -f $pkg-modules.spec.in ]; then
+           rpmpkg=$pkg-modules
+           specdir=.
+           speclist="$pkg.spec $rpmpkg.spec"
+       else
+           rpmpkg=kmod-$pkg-devel
+           specdir=rpm/generic
+           speclist="$pkg.spec $pkg-kmod.spec $pkg-dkms.spec"
+       fi
 
 
-        local rpmb
-        if $DO_SRC; then
-            rpmb=-ba
-        else
-            rpmb=-bb
-        fi
+       sh autogen.sh || return 255
 
 
-        # set search dir for our own kmodtool to find correct
-        # directories
-        export KERNELSOURCE=$(dirname ${LINUX})
-        # Manually build rpms
-        for spec in $speclist; do
-            echo "Building RPMs from $pkg/$specdir/$spec"
-            if ! rpmbuild $rpmb $pkg/$specdir/$spec \
-                --nodeps -v \
-                --define "_use_internal_dependency_generator 0" \
-                --define "require_kdir ${LINUX}" \
-                ${LINUXOBJ:+--define "require_kobj ${LINUXOBJ}"} \
-                ${spldir:+--define "require_spldir ${spldir}"} \
-                --define "kver $kver" \
-                --define "kernels $kver" \
-                --define "_tmppath /var/tmp" \
-                --define "kernelbuildroot $TOPDIR/reused" \
-                --define "_topdir $TOPDIR" 2>&1; then
-                return 255
-            fi
-        done
+       if  ! ./configure --with-linux=${LINUX} --with-linux-obj=${LINUXOBJ:-$LINUX} \
+           ${spldir:+--with-spl="${spldir}"} 2>&1 ||
+           ! make dist 2>&1; then
+           popd
+           return 255
+       fi
+       popd
 
 
-        # We have built the rpms for the package. Now we need to extract the
-        # contained files so we can build further things against them
-        local rpms=$(ls -1 $TOPDIR/RPMS/*/$rpmpkg-*.rpm)
+       ln -f $pkg/$pkg-*.tar.gz $TOPDIR/SOURCES ||
+       error "failed to link $pkg/$pkg-*.tar.gz into $TOPDIR/SOURCES"
+       if [ -f $pkg/scripts/kmodtool ]; then
+           ln -f $pkg/scripts/kmodtool $TOPDIR/SOURCES/
+       fi
 
 
-        # cpio only extract to pwd so we need to go there.
-        pushd $TOPDIR
-        local rpm
-        for rpm in $rpms; do
-            rpm2cpio $rpm | cpio -id
-        done
+       local rpmb
+       if $DO_SRC; then
+           rpmb=-ba
+       else
+           rpmb=-bb
+       fi
 
 
-        if [ "$pkg" == "zfs" ]; then
-            # We also need to extract both the zfs and zfs-devel rpms
-            # the zfs rpm is needed because it has the actual libraries in
-            # it and the zfs-devel rpm only has unversioned symlinks to the
-            # libraries in the zfs rpm
-            # this will all change one day when we have a libzfs rpm per
-            # 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,lib*}-*.rpm)
-            for rpm in $devel_rpms; do
-                rpm2cpio $rpm | cpio -id
-            done
-            CONFIGURE_FLAGS="--with-$pkg-devel=$TOPDIR ${CONFIGURE_FLAGS}"
-        fi
-        popd
+       # set search dir for our own kmodtool to find correct
+       # directories
+       export KERNELSOURCE=$(dirname ${LINUX})
+       # Manually build rpms
+       for spec in $speclist; do
+           echo "Building RPMs from $pkg/$specdir/$spec"
+           if ! rpmbuild $rpmb $pkg/$specdir/$spec \
+               --nodeps -v \
+               --define "_use_internal_dependency_generator 0" \
+               --define "require_kdir ${LINUX}" \
+               ${LINUXOBJ:+--define "require_kobj ${LINUXOBJ}"} \
+               ${spldir:+--define "require_spldir ${spldir}"} \
+               --define "kver $kver" \
+               --define "kernels $kver" \
+               --define "_tmppath /var/tmp" \
+               --define "kernelbuildroot $TOPDIR/reused" \
+               --define "_topdir $TOPDIR" 2>&1; then
+               return 255
+           fi
+       done
+
+       # We have built the rpms for the package. Now we need to extract the
+       # contained files so we can build further things against them
+       local rpms=$(ls -1 $TOPDIR/RPMS/*/$rpmpkg-*.rpm)
+
+       # cpio only extract to pwd so we need to go there.
+       pushd $TOPDIR
+       local rpm
+       for rpm in $rpms; do
+           rpm2cpio $rpm | cpio -id
+       done
+
+       if [ "$pkg" == "zfs" ]; then
+           # We also need to extract both the zfs and zfs-devel rpms
+           # the zfs rpm is needed because it has the actual libraries in
+           # it and the zfs-devel rpm only has unversioned symlinks to the
+           # libraries in the zfs rpm
+           # this will all change one day when we have a libzfs rpm per
+           # 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,lib*}-*.rpm)
+           for rpm in $devel_rpms; do
+               rpm2cpio $rpm | cpio -id
+           done
+           CONFIGURE_FLAGS="--with-$pkg-devel=$TOPDIR ${CONFIGURE_FLAGS}"
+           if [ -z "$spldir" ]; then
+               # if spldir is empty, then we are only building ZFS and need to define SPL config flags
+               CONFIGURE_FLAGS="--with-spl=$(ls -d $TOPDIR/usr/src/spl-*|tail -1) ${CONFIGURE_FLAGS}"
+               CONFIGURE_FLAGS="--with-spl-obj=$(ls -d $TOPDIR/usr/src/$pkg-*/$kver*|tail -1) ${CONFIGURE_FLAGS}"
+           fi
+       elif [ "$pkg" == "spl" ]; then
+           spldir="$(ls -d $TOPDIR/usr/src/spl-*|tail -1)"
+       fi
+       popd
 
 
-        CONFIGURE_FLAGS="--with-$pkg=$(ls -d $TOPDIR/usr/src/$pkg-*|tail -1) ${CONFIGURE_FLAGS}"
-        CONFIGURE_FLAGS="--with-$pkg-obj=$(ls -d $TOPDIR/usr/src/$pkg-*/$kver*|tail -1) ${CONFIGURE_FLAGS}"
+       CONFIGURE_FLAGS="--with-$pkg=$(ls -d $TOPDIR/usr/src/$pkg-*|tail -1) ${CONFIGURE_FLAGS}"
+       CONFIGURE_FLAGS="--with-$pkg-obj=$(ls -d $TOPDIR/usr/src/$pkg-*/$kver*|tail -1) ${CONFIGURE_FLAGS}"
     done
 
     OSDZFSRPM=true
     done
 
     OSDZFSRPM=true
@@ -1121,13 +1151,11 @@ stage() {
 
     [ "$STAGEDIR" ] || return 0
 
 
     [ "$STAGEDIR" ] || return 0
 
-    for arch in $BUILD_ARCHS; do
-        rpmdir="${STAGEDIR}/${CANONICAL_TARGET}-${arch}"
-        echo "${0##*/}: Copying RPMs into ${rpmdir}"
-        mkdir -p "${rpmdir}"
-        for rpm in $(ls RPMS/${arch}/*.rpm RPMS/noarch/*.rpm); do
-            cp -v $rpm "${rpmdir}"
-        done
+    rpmdir="${STAGEDIR}/${CANONICAL_TARGET}-${TARGET_ARCH}"
+    echo "${0##*/}: Copying RPMs into ${rpmdir}"
+    mkdir -p "${rpmdir}"
+    for rpm in $(ls RPMS/${TARGET_ARCH}/*.rpm RPMS/noarch/*.rpm); do
+        cp -v $rpm "${rpmdir}"
     done
 
     cp -v "$LUSTRE" "$STAGEDIR"
     done
 
     cp -v "$LUSTRE" "$STAGEDIR"
@@ -1183,10 +1211,6 @@ _find_linux_release() {
 
 # unpack kernel(/source/devel) RPM
 #
 
 # unpack kernel(/source/devel) RPM
 #
-# This function and it's setting of $LINUX and $LINUXOBJ is a total hack that
-# 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_devel_rpm() {
     local kernelrpm="${1}"
 
 unpack_linux_devel_rpm() {
     local kernelrpm="${1}"
 
@@ -1225,18 +1249,10 @@ build_kernel_ib() {
     local K_SRC="K_SRC"
 
        local OFED_CORE="--with-core-mod --with-ipoib-mod --with-user_mad-mod \
     local K_SRC="K_SRC"
 
        local OFED_CORE="--with-core-mod --with-ipoib-mod --with-user_mad-mod \
-       --with-user_access-mod --with-addr_trans-mod --with-madeye-mod"
-       local OFED_HARDWARE="--with-mthca-mod --with-mlx4-mod \
-       --with-mlx4_en-mod --with-cxgb3-mod --with-mlx4_en-mod \
-       --with-cxgb3-mod --with-nes-mod --with-mlx5-mod --with-cxgb4-mod \
-       --with-qib-mod"
-
-       # Removing the check for older version support
-       #if compare_version $OFED_VERSION 3.0; then
-       #OFED_CORE="$OFED_CORE --with-madeye-mod --with-rds-mod"
-       #else
-       #OFED_HARDWARE="$OFED_HARDWARE --with-mlx5-mod --with-cxgb4-mod --with-ocrdma-mod --with-qib-mod"
-       #fi
+       --with-user_access-mod --with-addr_trans-mod --with-innova-flex "
+       local OFED_HARDWARE="--with-mlx4-mod --with-mlx4_en-mod \
+       --with-srp-mod --with-iser-mod --with-isert-mod --with-mlx5-mod \
+       --with-mlxfw-mod "
 
     # some I/B drivers are architecture dependent and kernel-ib's configure
     # does not figure it out for us ~sigh~
 
     # some I/B drivers are architecture dependent and kernel-ib's configure
     # does not figure it out for us ~sigh~
@@ -1245,14 +1261,6 @@ build_kernel_ib() {
             OFED_HARDWARE="$OFED_HARDWARE --with-ehca-mod"
             ;;
     esac
             OFED_HARDWARE="$OFED_HARDWARE --with-ehca-mod"
             ;;
     esac
-    # we're no longer shipping the OFED iSCSI target
-    #OFED_ISCSI="--with-srp-mod --with-srp-target-mod"
-    OFED_ISCSI="--with-srp-mod"
-    ## ISER module has no backport support as of OFED 1.5 (i.e. only builds on
-    ##kernels >= 2.6.30)
-    #if [[ $OFED_VERSION = 1.[0-4]* ]]; then
-    #   OFED_ISCSI="$OFED_ISCSI --with-iser-mod"
-    #fi
 
     # assume we are just rebuilding the SRPM
     local BUILD_TYPE=${BUILD_TYPE:-"--rebuild"}
 
     # assume we are just rebuilding the SRPM
     local BUILD_TYPE=${BUILD_TYPE:-"--rebuild"}
@@ -1264,7 +1272,7 @@ build_kernel_ib() {
         rpm --define "_topdir ${TOPDIR}" -ivh $SOURCE
         SOURCE="${TOPDIR}/SPECS/${kib_prefix}.spec"
         local file ed_fragment1 ed_fragment2 n=1
         rpm --define "_topdir ${TOPDIR}" -ivh $SOURCE
         SOURCE="${TOPDIR}/SPECS/${kib_prefix}.spec"
         local file ed_fragment1 ed_fragment2 n=1
-        for file in $(ls ${TOPDIR}/lustre/contrib/patches/ofed/*.patch); do
+        for file in $(ls ${TOPDIR}/lustre/contrib/patches/ofed/*.patch 2>/dev/null); do
             ed_fragment1="$ed_fragment1
 Patch$n: ${file%%*/}"
             ed_fragment2="$ed_fragment2
             ed_fragment1="$ed_fragment1
 Patch$n: ${file%%*/}"
             ed_fragment2="$ed_fragment2
@@ -1272,7 +1280,7 @@ Patch$n: ${file%%*/}"
             cp $file ${TOPDIR}/SOURCES
             let n=$n+1
         done
             cp $file ${TOPDIR}/SOURCES
             let n=$n+1
         done
-        for file in $(ls ${TOPDIR}/lustre/contrib/patches/ofed/*.ed); do
+        for file in $(ls ${TOPDIR}/lustre/contrib/patches/ofed/*.ed 2>/dev/null); do
             # Only apply the ed-scripts that should be used for the canonical target
             # ed-files in ${TOPDIR}/lustre/contrib/patches/ofed/ have to follow the naming
             # convention
             # Only apply the ed-scripts that should be used for the canonical target
             # ed-files in ${TOPDIR}/lustre/contrib/patches/ofed/ have to follow the naming
             # convention
@@ -1324,12 +1332,17 @@ EOF
                        ${FIND_REQUIRES:+--define "__find_requires $FIND_REQUIRES"} \
                        --define "_topdir ${TOPDIR}" --target ${TARGET_ARCH} \
                        --define "KVERSION ${linuxrelease}" \
                        ${FIND_REQUIRES:+--define "__find_requires $FIND_REQUIRES"} \
                        --define "_topdir ${TOPDIR}" --target ${TARGET_ARCH} \
                        --define "KVERSION ${linuxrelease}" \
+                       --define "KMP 1" \
                        --define "$K_SRC ${linux}" \
                        ${OFA_KERNEL_RELEASE:+--define "_release $OFA_KERNEL_RELEASE"} \
                        --define "$K_SRC ${linux}" \
                        ${OFA_KERNEL_RELEASE:+--define "_release $OFA_KERNEL_RELEASE"} \
-                       --define "configure_options --without-quilt $OFED_CORE $OFED_HARDWARE $OFED_ISCSI" \
                        ${SOURCE} 2>&1; then
                        fatal 1 "Error building ${kib_rpm}"
                fi
                        ${SOURCE} 2>&1; then
                        fatal 1 "Error building ${kib_rpm}"
                fi
+               # now that we have the kernel rpms, we need to lib rpms too
+               # we don't have to rebuild since MOFED include the binaries
+               cp -f OFED_RPMS/{libibmad-*,libibverbs-*,libibumad-*,librdmacm*,ibutils*,opensm-*}.${TARGET_ARCH}.rpm \
+                       ${TOPDIR}/RPMS/${TARGET_ARCH} || \
+                       fatal 1 "Failed to copy MOFED rpms"
                ;;
        esac
 
                ;;
        esac
 
@@ -1347,13 +1360,9 @@ store_for_reuse() {
         linkflag="l"
     fi
 
         linkflag="l"
     fi
 
-    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)
+    local unique_id=$(hostname -s)
     if [ -z "$unique_id" ]; then
     if [ -z "$unique_id" ]; then
-        fatal 1 "Failed to determine a unique id from interface $default_interface"
+        fatal 1 "Failed to determine hostname."
     fi
 
     local finallocation="$location"/"$signature"/"$module"
     fi
 
     local finallocation="$location"/"$signature"/"$module"
@@ -1471,8 +1480,6 @@ build_kernel_with_srpm() {
     do_patch_linux false >&${outfd}    # sets global $FULL_PATCH (yeah, yuck)
 
     # get an md5sum of the kernel patch + config for reuse check
     do_patch_linux false >&${outfd}    # sets global $FULL_PATCH (yeah, yuck)
 
     # 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 release_str
     if $RELEASE; then
         local release_str="RELEASE=$RELEASE\n"
     local release_str
     if $RELEASE; then
         local release_str="RELEASE=$RELEASE\n"
@@ -1486,6 +1493,8 @@ build_kernel_with_srpm() {
                                   sed -e '/_VERSION=/s/_[0-9]*_g.*$//g';
                                   cat "$FULL_PATCH";
                                   cat "$LBUILD_DIR/lbuild";
                                   sed -e '/_VERSION=/s/_[0-9]*_g.*$//g';
                                   cat "$FULL_PATCH";
                                   cat "$LBUILD_DIR/lbuild";
+                                 test -f lbuild-${DISTROMAJ%%[0-9]*} &&
+                                 cat lbuild-${DISTROMAJ%%[0-9]*};
                                   cat "$LBUILD_DIR/lbuild-$DISTROMAJ"; } |
                                 md5sum | cut -d" " -f1)
         # see if we can link to the reuse pool
                                   cat "$LBUILD_DIR/lbuild-$DISTROMAJ"; } |
                                 md5sum | cut -d" " -f1)
         # see if we can link to the reuse pool
@@ -1611,6 +1620,8 @@ build_ofed() {
                                   echo "$BUILD_GEN")";
                                   cat "${linux}/include/linux/autoconf.h";
                                   cat "$LBUILD_DIR/lbuild";
                                   echo "$BUILD_GEN")";
                                   cat "${linux}/include/linux/autoconf.h";
                                   cat "$LBUILD_DIR/lbuild";
+                                 test -f lbuild-${DISTROMAJ%%[0-9]*} &&
+                                 cat lbuild-${DISTROMAJ%%[0-9]*};
                                   cat "$LBUILD_DIR/lbuild-$DISTROMAJ"; } |
                                 md5sum | cut -d" " -f1)
         # see if we can link to the reuse pool
                                   cat "$LBUILD_DIR/lbuild-$DISTROMAJ"; } |
                                 md5sum | cut -d" " -f1)
         # see if we can link to the reuse pool
@@ -1698,69 +1709,66 @@ build_ofed() {
 build_with_srpm() {
        local ofed_type="$1"
        local ofed_version="$2"
 build_with_srpm() {
        local ofed_type="$1"
        local ofed_version="$2"
+       local kernelrpm
+
+       if ! $PATCHLESS; then
+               if $PATCHLESS_SERVER; then
+                       # need to find and unpack the vendor's own kernel-devel
+                       # for patchless server build
+                       if ! kernelrpm=$(find_linux_rpm "-$DEVEL_KERNEL_TYPE"); then
+                               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
+                       # download and unpack kernel-debuginfo-common (only in EL)
+                       if [[ $DISTROMAJ =~ rhel ]]; then
+                               local KERNEL_DEBUGINFO="kernel-debuginfo-common-${TARGET_ARCH}-${lnxmaj}-${lnxrel}.${TARGET_ARCH}.rpm"
+                               download_debuginfo_common "$KERNEL_DEBUGINFO"
+                               if ! lnxrel="$lnxrel" unpack_linux_devel_rpm \
+                                       "$KERNELRPMSBASE/$lnxmaj/$DISTROMAJ/$TARGET_ARCH/$KERNEL_DEBUGINFO"; then
+                                       fatal 1 "Could not find the Linux debuginfo common rpm in $KERNELRPMSBASE/$lnxmaj/$DISTROMAJ/$TARGET_ARCH/$KERNEL_DEBUGINFO"
+                               fi
+                       fi
+               else
+                       local kernel_extra_version
+                       if ! kernel_extra_version=$(build_kernel_with_srpm ${STDOUT}); then
+                               fatal 1 "Failed to build the kernel from it's SRPM"
+                       fi
 
 
-    if ! $PATCHLESS; then
-        local kernel_extra_version
-        if ! kernel_extra_version=$(build_kernel_with_srpm ${STDOUT}); then
-            fatal 1 "Failed to build the kernel from it's SRPM"
-        fi
-
-        for arch in $BUILD_ARCHS; do
-            local kernel_devel_rpm
-            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
+                       local kernel_devel_rpm
+                       if ! kernel_devel_rpm=$(find_rpm "$TOPDIR/RPMS/${TARGET_ARCH}/" provides "^$(devel_kernel_name $KERNEL_LUSTRE_NAMING) ="); then
+                               fatal 1 "Failed to find a kernel development RPM in $TOPDIR/RPMS/${TARGET_ARCH}/"
+                       fi
 
 
-            # install the -devel RPM in preparation for modules builds
-            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
-        done
-    else
-        # need to find and unpack the vendor's own kernel-devel for patchless
-        # 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/$DISTROMAJ"
-        fi
-        if ! lnxrel="$lnxrel" unpack_linux_devel_rpm "$kernelrpm" "-"; then
-            fatal 1 "Could not find the Linux tree in $kernelrpm"
-        fi
-    fi
+                       # install the -devel RPM in preparation for modules builds
+                       if ! lnxrel="$kernel_extra_version" unpack_linux_devel_rpm \
+                               "$TOPDIR/RPMS/${TARGET_ARCH}/$kernel_devel_rpm"; then
+                               fatal 1 "Could not find the Linux tree in $TOPDIR/RPMS/${TARGET_ARCH}/$kernel_devel_rpm"
+                       fi
+               fi
+       else
+               # need to find and unpack the vendor's own kernel-devel for patchless
+               # client build
+               if ! kernelrpm=$(find_linux_rpm "-$DEVEL_KERNEL_TYPE"); then
+                       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
+       fi
 
 
-    # ~sigh~  have to make copies of and modify some of the rpm
-    # infrastructure files so that find-requires can find our unpacked
-    # kernel-devel artifacts
-    cp $RPM_HELPERS_DIR/{symset-table,find-requires{,.ksyms}} .
-    export FIND_REQUIRES="$(pwd)/find-requires"
-    chmod 755 {symset-table,find-requires{,.ksyms}}
-    local tmp="$(pwd)"
-    tmp="${tmp//\//\\/}"
-    ed find-requires <<EOF
-1a
-set -x
-.
-/|.*find-requires.ksyms/s/|/| bash -x/
-g/ [^ ]*\/\(find-requires\.ksyms\)/s// $tmp\/\1/g
-wq
-EOF
-    ed find-requires.ksyms <<EOF
-1a
-set -x
-.
-g/\/.*\/\(symset-table\)/s//$tmp\/\1/g
-g/\(\/usr\/src\/kernels\/\)/s//$tmp\/reused\1/g
-wq
-EOF
-    ed symset-table <<EOF
-1a
-set -x
-.
-g/\(\/boot\/\)/s//$tmp\/reused\1/g
-g/\(\/usr\/src\/kernels\/\)/s//$tmp\/reused\1/g
-wq
-EOF
+       # ~sigh~  have to make copies of and modify some of the rpm
+       # infrastructure files so that find-requires can find our unpacked
+       # kernel-devel artifacts
+       cp $RPM_HELPERS_DIR/{symset-table,find-requires{,.ksyms}} .
+       export FIND_REQUIRES="$(pwd)/find-requires"
+       chmod 755 {symset-table,find-requires{,.ksyms}}
+       local tmp="$(pwd)"
+       tmp="${tmp//\//\\/}"
+       sed -i "s/\/.*find-requires.ksyms/$tmp\/find-requires.ksyms/g" find-requires
+       sed -i "s/\/usr\/src\/kernels/$tmp\/reused\/usr\/src\/kernels/" find-requires.ksyms
+       sed -i "s/\/boot/$tmp\/reused\/boot/; s/\/usr\/src\/kernels/$tmp\/reused\/usr\/src\/kernels/" symset-table
 
        build_ofed "${LINUXOBJ:-$LINUX}" "$ofed_type" "$ofed_version" ||
         fatal 1 "error building OFED"
 
        build_ofed "${LINUXOBJ:-$LINUX}" "$ofed_type" "$ofed_version" ||
         fatal 1 "error building OFED"
@@ -1808,20 +1816,13 @@ EOF
 
 create_rpmbuild_dirs() {
 
 
 create_rpmbuild_dirs() {
 
-    [ -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 RPMS/noarch ] || mkdir RPMS/noarch
-    [ -d BUILD ] || mkdir BUILD
-    [ -d SOURCES ] || mkdir SOURCES
-    [ -d SPECS ] || mkdir SPECS
-    [ -d SRPMS ] || mkdir SRPMS
+       [ -d RPMS ] || mkdir RPMS
+       [ -d RPMS/${TARGET_ARCH} ] || mkdir RPMS/${TARGET_ARCH}
+       [ -d RPMS/noarch ] || mkdir RPMS/noarch
+       [ -d BUILD ] || mkdir BUILD
+       [ -d SOURCES ] || mkdir SOURCES
+       [ -d SPECS ] || mkdir SPECS
+       [ -d SRPMS ] || mkdir SRPMS
 
 }
 
 
 }
 
@@ -1923,7 +1924,11 @@ set -E
 
 [ -r ~/.lbuildrc ] && . ~/.lbuildrc
 
 
 [ -r ~/.lbuildrc ] && . ~/.lbuildrc
 
-options=$(getopt -o D:h -l kerneltree:,distro:,kernelrpm:,reusebuild:,patchless,ccache,norpm,external-patches:,timestamp:,extraversion:,kerneldir:,linux:,lustre:,nodownload,nosrc,noiokit,ofed-type:,ofed-version:,mlnx-version:,ofed-src:,publish,disable-zfs,release,set-value:,src,stage:,target:,target-archs:,with-linux:,xen -- "$@")
+options=$(getopt -o D:h -l kerneltree:,distro:,kernelrpm:,reusebuild:,\
+patchless,patchless-server,enable-kernel-debug,ccache,norpm,external-patches:,timestamp:,\
+extraversion:,kerneldir:,linux:,lustre:,nodownload,nosrc,noiokit,ofed-type:,\
+ofed-version:,mlnx-version:,ofed-src:,publish,disable-zfs,release,set-value:,\
+src,stage:,target:,with-linux:,xen -- "$@")
 
 if [ $? != 0 ]; then
     usage 1
 
 if [ $? != 0 ]; then
     usage 1
@@ -1992,6 +1997,14 @@ while [ "$1" ]; do
             PATCHLESS=true
             shift
             ;;
             PATCHLESS=true
             shift
             ;;
+       --patchless-server)
+               PATCHLESS_SERVER=true
+               shift
+               ;;
+       --enable-kernel-debug)
+               ENABLE_KERNEL_DEBUG=true
+               shift
+               ;;
         --kernelrpm)
             if ! KERNELRPMSBASE=$(canon_path "$2"); then
                 fatal 1 "Could not determine the canonical location of $2"
         --kernelrpm)
             if ! KERNELRPMSBASE=$(canon_path "$2"); then
                 fatal 1 "Could not determine the canonical location of $2"
@@ -2051,10 +2064,6 @@ while [ "$1" ]; do
             TARGET=$2
             shift 2
             ;;
             TARGET=$2
             shift 2
             ;;
-        --target-archs)
-            TARGET_ARCHS=$2
-            shift 2
-            ;;
         --xen)
             XEN=true
             shift
         --xen)
             XEN=true
             shift