X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=build%2Flbuild;h=49888f755b61e45e607d68afd39e31ee3cd69ee7;hb=644cf03deaf5d11088adf3abfa452e029c7bc6fc;hp=03c415edc48f865a6692858891c3bdb576d2f8d4;hpb=c7d49ceeafcd73d38503844491073864f2634451;p=fs%2Flustre-release.git diff --git a/build/lbuild b/build/lbuild index 03c415e..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=0 +DOWNLOAD=1 TAG= TARGET= TARGET_ARCHS= @@ -113,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. @@ -128,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. @@ -169,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) @@ -222,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 @@ -272,6 +313,9 @@ tarflags() *.tar.bz2) echo 'jxf' ;; + *.tar) + echo 'xf' + ;; *) fatal 1 "tarflags(): Unrecognized tar extension in file: $1" ;; @@ -378,7 +422,7 @@ clean_linux() rm -rf linux } -prep_build() +prep_kernel_build() { # make .spec file ENABLE_INIT_SCRIPTS="" @@ -425,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" @@ -440,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 \ @@ -449,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 @@ -456,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" @@ -488,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 @@ -504,6 +586,10 @@ while [ "$1" ] ; do RELEASE=1 shift ;; + --src) + DO_SRC=1 + shift 1 + ;; --tag) TAG=$2 shift 2 @@ -534,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