# Mark Huang <mlhuang@cs.princeton.edu>
# Copyright (C) 2003-2005 The Trustees of Princeton University
#
-# $Id: build.sh,v 1.38 2007/01/21 08:46:02 mlhuang Exp $
+# $Id: build.sh,v 1.43 2007/02/01 16:03:33 mlhuang Exp $
#
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# Set defaults
-if [ -f CVS/Root ] ; then
- CVSROOT=$(cat CVS/Root)
- TAG=$(cvs status build.sh | sed -ne 's/[[:space:]]*Sticky Tag:[[:space:]]*\([^[:space:]]*\).*/\1/p')
- if [ "$TAG" = "(none)" ] ; then
- TAG=HEAD
- fi
-else
- CVSROOT=:pserver:anon@cvs.planet-lab.org:/cvs
- TAG=HEAD
-fi
-CVS_RSH=ssh
+SVNPATH=https://svn.planet-lab.org/svn
+TAG=trunk
MODULE=build
BASE=$PWD
PLDISTRO=planetlab
+VSERVER=
# cron does not set USER?
[ -z "$USER" ] && export USER=$LOGNAME
-# Export certain variables
-export CVS_RSH
-
# Get options
-while getopts "d:r:m:f:b:x:h" opt ; do
+while getopts "d:r:m:f:b:x:v:h" opt ; do
case $opt in
d)
- CVSROOT=$OPTARG
+ SVNPATH=$OPTARG
;;
r)
TAG=$OPTARG
x)
BUILDS=$OPTARG
;;
+ v)
+ VSERVER=$OPTARG
+ ;;
h|*)
echo "usage: `basename $0` [OPTION]..."
- echo " -d directory CVS repository root (default $CVSROOT)"
- echo " -r revision CVS revision to checkout (default $TAG)"
+ echo " -d directory SVN repository root (default $SVNPATH)"
+ echo " -r revision SVN revision to checkout (default $TAG)"
+ echo " -v Vserver Vserver reference to build within (optional)"
echo " -m address Notify recipient of failures (default: none)"
echo " -f distro Distribution to build (default: $PLDISTRO)"
echo " -b base Run operations in specified base directory (default $BASE)"
# Base operations in specified directory
mkdir -p $BASE
cd $BASE || exit $?
+BASEDIR=$(pwd)
# Remove old runs
if [ -n "$BUILDS" ] ; then
fi
# Create a unique build base
-BASE=${TAG/HEAD/`date +%Y.%m.%d`}
+BASE=build_${TAG/trunk/`date +%Y.%m.%d`}
+[ -n "${VSERVER}" ] && BASE=${VSERVER}_${BASE}
i=
while ! mkdir ${BASE}${i} 2>/dev/null ; do
[ -z ${i} ] && BASE=${BASE}.
exit 1
}
-trap failure ERR INT
-
-# Checkout build directory
-cvs -d ${CVSROOT} checkout -r ${TAG} -d ${BASE} ${MODULE}
+vfailure() {
+ # Notify recipient of failure
+ vnamespace -e $BASE umount ${BASEDIR}/${BASE}/data
+ vserver $BASE stop
+ vserver --silent $BASE delete
+ failure
+ exit 1
+}
-# Build development environment first
-make TAG=${TAG} PLDISTRO=${PLDISTRO} -C ${BASE} myplc-devel
+trap failure ERR INT
-# Build everything else inside the development environment
-export PLC_ROOT=$BASE/BUILD/myplc-devel-*/myplc/devel/root
-export PLC_DATA=$BASE/BUILD/myplc-devel-*/myplc/devel/data
+set -x
-cleanup() {
- sudo umount $PLC_ROOT/data/build
- sudo $BASE/BUILD/myplc-devel-*/myplc/host.init stop
-}
+VCMDPREFIX=
+if [ -n "$VSERVER" ] ; then
+ vserver $BASE build -m clone --rootdir ${BASEDIR} -- --source /vservers/${VSERVER}
+ vserver $BASE start
+ trap vfailure ERR INT
+ if [ -d /data ] ; then
+ vnamespace -e $BASE mount -o ro --bind /data ${BASEDIR}/${BASE}/data
+ fi
-trap "cleanup; failure" ERR INT
+ # Checkout build directory
+ VSUEXEC="vserver $BASE exec su - build -c"
-# Start development environment
-sudo $BASE/BUILD/myplc-devel-*/myplc/host.init start
+ $VSUEXEC "svn checkout ${SVNPATH}/${MODULE}/${TAG} ${MODULE}"
-# Cross mount the current build directory to the build user home directory
-sudo mount -o bind,rw $BASE $PLC_ROOT/data/build
+ # Build
+ #XXX vserver $BASE suexec build ${MODULE}/make.sh TAG=${TAG} PLDISTRO=${PLDISTRO}
-# Delete .rpmmacros and parseSpec files so that they get regenerated
-# appropriately in the development environment.
-rm -f $BASE/.rpmmacros $BASE/parseSpec
+ # Install to boot server
+ # XXX not yet
-# Enable networking
-sudo cp -f /etc/hosts /etc/resolv.conf $PLC_ROOT/etc/
+ trap - ERR INT
+ vnamespace -e $BASE umount ${BASEDIR}/${BASE}/data
+ vserver $BASE stop
+else
+ # Checkout build directory
+ svn checkout ${SVNPATH}/${MODULE}/${TAG} ${BASE}
-# Run the rest of the build
-sudo chroot $PLC_ROOT su - build -c "make TAG=\"$TAG\" PLDISTRO=\"$PLDISTRO\""
+ # Build myplc-devel-native, install it to ensure we've got the right packages, and let it rip
+ make TAG=${TAG} PLDISTRO=${PLDISTRO} -C ${BASE} BASE=$BASE BUILDS=$BUILDS MyPLC-devel-native
+ sudo yum -y localinstall RPMS/i386/MyPLC-devel-native-*.*.rpm
-# Clean up
-cleanup
-trap failure ERR INT
+ # Build everything
+ make TAG=${TAG} PLDISTRO=${PLDISTRO} -C ${BASE} BASE=$BASE BUILDS=$BUILDS
-# Install to boot server
-make TAG=${TAG} PLDISTRO=${PLDISTRO} -C ${BASE} install BASE=$BASE BUILDS=$BUILDS
+ # Install to boot server
+ # XXX not yet
+ #make TAG=${TAG} PLDISTRO=${PLDISTRO} -C ${BASE} install BASE=$BASE BUILDS=$BUILDS
+fi
exit 0