From 3df90ba4ee6043f62577692f0daa7cd37b440ebb Mon Sep 17 00:00:00 2001 From: build <build@41d37cc5-eb28-0410-a9bf-d37491348ade> Date: Tue, 13 Feb 2007 14:56:28 +0000 Subject: [PATCH] craetion --- build/nightly.sh | 150 ++++++++++++++++++++++++++ build/onelab.xml | 230 ++++++++++++++++++++++++++++++++++++++++ scripts/auto-update.sh | 8 ++ scripts/dump-db-svn.sh | 129 ++++++++++++++++++++++ scripts/functions.sh | 32 ++++++ scripts/refresh-peer.py | 34 ++++++ 6 files changed, 583 insertions(+) create mode 100755 build/nightly.sh create mode 100644 build/onelab.xml create mode 100644 scripts/auto-update.sh create mode 100755 scripts/dump-db-svn.sh create mode 100644 scripts/functions.sh create mode 100755 scripts/refresh-peer.py diff --git a/build/nightly.sh b/build/nightly.sh new file mode 100755 index 0000000..20deed3 --- /dev/null +++ b/build/nightly.sh @@ -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 index 0000000..e47e2d2 --- /dev/null +++ b/build/onelab.xml @@ -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 index 0000000..b38c00b --- /dev/null +++ b/scripts/auto-update.sh @@ -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 index 0000000..3e198e7 --- /dev/null +++ b/scripts/dump-db-svn.sh @@ -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 index 0000000..8815389 --- /dev/null +++ b/scripts/functions.sh @@ -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 index 0000000..355c257 --- /dev/null +++ b/scripts/refresh-peer.py @@ -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) + + + -- 2.47.0