craetion
authorbuild <build@41d37cc5-eb28-0410-a9bf-d37491348ade>
Tue, 13 Feb 2007 14:56:28 +0000 (14:56 +0000)
committerbuild <build@41d37cc5-eb28-0410-a9bf-d37491348ade>
Tue, 13 Feb 2007 14:56:28 +0000 (14:56 +0000)
build/nightly.sh [new file with mode: 0755]
build/onelab.xml [new file with mode: 0644]
scripts/auto-update.sh [new file with mode: 0644]
scripts/dump-db-svn.sh [new file with mode: 0755]
scripts/functions.sh [new file with mode: 0644]
scripts/refresh-peer.py [new file with mode: 0755]

diff --git a/build/nightly.sh b/build/nightly.sh
new file mode 100755 (executable)
index 0000000..20deed3
--- /dev/null
@@ -0,0 +1,150 @@
+#!/bin/bash
+
+COMMAND=$(basename $0)
+ROOT=/build
+CVSROOT=":pserver:anon@cvs.planet-lab.org:/cvs"
+DISTRO=onelab
+MAILTO="thierry.parmentelat@sophia.inria.fr"
+TAG=HEAD
+
+# plc chroot runs in UTC
+date=$(date -u +'%Y.%m.%d')
+
+### in the root context
+function do_chroot () {
+  cd /build/custom
+  (date ; svn update) >> update.log 2>&1
+  chroot /plc/devel/root su - build <<EOF
+$ROOT/nightly.sh $@
+EOF
+}
+
+# Notify recipient of failure
+function failure() {
+  if [ -n "$MAILTO" ] ; then
+    tail -c 8k ${BUILD}/log-build.txt | mail -s "Failures for ${BUILD}" $MAILTO
+  fi
+  exit 1
+}
+
+function success () {
+  if [ -n "$MAILTO" ] ; then
+    date | mail -s "Successfull build in ${BUILD}" $MAILTO
+  fi
+  exit 1
+}
+
+function create_base () {
+  BASE=${TAG/HEAD/`date +%Y.%m.%d`}
+  i=
+  while ! mkdir ${BASE}${i} 2>/dev/null ; do
+    [ -z ${i} ] && BASE=${BASE}.
+    i=$((${i}+1))
+    if [ $i -gt 100 ] ; then
+      echo "$0: Failed to create release directory `pwd`/${BASE}${i}"
+      exit 1
+    fi
+  done
+  BASE=${BASE}${i}
+}
+
+function use_base () {
+  [ ! -d $BASE ] && mkdir $BASE
+  if [ ! -d $BASE ] ; then
+    echo $COMMAND failed to create base $BASE
+    exit 1
+  fi
+}
+
+function manage_distro () {
+
+#  DISTROFILE=$BUILD/$DISTRO.mk
+#
+#  if [ -f $DISTROFILE ] ; then
+#    echo Using $DISTROFILE
+#  elif [ -f $ROOT/$DISTRO.mk ] ; then
+#    echo Using $ROOT/$DISTRO.mk
+#    ln -s $ROOT/$DISTRO.mk $DISTROFILE
+#  else
+#    echo Could not locate $DISTRO.mk
+#    exit 1
+#  fi
+#
+  DISTROFILE=$BUILD/$DISTRO.xml
+
+  if [ -f $DISTROFILE ] ; then
+    echo Using $DISTROFILE
+  elif [ -f $ROOT/$DISTRO.xml ] ; then
+    echo Using $ROOT/$DISTRO.xml
+    ln -s $ROOT/$DISTRO.xml $DISTROFILE
+  else
+    echo Could not locate $DISTRO.xml
+    exit 1
+  fi
+
+}
+
+function build () {
+  trap failure ERR INT
+  set -x
+
+  echo -n "============================== Starting $COMMAND on "
+  date
+
+  show_env
+    
+  cd $ROOT
+  cvs -d $CVSROOT co -d $BASE build
+
+  manage_distro
+
+  echo "Running make IN build $(pwd)"
+  make TAG=${TAG} PLDISTRO=${DISTRO} -C $BASE
+
+  # only if successful
+  rm -f latest
+  ln -s $BASE latest
+
+  success
+}
+
+function show_env () {
+  echo ROOT=$ROOT
+  echo BASE=$BASE
+  echo TAG=$TAG
+  echo DISTRO=$DISTRO
+}
+
+function main () {
+
+  if [ -d /plc/devel/data ] ; then
+    do_chroot "$@"
+  else
+    while getopts "d:r:m:f:b:h" opt ; do
+      case $opt in
+       d) CVSROOT=$OPTARG ;;
+        r) TAG=$OPTARG ;;
+        m) MAILTO=$OPTARG ;;
+        f) DISTRO=$OPTARG ;;
+        b) BASE=$OPTARG ;;
+        h) usage ;;
+      esac
+    done
+    shift $(($OPTIND - 1))
+
+    cd $ROOT
+    ### determine BASE
+    # if specified, use it, otherwise create from date
+    if [ -z "$BASE" ] ; then
+      create_base
+    else
+      use_base $BASE
+    fi
+    BUILD=$ROOT/$BASE
+    
+    build >> ${BUILD}/log-build.txt 2>&1
+  fi
+}  
+
+##########
+main "$@" 
diff --git a/build/onelab.xml b/build/onelab.xml
new file mode 100644 (file)
index 0000000..e47e2d2
--- /dev/null
@@ -0,0 +1,230 @@
+<?xml version="1.0"?>
+<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">
+<comps>
+
+  <group>
+    <id>planetlab</id>
+    <name>PlanetLab</name>
+    <default>true</default>
+    <description>PlanetLab Node Packages</description>
+    <uservisible>false</uservisible>
+    <packagelist>
+      <packagereq type="mandatory">basesystem</packagereq>
+      <packagereq type="mandatory">bash</packagereq>
+      <packagereq type="mandatory">coreutils</packagereq>
+      <packagereq type="mandatory">cpio</packagereq>
+      <packagereq type="mandatory">e2fsprogs</packagereq>
+      <packagereq type="mandatory">ed</packagereq>
+      <packagereq type="mandatory">file</packagereq>     
+      <packagereq type="mandatory">filesystem</packagereq>
+      <packagereq type="mandatory">glibc</packagereq>
+      <packagereq type="mandatory">hdparm</packagereq>
+      <packagereq type="mandatory">initscripts</packagereq>
+      <packagereq type="mandatory">iproute</packagereq>
+      <packagereq type="mandatory">iputils</packagereq>
+      <packagereq type="mandatory">kbd</packagereq>
+      <packagereq type="mandatory">kernel</packagereq>
+      <packagereq type="mandatory">libtermcap</packagereq>
+      <packagereq type="mandatory">passwd</packagereq>
+      <packagereq type="mandatory">procps</packagereq>
+      <packagereq type="mandatory">readline</packagereq>
+      <packagereq type="mandatory">fedora-release</packagereq>
+      <packagereq type="mandatory">rootfiles</packagereq>
+      <packagereq type="mandatory">rpm</packagereq>
+      <packagereq type="mandatory">setserial</packagereq>
+      <packagereq type="mandatory">setup</packagereq>
+      <packagereq type="mandatory">sysklogd</packagereq>
+      <packagereq type="mandatory">SysVinit</packagereq>
+      <packagereq type="mandatory">termcap</packagereq>
+      <packagereq type="mandatory">util-linux</packagereq>
+      <packagereq type="mandatory">vim-minimal</packagereq>
+
+      <packagereq type="default">authconfig</packagereq>
+      <packagereq type="default">shadow-utils</packagereq>
+
+      <packagereq type="default">anacron</packagereq>
+      <packagereq type="mandatory">at</packagereq>
+      <packagereq type="default">authconfig</packagereq>
+      <packagereq type="default">autofs</packagereq>
+      <packagereq type="mandatory">bc</packagereq>
+      <packagereq type="mandatory">bind-utils</packagereq>
+      <packagereq type="mandatory">bzip2</packagereq>
+      <packagereq type="mandatory">crontabs</packagereq>
+      <packagereq type="default">dhclient</packagereq>
+      <packagereq type="default">diffutils</packagereq>
+      <packagereq type="default">ethtool</packagereq>
+      <packagereq type="default" basearchonly="true">kernel-utils</packagereq>
+      <packagereq type="mandatory">logrotate</packagereq>
+      <packagereq type="mandatory">lsof</packagereq>
+      <packagereq type="default">logwatch</packagereq>
+      <packagereq type="mandatory">mailcap</packagereq>
+      <packagereq type="default">nano</packagereq>
+      <packagereq type="default">nc</packagereq>
+      <packagereq type="mandatory">netdump</packagereq>
+      <packagereq type="default">openssh-clients</packagereq>
+      <packagereq type="mandatory">parted</packagereq>
+      <packagereq type="mandatory">pciutils</packagereq>
+      <packagereq type="mandatory">psacct</packagereq>
+      <packagereq type="mandatory">quota</packagereq>
+      <packagereq type="default">rsh</packagereq>
+      <packagereq type="default">rsync</packagereq>
+      <packagereq type="default">sendmail</packagereq>
+      <packagereq type="default">sudo</packagereq>
+      <packagereq type="mandatory">telnet</packagereq>
+      <packagereq type="mandatory">traceroute</packagereq>
+      <packagereq type="mandatory">time</packagereq>
+      <packagereq type="mandatory">tmpwatch</packagereq>
+      <packagereq type="default">tcpdump</packagereq>
+      <packagereq type="default">openssh-server</packagereq>
+      <packagereq type="default">vixie-cron</packagereq>
+      <packagereq type="default">wget</packagereq>
+      <packagereq type="default">yum</packagereq>
+
+      <packagereq type="mandatory">curl</packagereq>
+      <packagereq type="mandatory">gzip</packagereq>
+      <packagereq type="mandatory">iptables</packagereq>
+      <packagereq type="mandatory">lvm</packagereq>
+      <packagereq type="mandatory">mkinitrd</packagereq>
+      <packagereq type="mandatory">ntp</packagereq>
+      <packagereq type="mandatory">perl</packagereq>
+      <packagereq type="mandatory">python</packagereq>
+      <packagereq type="mandatory">tar</packagereq>
+      <packagereq type="mandatory">expect</packagereq>
+
+      <packagereq type="mandatory">portmap</packagereq>
+      <packagereq type="mandatory">nfs-utils</packagereq>
+
+      <packagereq type="mandatory">schedutils</packagereq>
+
+      <packagereq type="default">vconfig</packagereq>
+
+      <packagereq type="mandatory">util-vserver</packagereq>
+      <packagereq type="mandatory">util-vserver-build</packagereq>
+      <packagereq type="mandatory">util-vserver-lib</packagereq>
+      <packagereq type="mandatory">util-vserver-core</packagereq>
+      <packagereq type="mandatory">util-vserver-sysv</packagereq>
+      <packagereq type="mandatory">util-vserver-legacy</packagereq>
+      <packagereq type="mandatory">util-vserver-python</packagereq>
+      <packagereq type="mandatory">util-python</packagereq>
+      <packagereq type="mandatory">NodeManager</packagereq>
+      <packagereq type="mandatory">NodeUpdate</packagereq>
+      <packagereq type="mandatory">PLBootServerRequest</packagereq>
+      <packagereq type="mandatory">PlanetLabAccounts</packagereq>
+      <packagereq type="mandatory">PlanetLabConf</packagereq>
+      <packagereq type="mandatory">pycurl</packagereq>
+      <packagereq type="mandatory">vnet</packagereq>
+      <packagereq type="mandatory">hotplug</packagereq>
+      <packagereq type="mandatory">pcmcia-cs</packagereq>
+      <packagereq type="mandatory">madwifi</packagereq>
+      <packagereq type="mandatory">wireless-tools</packagereq>
+
+      <packagereq type="mandatory">PlanetLabID</packagereq>
+      <packagereq type="mandatory">autofs</packagereq>
+      <packagereq type="mandatory">planetlab_sudo</packagereq>
+      <packagereq type="mandatory">pl_sshd</packagereq>
+      <packagereq type="mandatory">ipod</packagereq>
+      <packagereq type="mandatory">vserver-reference</packagereq>
+      <packagereq type="mandatory">vserver-system-packages</packagereq>
+      <packagereq type="mandatory">proper</packagereq>
+      <packagereq type="mandatory">pl_mom</packagereq>
+      <packagereq type="mandatory">PlanetLabAuth</packagereq>
+      <packagereq type="mandatory">netflow-utils</packagereq>
+      <packagereq type="mandatory">PLCAPI</packagereq>
+    </packagelist>
+  </group>
+
+  <group>
+    <id>vserver</id>
+    <name>VServer</name>
+    <uservisible>true</uservisible>
+    <description>VServer Reference Image</description>
+    <packagelist>
+      <packagereq type="mandatory">bash</packagereq>
+      <packagereq type="mandatory">coreutils</packagereq>
+      <packagereq type="mandatory">iputils</packagereq>
+      <packagereq type="mandatory">kernel-vserver</packagereq>
+
+      <packagereq type="mandatory">bzip2</packagereq>
+      <packagereq type="mandatory">crontabs</packagereq>
+      <packagereq type="default">diffutils</packagereq>
+      <packagereq type="mandatory">logrotate</packagereq>
+      <packagereq type="default">openssh-clients</packagereq>
+      <packagereq type="mandatory">passwd</packagereq>
+      <packagereq type="default">rsh</packagereq>
+      <packagereq type="default">rsync</packagereq>
+      <packagereq type="default">sudo</packagereq>
+      <packagereq type="default">tcpdump</packagereq>
+      <packagereq type="mandatory">telnet</packagereq>
+      <packagereq type="mandatory">traceroute</packagereq>
+      <packagereq type="mandatory">time</packagereq>
+      <packagereq type="default">vixie-cron</packagereq>
+      <packagereq type="default">wget</packagereq>
+      <packagereq type="default">yum</packagereq>
+
+      <packagereq type="mandatory">curl</packagereq>
+      <packagereq type="mandatory">gzip</packagereq>
+      <packagereq type="mandatory">perl</packagereq>
+      <packagereq type="mandatory">python</packagereq>
+      <packagereq type="mandatory">tar</packagereq>
+    </packagelist>
+  </group>
+
+  <group>
+    <id>bootcd</id>
+    <name>BootCD</name>
+    <uservisible>true</uservisible>
+    <description>BootCD Image</description>
+    <packagelist>
+      <packagereq type="mandatory">dhclient</packagereq>
+      <packagereq type="mandatory">bash</packagereq>
+      <packagereq type="mandatory">coreutils</packagereq>
+      <packagereq type="mandatory">iputils</packagereq>
+      <packagereq type="mandatory">kernel</packagereq>
+      <packagereq type="mandatory">hotplug</packagereq>
+      <packagereq type="mandatory">pcmcia-cs</packagereq>
+      <packagereq type="mandatory">madwifi</packagereq>
+      <packagereq type="mandatory">wireless-tools</packagereq>
+
+      <packagereq type="mandatory">bzip2</packagereq>
+      <packagereq type="mandatory">crontabs</packagereq>
+      <packagereq type="default">diffutils</packagereq>
+      <packagereq type="mandatory">logrotate</packagereq>
+      <packagereq type="default">openssh-clients</packagereq>
+      <packagereq type="mandatory">passwd</packagereq>
+      <packagereq type="default">rsh</packagereq>
+      <packagereq type="default">rsync</packagereq>
+      <packagereq type="default">sudo</packagereq>
+      <packagereq type="default">tcpdump</packagereq>
+      <packagereq type="mandatory">telnet</packagereq>
+      <packagereq type="mandatory">traceroute</packagereq>
+      <packagereq type="mandatory">time</packagereq>
+      <packagereq type="default">vixie-cron</packagereq>
+      <packagereq type="default">wget</packagereq>
+      <packagereq type="default">yum</packagereq>
+      <packagereq type="mandatory">curl</packagereq>
+      <packagereq type="mandatory">gzip</packagereq>
+      <packagereq type="mandatory">perl</packagereq>
+      <packagereq type="mandatory">python</packagereq>
+      <packagereq type="mandatory">tar</packagereq>
+      <packagereq type="mandatory">pciutils</packagereq>
+      <packagereq type="mandatory">kbd</packagereq>
+      <packagereq type="mandatory">authconfig</packagereq>
+      <packagereq type="mandatory">hdparm</packagereq>
+      <packagereq type="mandatory">lvm</packagereq>
+      <packagereq type="mandatory">lvm2</packagereq>
+      <packagereq type="mandatory">kexec-tools</packagereq>
+      <packagereq type="mandatory">gnupg</packagereq>
+      <packagereq type="mandatory">nano</packagereq>
+      <packagereq type="mandatory">parted</packagereq>
+      <packagereq type="mandatory">pyparted</packagereq>
+      <packagereq type="mandatory">openssh-server</packagereq>
+      <packagereq type="mandatory">openssh-clients</packagereq>
+      <packagereq type="mandatory">ncftp</packagereq>
+      <packagereq type="mandatory">dosfstools</packagereq>
+      <packagereq type="mandatory">dos2unix</packagereq>
+      <packagereq type="mandatory">bind-utils</packagereq>
+      <packagereq type="mandatory">sharutils</packagereq>
+    </packagelist>
+  </group>
+
+</comps>
diff --git a/scripts/auto-update.sh b/scripts/auto-update.sh
new file mode 100644 (file)
index 0000000..b38c00b
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+DIRNAME=$(dirname $0)
+DIRNAME=$(cd $DIRNAME; pwd -P)
+
+cd $DIRNAME
+svn update &> .auto-update.log
+
diff --git a/scripts/dump-db-svn.sh b/scripts/dump-db-svn.sh
new file mode 100755 (executable)
index 0000000..3e198e7
--- /dev/null
@@ -0,0 +1,129 @@
+#!/bin/bash
+
+# we're getting called by cron, so just in case
+PATH=/bin:/usr/bin:$PATH
+
+COMMAND=$(basename $0)
+COMMANDDIR=$(dirname $0)
+COMMANDDIR=$(cd $COMMANDDIR; pwd -P)
+DATADIR=/backups
+DATE=$(date +%y-%m-%d-%H-%M-%S)
+
+LOGDIR=$DATADIR/aa-dumplog
+LOG=$LOGDIR/${DATE}.log
+LATESTLOG=latest.log
+
+REVISION="$Revision$"
+
+source $COMMANDDIR/functions.sh
+
+###
+
+case $(hostname) in
+  *build*)
+    DEFAULTS="subversion" ;;
+  *plc*|*private*)
+    DEFAULTS="planetlab4" ;;
+  *)
+    echo "$COMMAND: WARNING: no known defaults for hostname $(hostname)"
+    DEFAULTS=""
+    ;;
+esac
+
+DB_KEEPTIME=14
+DB_USER=pgsqluser
+
+SUBVERSION_KEEPTIME=7
+SUBVERSION_REPO=/svn
+
+function usage () {
+    echo "This is $COMMAND, $REVISION"
+    echo "Usage: $COMMAND [subversion]"
+    echo -e "\tkeyword 'subversion' : $SUBVERSION_REPO/ is dumped"
+#    echo -e "\tkeyword 'apache' : $APACHE_ROOT/ is tared"
+#    echo -e "\tkeyword 'env' : $ENV_ROOT/ is tared"
+#    echo -e "\totherwise performs a dump of the given database"
+    echo -e "default arguments are $DEFAULTS"
+    exit 1
+}
+
+function dumpdb () {
+    database=$1; shift
+    output=$DATADIR/$database-$DATE.sql
+    latest=$database-latest.sql
+    echo "Dumping $database into $output (drop-mode)"
+    mysqldump --add-drop-table --user=$DB_USER $database > $output
+    manage_link $output $latest
+}
+
+function dumpsubversion () {
+    output=$DATADIR/subversion-$DATE.dump
+    latest=subversion-latest.dump
+    echo "Creating subversion archive in $output"
+    svnadmin dump $SUBVERSION_REPO/ > $output
+    manage_link $output $latest
+}
+
+function dumpregulardir () {
+    name=$1; shift
+    dumpdir=$1; shift
+    output=$DATADIR/$name-$DATE.tar
+    latest=$name-latest.tar
+    echo "Creating tar archive of $dumpdir into $output"
+    tar cf $output $dumpdir
+    manage_link $output $latest
+}
+
+function main () {
+
+    # give one or more target names on the command-line
+    args=""
+    if [[ -z "$@" ]] ; then
+       args="$DEFAULTS"
+    else
+       args="$@"
+    fi
+
+    [ -n "$DEBUG" ] && set -x
+    
+    for arg in $args; do
+        case "$arg" in
+           -*)
+               usage ;;
+           subversion)
+               dumpsubversion 
+               clean $DATADIR $SUBVERSION_KEEPTIME -name "$arg\*"
+               ;;
+#          apache)
+#              dumpregulardir $arg $APACHE_ROOT
+#              clean $DATADIR $APACHE_KEEPTIME -name "$arg\*"
+#              ;;
+#          env)
+#              dumpregulardir $arg $ENV_ROOT
+#              clean $DATADIR $ENV_KEEPTIME -name "$arg\*"
+#              ;;
+           *)
+               dumpdb $arg 
+               clean $DATADIR $DB_KEEPTIME -name "$arg\*"
+               ;;
+           esac
+    done
+
+    clean $LOGDIR 14 
+
+    manage_link $LOG $LATESTLOG
+}
+
+##############################
+# create log area 
+mkdir -p $LOGDIR
+chmod g+w $LOGDIR
+
+for i in "$@" ; do
+  case "$i" in
+    -*)
+      usage ;;
+  esac
+done
+
+main "$@" > $LOG 2>&1
diff --git a/scripts/functions.sh b/scripts/functions.sh
new file mode 100644 (file)
index 0000000..8815389
--- /dev/null
@@ -0,0 +1,32 @@
+### -*-sh-*-
+
+
+
+### create a symlink in same dir
+# arguments 
+# actual : full path of the actual file
+# link : the link name, only basename is used, will be created in same dir
+function manage_link () {
+    actual=$1; shift
+    latest=$1; shift
+    # go in the right directory
+    cd $(dirname $actual)
+    actualbase=$(basename $actual)
+    # just in case 
+    latest=$(basename $latest)
+    echo "In $(pwd) : linking $actualbase to $latest"
+    rm -f $latest ; ln -s $actualbase $latest
+    # go back to current dir
+    cd -
+}
+    
+# usage
+# clean <where> <keeptime> [... find arguments]
+function clean () {
+    where=$1; shift
+    keeptime=$1; shift
+    echo "== In $where"
+    echo "Cleaning $@ - older than $keeptime days"
+    find $where "$@" -atime +$keeptime | xargs rm 
+}
+
diff --git a/scripts/refresh-peer.py b/scripts/refresh-peer.py
new file mode 100755 (executable)
index 0000000..355c257
--- /dev/null
@@ -0,0 +1,34 @@
+#!/usr/bin/env plcsh
+
+import sys,os,time
+
+def Run (peername):
+    timestring=time.strftime("%Y-%m-%d-%H-%M-%S")
+    print 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
+    print 'RefreshPeer on %s - starting on %s'%(peername,timestring)
+    start=time.time()
+    result=RefreshPeer(peername)
+    finish=time.time()
+
+    print 'Total duration',finish-start
+    print 'xxxxxxxxxx timers:'
+    keys=result.keys()
+    keys.sort()
+    for key in keys:
+        print key,result[key]
+
+def RunInLog (peername):
+    logname="/var/log/refreshpeer.log"
+    sys.stdout=open(logname,'a')
+    sys.stderr=sys.stdout
+    Run(peername)
+    sys.stderr.close()
+    sys.stdout.close()
+
+if __name__ == "__main__":
+    
+    for peername in sys.argv[1:]:
+        RunInLog (peername)
+
+        
+