+++ /dev/null
-#!/bin/sh
-
-# option variables
-DESTDIR=
-KERNELDIR=
-TARGET=
-# Not sure what to put here
-# TARGET_ARCH=$(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
-TARGET_ARCH=
-TARGET_CONFIG=
-JOBS=1
-CONFIGURE_FLAGS=
-
-# commands to run
-BUILD_LUSTRE=0
-BUILD_KERNEL=0
-DEPEND_KERNEL=0
-INSTALL_LUSTRE=0
-INSTALL_KERNEL=0
-SAVE_HEADERS=0
-UNPACK_KERNEL=0
-
-# provided by target file
-KERNEL=
-SERIES=
-CONFIG=
-VERSION=
-EXTRA_VERSION=
-
-BASE_ARCH=
-BIGMEM_ARCHS=
-BOOT_ARCHS=
-JENSEN_ARCHS=
-SMP_ARCHS=
-UP_ARCHS=
-
-# flat-out globals
-TOPDIR=
-TARGET_FILE=
-KERNEL_FILE=
-SERIES_FILE=
-CONFIG_FILE=
-CC=${CC:-gcc}
-
-canon()
-{
- pushd $1 >/dev/null
- echo $PWD
- popd >/dev/null
-}
-TOPDIR=$(canon "${0%%${0##*/}}/..")
-
-cleanup()
-{
- true
-}
-
-fatal()
-{
- cleanup
- [ "$2" ] && echo
- [ "$2" ] && echo "${0##*/}: $2"
- exit $1
-}
-
-list_targets()
-{
- echo -n "Available targets:"
- for target in $TOPDIR/kernel_patches/targets/*.target ; do
- target_file=${target##*/}
- echo -n " ${target_file%%.target}"
- done
- echo
-}
-
-
-usage()
-{
- cat <<EOF
-Usage: ${0##*/} [OPTION]... [-- <lustre configure options>]
-
-Options:
-
- --build
- same as --build-kernel --build-lustre --unpack-kernel
-
- --build-lustre
- configure and compile lustre. Requires that --build-kernel was
- already run.
-
- --build-kernel
- configure and compile a kernel. Implies --depend-kernel.
- Requires that --unpack-kernel was already run.
-
- --depend-kernel)
- Prepares a kernel tree for building (similar to make mrproper
- oldconfig dep). Requires that --unpack-kernel was already run.
-
- --destdir=DESTDIR
- Root directory to install into (like DESTDIR with auto*).
-
- --extraversion=EXTRAVERSION
- Overrides the target kernel\'s EXTRAVERSION text.
-
- -h, --help
- Display this message.
-
- --install
- same as --install-kernel --install-lustre
-
- --install-lustre
- run make install in the Lustre tree.
-
- --install-kernel
- install the kernel image and modules.
-
- -j jobs
- This works just like the -j option to make, and is passed to make
- when building.
-
- --kerneldir=KERNELDIR
- Directory containing linux source tarballs.
-
- --target=TARGET
- Name of the configuration to use. The available targets are
- listed below.
-
- --target-arch=ARCH
- Specifies an architecture to use when choosing a kernel config
- file. Default is i386.
-
- --target-config=CONFIG
- Specifies a special option (such as smp, bigmem, or BOOT) to use
- when choosing a kernel config file. This also modifies the kernel
- version and modules directory.
-
- --unpack-kernel
- Untars and patches the kernel source.
-
- The order that commands (--build-lustre, --unpack-kernel) are
- specified on the command line is ignored; ${0##*/} will always
- execute them in the correct order (unpack, then build, then install
- etc.).
-
-EOF
- list_targets
-
- fatal "$1" "$2"
-}
-
-check_options()
-{
- (( $BUILD_LUSTRE || $BUILD_KERNEL || $DEPEND_KERNEL || \
- $INSTALL_LUSTRE || $INSTALL_KERNEL || $SAVE_HEADERS || \
- $UNPACK_KERNEL )) || \
- fatal 1 "No commands specified."
-
- if (( $UNPACK_KERNEL )) ; then
- [ "$KERNELDIR" ] || \
- fatal 1 "A kernel directory must be specified with --kerneldir."
- [ -d "$KERNELDIR" ] || \
- fatal 1 "$KERNELDIR is not a directory."
- fi
-
- if (( $INSTALL_LUSTRE || $INSTALL_KERNEL || $SAVE_HEADERS )) ; then
- [ -z "$DESTDIR" -o -d "$DESTDIR" ] || \
- fatal 1 "$DESTDIR is not a directory."
- fi
-
- [ "$TARGET" ] || usage 1 "A target must be specified with --target."
- TARGET_FILE="$TOPDIR/kernel_patches/targets/$TARGET.target"
- [ -r "$TARGET_FILE" ] || \
- fatal 1 "Target '$TARGET' was not found. Try --list-targets."
-
- if [ -z "$JOBS" -o "$JOBS" -lt "1" ] ; then
- JOBS=1
- fi
-}
-
-get_lustre_version()
-{
- lustre_patch=$(grep lustre_version "$SERIES_FILE" 2>/dev/null)
- [ "$lustre_patch" ] || \
- fatal 1 "Could not determine Lustre version from $SERIES series."
-
- awk '/^\+#define LUSTRE_KERNEL_VERSION /{ print $3 }' \
- "$TOPDIR/kernel_patches/patches/$lustre_patch" 2>/dev/null
-}
-
-load_target()
-{
- EXTRA_VERSION_save="$EXTRA_VERSION"
-
- . "$TARGET_FILE"
-
- [ "$KERNEL" ] || fatal 1 "Target $TARGET did not specify a kernel."
- [ "$SERIES" ] || fatal 1 "Target $TARGET did not specify a patch series."
-# [ "$CONFIG" ] || fatal 1 "Target $TARGET did not specify a kernel config."
- [ "$VERSION" ] || fatal 1 "Target $TARGET did not specify the kernel version."
-
- if [ "$KERNELDIR" ] ; then
- KERNEL_FILE="$KERNELDIR/$KERNEL"
- [ -r "$KERNELDIR/$KERNEL" ] || \
- fatal 1 "Target $TARGET's kernel file $KERNEL not found in kernel directory $KERNELDIR."
- fi
-
- SERIES_FILE="$TOPDIR/kernel_patches/series/$SERIES"
- [ -r "$SERIES_FILE" ] || \
- fatal 1 "Target $TARGET's series $SERIES missing from $TOPDIR/kernel_patches/series."
-
- TARGET_ARCH=${TARGET_ARCH:-$BASE_ARCHS}
- CONFIG_TARGET="$TARGET-${TARGET_ARCH}${TARGET_CONFIG:+-$TARGET_CONFIG}"
- CONFIG_FILE="$TOPDIR/kernel_patches/kernel_configs/kernel-$VERSION-$CONFIG_TARGET.config"
- [ -r "$CONFIG_FILE" ] ||
- fatal 1 "Target $TARGET's config file $CONFIG_FILE missing from $TOPDIR/kernel_patches/configs."
-
- if [ "$EXTRA_VERSION_save" ] ; then
- EXTRA_VERSION="$EXTRA_VERSION_save"
- else
- EXTRA_VERSION="${EXTRA_VERSION}_lustre.$(get_lustre_version)"
- fi
-}
-
-tarflags()
-{
- case "$1" in
- '')
- fatal 1 "tarflags(): File name argument missing."
- ;;
- *.tar.gz)
- echo 'zxf'
- ;;
- *.tar.bz2)
- echo 'jxf'
- ;;
- *)
- fatal 1 "tarflags(): Unrecognized tar extension in file: $1"
- ;;
- esac
-}
-
-untar()
-{
- echo "Untarring ${1##*/}..."
- tar $(tarflags $1) $1
-}
-
-
-extract_kernel()
-{
- (( $UNPACK_KERNEL )) || return 0
- pushd "$TOPDIR" >/dev/null
- if [ -d linux ] ; then
- [ -L linux ] && rm -rf $(readlink linux)
- rm -rf linux
- fi
- untar "$KERNEL_FILE"
- [ -d linux ] || ln -sf linux* linux
- popd >/dev/null
-}
-
-patch_kernel()
-{
- (( $UNPACK_KERNEL )) || return 0
- pushd "$TOPDIR/linux" >/dev/null
- echo -n "Applying patch"
- for patch in $(<"$SERIES_FILE") ; do
- PATCH_FILE="$TOPDIR/kernel_patches/patches/$patch"
- [ -r "$PATCH_FILE" ] || \
- fatal 1 "Patch file not found: $patch"
- echo -n " $patch"
- patch -s -p1 < "$PATCH_FILE" || fatal 1 "Error applying patch $patch."
- done
- echo
- popd >/dev/null
-}
-
-set_make()
-{
- MAKE="make -s CC=$CC"
- if [ "$ARCH" ] ; then
- MAKE="$MAKE ARCH=$ARCH"
- fi
- MAKE_J="$MAKE -j $JOBS"
-}
-
-depend_kernel()
-{
- (( $DEPEND_KERNEL )) || return 0
- # we need to override $CC at make time, since there is no
- # configure
- set_make
- pushd "$TOPDIR/linux" >/dev/null
- 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"
- cp "$CONFIG_FILE" .config
- if grep -q oldconfig_nonint Makefile ; then
- OLDCONFIG='oldconfig_nonint'
- else
- OLDCONFIG='oldconfig'
- fi
- $MAKE $OLDCONFIG || fatal 1 "Error running make oldconfig"
- $MAKE_J dep || fatal 1 "Error running make dep"
- $MAKE include/linux/version.h || fatal 1 "Error making include/linux/version.h"
-}
-
-build_kernel()
-{
- (( $BUILD_KERNEL )) || return 0
- # we need to override $CC at make time, since there is no
- # configure
- set_make
- echo "Building kernel in $PWD..."
- case "$TARGET_ARCH" in
- i386 | i586 | i686 | athlon | x86_64)
- $MAKE_J bzImage || fatal 1 "Error making bzImage."
- ;;
- *)
- $MAKE_J boot || fatal 1 "Error making boot."
- ;;
- esac
- $MAKE_J modules || fatal 1 "Error building modules."
-
- popd >/dev/null
-}
-
-configure_lustre()
-{
- (( $BUILD_LUSTRE )) || return 0
- pushd "$TOPDIR" >/dev/null
- [ -f Makefile ] && make -s clean
- [ -f configure ] || sh ./autogen.sh
- ./configure --with-linux=$PWD/linux $CONFIGURE_FLAGS || \
- fatal 1 "Error configuring Lustre."
- popd >/dev/null
-}
-
-build_lustre()
-{
- (( $BUILD_LUSTRE )) || return 0
- set_make
- pushd "$TOPDIR" >/dev/null
- $MAKE_J || fatal 1 "Error building Lustre."
- popd >/dev/null
-}
-
-install_kernel()
-{
- (( $INSTALL_KERNEL )) || return 0
- FULL_VERSION="${VERSION}-${EXTRA_VERSION}${TARGET_CONFIG}"
- pushd "$TOPDIR/linux" >/dev/null
- mkdir -p "$DESTDIR/boot"
-
- install -m 644 System.map "$DESTDIR/boot/System.map-${FULL_VERSION}"
- # install -m 644 module-info ...
- install -m 644 "$CONFIG_FILE" "$DESTDIR/boot/config-${FULL_VERSION}"
-
- mkdir -p "$DESTDIR/dev/shm"
- mkdir -p "$DESTDIR/lib/modules/${FULL_VERSION}"
-
- make CC="$CC" INSTALL_MOD_PATH="$DESTDIR" KERNELRELEASE="$FULL_VERSION" \
- -s modules_install || \
- fatal 1 "Error installing modules."
-
- case "$TARGET_ARCH" in
- i386 | i586 | i686 | athlon)
- cp arch/i386/boot/bzImage "$DESTDIR/boot/vmlinuz-${FULL_VERSION}"
- cp vmlinux "$DESTDIR/lib/modules/${FULL_VERSION}/"
- ln -sf "../lib/modules/${FULL_VERSION}/vmlinux" "$DESTDIR/boot/vmlinux-${FULL_VERSION}"
- ;;
- x86_64)
- cp arch/x86_64/boot/bzImage "$DESTDIR/boot/vmlinuz-${FULL_VERSION}"
- cp vmlinux "$DESTDIR/lib/modules/${FULL_VERSION}/"
- ln -sf "../lib/modules/${FULL_VERSION}/vmlinux" "$DESTDIR/boot/vmlinux-${FULL_VERSION}"
- ;;
- ia64)
- gzip -cfv vmlinux > vmlinuz
- mkdir -p "$DESTDIR/boot/efi/redhat"
- install -m 755 vmlinux "$DESTDIR/lib/modules/${FULL_VERSION}/"
- install -m 755 vmlinuz "$DESTDIR/boot/efi/redhat/vmlinuz-${FULL_VERSION}"
- ln -sf "../lib/modules/${FULL_VERSION}/vmlinux" "$DESTDIR/boot/efi/redhat/vmlinux-${FULL_VERSION}"
- ln -sf "efi/redhat/vmlinux-${FULL_VERSION}" "$DESTDIR/boot/vmlinux-${FULL_VERSION}"
- ln -sf "efi/redhat/vmlinuz-${FULL_VERSION}" "$DESTDIR/boot/vmlinuz-${FULL_VERSION}"
- ;;
- *)
- cp vmlinuz "$DESTDIR/boot/vmlinuz-${FULL_VERSION}"
- cp vmlinux "$DESTDIR/lib/modules/${FULL_VERSION}/vmlinux-${FULL_VERSION}"
- ln -sf "../lib/modules/${FULL_VERSION}/vmlinux-${FULL_VERSION}" "$DESTDIR/boot/vmlinux-${FULL_VERSION}"
-
- ;;
- esac
-
- popd >/dev/null
-}
-
-install_lustre()
-{
- (( $INSTALL_LUSTRE )) || return 0
- FULL_VERSION="${VERSION}-${EXTRA_VERSION}${TARGET_CONFIG}"
- pushd "$TOPDIR" >/dev/null
- make -s install "DESTDIR=$DESTDIR" KERNELRELEASE="$FULL_VERSION" || fatal 1 "Error installing Lustre."
- popd >/dev/null
-}
-
-save_headers()
-{
- echo "Saving headers for $1 $2..."
- 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"
- 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
- popd >/dev/null
-}
-
-save_all_headers()
-{
- (( $SAVE_HEADERS )) || return 0
-
- for arch in $BIGMEM_ARCHS ; do
- save_headers bigmem $arch
- done
-
- for arch in $BOOT_ARCHS ; do
- save_headers BOOT $arch
- done
-
- for arch in $JENSEN_ARCHS ; do
- save_headers jensen $arch
- done
-
- for arch in $SMP_ARCHS ; do
- save_headers smp $arch
- done
-
- for arch in $UP_ARCHS ; do
- save_headers up $arch
- done
-}
-
-longopts="build,build-lustre,build-kernel,depend-kernel,destdir:,extraversion:"
-longopts="$longopts,help,install,install-lustre,install-kernel,kerneldir:"
-longopts="$longopts,save-headers,target:,target-arch:,target-config:,unpack-kernel"
-
-options=$(getopt -o hj: -l "$longopts" -- "$@")
-
-eval set -- "$options"
-
-while [ "$1" ] ; do
- case "$1" in
- '')
- usage 1
- ;;
- --build)
- BUILD_LUSTRE=1
- BUILD_KERNEL=1
- DEPEND_KERNEL=1
- UNPACK_KERNEL=1
- shift
- ;;
- --build-lustre)
- BUILD_LUSTRE=1
- shift
- ;;
- --build-kernel)
- BUILD_KERNEL=1
- DEPEND_KERNEL=1
- shift
- ;;
- --depend-kernel)
- DEPEND_KERNEL=1
- shift
- ;;
- --destdir)
- DESTDIR=$2
- shift 2
- ;;
- --extraversion)
- EXTRA_VERSION=$2
- shift 2
- ;;
- --help | -h)
- usage 0
- ;;
- --install)
- INSTALL_LUSTRE=1
- INSTALL_KERNEL=1
- shift
- ;;
- --install-lustre)
- INSTALL_LUSTRE=1
- shift
- ;;
- --install-kernel)
- INSTALL_KERNEL=1
- shift
- ;;
- -j)
- JOBS=$2
- shift 2
- ;;
- --kerneldir)
- KERNELDIR=$2
- shift 2
- ;;
- --save-headers)
- SAVE_HEADERS=1
- shift
- ;;
- --target)
- TARGET=$2
- shift 2
- ;;
- --target-arch)
- TARGET_ARCH=$2
- shift 2
- ;;
- --target-config)
- TARGET_CONFIG=$2
- shift 2
- ;;
- --unpack-kernel)
- UNPACK_KERNEL=1
- shift
- ;;
- --)
- shift
- CONFIGURE_FLAGS=$@
- break
- ;;
- *)
- usage 1 "Unrecognized option: $1"
- ;;
- esac
-done
-
-check_options
-load_target
-
-extract_kernel
-patch_kernel
-
-depend_kernel
-build_kernel
-
-configure_lustre
-build_lustre
-
-install_kernel
-install_lustre
-
-save_all_headers
-
-exit 0