X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=build%2Flmake;h=f79541598c40b21b7eb6308f41d47c85a349e0b7;hp=52037bb002f6e22d850bf4ba801c9394508e78b6;hb=4ecae3cd5af60e389eba1e6eff2913b09f557203;hpb=c9a811c0245d95cf7661f059111dcb3b90b3faf5 diff --git a/build/lmake b/build/lmake index 52037bb..f795415 100755 --- a/build/lmake +++ b/build/lmake @@ -33,6 +33,7 @@ BOOT_ARCHS= JENSEN_ARCHS= SMP_ARCHS= BIGSMP_ARCHS= +PSERIES64_ARCHS= UP_ARCHS= RHBUILD=0 @@ -44,6 +45,7 @@ TARGET_FILE= KERNEL_FILE= SERIES_FILE= CONFIG_FILE= +RPMBUILD= canon() { @@ -51,7 +53,24 @@ 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() { @@ -178,6 +197,14 @@ check_options() 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() @@ -239,12 +266,15 @@ tarflags() '') 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" ;; @@ -295,7 +325,7 @@ set_make() { MAKE="make -s" if [ "$CC" ] ; then - MAKE="$MAKE CC=$CC" + MAKE_CC="CC=$CC" fi if [ "$ARCH" ] ; then MAKE_ARCH="$MAKE ARCH=$ARCH" @@ -311,6 +341,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 @@ -321,24 +375,57 @@ depend_kernel() echo "Overriding EXTRAVERSION in kernel..." perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${EXTRA_VERSION}${TARGET_CONFIG}/" Makefile echo "Making depend in $PWD..." - $MAKE mrproper || fatal 1 "Error running make mrproper" + $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 $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 </dev/null } configure_lustre() { + return 0 (( $BUILD_LUSTRE )) || return 0 pushd "$TOPDIR" >/dev/null [ -f Makefile ] && make -s clean @@ -377,8 +465,19 @@ build_lustre() { (( $BUILD_LUSTRE )) || return 0 set_make + FULL_VERSION="${VERSION}-${EXTRA_VERSION}${TARGET_CONFIG}" pushd "$TOPDIR" >/dev/null - $MAKE_J || 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 } @@ -397,7 +496,7 @@ install_kernel() mkdir -p "$DESTDIR/dev/shm" mkdir -p "$DESTDIR/lib/modules/${FULL_VERSION}" - $MAKE INSTALL_MOD_PATH="$DESTDIR" KERNELRELEASE="$FULL_VERSION" \ + $MAKE "$MAKE_CC" INSTALL_MOD_PATH="$DESTDIR" KERNELRELEASE="$FULL_VERSION" \ -s modules_install || \ fatal 1 "Error installing modules." @@ -439,13 +538,33 @@ install_kernel() 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 - $MAKE -s install "DESTDIR=$DESTDIR" KERNELRELEASE="$FULL_VERSION" || fatal 1 "Error installing Lustre." + $MAKE "$MAKE_CC" -s install "DESTDIR=$DESTDIR" KERNELRELEASE="$FULL_VERSION" || fatal 1 "Error installing Lustre." popd >/dev/null } @@ -458,11 +577,11 @@ build_kms() 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 - $MAKE_J -C $build_dir modules KERNEL_SOURCE="${TOPDIR}/linux" + $MAKE_J "$MAKE_CC" -C $build_dir modules KERNEL_SOURCE="${TOPDIR}/linux" fi done } @@ -477,13 +596,13 @@ symver() 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 [ -d $build_dir ] || continue # these modules are terrible, and don't all build - $MAKE -C $build_dir KERNEL_SOURCE="${TOPDIR}/linux" INSTALL_MOD_PATH="$DESTDIR" + $MAKE "$MAKE_CC" -C $build_dir KERNEL_SOURCE="${TOPDIR}/linux" INSTALL_MOD_PATH="$DESTDIR" done ( symver vmlinux moddir="${DESTDIR}/lib/modules/${FULL_VERSION}" @@ -502,18 +621,21 @@ install_kms() save_headers() { - echo "Saving headers for $1 $2..." + (( $SAVE_HEADERS )) || return 0 + + echo "Saving headers for ${TARGET_CONFIG:-up} ${TARGET_ARCH}..." pushd linux >/dev/null KVERREL="${VERSION}-${EXTRA_VERSION}" # deal with the kernel headers that are version specific - saveddir="$RPM_BUILD_ROOT/usr/src/linux-${KVERREL}/savedheaders/$2/$1" + saveddir="$RPM_BUILD_ROOT/usr/src/linux-${KVERREL}/savedheaders/${TARGET_ARCH}/${TARGET_CONFIG:-up}" mkdir -p "$saveddir" install -m 644 include/linux/autoconf.h "$saveddir/autoconf.h" install -m 644 include/linux/version.h "$saveddir/version.h" mv include/linux/modules "$saveddir/" - echo $2 $1 ../../savedheaders/$2/$1/ >> $RPM_BUILD_ROOT/usr/src/linux-${KVERREL}/savedheaders/list + echo ${TARGET_ARCH} ${TARGET_CONFIG} ../../savedheaders/${TARGET_ARCH}/${TARGET_CONFIG:-up}/ \ + >> "$RPM_BUILD_ROOT/usr/src/linux-${KVERREL}/savedheaders/list" popd >/dev/null } @@ -540,6 +662,9 @@ save_all_headers() for arch in $BIGSMP_ARCHS ; do save_headers bigsmp $arch done + for arch in $PSERIES64_ARCHS ; do + save_headers pseries64 $arch + done for arch in $UP_ARCHS ; do save_headers up $arch done @@ -660,6 +785,8 @@ install_lustre install_kms -save_all_headers +cleanup_libmodules + +save_headers exit 0