touch $semaphore
if ! wget -nv "$from" -O "$to" || [ ! -s "$to" ]; then
# the trap will remove the files via the fatal below
- fatal 1 "Could not download ${to##*/} from ${from%%/*}/."
+ fatal 1 "Could not download ${to##*/} from ${from%/*}/."
fi
rm -f $semaphore
delete_exit_trap "download"
download_ofed() {
local force="${1:-false}"
- local location="http://downloads.lustre.org/public/OFED/"
+ local location="http://www.openfabrics.org/downloads/OFED/ofed-${OFED_VERSION}/"
- local Mmv daily
if [[ $OFED_VERSION = daily-* ]]; then
+ local Mmv daily
OFED_VERSION=${OFED_VERSION/daily-/}
Mmv=${OFED_VERSION%%-*}
daily=${OFED_VERSION##$Mmv-}
}
-download_rdac() {
- local force="${1:-false}"
-
- local location="http://downloads.lustre.org/public/RDAC/"
-
- if [ -z "$RDAC_VERSION" -o "$RDAC_VERSION" = "inkernel" ]; then
- return 0
- fi
-
- local file="rdac-LINUX-${RDAC_VERSION}-source.tar.gz"
- download_file "$location/$file" "$KERNELTREE" "$force"
-
-}
-
-download_mptlinux() {
- local force="${1:-false}"
-
- local location="http://downloads.lustre.org/public/MPTLINUX/"
-
- if [ -z "$MPTLINUX_VERSION" -o "$MPTLINUX_VERSION" = "inkernel" ]; then
- return 0
- fi
-
- file="MPTLINUX_RHEL5_SLES10_PH15-${MPTLINUX_VERSION}.zip"
- download_file "$location/$file" "$KERNELTREE" "$force"
-
-}
-
load_target() {
EXTRA_VERSION_save="$EXTRA_VERSION"
elif ! $RELEASE; then
# if there is no patch series, then this is not a lustre specific
# kernel. don't make it look like one
- if [ -n "$SERIES" ]; then
- #remove the @VERSION@ (lustre version)
-# EXTRA_VERSION=$(echo $EXTRA_VERSION | sed -e "s/\(.*_lustre\)\..*/\1/")
+ if $PATCHLESS || [ -n "$SERIES" ]; then
+ EXTRA_VERSION=$(echo $EXTRA_VERSION | sed -e "s/\(.*_lustre\)\..*/\1/")
# EXTRA_VERSION="${EXTRA_VERSION}-${TAG}.${TIMESTAMP}"
- ! ( $PATCHLESS ) && EXTRA_VERSION="${EXTRA_VERSION}.${TIMESTAMP}"
+ EXTRA_VERSION="${EXTRA_VERSION}.${TIMESTAMP}"
fi
fi
# EXTRA_VERSION=${EXTRA_VERSION//-/_}
}
untar() {
- local file="$1"
+ local tarfile="$1"
+ shift
+ local extractfile="$@"
- echo "Untarring ${file##*/}..."
- tar $(tarflags "$file") "$file"
+ echo "Untarring ${tarfile##*/}..."
+ tar $(tarflags "$tarfile") "$tarfile" $extractfile
}
}
-unpack_rdac() {
-
- if ! untar "$KERNELTREE/rdac-LINUX-${RDAC_VERSION}-source.tar.gz"; then
- return 1
- fi
- [ -d rdac-LINUX ] || ln -sf rdac-LINUX-[0-9][0-9].* rdac-LINUX
-
-}
-
-unpack_mptlinux() {
-
- if ! unzip -p $KERNELTREE/MPTLINUX_RHEL5_SLES10_PH15-4.16.00.00-2.zip | tar xzvf - srpms-2/mptlinux-4.16.00.00-2.src.rpm; then
- return 1
- fi
- mv srpms-2/mptlinux-4.16.00.00-2.src.rpm .
-
-}
-
unpack_lustre() {
if [ -z "$LUSTRE" ]; then
$RPMBUILD $targets $rpmbuildopt ../lustre.spec \
${is_patchless:+--define "lustre_name lustre-client"} \
${lustre_tests:+--define "build_lustre_tests 0"} \
+ ${FIND_REQUIRES:+--define "__find_requires $FIND_REQUIRES"} \
--define "configure_args $confoptions ${CONFIGURE_FLAGS}" \
--define "_tmppath $TMPDIR" \
--define "_topdir $TOPDIR" 2>&1 || \
[ $infact_arch == $smp_type ] && RPMSMPTYPE=bigsmp && break
done
+ for smp_type in $PPC64_ARCHS; do
+ [ $infact_arch == $smp_type ] && RPMSMPTYPE=ppc64 && break
+ done
+
for smp_type in $DEFAULT_ARCHS; do
[ $infact_arch == $smp_type ] && RPMSMPTYPE=default && break
done
rpm --define "_topdir ${TOPDIR}" -ivh $SOURCE
SOURCE="${TOPDIR}/SPECS/ofa_kernel.spec"
local file ed_fragment1 ed_fragment2 n=1
- for file in ${TOPDIR}/lustre/build/patches/ofed/*; do
+ for file in $(ls ${TOPDIR}/lustre/build/patches/ofed/*); do
ed_fragment1="$ed_fragment1
Patch$n: ${file%%*/}"
ed_fragment2="$ed_fragment2
let n=$n+1
done
- ed $SOURCE <<EOF
+ if [ $n -gt 1 ]; then
+ ed $SOURCE <<EOF
/^Source: /a
$ed_fragment1
.
.
wq
EOF
+ fi
fi
local linuxrelease=$(find_linux_release "$linux")
if ! $RPMBUILD $BUILD_TYPE --define 'build_kernel_ib 1' --define 'build_kernel_ib_devel 1' \
+ ${FIND_REQUIRES:+--define "__find_requires $FIND_REQUIRES"} \
--define "_topdir ${TOPDIR}" --target ${TARGET_ARCH} \
--define "KVERSION ${linuxrelease}" \
--define "$K_SRC ${linux}" \
}
-build_mptlinux() {
- local linux="$1"
- local version="$2"
-
- if [ -z "$version" -o "$version" = "inkernel" ]; then
- return 0
- fi
-
- local targets arch
- for arch in $BUILD_ARCHS; do
- targets="--target $arch $targets"
- done
-
- local rpmbuildopt='-bb'
- if $NORPM; then
- rpmbuildopt='-bc'
- echo NORPM mode. Only compiling.
- fi
-
- # if only we could just rebuild the src.rpm. but the included spec
- # is a real pig's breakfast. just check out the patch we need to
- # apply to it to make it useful.
- #$RPMBUILD --rebuild \
- # --define "_topdir ${TOPDIR}" --target ${TARGET_ARCH} \
- # ${TOPDIR}/mptlinux-*.src.rpm
- rpm -ivh --define "_topdir ${TOPDIR}" ${TOPDIR}/mptlinux-*.src.rpm
-
- # now the big honkin' patch to the spec file
- pushd ${TOPDIR}/SPECS
- # to regen this patch use:
- # !!cd ~/rpm/SPECS/ && diff -u mptlinux.spec{.dist,}
- patch -p0 < ${TOPDIR}/lustre/build/mptlinux.spec.patch || fatal 1 "failed to patch mptlinux.spec"
- popd
-
- local targets arch
- for arch in $BUILD_ARCHS; do
- targets="--target $arch $targets"
- done
-
- local rpmbuildopt='-bb'
- if $NORPM; then
- rpmbuildopt='-bc'
- echo NORPM mode. Only compiling.
- fi
-
- if ! $RPMBUILD $targets $rpmbuildopt \
- --define "_tmppath /var/tmp" \
- --define "_topdir ${TOPDIR}" \
- --define "kernel_obj $linux" \
- ${TOPDIR}/SPECS/mptlinux.spec 2>&1; then
- return 1
- fi
- if $DO_SRC; then
- if ! $RPMBUILD -bs \
- --define "_tmppath /var/tmp" \
- --define "_topdir ${TOPDIR}" \
- --define "kernel_obj $linux" \
- ${TOPDIR}/SPECS/mptlinux.spec 2>&1; then
- return 1
- fi
- fi
-
- return 0
-
-}
-
-# build RDAC
-build_rdac() {
- local linux="$1"
- local version="$2"
-
- if [ -z "$version" -o "$version" = "inkernel" ]; then
- return 0
- fi
-
- # note that we use an _, not a . before the spec on purpose. we are not
- # allowed to have more than one file with a .spec trailer in a tarball
- # that is supposed to be usable with rpmbuild
- cp lustre/build/rdac_spec ${TOPDIR}/SPECS/rdac.spec || fatal 1 "Could not find rdac.spec in lustre/build"
-
- local targets arch
- for arch in $BUILD_ARCHS; do
- targets="--target $arch $targets"
- done
-
- local rpmbuildopt='-bb'
- if $NORPM; then
- rpmbuildopt='-bc'
- echo NORPM mode. Only compiling.
- fi
-
- local distro
- case $DISTRO in
- rhel5) distro="REDHAT"
- ;;
- sles1*) distro="SUSE"
- ;;
- *) echo "$DISTRO not supported by RDAC, skipping"
- return 0
- ;;
- esac
- if ! $RPMBUILD $targets $rpmbuildopt --define "dist $distro" \
- --define "_tmppath /var/tmp" \
- --define "_topdir ${TOPDIR}" \
- --define "kernel_obj $linux" \
- ${TOPDIR}/SPECS/rdac.spec 2>&1; then
- return 1
- fi
- if $DO_SRC; then
- if ! $RPMBUILD -bs --define "dist $distro" \
- --define "_tmppath /var/tmp" \
- --define "_topdir ${TOPDIR}" \
- --define "kernel_obj $linux" \
- ${TOPDIR}/SPECS/rdac.spec 2>&1; then
- return 1
- fi
- fi
-
- return 0
-}
-
# build OFED
# globals used:
# TOPDIR
fatal 1 "Failed to find a kernel development RPM in $TOPDIR/RPMS/$arch/"
fi
- # install the -devel RPM in preparation for the lustre build
+ # 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
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}} .
+ 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
+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
+
build_ofed "${LINUXOBJ:-$LINUX}" "$OFED_VERSION" ||
fatal 1 "error building OFED"
- if ! $PATCHLESS; then
- # only need RDAC for the server
- build_rdac "${LINUXOBJ:-$LINUX}" "$RDAC_VERSION" ||
- fatal 1 "error building RDAC"
- fi
-
- build_mptlinux "${LINUXOBJ:-$LINUX}" "$MPTLINUX_VERSION" ||
- fatal 1 "error building mptlinux"
-
# now build Lustre
if build_lustre "$LINUX" "$LINUXOBJ"; then
# the build worked. resolve any symlinked files (i.e. from reuse)
unpack_ofed || fatal 1 "Error unpacking OFED tarball"
fi
-if [ -n "$MPTLINUX_VERSION" -a "$MPTLINUX_VERSION" != "inkernel" ]; then
- download_mptlinux
- unpack_mptlinux || fatal 1 "Error unpacking MPTLINUX distribution"
-fi
-
# make sure the RPM build environment is set up
create_rpmbuild_dirs
-if [ -n "$RDAC_VERSION" -a "$RDAC_VERSION" != "inkernel" ]; then
- download_rdac
- # we don't actually need to unpack this. just put it in the SOURCES dir
- #unpack_rdac || fatal 1 "Error unpacking RDAC tarball"
- cp "$KERNELTREE/rdac-LINUX-${RDAC_VERSION}-source.tar.gz" ${TOPDIR}/SOURCES/ ||
- fatal 1 "Error copying RDAC source tarball to RPM SOURCES dir"
-fi
-
# if an unpacked kernel source tree was given on the command line
# just build lustre with it (nothing distro kernel specific here)
if [ -n "$LINUX" ]; then
- build_mptlinux "${LINUXOBJ:-$LINUX}" "$MPTLINUX_VERSION" ||
- fatal 1 "error building mptlinux"
build_ofed "${LINUXOBJ:-$LINUX}" "$OFED_VERSION" ||
fatal 1 "error building OFED"
- if ! $PATCHLESS; then
- build_rdac "${LINUXOBJ:-$LINUX}" "$RDAC_VERSION" ||
- fatal 1 "error building RDAC"
- fi
build_lustre "$LINUX" "$LINUXOBJ"
else
if [ -f "${0%/*}/lbuild-$DISTRO" ]; then