SERIES_FILE=
CONFIG_FILE=
RPMBUILD=
+XEN=false
canon()
{
--unpack-kernel
Untars and patches the kernel source.
+ --xen
+ Builds a Xen domX kernel.
+
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
. "$TARGET_FILE"
+ # doesn't make any sense to build OFED for xen domX's
+ if $XEN; then
+ OFED_VERSION=""
+ fi
+
[ "$KERNEL" ] || fatal 1 "Target $TARGET did not specify a kernel."
# Suse 2.6 has our patches in already
# [ "$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" ] || \
done
fi
+ local XENPOSTFIX=""
+ if $XEN; then
+ XENPOSTFIX="-xen"
+ fi
+
TARGET_ARCH=${TARGET_ARCH:-$BASE_ARCHS}
- CONFIG_TARGET="$TARGET-${TARGET_ARCH}${TARGET_CONFIG:+-$TARGET_CONFIG}"
+ CONFIG_TARGET="${TARGET}${XENPOSTFIX}-${TARGET_ARCH}${TARGET_CONFIG:+-$TARGET_CONFIG}"
CONFIG_FILE="$TOPDIR/lustre/kernel_patches/kernel_configs/kernel-$VERSION-$CONFIG_TARGET.config"
[ -r "$CONFIG_FILE" ] ||
fatal 1 "Target $TARGET's config file $CONFIG_FILE missing from $TOPDIR/lustre/kernel_patches/configs."
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="$CCACHE $CC"
+ [ "$DISTCC" ] && export CCACHE_PREFIX="$DISTCC"
+ else
+ [ "$DISTCC" ] && CC="$DISTCC $CC"
+ fi
+}
+
tarflags()
{
case "$1" in
[ -L linux ] && rm -rf $(readlink linux)
rm -rf linux
fi
- untar "$KERNEL_FILE"
+ untar "$KERNEL_FILE" || fatal 1 "Error unpacking Linux tarball"
[ -d linux ] || ln -sf linux* linux
popd >/dev/null
}
set_make()
{
MAKE="make -s"
- if [ "$CC" ] ; then
- MAKE_CC="CC=$CC"
- fi
+ [ "$CC" ] && {
+ if [ "$TARGET_ARCH" == "ppc64" ] ; then
+ MAKE_CC="CC=$CC -m64"
+ else
+ MAKE_CC="CC=$CC"
+ fi
+ }
if [ "$ARCH" ] ; then
MAKE_ARCH="$MAKE ARCH=$ARCH"
else
set_make
pushd "$TOPDIR/linux" >/dev/null
echo "Overriding EXTRAVERSION in kernel..."
- perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${EXTRA_VERSION}${TARGET_CONFIG}/" Makefile
+ local extra_version="${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}"
+ if [ -n "${TARGET_CONFIG}" ]; then
+ extra_version="${extra_version}${TARGET_DELIMITER}${TARGET_CONFIG}"
+ fi
+ perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = ${extra_version}/" 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
local UPDATE_OLDCONFIG=
for oc in oldconfig_nonint silentoldconfig oldconfig ; do
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 <<EOF
-To: qa@lists.clusterfs.com
+ 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 <<EOF
+To: lustre-qa-team@sun.com
Subject: kernel_config change
The result of a make oldconfig on file $CONFIG_FILE resulted in a
difference when compared to .config in the following way:
EOF
- cat $tmpfile
- echo -e "\n\nPlease consider updating $CONFIG_FILE."
- # not sure these are entirely useful. the above and "patch" are good
- #echo -e "\nThe entire new .config file:\n"
- #cat .config
- } | sendmail -fqa@clusterfs.com -t
- fi
- rm -f $tmpfile
+ cat $tmpfile
+ echo -e "\n\nPlease consider updating $CONFIG_FILE for version: $extra_version."
+ # not sure these are entirely useful. the above and "patch" are good
+ #echo -e "\nThe entire new .config file:\n"
+ #cat .config
+ # sadly, the build roots can't e-mail out, so we can only display this
+ # to stderr for an interested party to inspect
+ #} | sendmail -flustre-qa-team@sun.com -t
+ } >&2
fi
+ rm -f $tmpfile
case "$VERSION" in
2.6*)
(( $BUILD_KERNEL )) || return 0
set_make
echo "Building kernel in $PWD..."
+ if $XEN; then
+ $MAKE_J "$MAKE_CC" vmlinuz || fatal 1 "Error making vmlinux."
+ else
+ case "$TARGET_ARCH" in
+ i386 | i586 | i686 | athlon | x86_64)
+ $MAKE_J "$MAKE_CC" bzImage || fatal 1 "Error making bzImage."
+ ;;
+ ia64 | ppc | ppc64)
+ $MAKE_J "$MAKE_CC" vmlinux || fatal 1 "Error making vmlinux."
+ ;;
+ *)
+ $MAKE_J "$MAKE_CC" boot || fatal 1 "Error making boot."
+ ;;
+ esac
+ fi
+ $MAKE_J "$MAKE_CC" modules || fatal 1 "Error building modules."
+
+ popd >/dev/null
+}
+
+build_kernel_ib()
+{
+ (( $BUILD_KERNEL )) || return 0
+ # build kernel-ib{,-devel}
+ # some I/B drivers are architecture dependent and kernel-ib's configure
+ # does not figure it out for us ~sigh~
+ local configure_options=""
case "$TARGET_ARCH" in
- i386 | i586 | i686 | athlon | x86_64)
- $MAKE_J "$MAKE_CC" bzImage || fatal 1 "Error making bzImage."
+ x86_64 | ia64)
+ configure_options="--with-ipath_inf-mod"
;;
- ia64 | ppc | ppc64)
- $MAKE_J "$MAKE_CC" vmlinux || fatal 1 "Error making vmlinux."
- ;;
- *)
- $MAKE_J "$MAKE_CC" boot || fatal 1 "Error making boot."
+ ppc64)
+ configure_options="--with-ipath_inf-mod --with-ehca-mod"
;;
esac
- $MAKE_J "$MAKE_CC" modules || fatal 1 "Error building modules."
+ local K_SRC="K_SRC"
+ # ofed 1.3 had a bug in the rpm spec
+ if [ "$OFED_VERSION" = "1.3" ]; then
+ K_SRC="KSRC"
+ fi
+ $RPMBUILD --rebuild --define 'build_kernel_ib 1' --define 'build_kernel_ib_devel 1' \
+ --define "_topdir $(lbuild_topdir)" --target ${TARGET_ARCH} \
+ --define "KVERSION ${FULL_VERSION}" \
+ --define "$K_SRC ${PWD}/linux" \
+ --define "LIB_MOD_DIR /lib/modules/${FULL_VERSION}" \
+ --define "configure_options --without-quilt --with-core-mod --with-user_mad-mod --with-user_access-mod --with-addr_trans-mod --with-srp-target-mod --with-core-mod --with-mthca-mod --with-mlx4-mod --with-cxgb3-mod --with-nes-mod --with-ipoib-mod --with-sdp-mod --with-srp-mod --without-srp-target-mod --with-rds-mod --with-iser-mod --with-qlgc_vnic-mod --with-madeye-mod $configure_options" $(lbuild_topdir)/OFED/SRPMS/ofa_kernel-${OFED_VERSION}-ofed${OFED_VERSION}.src.rpm
+
+ if [ ${PIPESTATUS[0]} != 0 ]; then
+ fatal 1 "Error building kernel-ib"
+ fi
+ pushd "$TOPDIR" >/dev/null
+ rm -rf kernel-ib-devel
+ mkdir kernel-ib-devel
+ cd kernel-ib-devel
+ local rpm=$(ls $(lbuild_topdir)/RPMS/*/kernel-ib-devel-${OFED_VERSION}-${FULL_VERSION//-/_}.*.rpm)
+ rpm2cpio -itv < $rpm | cpio -id
+ CONFIGURE_FLAGS="--with-o2ib=$(pwd)/usr/src/ofa_kernel ${CONFIGURE_FLAGS}"
popd >/dev/null
}
+
configure_lustre()
{
return 0
{
(( $BUILD_LUSTRE )) || return 0
set_make
- FULL_VERSION="${VERSION}-${EXTRA_VERSION}${TARGET_CONFIG}"
pushd "$TOPDIR" >/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 \
- --define "_tmpdir $TMPDIR" \
+ < lustre.spec.in \
+ > lustre.spec
+ $RPMBUILD --target ${TARGET_ARCH} -bb lustre.spec \
+ ${PATCHLESS:+--define "lustre_name lustre-client"} \
+ --define "_tmppath $TMPDIR" \
--define "_topdir $(lbuild_topdir)" || \
fatal 1 "Error building Lustre rpms."
# $MAKE_J "$MAKE_CC" || fatal 1 "Error building Lustre."
{
(( $INSTALL_KERNEL )) || return 0
set_make
- FULL_VERSION="${VERSION}-${EXTRA_VERSION}${TARGET_CONFIG}"
pushd "$TOPDIR/linux" >/dev/null
mkdir -p "$DESTDIR/boot"
-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}"
- ;;
- ppc | ppc64)
- cp vmlinux "$DESTDIR/boot/vmlinux-${FULL_VERSION}"
- ln -sf "$DESTDIR/boot/vmlinux-${FULL_VERSION}" "../lib/modules/${FULL_VERSION}/vmlinux"
- ;;
- 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
+ if $XEN; then
+ 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}"
+ else
+ 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}"
+ ;;
+ ppc | ppc64)
+ cp vmlinux "$DESTDIR/boot/vmlinux-${FULL_VERSION}"
+ ln -sf "$DESTDIR/boot/vmlinux-${FULL_VERSION}" "../lib/modules/${FULL_VERSION}/vmlinux"
+ ;;
+ 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
+ fi
if [ -e init/kerntypes.o ] ; then
cp init/kerntypes.o "$DESTDIR/boot/Kerntypes-${FULL_VERSION}"
fi
{
(( $INSTALL_LUSTRE )) || return 0
- FULL_VERSION="${VERSION}-${EXTRA_VERSION}${TARGET_CONFIG}"
- KVERREL="${VERSION}-${EXTRA_VERSION}"
+ KVERREL="${VERSION}${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}"
i="$DESTDIR/lib/modules/${FULL_VERSION}"
rm -f $i/build
(( $INSTALL_LUSTRE )) || return 0
return 0
set_make
- FULL_VERSION="${VERSION}-${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
(( $BUILD_KERNEL )) || return 0
(( $SUSEBUILD )) || return 0
set_make
- FULL_VERSION="${VERSION}-${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
(( $INSTALL_KERNEL )) || 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 "$MAKE_CC" -C $build_dir KERNEL_SOURCE="${TOPDIR}/linux" INSTALL_MOD_PATH="$DESTDIR"
done
+ local symvers_file="${DESTDIR}/boot/symvers-${VERSION}${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}-${TARGET_ARCH}"
+ if [ -n "$TARGET_CONFIG" ]; then
+ symvers_file="${symvers_file}${TARGET_DELIMITER}${TARGET_CONFIG}"
+ fi
+ symvers_file="$symvers_file.gz"
( symver vmlinux
moddir="${DESTDIR}/lib/modules/${FULL_VERSION}"
cd $moddir/kernel
-name '*.ko' -print); do
symver $module
done
- ) | sort -u -k2 \
- | gzip -c9 > "${DESTDIR}/boot/symvers-${VERSION}-${EXTRA_VERSION}-${TARGET_ARCH}${TARGET_CONFIG}.gz"
+ ) | sort -u -k2 | gzip -c9 > $symvers_file
}
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}"
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"
+longopts="$longopts,save-headers,target:,target-arch:,target-config:,unpack-kernel,xen"
options=$(getopt -o hj: -l "$longopts" -- "$@")
UNPACK_KERNEL=1
shift
;;
+ --xen)
+ XEN=true
+ shift
+ ;;
--)
shift
CONFIGURE_FLAGS=$@
check_options
load_target
+EXTRA_VERSION_DELIMITER=${EXTRA_VERSION_DELIMITER:-"-"}
+FULL_VERSION="${VERSION}${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}"
+if [ -n "$TARGET_CONFIG" ]; then
+ FULL_VERSION="${FULL_VERSION}${TARGET_DELIMITER}${TARGET_CONFIG}"
+fi
+setup_ccache_distcc
extract_kernel
patch_kernel
depend_kernel
build_kernel
+if [ -n "$OFED_VERSION" ]; then
+ if [ "$OFED_VERSION" = "inkernel" ]; then
+ CONFIGURE_FLAGS="--with-o2ib=yes ${CONFIGURE_FLAGS}"
+ else
+ build_kernel_ib
+ fi
+fi
+
configure_lustre
build_lustre