X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=build%2Flmake;h=8a0b47ba4bb7244524b1d6d4380611324909bf56;hb=022b102258cd85314f4fa1fb8322638cc79f4634;hp=a98478bb9953ad69d1a97689b92636013240329f;hpb=06830095868bdcb4176debf9a83850adbc5b27c3;p=fs%2Flustre-release.git diff --git a/build/lmake b/build/lmake index a98478b..8a0b47b 100755 --- a/build/lmake +++ b/build/lmake @@ -10,6 +10,7 @@ TARGET_ARCH= TARGET_CONFIG= JOBS=1 CONFIGURE_FLAGS= +TMPDIR=${TMPDIR:-"/var/tmp"} # commands to run BUILD_LUSTRE=0 @@ -260,13 +261,32 @@ load_target() fi } +# do these after load_target(), which maybe export CC +setup_ccache_distcc() +{ + # distcc can't handle ".incbin" + if [ "$TARGET" == "2.6-suse" -o "$TARGET" == "2.6-rhel4" ]; then + if [ "$TARGET_ARCH" == "x86_64" ]; then + unset DISTCC + fi + fi + + CC=${CC:-gcc} + if [ "$CCACHE" ]; then + CC="$CCACHE $CC" + [ "$DISTCC" ] && export CCACHE_PREFIX="$DISTCC" + else + [ "$DISTCC" ] && CC="$DISTCC $CC" + fi +} + tarflags() { case "$1" in '') fatal 1 "tarflags(): File name argument missing." ;; - *.tar.gz) + *.tar.gz | *.tgz) echo 'zxf' ;; *.tar.bz2) @@ -341,6 +361,30 @@ set_make() 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 @@ -349,16 +393,69 @@ depend_kernel() set_make pushd "$TOPDIR/linux" >/dev/null echo "Overriding EXTRAVERSION in kernel..." - perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${EXTRA_VERSION}${TARGET_CONFIG}/" Makefile + perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = ${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}${TARGET_CONFIG}/" Makefile echo "Making depend in $PWD..." $MAKE "$MAKE_CC" mrproper || fatal 1 "Error running make mrproper" + rm -f rpm-release + # remove localversion-* files to avoid kernel release string + # srewing up by the top-level Makefile + rm -f localversion-* 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 + local UPDATE_OLDCONFIG= + for oc in oldconfig_nonint silentoldconfig oldconfig ; do + if grep -q "$oc" Makefile ; then + timed_run 300 $MAKE "$MAKE_CC" $oc || UPDATE_OLDCONFIG=1 + break + fi done + + if [ "$UPDATE_OLDCONFIG" ] ; then + # 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 \$?") + $TOPDIR/build/update_oldconfig $logfile + local RC=${PIPESTATUS[0]} + #$TOPDIR/build/update_oldconfig $logfile + #local RC=${PIPESTATUS[0]} + if [ $RC -eq 143 ]; then + fatal 1 "update_oldconfig timed out" + elif [ $RC -ne 0 ]; then + # dump the log + cat $logfile + rm -f $logfile + if [ -f update_oldconfig.strace ]; then + cat update_oldconfig.strace + rm -f update_oldconfig.strace + fi + 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 </dev/null 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 \ + < lustre.spec.in \ + > lustre.spec + $RPMBUILD --target ${TARGET_ARCH} -bb lustre.spec \ + --define "_tmppath $TMPDIR" \ --define "_topdir $(lbuild_topdir)" || \ fatal 1 "Error building Lustre rpms." # $MAKE_J "$MAKE_CC" || fatal 1 "Error building Lustre." @@ -428,7 +526,7 @@ install_kernel() { (( $INSTALL_KERNEL )) || return 0 set_make - FULL_VERSION="${VERSION}-${EXTRA_VERSION}${TARGET_CONFIG}" + FULL_VERSION="${VERSION}${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}${TARGET_CONFIG}" pushd "$TOPDIR/linux" >/dev/null mkdir -p "$DESTDIR/boot" @@ -481,12 +579,31 @@ install_kernel() popd >/dev/null } +cleanup_libmodules() +{ + (( $INSTALL_LUSTRE )) || return 0 + + FULL_VERSION="${VERSION}${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}${TARGET_CONFIG}" + KVERREL="${VERSION}${EXTRA_VERSION_DELIMITER}${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}" + FULL_VERSION="${VERSION}${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}${TARGET_CONFIG}" pushd "$TOPDIR" >/dev/null $MAKE "$MAKE_CC" -s install "DESTDIR=$DESTDIR" KERNELRELEASE="$FULL_VERSION" || fatal 1 "Error installing Lustre." popd >/dev/null @@ -497,11 +614,11 @@ build_kms() (( $BUILD_KERNEL )) || return 0 (( $SUSEBUILD )) || return 0 set_make - FULL_VERSION="${VERSION}-${EXTRA_VERSION}${TARGET_CONFIG}" + FULL_VERSION="${VERSION}${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}${TARGET_CONFIG}" 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 @@ -522,7 +639,7 @@ install_kms() (( $INSTALL_KERNEL )) || return 0 (( $LINUX26 )) || return 0 set_make - FULL_VERSION="${VERSION}-${EXTRA_VERSION}${TARGET_CONFIG}" + FULL_VERSION="${VERSION}${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}${TARGET_CONFIG}" for build_dir in "${TOPDIR}/modules-${FULL_VERSION}/*" ; do [ -d $build_dir ] || continue # these modules are terrible, and don't all build @@ -540,7 +657,7 @@ install_kms() symver $module done ) | sort -u -k2 \ - | gzip -c9 > "${DESTDIR}/boot/symvers-${VERSION}-${EXTRA_VERSION}-${TARGET_ARCH}${TARGET_CONFIG}.gz" + | gzip -c9 > "${DESTDIR}/boot/symvers-${VERSION}${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}-${TARGET_ARCH}${TARGET_CONFIG}.gz" } save_headers() @@ -550,7 +667,7 @@ save_headers() echo "Saving headers for ${TARGET_CONFIG:-up} ${TARGET_ARCH}..." pushd linux >/dev/null - KVERREL="${VERSION}-${EXTRA_VERSION}" + KVERREL="${VERSION}${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}" # deal with the kernel headers that are version specific saveddir="$RPM_BUILD_ROOT/usr/src/linux-${KVERREL}/savedheaders/${TARGET_ARCH}/${TARGET_CONFIG:-up}" @@ -692,6 +809,8 @@ done check_options load_target +EXTRA_VERSION_DELIMITER=${EXTRA_VERSION_DELIMITER:-"-"} +setup_ccache_distcc extract_kernel patch_kernel @@ -709,6 +828,8 @@ install_lustre install_kms +cleanup_libmodules + save_headers exit 0