--xen
Builds a Xen domX kernel.
+ --set-value
+ Set's a variable to a given value.
+
EOF
# list_targets
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/"
+ if [ -z "$OFED_VERSION" -o "$OFED_VERSION" = "inkernel" ]; then
+ return 0
+ fi
+
+ 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-}
fi
fi
- if [ -z "$OFED_VERSION" -o "$OFED_VERSION" = "inkernel" ]; then
- return 0
- fi
-
local file="OFED-${OFED_VERSION}.tgz"
download_file "$location/$file" "$KERNELTREE" "$force"
}
-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
local linux="$1"
local ofed_version="$2"
- # before lustre, build kernel-ib
+ # if an ofed version is given, then it means use OFED proper,
+ # not any vendor specific "inkernel" version
if [ -z "$ofed_version" -o "$ofed_version" = "inkernel" ]; then
+ # first see if there is a distro specific override for this
+ # XXX we need to better integrate an distro specific override with
+ # the rest of this function so that all of the reuse cache
+ # stuff is leveraged given that 80% of this function is reuse
+ if type -p build_ofed-${DISTRO}; then
+ local ofed_location
+ ofed_location=$(build_ofed-${DISTRO} ${STDOUT})
+ CONFIGURE_FLAGS="--with-o2ib=${ofed_location} ${CONFIGURE_FLAGS}"
+ return ${PIPESTATUS[0]}
+ fi
+ else
return 0
fi
+ # build kernel-ib
if $USE_BUILD_CACHE && [ -n "$REUSEBUILD" ]; then
local REUSE_SIGNATURE=$({ echo "$ofed_version";
echo "$(find_linux_release ${linux})";
ofed_version=$(echo $ofed_version |
sed -re 's/-(20[0-9]{6,6}-[0-9]{4,4}|rc[0-9]*)$//')
local rpm=$(ls $TOPDIR/RPMS/*/kernel-ib-devel-${ofed_version}-${linuxrelease//-/_}.*.rpm)
- rpm2cpio -itv < $rpm | cpio -id
+ if ! rpm2cpio < $rpm | cpio -id; then
+ fatal 1 "could not unpack the kernel-ib-devel rpm."
+ fi
CONFIGURE_FLAGS="--with-o2ib=$(pwd)/usr/src/ofa_kernel ${CONFIGURE_FLAGS}"
popd >/dev/null
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)
# in RPMS/$arch to real files so that that that huge mess of
# complication known as LTS can copy them yet somewhere else.
# is it any wonder this whole process is so damn so? anyone ever
- # heard of hardlinks? it this cool new thing that allows you save
+ # heard of hardlinks? it's this cool new thing that allows you save
# tons of time and space by creating... well you can go read about
# them if you have not heard about them yet.
# can i say how much the implemenation of all of this really impedes
# RPM reuse?
- pushd RPMS/$TARGET_ARCH
- for file in *; do
- if [ -h $file ]; then
- cp $file foo
- mv foo $file
- fi
+ local dir
+ for dir in RPMS/*; do
+ pushd $dir
+ for file in *; do
+ if [ -h $file ]; then
+ cp $file foo
+ mv foo $file
+ fi
+ done
done
popd
+ # also, for i?86, make sure all of the RPMs are in RPMS/$TARGET_ARCH
+ # as that's where LTS expects to find them
+ for dir in RPMS/*; do
+ if [ $dir = RPMS/$TARGET_ARCH ]; then
+ continue
+ fi
+ pushd $dir
+ local files=$(ls)
+ if [ -n "$files" ]; then
+ cp -al $files ../$TARGET_ARCH
+ fi
+ popd
+ done
else
return 1
fi
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