X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=build%2Flbuild;h=49888f755b61e45e607d68afd39e31ee3cd69ee7;hb=644cf03deaf5d11088adf3abfa452e029c7bc6fc;hp=846f1c14ecaa6b5c217dd28da538ed3d1a57ee54;hpb=87a2010dd6dc319922325739995b4233518328db;p=fs%2Flustre-release.git diff --git a/build/lbuild b/build/lbuild index 846f1c1..49888f7 100755 --- a/build/lbuild +++ b/build/lbuild @@ -4,10 +4,12 @@ TOPDIR=$PWD # CVSROOT is inherited from the environment KERNELDIR= +LINUX= LUSTRE= PUBLISH=0 RELEASE=0 -DO_SRC=1 +DO_SRC=0 +DOWNLOAD=1 TAG= TARGET= TARGET_ARCHS= @@ -32,6 +34,7 @@ BOOT_ARCHS= JENSEN_ARCHS= SMP_ARCHS= BIGSMP_ARCHS= +PSERIES64_ARCHS= UP_ARCHS= DATE=$(date) @@ -39,6 +42,20 @@ DATE=$(date) USE_DATESTAMP=1 RPMBUILD= +export CC=${CC:-gcc} + +# Readlink is not present on some older distributions: emulate it. +readlink() { + local path=$1 ll + + if [ -L "$path" ]; then + ll="$(LC_ALL=C ls -l "$path" 2> /dev/null)" && + echo "${ll/* -> }" + else + return 1 + fi +} + cleanup() { true @@ -98,10 +115,17 @@ Usage: ${0##*/} [OPTION]... [-- ] Directory containing Linux source tarballs referenced by target files. + --linux=LINUX + Directory of Linux kernel sources. When this option is used, only + Lustre modules and userspace are built. + --lustre=LUSTRE Path to an existing lustre source tarball to use instead of pulling from CVS. + --nodownload + Do not try to download a kernel from ftp.lustre.org + --nosrc Do not build a .src.rpm, a full kernel patch, or a patched kernel tarball. @@ -113,6 +137,9 @@ Usage: ${0##*/} [OPTION]... [-- ] Specifies that the files generated do not include timestamps, and that this is an official release. + --src + Build a .src.rpm, a full kernel patch, and a patched kernel tarball. + --tag=TAG A CVS branch/tag name to build from when pulling from CVS. @@ -154,24 +181,26 @@ check_options() usage 1 "A branch/tag name must be specified with --tag when not building from a tarball." fi - [ "$KERNELDIR" ] || \ - usage 1 "A kernel directory must be specified with --kerneldir." + if [ -z "$LINUX" ] ; then + [ "$KERNELDIR" ] || \ + usage 1 "A kernel directory must be specified with --kerneldir." - [ -d "$KERNELDIR" ] || \ - usage 1 "$KERNELDIR is not a directory." + [ -d "$KERNELDIR" ] || \ + usage 1 "$KERNELDIR is not a directory." - if ! (( $RELEASE )) ; then - [ "$TAG" ] || \ - usage 1 "When building a snapshot, a tag name must be used." + if ! (( $RELEASE )) ; then + [ "$TAG" ] || \ + usage 1 "When building a snapshot, a tag name must be used." + fi + + [ "$TARGET" ] || usage 1 "A target must be specified with --target." +# TARGET_FILE="$TOPDIR/lustre/kernel_patches/targets/$TARGET.target" +# [ -r "$TARGET_FILE" ] || \ +# usage 1 "Target '$TARGET' was not found." fi TIMESTAMP=$(date -d "$DATE" "+%Y%m%d%H%M") - [ "$TARGET" ] || usage 1 "A target must be specified with --target." -# TARGET_FILE="$TOPDIR/lustre/kernel_patches/targets/$TARGET.target" -# [ -r "$TARGET_FILE" ] || \ -# usage 1 "Target '$TARGET' was not found." - RPMBUILD=$(which rpmbuild 2>/dev/null | head -1) if [ ! "$RPMBUILD" -o "$RPMBUILD" == "" ]; then RPMBUILD=$(which rpm 2>/dev/null | head -1) @@ -207,8 +236,35 @@ load_target() if [ "$KERNELDIR" ] ; then KERNEL_FILE="$KERNELDIR/$KERNEL" - [ -r "$KERNELDIR/$KERNEL" ] || \ - fatal 1 "Target $TARGET's kernel file $KERNEL not found in kernel directory $KERNELDIR." + if [ ! -r "$KERNELDIR/$KERNEL" ] ; then + case $TARGET in + 2.6-rhel4) + dldir="rhel-2.6" + ;; + 2.6-suse) + dldir="suse-2.6" + ;; + hp_pnnl-2.4) + dldir="hp-pnnl-2.4" + ;; + 2.6-vanilla \ + | suse-2.4.21-2 \ + | rh-2.4 \ + | rhel-2.4 \ + | sles-2.4) + dldir="$TARGET" + ;; + esac + if (( $DOWNLOAD )) ; then + echo "Downloading http://ftp.lustre.org/kernels/$dldir/old/$KERNEL..." + if ! wget -nv "http://ftp.lustre.org/kernels/$dldir/old/$KERNEL" \ + -O "$KERNELDIR/$KERNEL" ; then + fatal 1 "Could not download target $TARGET's kernel file $KERNEL from ftp.lustre.org." + fi + else + fatal 1 "Target $TARGET's kernel file $KERNEL not found in kernel directory $KERNELDIR." + fi + fi fi if [ "$SERIES" ] ; then @@ -227,11 +283,13 @@ load_target() if [ "$EXTRA_VERSION_save" ] ; then EXTRA_VERSION="$EXTRA_VERSION_save" elif ! (( $RELEASE )) ; then + #remove the @VERSION@ (lustre version) + EXTRA_VERSION=$(echo $EXTRA_VERSION | sed -e "s/\(.*_lustre\)\..*/\1/") EXTRA_VERSION="${EXTRA_VERSION}-${TAG}.${TIMESTAMP}" fi # EXTRA_VERSION=${EXTRA_VERSION//-/_} - ALL_ARCHS="$BASE_ARCHS $BIGMEM_ARCHS $BOOT_ARCHS $JENSEN_ARCHS $SMP_ARCHS $BIGSMP_ARCHS $UP_ARCHS" + ALL_ARCHS="$BASE_ARCHS $BIGMEM_ARCHS $BOOT_ARCHS $JENSEN_ARCHS $SMP_ARCHS $BIGSMP_ARCHS $PSERIES64_ARCHS $UP_ARCHS" BUILD_ARCHS= for arch in $(uniqify "$ALL_ARCHS") ; do @@ -255,6 +313,9 @@ tarflags() *.tar.bz2) echo 'jxf' ;; + *.tar) + echo 'xf' + ;; *) fatal 1 "tarflags(): Unrecognized tar extension in file: $1" ;; @@ -280,13 +341,20 @@ unpack_lustre() DATESTAMP="" fi - cvs -d "$CVSROOT" -qz3 co $DATESTAMP -r "$TAG" -d "$DIRNAME" lustre || \ - fatal 1 "There was an error checking out Lustre from CVS." + cvs -d "$CVSROOT" -qz3 co $DATESTAMP -d "$DIRNAME" lustre || \ + fatal 1 "There was an error checking out toplevel Lustre from CVS." + pushd "$DIRNAME" > /dev/null + ./lustrecvs "$TAG" || \ + fatal 1 "There was an error checking out Lustre/Portals/Build from CVS." echo "Creating lustre tarball..." - tar zcf "$DIRNAME.tar.gz" "$DIRNAME" \ - --exclude "CVS" --exclude "*~" --exclude ".cvsignore" || \ - fatal 1 "Could not create Lustre tarball." - LUSTRE="$PWD/$DIRNAME.tar.gz" + sh autogen.sh || fatal 1 "There was an error running autogen.sh." + ./configure --disable-{modules,utils,liblustre,tests,doc} || \ + fatal 1 "There was an error running ./configure to create makefiles." + make dist || fatal 1 "There was an error running 'make dist'." + popd > /dev/null + fname=`basename $DIRNAME/lustre-*.tar.gz` + cp $DIRNAME/$fname . || fatal 1 "There was an error copying lustre tarball." + LUSTRE="$PWD/$fname" ln -sf "$DIRNAME" lustre fi } @@ -329,7 +397,8 @@ patch_linux() rm -f linux/configs/* copysuccess=0 for patchesdir in "$EXTERNAL_PATCHES" "lustre/lustre/kernel_patches" ; do - cp -v $patchesdir/kernel_configs/kernel-${VERSION}-${TARGET}*.config linux/configs/ >/dev/null && copysuccess=1 + [ "$patchesdir" ] && \ + cp -v $patchesdir/kernel_configs/kernel-${VERSION}-${TARGET}*.config linux/configs/ >/dev/null && copysuccess=1 done [ "$copysuccess" = "1" ] || \ fatal 1 "Error copying in kernel configs." @@ -353,14 +422,10 @@ clean_linux() rm -rf linux } -prep_build() +prep_kernel_build() { # make .spec file - if [ -f /etc/init.d/functions -a -f /etc/sysconfig/network ] ; then - ENABLE_INIT_SCRIPTS="" - else - ENABLE_INIT_SCRIPTS="# " - fi + ENABLE_INIT_SCRIPTS="" sed \ -e "s^@BASE_ARCHS@^$BASE_ARCHS^g" \ -e "s^@BIGMEM_ARCHS@^$BIGMEM_ARCHS^g" \ @@ -376,6 +441,7 @@ prep_build() -e "s^@LINUX26@^$LINUX26^g" \ -e "s^@LUSTRE_SOURCE@^${LUSTRE##*/}^g" \ -e "s^@LUSTRE_TARGET@^$TARGET^g" \ + -e "s^@PSERIES64_ARCHS@^$PSERIES64_ARCHS^g" \ -e "s^@RHBUILD@^$RHBUILD^g" \ -e "s^@SMP_ARCHS@^$SMP_ARCHS^g" \ -e "s^@SUSEBUILD@^$SUSEBUILD^g" \ @@ -388,7 +454,8 @@ prep_build() [ -d BUILD ] || mkdir BUILD [ -d SOURCES ] || mkdir SOURCES for script in linux-{rhconfig.h,merge-config.awk,merge-modules.awk} \ - suse-{functions.sh,post.sh,postun.sh,trigger-script.sh.in} ; do + suse-{functions.sh,post.sh,postun.sh,trigger-script.sh.in} \ + sles8-{pre,post,postun,update_{INITRD_MODULES,rcfile_setting}}.sh ; do cp $TOPDIR/lustre/build/$script SOURCES done cp "$LUSTRE" "$KERNEL_FILE" SOURCES @@ -402,14 +469,14 @@ prep_build() clean_lustre() { [ -d lustre ] || return 0 - echo "Cleaning lustre..." + echo "Cleaning Lustre..." [ -L lustre ] && rm -rf $(readlink lustre) rm -rf lustre } -build() +build_kernel() { - echo "Building rpms for: $BUILD_ARCHS..." + echo "Building kernel + Lustre RPMs for: $BUILD_ARCHS..." targets= for arch in $BUILD_ARCHS ; do targets="--target $arch $targets" @@ -417,7 +484,7 @@ build() $RPMBUILD $targets -bb lustre-kernel-2.4.spec \ --define "_topdir $TOPDIR" || \ - fatal 1 "Error building rpms for $arch." + fatal 1 "Error building rpms for $BUILD_ARCHS." if (( $DO_SRC )) ; then $RPMBUILD -bs lustre-kernel-2.4.spec \ @@ -426,6 +493,32 @@ build() fi } +build_lustre() +{ + [ -d SRPMS ] || mkdir SRPMS + [ -d RPMS ] || mkdir RPMS + [ -d BUILD ] || mkdir BUILD + [ -d SOURCES ] || mkdir SOURCES + + cp "$LUSTRE" SOURCES + + pushd lustre >/dev/null + + echo "Building Lustre RPMs for: $BUILD_ARCHS..." + targets= + for arch in $BUILD_ARCHS ; do + targets="--target $arch $targets" + done + + ./configure "--with-linux=${LINUX}" ${CONFIGURE_FLAGS} + + $RPMBUILD $targets -bb build/lustre.spec \ + --define "_topdir $TOPDIR" || \ + fatal 1 "Error building rpms for $BUILD_ARCHS." + + popd >/dev/null +} + publish() { publishing || return 0 @@ -433,7 +526,11 @@ publish() [ -r ~/.lbuildrc ] && . ~/.lbuildrc -options=$(getopt -o d:D:h -l external-patches:,extraversion:,kerneldir:,lustre:,nosrc,publish,release,tag:,target:,target-archs:,disable-datestamp -- "$@") +options=$(getopt -o d:D:h -l disable-datestamp,external-patches:,extraversion:,kerneldir:,linux:,lustre:,nodownload,nosrc,publish,release,tag:,target:,target-archs:,with-linux: -- "$@") + +if [ $? != 0 ] ; then + usage 1 +fi eval set -- "$options" @@ -465,10 +562,18 @@ while [ "$1" ] ; do KERNELDIR=$2 shift 2 ;; + --linux | --with-linux) + LINUX=$2 + shift 2 + ;; --lustre) LUSTRE=$2 shift 2 ;; + --nodownload) + DOWNLOAD=0 + shift 1 + ;; --nosrc) DO_SRC=0 shift 1 @@ -481,6 +586,10 @@ while [ "$1" ] ; do RELEASE=1 shift ;; + --src) + DO_SRC=1 + shift 1 + ;; --tag) TAG=$2 shift 2 @@ -511,18 +620,24 @@ done check_options unpack_lustre -load_target - -if (( $DO_SRC )) ; then - unpack_linux - patch_linux - pack_linux - clean_linux -fi # prep_build needs the .spec.in from the lustre source -prep_build -clean_lustre +if [ -z "$LINUX" ] ; then + load_target + + if (( $DO_SRC )) ; then + unpack_linux + patch_linux + pack_linux + clean_linux + fi + + prep_kernel_build + clean_lustre + + build_kernel +else + build_lustre +fi -build publish