KERNEL_FILE=
SERIES_FILE=
CONFIG_FILE=
+RPMBUILD=
canon()
{
echo $PWD
popd >/dev/null
}
-TOPDIR=$(canon "${0%%${0##*/}}/..")
+TOPDIR="${0%%${0##*/}}"
+if [ "${TOPDIR}" ] ; then
+ TOPDIR=$(canon "${TOPDIR}/..")
+else
+ TOPDIR=$(canon "..")
+fi
+
+lbuild_topdir()
+{
+ retdir=$TOPDIR
+ while [ ! -d $retdir/BUILD ] ; do
+ retdir=$(canon "$retdir/..")
+ if [ "$retdir" = "/" ] ; then
+ break;
+ fi
+ done
+ echo "$retdir"
+}
cleanup()
{
if [ -z "$JOBS" -o "$JOBS" -lt "1" ] ; then
JOBS=1
fi
+
+ RPMBUILD=$(which rpmbuild 2>/dev/null | head -1)
+ if [ ! "$RPMBUILD" -o "$RPMBUILD" == "" ]; then
+ RPMBUILD=$(which rpm 2>/dev/null | head -1)
+ if [ ! "$RPMBUILD" -o "$RPMBUILD" == "" ]; then
+ usage 1 "Could not find binary for making rpms (tried rpmbuild and rpm)."
+ fi
+ fi
}
get_lustre_version()
'')
fatal 1 "tarflags(): File name argument missing."
;;
- *.tar.gz)
+ *.tar.gz | *.tgz)
echo 'zxf'
;;
*.tar.bz2)
echo 'jxf'
;;
+ *.tar)
+ echo 'xf'
+ ;;
*)
fatal 1 "tarflags(): Unrecognized tar extension in file: $1"
;;
MAKE_J="$MAKE -j $JOBS"
}
+timed_run() {
+ SLEEP_TIME=$1
+ shift
+
+ set -o monitor
+
+ #bash -c "$@" &
+ ("$@") &
+ child_pid=$!
+
+ (sleep $SLEEP_TIME
+ kill -TERM -$child_pid 2>/dev/null
+ sleep 5
+ kill -KILL -$child_pid 2>/dev/null
+ echo "$1 was killed due to timeout") &
+ dog_pid=$!
+
+ wait $child_pid
+ # status will be set to 143 if the process had to be killed due to timeout
+ status=${PIPESTATUS[0]}
+ kill -KILL -$dog_pid
+ return $status
+}
+
depend_kernel()
{
(( $DEPEND_KERNEL )) || return 0
perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${EXTRA_VERSION}${TARGET_CONFIG}/" Makefile
echo "Making depend in $PWD..."
$MAKE "$MAKE_CC" mrproper || fatal 1 "Error running make mrproper"
+ rm -f rpm-release
cp "$CONFIG_FILE" .config
- for oc in oldconfig_nonint silentoldconfig oldconfig ; do
- if grep -q "$oc" Makefile ; then
- $MAKE "$MAKE_CC" $oc || fatal 1 "Error running make oldconfig"
- break
- fi
- done
+ # use the expect script to "make oldconfig" and answer the questions for
+ # new items conservatively. QA will get notified on anything newly added
+ # for them to review and adjust accordingly.
+ local logfile=$(mktemp /tmp/XXXXXX)
+ #timed_run 300 $TOPDIR/build/update_oldconfig $logfile
+ #local RC=${PIPESTATUS[0]}
+ local RC=$(strace -f -o update_oldconfig.strace bash -c "$TOPDIR/build/update_oldconfig $logfile; echo \$?")
+ if [ $RC -eq 143 ]; then
+ fatal 1 "update_oldconfig timed out"
+ elif [ $RC -ne 0 ]; then
+ # dump the log
+ cat $logfile
+ rm -f $logfile
+ cat update_oldconfig.strace
+ rm -f update_oldconfig.strace
+ fatal 1 "update_oldconfig failed: $RC. See log above."
+ fi
+ rm -f $logfile
+ # now notify if resulting .config is different than $CONFIG_FILE
+ local tmpfile=$(mktemp /tmp/XXXXXX)
+ diff -I '^#.*' -u "$CONFIG_FILE" .config >$tmpfile
+ if [ -s $tmpfile ]; then
+ { cat <<EOF
+To: qa@lists.clusterfs.com
+Subject: kernel_config change
+
+The result of a make oldconfig on file $CONFIG_FILE resulted in a
+difference when compared to .config in the following way:
+
+EOF
+ cat $tmpfile
+ echo -e "\n\nPlease consider updating $CONFIG_FILE."
+ # not sure these are entirely useful. the above and "patch" are good
+ #echo -e "\nThe entire new .config file:\n"
+ #cat .config
+ } | sendmail -fqa@clusterfs.com -t
+ fi
+ rm -f $tmpfile
case "$VERSION" in
2.6*)
$MAKE "$MAKE_CC" include/asm
configure_lustre()
{
+ return 0
(( $BUILD_LUSTRE )) || return 0
pushd "$TOPDIR" >/dev/null
[ -f Makefile ] && make -s clean
{
(( $BUILD_LUSTRE )) || return 0
set_make
+ FULL_VERSION="${VERSION}-${EXTRA_VERSION}${TARGET_CONFIG}"
pushd "$TOPDIR" >/dev/null
- $MAKE_J "$MAKE_CC" || fatal 1 "Error building Lustre."
+ sed \
+ -e s^@VERSION@^${LUSTRE_VERSION}^g \
+ -e s^@LINUXRELEASE@^${FULL_VERSION}^g \
+ -e s^@RELEASE@^${FULL_VERSION//-/_}^g \
+ -e s^@ac_configure_args@^"--with-linux=${PWD}/linux ${CONFIGURE_FLAGS}"^g \
+ < build/lustre.spec.in \
+ > build/lustre.spec
+ $RPMBUILD --target ${TARGET_ARCH} -bb build/lustre.spec \
+ --define "_topdir $(lbuild_topdir)" || \
+ fatal 1 "Error building Lustre rpms."
+ # $MAKE_J "$MAKE_CC" || fatal 1 "Error building Lustre."
popd >/dev/null
}
popd >/dev/null
}
+cleanup_libmodules()
+{
+ (( $INSTALL_LUSTRE )) || return 0
+
+ FULL_VERSION="${VERSION}-${EXTRA_VERSION}${TARGET_CONFIG}"
+ KVERREL="${VERSION}-${EXTRA_VERSION}"
+ i="$DESTDIR/lib/modules/${FULL_VERSION}"
+
+ rm -f $i/build
+ rm -f $i/source
+
+ if (( $LINUX26 )) ; then
+ ln -sf ../../../usr/src/linux-${KVERREL}-obj/${TARGET_ARCH}/${TARGET_CONFIG} $i/build
+ ln -sf ../../../usr/src/linux-${KVERREL} $i/source
+ else
+ ln -sf ../../../usr/src/linux-${KVERREL} $i/build
+ fi
+}
+
install_lustre()
{
(( $INSTALL_LUSTRE )) || return 0
+ return 0
set_make
FULL_VERSION="${VERSION}-${EXTRA_VERSION}${TARGET_CONFIG}"
pushd "$TOPDIR" >/dev/null
mkdir -p "${TOPDIR}/modules-${FULL_VERSION}"
for dir in /usr/src/kernel-modules/* ; do
# we are replacing lustre-lite, so don't include it
- if [ ${dir##*/} != "lustre-lite" -a -e $dir/Makefile ]; then
+ if [ "${dir##*/}" != "lustre-lite" -a -e $dir/Makefile ]; then
build_dir="${TOPDIR}/modules-${FULL_VERSION}/${dir##*/}"
cp -a $dir $build_dir
# these modules are terrible, and don't all build
install_kms()
{
(( $INSTALL_KERNEL )) || return 0
- (( $SUSEBUILD )) || return 0
+ (( $LINUX26 )) || return 0
set_make
FULL_VERSION="${VERSION}-${EXTRA_VERSION}${TARGET_CONFIG}"
for build_dir in "${TOPDIR}/modules-${FULL_VERSION}/*" ; do
install_kms
+cleanup_libmodules
+
save_headers
exit 0