A script that should be periodically run to update the alpha, beta, and
[build.git] / devbox.sh
1 #!/bin/bash
2 #
3 # PlanetLab devbox release script. Intended to be used by scripts and
4 # crontabs to build nightly releases (default).
5 #
6 # $Id:$
7 #
8
9 # Set defaults
10 CVSROOT=:pserver:anon@cvs.planet-lab.org:/cvs
11 CVS_RSH=ssh
12 MODULE=build
13 TAG=HEAD
14 BASE=$PWD
15
16 # Export certain variables
17 export CVS_RSH
18
19 # Get options
20 while getopts "d:r:m:b:x:h" opt ; do
21     case $opt in
22         d)
23             CVSROOT=$OPTARG
24             ;;
25         r)
26             TAG=$OPTARG
27             ;;
28         m)
29             MAILTO=$OPTARG
30             ;;
31         b)
32             BASE=$OPTARG
33             ;;
34         x)
35             ;;
36         h|*)
37             echo "usage: `basename $0` [OPTION]..."
38             echo "      -d directory    CVS repository root (default $CVSROOT)"
39             echo "      -r revision     CVS revision to checkout (default $TAG)"
40             echo "      -m address      Notify recipient of failures (default: none)"
41             echo "      -b base         Run operations in specified base directory (default $BASE)"
42             exit 1
43             ;;
44     esac
45 done
46
47 # Base operations in specified directory
48 BASE=`mktemp -d /tmp/DEVBOX.XXXXXX` || { echo $"could not make temp file" >& 2; exit 1; }
49 mkdir -p $BASE
50 cd $BASE || exit $?
51
52 # Redirect output from here
53 exec 2>&1
54 exec &>${BASE}/log
55
56 # XXX For debugging
57 set -x
58
59 # Upload packages to boot server
60 SERVER=build@boot.planet-lab.org
61 REPOSITORY=/var/www/html/install-rpms
62
63 for RELEASE in devbox alpha-devbox beta-devbox ; do
64     TMPDEVBOXRELEASE=planetlab-${RELEASE}_`date +%Y.%m.%d`_tmp
65     DEVBOXRELEASE=planetlab-${RELEASE}
66
67     ssh $SERVER mkdir -p ${REPOSITORY}/${TMPDEVBOXRELEASE}
68     if [ $? -ne 0 ] ; then
69         echo "ERROR: mkdir -p ${REPOSITORY}/${TMPDEVBOXRELEASE} failed"
70         exit 1 
71     fi
72     BUILT=$(echo $DEVBOXRELEASE | sed "s,\-devbox,,")
73     ssh $SERVER ln -nf ${REPOSITORY}/$BUILT/*.rpm ${REPOSITORY}/${TMPDEVBOXRELEASE}
74
75     mkdir -p ${BASE}/${DEVBOXRELEASE}
76     cvs -d ${CVSROOT} checkout -p alpina/groups/${RELEASE}_yumgroups.xml > ${BASE}/${DEVBOXRELEASE}/yumgroups.xml
77     scp ${BASE}/${DEVBOXRELEASE}/yumgroups.xml ${SERVER}:${REPOSITORY}/${TMPDEVBOXRELEASE}/yumgroups.xml
78
79     ssh $SERVER yum-arch ${REPOSITORY}/${TMPDEVBOXRELEASE} >/dev/null
80
81     ssh $SERVER mv ${REPOSITORY}/${DEVBOXRELEASE} ${REPOSITORY}/${DEVBOXRELEASE}-old
82     ssh $SERVER mv ${REPOSITORY}/${TMPDEVBOXRELEASE} ${REPOSITORY}/${DEVBOXRELEASE}
83     if [ $? -ne 0 ] ; then    
84         ssh $SERVER mv ${REPOSITORY}/${DEVBOXRELEASE}-old ${REPOSITORY}/${DEVBOXRELEASE}
85     else
86         ssh $SERVER rm -rf ${REPOSITORY}/${DEVBOXRELEASE}-old
87     fi
88 done
89
90 cd / || exit $?
91 rm -rf $BASE
92
93 exit 0