# include the exit_traps library
. ${0%/lbuild}/exit_traps.sh
+. ${0%/lbuild}/funcs.sh
# our children should die when we do
push_exit_trap "kill -INT -$$ || true" kill_children
#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=4 # bz22281: use the git hash in the kernel extra version
+BUILD_GEN=5 # TT-107: don't cache the BUILD dir
TOPDIR=$PWD
KERNELTREE=
# default to not adding -lustre- into the kernel RPM package names
KERNEL_LUSTRE_NAMING=false
+# default not use kabi check.
+USE_KABI=false
# patchless build
KERNELRPMSBASE=
fi
}
-cleanup() {
-
- true
-}
-
-error() {
- local msg="$1"
-
- [ -n "$msg" ] && echo -e "\n${0##*/}: $msg" >&3
-
-}
-
-fatal() {
-
- cleanup
- error "$2"
- exit $1
-
-}
-
usage() {
cat <<EOF
Usage: ${0##*/} [OPTION]... [-- <lustre configure options>]
fi
case $TARGET in
+ 2.6-rhel6)
+ CANONICAL_TARGET="rhel6"
+ ;;
2.6-rhel5)
CANONICAL_TARGET="rhel5"
;;
}
-# autodetect target
-autodetect_target() {
- local distro="$1"
-
- local target=""
- case ${distro} in
- oel5) target="2.6-oel5";;
- rhel5) target="2.6-rhel5";;
- sles10) target="2.6-sles10";;
- *) fatal 1 "I don't know what distro $distro is.\nEither update autodetect_target() or use the --target argument.";;
- esac
+uniqify() {
- echo ${target}
- return 0
+ echo $(echo "$*" | xargs -n 1 | sort -u)
}
-# autodetect used Distro
-autodetect_distro() {
-
- local name
- local version
+fetch_url() {
+ local url="$1"
+ local target="$2"
- if which lsb_release >/dev/null 2>&1; then
- name="$(lsb_release -s -i)"
- version="$(lsb_release -s -r)"
- case "$name" in
- "EnterpriseEnterpriseServer" | "ScientificSL")
- name="oel"
- version="${version%%.*}"
- ;;
- "RedHatEnterpriseServer")
- name="rhel"
- version="${version%%.*}"
- ;;
- "SUSE LINUX")
- name="sles"
- ;;
- *)
- fatal 1 "I don't know what distro name $name and version $version is.\nEither update autodetect_distro() or use the --distro argument."
- ;;
- esac
- else
- echo "You really ought to install lsb_release for accurate distro identification"
- # try some heuristics
- if [ -f /etc/SuSE-release ]; then
- name=sles
- version=$(grep ^VERSION /etc/SuSE-release)
- version=${version#*= }
- elif [ -f /etc/redhat-release ]; then
- #name=$(head -1 /etc/redhat-release)
- name=rhel
- version=$(echo "$distroname" |
- sed -e 's/^[^0-9.]*//g' | sed -e 's/[ \.].*//')
+ local rc=0
+ if which wget >/dev/null 2>&1; then
+ if ! wget -nv "$url" -O "$target"; then
+ rc=${PIPESTATUS[0]}
fi
- if [ -z "$name" -o -z "$version" ]; then
- fatal 1 "I don't know how to determine distro type/version.\nEither update autodetect_distro() or use the --distro argument."
+ elif which curl >/dev/null 2>&1; then
+ if ! curl -L -s -o "$target" "$url"; then
+ rc=${PIPESTATUS[0]}
fi
+ else
+ fatal 1 "Could not find either wget or curl to fetch URLs."
fi
- echo ${name}${version}
- return 0
-
-}
-
-uniqify() {
-
- echo $(echo "$*" | xargs -n 1 | sort -u)
+ return $rc
}
[ ! -s "$KERNELDIR/$srpm" ]; then
if $DOWNLOAD; then
local location="http://downloads.lustre.org/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)
+ fi
echo "Downloading $location/$srpm..."
- if ! wget -nv "$location/$srpm" -O "$KERNELDIR/$srpm" 2>&1 ||
+ if ! fetch_url "$location/$srpm" "$KERNELDIR/$srpm" 2>&1 ||
[ ! -s "$KERNELDIR/$srpm" ]; then
rm -f $KERNELDIR/$srpm
- fatal 1 "Could not download target $target's kernel SRPM $srpm from $location."
+ # punt to a distro specific method if it exists
+ if ! type -p download_srpm-$DISTRO; then
+ 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."
+ fi
+ fi
fi
else
fatal 1 "$srpm not found in directory $KERNELDIR."
# flag others so they don't try to download also
push_exit_trap "rm -f $to $semaphore" "download"
touch $semaphore
- if ! wget -nv "$from" -O "$to" || [ ! -s "$to" ]; then
+ if ! fetch_url "$from" "$to" || [ ! -s "$to" ]; then
# the trap will remove the files via the fatal below
fatal 1 "Could not download ${to##*/} from ${from%/*}/."
fi
return 0
fi
- local location="http://www.openfabrics.org/downloads/OFED/ofed-${OFED_VERSION}/"
+ local OFED_BASE_VERSION=$OFED_VERSION
+ if [[ $OFED_VERSION = *.*.*.* ]]; then
+ OFED_BASE_VERSION=${OFED_VERSION%.*}
+ fi
+
+ local location="http://www.openfabrics.org/downloads/OFED/ofed-${OFED_BASE_VERSION}/"
if [[ $OFED_VERSION = daily-* ]]; then
local Mmv daily
}
-# XXX this needs to be re-written as a wrapper around find_rpm
-# or just gotten rid of. :-)
-find_linux_rpm() {
- local prefix="$1"
-
- local pathtorpms="${KERNELRPMSBASE}/${lnxmaj}/${DISTRO}"
- [ -d $pathtorpms ] || return 255
-
- local kernelbinaryrpm rpmfile
- local wanted_kernel="${lnxmaj}${lnxmin}-${lnxrel}"
-
- local arch ret=1
- for arch in $TARGET_ARCHS_ALL; do
- local found_rpm="" rpm
- for rpm in ${pathtorpms}/${arch}/*.rpm; do
- if rpm -q --provides -p "$rpm" 2>&3 | grep -q "kernel${prefix} = $wanted_kernel" 2>&3; then
-
- found_rpm="$rpm"
- ret=0
- break
- fi
- done
- [ -f "$found_rpm" ] && break
- done
-
- echo "$found_rpm"
- return $ret
-
-}
-
# unpack kernel(/source/devel) RPM
#
# This function and it's setting of $LINUX and $LINUXOBJ is a total hack that
rpm --define "_topdir ${TOPDIR}" -ivh $SOURCE
SOURCE="${TOPDIR}/SPECS/ofa_kernel.spec"
local file ed_fragment1 ed_fragment2 n=1
- for file in $(ls ${TOPDIR}/lustre/build/patches/ofed/*); do
+ for file in $(ls ${TOPDIR}/lustre/build/patches/ofed/*.patch); do
ed_fragment1="$ed_fragment1
Patch$n: ${file%%*/}"
ed_fragment2="$ed_fragment2
cp $file ${TOPDIR}/SOURCES
let n=$n+1
done
+ for file in $(ls ${TOPDIR}/lustre/build/patches/ofed/*.ed); do
+ ed_fragment3="$ed_fragment3
+$(cat $file)"
+ let n=$n+1
+ done
if [ $n -gt 1 ]; then
ed $SOURCE <<EOF
/^%setup /a
$ed_fragment2
.
+$ed_fragment3
wq
EOF
fi
}
-#
-# in a given directory, find the first rpm matching given requirements
-#
-find_rpm() {
- local dir="$1"
- local match_type="$2"
- local match="$3"
-
- pushd "$dir" > /dev/null || \
- fatal 1 "Unable to chdir to directory \"$dir\" in find_rpm()"
-
- local file
- for file in $(ls *.rpm); do
- if [ ! -f "$file" ]; then
- continue
- fi
- case "$match_type" in
- provides)
- # match is any valid ERE (i.e. given to egrep) match
- if rpm -q --provides -p "$file" 2>&3 | egrep -q "$match"; then
- echo "$file"
- popd >/dev/null
- return 0
- fi
- ;;
- *)
- popd >/dev/null
- fatal 1 "Unknown match type \"$match_type\" given to find_rpm()"
- ;;
- esac
- done
-
- popd >/dev/null
- return 1
-}
-
build_kernel_with_srpm() {
local outfd=$1
"$REUSE_SIGNATURE"; then
# nothing cached, build from scratch
if [ ! -r "$KERNELDIR/$KERNEL_SRPM" ]; then
- echo "Downloading kernel SRPM"
+ echo "Downloading kernel SRPM" >&${outfd}
download_srpm "$CANONICAL_TARGET" "$KERNEL_SRPM" >&${outfd}
fi
else
# store the resulting kernel RPM build tree for future use
echo "Storing the built kernel for future reuse" >&${outfd}
- if ! store_for_reuse "$TOPDIR/{SPECS,SOURCES,BUILD,SRPMS,RPMS}" \
+ if ! store_for_reuse "$TOPDIR/{SPECS,SOURCES,SRPMS,RPMS}" \
"kernel" "$REUSEBUILD" "$REUSE_SIGNATURE" \
"$CAN_LINK_FOR_REUSE"; then
error "Failed to store kernel RPMS for reuse"
- echo "unknown"
+ echo "unknown" >&${outfd}
return 1
fi
fi