[yocto] [PATCH 1/3] Upgrade to Buildbot 0.8.3: scripts/poky-setup-autobuilder

Beth Flanagan elizabeth.flanagan at intel.com
Mon Dec 20 11:04:03 PST 2010


I've ported the buildbot install script to python and added
an INSTALL file that describes all the changes. This should
be run from the base directory:

./scripts/poky-setup-autobuilder [options] master|slave|both

It's fairly straightfoward. I did not include remote machine
installs this time around. I also do not create the poky-build
user nor set up proxy info. This should all be done on by the
build system admin.

Signed-off-by: Beth Flanagan <elizabeth.flanagan at intel.com>
---
 INSTALL                        |   55 +++++
 README                         |    6 +-
 scripts/poky-setup-autobuilder |  514 +++++++++++++++++++++++++++-------------
 3 files changed, 407 insertions(+), 168 deletions(-)
 create mode 100644 INSTALL

diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..b7da3e6
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,55 @@
+Basic Setup
+=============================
+
+From the user account that will run the autobuilder:
+
+git clone git://git.pokylinux.org/poky-autobuilder
+cd poky-autobuilder
+./scripts/poky-setup-autobuilder [options] master|slave|both
+
+Options
+=============================
+
+At minimum you should use the --builduser --buildpasswd options. If those are left blank, you'll be prompted for them. 
+
+  --buildpasswd=BBBUILDPASSWD
+                        The BuildBot users password. If this is left empty,
+                        we'll prompt you for it.
+  --builduser=BBBUILDUSER
+                        The BuildBot users password. If this is left empty,
+                        we'll prompt you for it.
+  --gitrepo=BBGITREPO   The Git Repo used to get as poky-autobuilder controler
+                        repo. It's generally safe to ignore this.
+  --masterdir=BBMASTERDIR
+                        The directory you want the master/slave installed to.
+                        If this is left empty, we'll use ~/poky-master.
+  --slavedir=BBSLAVEDIR
+                        The directory you want the master/slave installed to.
+                        If this is left empty, we'll use ~/poky-slave.
+  --outputdir=BBOUTPUTDIR
+                        The directory you want the build output to go to. If
+                        this is left empty, we'll use ~/poky-slave/output.
+  --sourcedir=BBSOURCEDIR
+                        The directory you want the build source to go to. If
+                        this is left empty, we'll use ~/poky-slave/source.
+  --pstagedir=BBPSTAGINGDIR
+                        The directory you want the package staging to occur
+                        in. If this is left empty, we'll use ~/poky-
+                        slave/pstaging.
+  --controldir=BBCONTROLDIR
+                        The directory you want to install poky autobuilder
+                        control scripts into. If this is left empty, we'll use
+                        ~/poky-autobuilder.
+  --maxbuilds=BBMAXBUILDS
+                        The max number of builds you want saved. If this is
+                        left empty, we'll set this to 1.
+  --maxlogs=BBMAXLOGS   The max number of logs you want saved. If this is left
+                        empty, we'll set this to 10.
+  --adminmail=BBADMINMAIL
+                        The administrator email address. If left unset we set
+                        it to current user @ localhost
+
+Master, Slave or Both
+=============================
+
+You must specify if the installation is for a Build controller, a Builder or Both.
diff --git a/README b/README
index 41ef130..0c33923 100644
--- a/README
+++ b/README
@@ -5,10 +5,10 @@ A lot of the autobuilder setup is individual to the circumstances of the
 user, but this repository contains sample materials which can be used as
 a starting point.
 
-scripts/poky-setup-autobuilder
+scripts/poky-setup-autobuilder [options] master|slave|both
 
 The core script which when run, sets up the current user with a buildbot
-install, and sample master and slave configurations.
+install. Please see INSTALL for more details.
 
 scripts/pokyABConfig.py
 
@@ -36,5 +36,5 @@ server. Designed to be run from cron.
 
 scripts/poky-autobuild-upload-share
 
-The coutnerpart to poky-autobuild-upload which shares the images (and
+The counterpart to poky-autobuild-upload which shares the images (and
 ensures no partly uploaded image is shared). Designed to be run from cron.
diff --git a/scripts/poky-setup-autobuilder b/scripts/poky-setup-autobuilder
index 799765a..585878c 100755
--- a/scripts/poky-setup-autobuilder
+++ b/scripts/poky-setup-autobuilder
@@ -1,24 +1,25 @@
-#!/bin/bash
+#!/usr/bin/env python
 #
-# This script gives an example of how to set up a Poky autobuilder system 
-# by combining Poky with buildbot.
+# Poky Automated Build Server Installation Script. This script
+# assists in setting up an autobuilder setup.
 #
-# For simplicity in this script, the system is setup in its own user account 
-# which is shared by both the buildbot "master" and the buildbot "slave".
+# For simplicity in this script, we assume that the build systems
+# are setup with a user account which is shared by both the buildbot 
+# "master" and the buildbot "slave" and that this script is being run
+# as that user.
 #
-# The master is responsible for scheduling work for the slave to do, the slave 
-# is the actual Poky builds. In reality there can be multiple slaves, each on 
-# different machines serving one master.
+# The master is responsible for scheduling work for the slave to do, 
+# the slave is the actual Poky builds. In reality there can be multiple 
+# slaves, each on different machines serving one master.
 #
 # The autobuilder is assumed to have its own configuration in an SCM like the 
-# poky-autobuilder repository. This script shows how to add a simple updater 
-# script which updates the master when any configuration change occurs.
+# poky-autobuilder repository. You probably shouldn't use the main git repo
+# as that is not assured to be stable.
 #
-# To use this script, add a new user to your system, edit the variables below 
-# according to your preferences and then run this script as that user.
+# To use this script, add a new user to your system, and read ../INSTALL
 #
-# Some random notes are included below for using this behind firewalls through
-# proxy servers.
+# The older version of this script dealt with using it behind a firewall through
+# a proxy. I've included those notes in ../INSTALL
 #
 # Random notes on Prerequisites: 
 #   For Fedora 10: "yum install mc wget python-devel python-twisted git cvs \
@@ -26,171 +27,354 @@
 #   For Ubuntu 9.04: "apt-get install mc git-core python-twisted cvs \
 #                    subversion help2man patch texi2html texinfo diffstat gcc \
 #                    gawk g++ mercurial"
+##
+# Copyright (C) 2010 Intel Corp.
 #
-# Key variables (must be changed)
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
 #
-export BHOME="/home/pokybuild"
-export BUILDPASS="builder1pass"
-export ADMINADDR="username at example.com"
-export SLAVEDESC="Poky Autobuilder Example"
-export BUILDERHOSTNAME="server.hostname.com"
-export CONTROLREPO="git://my.git.server/autobuilder-repo.git"
-
-#
-# Futher variables (defaults will work)
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
 #
-BMASTER="$BHOME/poky-master"
-BSLAVE="$BHOME/poky-slave"
-CONTROLPATH="$BHOME/poky-autobuilder"
-UPDATESCRIPT="$CONTROLPATH/scripts/poky-autobuild-update-config"
-BUILDOUTPUT="$BHOME/output"
-SOURCEDIR="$BHOME/sources"
-PSTAGEDIR="$BHOME/pstaging"
-MAXBUILDS=1
-MAXLOGS=10
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-#
-# Proxy Setup (optional)
-#
+import optparse
+import sys
+import getpass
+import struct
+import fcntl
+import os
+import signal
+import urllib2
+import tarfile
+import shutil
+from socket import gethostname
 
-# Add this to ~/subversion/servers
-#http-proxy-host = proxy.site.com 
-#http-proxy-port = PORTNUM
-# and then uncomment the following after adapting to your site config
-#export http_proxy="proxy.site.com:PORTNUM"
-#echo "[core]
-#    gitproxy = none for site.com 
-#    gitproxy = $BHOME/bin/poky-git-proxy-socks-command" > $BHOME/.gitconfig
-#if [ ! -x $BHOME/bin/poky-git-proxy-socks-command ]; then
-#    echo "#! /bin/bash
-#GIT_PROXY_HOST=proxy.site.com 
-#GIT_PROXY_PORT=PORTNUM
-#$BHOME/bin/poky-git-proxy-socks -S \$GIT_PROXY_HOST:\$GIT_PROXY_PORT \$@" > $BHOME/bin/poky-git-proxy-socks-command
-#    chmod a+x $BHOME/bin/poky-git-proxy-socks-command
-#fi
-#if [ ! -x $BHOME/bin/poky-git-proxy-socks ]; then
-#    wget http://git.pokylinux.org/cgit.cgi/poky/plain/scripts/poky-git-proxy-socks.c -O $BHOME/bin/poky-git-proxy-socks.c
-#    gcc $BHOME/bin/poky-git-proxy-socks.c -o $BHOME/bin/poky-git-proxy-socks
-#fi
-#if [ ! -e $BHOME/.ssh/config ]; then
-#    echo "Host *
-#  ProxyCommand poky-git-proxy-socks-command %h %p $@" > $BHOME/.ssh/config
-#fi
-
-cd $BHOME
 
 #
-# Install Buildbot
+# build-bot slave source does not contain the Makefile anymore, so I'm creating it here.
 #
-export PATH=~/bin:~/poky-autobuilder/scripts:$PATH
-export PYTHONPATH=~/lib/python2.6/site-packages
-mkdir -p $PYTHONPATH
-if [ ! -f buildbot-0.8.0.tar.gz ]; then
-    wget http://downloads.sourceforge.net/buildbot/buildbot-0.8.0.tar.gz
-fi
-if [ ! -d buildbot-0.8.0 ]; then
-    tar -xvzf buildbot-0.8.0.tar.gz
-    cd $BHOME/buildbot-0.8.0
-    python ./setup.py install --prefix=~/
-fi
-if [ ! -e $HOME/.profile ]; then
-    echo "export PATH=~/bin:~/poky-autobuilder/scripts:\$PATH" > $HOME/.profile
-    echo "export PYTHONPATH=~/lib/python2.6/site-packages" >> $HOME/.profile
-fi
+def makeMakefile(Dir):
+    bbMakefile = """
+# -*- makefile -*-
 
-#
-# Setup the buildbot master
-#
-if [ ! -d $BMASTER ]; then
-    mkdir $BMASTER
-    cd $BMASTER
-    buildbot create-master --log-count=$MAXLOGS $BMASTER
-    mv $BMASTER/Makefile.sample $BMASTER/Makefile
-    cp $BHOME/poky-autobuilder/config/pokyABConfig.py $BMASTER
-    echo "c = BuildmasterConfig = {}" > master.cfg
-    echo "from buildbot.buildslave import BuildSlave" >> master.cfg
-    echo "c['slaves'] = [BuildSlave(\"builder1\", \"$BUILDPASS\", max_builds=$MAXBUILDS)]" >> master.cfg
-    echo "c['slavePortnum'] = 9989" >> master.cfg
-    echo "" >> master.cfg
-    echo "c['status'] = []" >> master.cfg
-    echo "from buildbot.status.html import WebStatus" >> master.cfg
-    echo "c['status'].append(WebStatus(http_port=8010))" >> master.cfg
-    echo "from buildbot.status import mail" >> master.cfg
-    echo "c['status'].append(mail.MailNotifier(fromaddr=\"username at example.com\"," >> master.cfg
-    echo "                                  extraRecipients=[\"username at example.com\"]," >> master.cfg
-    echo "                                  mode=\"failing\"," >> master.cfg
-    echo "                                  sendToInterestedUsers=False))" >> master.cfg
-    echo "" >> master.cfg
-    echo "c['debugPassword'] = \"debugpassword\"" >> master.cfg
-    echo "c['buildbotURL'] = \"http://$BUILDERHOSTNAME:8010/\"" >> master.cfg
-    echo "" >> master.cfg
-    echo "import pokyABConfig" >> master.cfg
-    echo "reload(pokyABConfig)" >> master.cfg
-    echo "c['builders'] = pokyABConfig.poky_builders" >> master.cfg
-    echo "c['change_source'] = pokyABConfig.poky_sources" >> master.cfg
-    echo "c['schedulers'] = pokyABConfig.poky_sched" >> master.cfg
-    echo "c['projectName'] = pokyABConfig.poky_projname" >> master.cfg
-    echo "c['projectURL'] = pokyABConfig.poky_projurl" >> master.cfg
-fi
+# This is a simple makefile which lives in a buildmaster
+# directory (next to the buildbot.tac file). It allows you to start/stop the
+# master by doing 'make start' or 'make stop'.
 
-#
-# Setup the buildbot slave
-#
-if [ ! -d $BSLAVE ]; then
-    mkdir $BSLAVE
-    cd $BSLAVE
-    buildbot create-slave --umask=000 --log-count=$MAXLOGS $BSLAVE localhost:9989 builder1 $BUILDPASS
-    mv $BSLAVE/Makefile.sample $BSLAVE/Makefile
-    echo $ADMINADDR > $BSLAVE/info/admin
-    echo $SLAVEDESC > $BSLAVE/info/host
-fi
+# The 'reconfig' target will tell a buildmaster to reload its config file.
 
-#
-# Checkout a git repository to control the autobuilder
-#
-if [ ! -d $CONTROLPATH ]; then
-    cd `dirname $CONTROLPATH`
-    git clone $CONTROLREPO `basename $CONTROLPATH`
-fi
+start:
+	twistd --no_save -y buildbot.tac
 
-#
-# Add the cron entries we need
-#
-crontab -l | grep buildbot -q
-if [ $? != 0 ]; then
-    crontmp=`mktemp`
-    crontab -l > $crontmp
-    echo "@reboot $BHOME/bin/buildbot start $BMASTER" >> $crontmp
-    echo "@reboot $BHOME/bin/buildbot start $BSLAVE" >> $crontmp
-    echo "0,10,20,30,40,50 * * * * $UPDATESCRIPT" >> $crontmp
-    crontab $crontmp
-fi
+stop:
+	if [ -e twistd.pid ]; \
+	then kill `cat twistd.pid`; \
+	else Nothing to stop."; \
+	fi
 
-#
-# Create a config file with all our settings in - this file
-# gets source'd by some of our build scripts
-#
-CFILE=$HOME/.pokyautobuild
-if [ ! -f $CFILE ]; then
-    echo "BHOME=$BHOME" > $CFILE
-    echo "BUILDPASS=$BUILDPASS" >> $CFILE
-    echo "BMASTER=$BMASTER" >> $CFILE
-    echo "BSLAVE=$BSLAVE" >> $CFILE
-    echo "ADMINADDR=$ADMINADDR" >> $CFILE
-    echo "SLAVEDESC=\"$SLAVEDESC\"" >> $CFILE
-    echo "CONTROLREPO=$CONTROLREPO" >> $CFILE
-    echo "CONTROLPATH=$CONTROLPATH" >> $CFILE
-    echo "BUILDOUTPUT=$BUILDOUTPUT" >> $CFILE
-    echo "SOURCEDIR=$BHOME/SOURCEDIR" >> $CFILE
-    echo "PSTAGEDIR=$BHOME/PSTAGEDIR" >> $CFILE
-fi
+reconfig:
+	if [ -e twistd.pid ]; \
+	then kill -HUP `cat twistd.pid`; \
+	else Nothing to reconfig."; \
+	fi
+
+log:
+	if [ -e twistd.log ]; \
+	then tail -f twistd.log; \
+	else Nothing to tail."; \
+	fi
+"""
+    print "Creating Makefile for starting the build master."        
+    fout = open(Dir+"/Makefile", "wb")
+    fout.write(bbMakefile)
+    fout.close()
+
+
+def downloadLocalTarball(buildtype):
+    os.chdir(bbInstallerHome)
+    if buildtype == "master":
+        URL = bbMasterDownloadUrl
+    elif buildtype == "slave":
+        URL = bbSlaveDownloadUrl
+    try:
+        fileopener = urllib2.build_opener()
+        rawfile = fileopener.open(URL)
+        tarball = rawfile.read()
+        bbInstallFile = "./" + URL.rpartition("/")[2]
+        fout = open(bbInstallFile, "wb")
+        fout.write(tarball)
+        fout.close()
+    except:
+        print "Issues downloading " + URL + " were encountered. Exiting"
+        sys.exit(1)
+    try:
+        print "Extracting " + bbInstallFile        
+        tar =  tarfile.open(bbInstallFile)
+        tar.extractall() 
+        tar.close()
+    except:
+        print "Issues extracting the tarball from " + URL
+        sys.exit(1)
+    try:
+        bbSourceDir = bbInstallerHome + "/" + bbInstallFile.rpartition("/")[2].replace(".tar.gz", "")
+        print "Configuring " + bbSourceDir        
+        os.chdir(bbSourceDir)
+        os.system ("echo 'export PYTHONPATH=" + bbSourceDir + "/lib/python2.6/site-packages/:$PYTHONPATH' >> "  
+            + bbHome + "/.profile" )
+        if buildtype == "master":
+            bbInstallDir = bbMasterDir
+        elif buildtype == "slave":
+            bbInstallDir = bbSlaveDir
+        cmd = "cd " + bbSourceDir + "; export PYTHONPATH=" + bbMasterDir + "/lib/python2.6/site-packages/:$PYTHONPATH; python ./setup.py install --prefix=" + bbInstallDir
+        os.system (cmd) 
+    except:
+        print "Issues Configuring "
+        sys.exit(1)
+
+#BuildBot download parameters
+bbVersion = "0.8.3"
+bbMasterDownloadUrl = "http://buildbot.googlecode.com/files/buildbot-" + bbVersion + ".tar.gz"
+bbSlaveDownloadUrl = "http://buildbot.googlecode.com/files/buildbot-slave-" + bbVersion + ".tar.gz"
+bbConfigDownloadUrl = None
+bbInstallerHome = os.getcwd()
+bbInstallFile = ""
+# We need the expanded path for ~ later
+bbHome = os.path.expanduser('~')
+bbType = None
+bbSlaveDesc="Poky Autobuilder Example"
+
+usage  = """%prog [options] master|slave|both   
+
+Set up a poky autobuilder instance using BuildBot.
+"""
+parser = optparse.OptionParser(usage=usage)
+parser.add_option( "--buildpasswd", help = "The BuildBot users password. If this is left empty, we'll prompt you for it.",
+                       action = "store", dest = "bbBuildPasswd", default = "" )
+parser.add_option( "--builduser", help = "The BuildBot users password. If this is left empty, we'll prompt you for it.",
+                       action = "store", dest = "bbBuildUser", default = "" )
+parser.add_option( "--gitrepo", help = "The Git Repo used to get as poky-autobuilder controler repo. It's generally safe to ignore this.",
+                       action = "store", dest = "bbGitRepo", default = "" )
+parser.add_option( "--masterdir", help = "The directory you want the master/slave installed to. If this is left empty, we'll use ~/poky-master.",
+                       action = "store", dest = "bbMasterDir", default = "" )
+parser.add_option( "--slavedir", help = "The directory you want the master/slave installed to. If this is left empty, we'll use ~/poky-slave.",
+                       action = "store", dest = "bbSlaveDir", default = "" )
+parser.add_option( "--outputdir", help = "The directory you want the build output to go to. If this is left empty, we'll use ~/poky-slave/output.",
+                       action = "store", dest = "bbOutputDir", default = "" )
+parser.add_option( "--sourcedir", help = "The directory you want the build source to go to. If this is left empty, we'll use ~/poky-slave/source.",
+                       action = "store", dest = "bbSourceDir", default = "" )
+parser.add_option( "--pstagedir", help = "The directory you want the package staging to occur in. If this is left empty, we'll use ~/poky-slave/pstaging.",
+                       action = "store", dest = "bbPStagingDir", default = "" )
+parser.add_option( "--controldir", help = "The directory you want to install poky autobuilder control scripts into. If this is left empty, we'll use ~/poky-autobuilder.",
+                       action = "store", dest = "bbControlDir", default = "" )
+parser.add_option( "--maxbuilds", help = "The max number of builds you want saved. If this is left empty, we'll set this to 1.",
+                       action = "store", dest = "bbMaxBuilds", default = "1" )
+parser.add_option( "--maxlogs", help = "The max number of logs you want saved. If this is left empty, we'll set this to 10.",
+                       action = "store", dest = "bbMaxLogs", default = "10" )                        
+parser.add_option( "--adminmail", help = "The administrator email address. If left unset we set it to current user @ localhost",
+                       action = "store", dest = "bbAdminMail", default = "10" )                        
+
+options, args = parser.parse_args( sys.argv )
+
+# We need to decide if we're doing a master or slave install or both
+if len(args) != 2:
+    parser.error("""
+    You must specify if you wish to create master, slave or both. 
+    If you wish to have master and slave on different machines, you should not use 'both'.
+    
+    """ + usage )
+elif len(args) == 2 and (args[1].lower() == "master" or 
+    args[1].lower() == "slave" or args[1].lower() == "both"):
+    bbType = args[1]
+
+
+# I dislike having to reference options.*
+# Let's dump these into variables
+for attr in dir(options):
+    vars()[attr] = getattr(options,attr)
+
+if bbAdminMail == "":
+    bbAdminMail = os.getusername() + "@localhost"
+
+if bbGitRepo == "":
+    bbGitRepo = "ggit://my.git.server/autobuilder-repo.git"
+
+if bbBuildUser == "":
+    bbBuildUser = raw_input("Please enter the account name that is allowed to kickstart builds and then hit Enter."
+        + " \nThis is not the user the buildbot process runs under.\n")
+
+if bbBuildPasswd == "":
+    bbBuildPasswd = getpass.getpass(prompt="Please enter the password used for the account that is allowed to kickstart" 
+        + " builds and then hit Enter. \nThis should not be the password of the user the buildbot process runs under. \n")
+
+if bbMasterDir == "":
+    bbMasterDir = bbHome + "/poky-master/"
+
+if bbSlaveDir == "":
+    bbSlaveDir = bbHome + "/poky-slave/"
+
+if bbOutputDir == "":
+    bbOutputDir = bbHome + "/poky-slave/output/"
+
+if bbPStagingDir == "":
+    bbPStagingDir = bbHome + "/poky-slave/pstaging/"
+
+if bbType == "master" or bbType == "both":
+    try:
+        os.mkdir(bbMasterDir)
+    except:
+        print bbMasterDir + " already exists."
+        pass
+
+    print "Getting BuildBot Master Source"
+    downloadLocalTarball("master")
+    print "Setting up the BuildBot Master"
+    os.system ("echo 'export PYTHONPATH=" + bbMasterDir + "/lib/python2.6/site-packages/:$PYTHONPATH' >> "  
+        + bbHome + "/.profile" )
+    os.system ("cd " + bbMasterDir + "/bin; export PYTHONPATH=" + bbMasterDir 
+        + "/lib/python2.6/site-packages/:$PYTHONPATH; ./buildbot create-master --log-count=" 
+        + bbMaxLogs + " " + bbMasterDir)
+
+    try:
+        makeMakefile(bbMasterDir)        
+    except:
+        print "Something went wrong creating the makefile"
+        sys.exit(1)
+
+    try:    
+        print "Creating the controller class directory in " + bbControlDir
+        shutil.copytree(bbInstallerHome + "/class", bbControlDir + "/class")
+    except OSError:
+        print "Directory probably exists. Skipping"
+        pass
+
+    try:
+        print "Creating the controller scripts directory in " + bbControlDir
+        shutil.copytree(bbInstallerHome + "/scripts", bbControlDir + "/scripts")
+    except OSError:
+        print "Directory probably exists. Skipping"
+        pass
+
+    try:
+        print "Creating a basic pokyABConfig.py in " + bbMasterDir
+        shutil.copy(bbInstallerHome + "/scripts/pokyABConfig.py", bbMasterDir)
+    except OSError:
+        print "Something went wrong. Skipping"
+        pass
+
+    # Create the poky master.cfg 
+    print "Creating the master.cfg  in " + bbMasterDir
+    bbMasterConfig = """
+c = BuildmasterConfig = {}
+from buildbot.buildslave import BuildSlave
+c['slaves'] = [BuildSlave("builder1", %s, max_builds=%s)]
+c['slavePortnum'] = 9989
+
+c['status'] = []
+from buildbot.status.html import WebStatus
+c['status'].append(WebStatus(http_port=8010))
+from buildbot.status import mail
+c['status'].append(mail.MailNotifier(fromaddr=\"username at example.com\",
+                                  extraRecipients=[\"username at example.com\"],
+                                  mode=\"failing\",
+                                  sendToInterestedUsers=False))
+
+c['debugPassword'] = \"debugpassword\"
+c['buildbotURL'] = \"http://%s:8010/\"
+
+import pokyABConfig
+reload(pokyABConfig)
+c['builders'] = pokyABConfig.poky_builders
+c['change_source'] = pokyABConfig.poky_sources
+c['schedulers'] = pokyABConfig.poky_sched
+c['projectName'] = pokyABConfig.poky_projname
+c['projectURL'] = pokyABConfig.poky_projurl
+
+""" % (bbBuildPasswd, bbMaxBuilds, gethostname())
+
+    fout = open(bbMasterDir+"/master.cfg", "wb")
+    fout.write(bbMasterConfig)
+    fout.close()
+    print "Wrote master.cfg to " + bbMasterDir +"/master.cfg"
+
+
+if bbType == "slave" or bbType == "both":
+    try:
+        os.mkdir(bbSlaveDir) 
+        os.mkdir(bbOutputDir) 
+        os.mkdir(bbPStagingDir) 
+
+    except:
+        pass
+    
+    print "Getting BuildBot Slave Source"    
+    downloadLocalTarball("slave")
+    os.system ("echo 'export PYTHONPATH=" + bbSlaveDir + "/lib/python2.6/site-packages/:$PYTHONPATH' >> "  
+        + bbHome + "/.profile" )
+    os.system ("cd " + bbSlaveDir + "/bin; export PYTHONPATH=" + bbSlaveDir 
+        + "/lib/python2.6/site-packages/:$PYTHONPATH; ./buildslave create-slave " + bbSlaveDir + " localhost:9989 "
+        + bbBuildUser + " " + bbBuildPasswd)
+    
+    try:
+        makeMakefile(bbSlaveDir)        
+    except:
+        print "Something went wrong creating the makefile"
+        sys.exit(1)
+
+    try:
+        fout = open(bbSlaveDir+"/info/admin", "wb")
+        fout.write(bbAdminMail)
+        fout.close()
+    except:
+        print "Couldn't write the admin email to " + bbSlaveDir + "/info/admin"
+        pass
+         
+    try:
+        fout = open(bbSlaveDir+"/info/host", "wb")
+        fout.write(bbSlaveDesc)
+        fout.close()
+    except:
+        print "Couldn't write the builder description to" + bbSlaveDir + "/info/host"
+        pass
+
+    if bbControlDir != "":
+        print "Creating repo"
+        os.system ("git clone " + bbGitRepo + " " + bbControlDir)
+    else:
+        bbControlDir = bbHome + "/poky-autobuilder"
+
+    bbPokyABDotFile = """
+    BHOME=%s
+    BUILDPASS=%s 
+    BMASTER=%s 
+    BSLAVE=%s 
+    ADMINADDR=%s 
+    SLAVEDESC=%s 
+    CONTROLREPO=%s 
+    CONTROLPATH=%s 
+    BUILDOUTPUT=%s 
+    SOURCEDIR=%s 
+    PSTAGEDIR=%s 
+
+""" % (bbHome, bbBuildPasswd, bbMasterDir, bbSlaveDir, bbAdminMail, bbSlaveDesc, bbGitRepo, bbControlDir, bbOutputDir, bbSourceDir, bbPStagingDir)
+   
+    fout = open(bbHome+"/.pokyautobuild", "wb")
+    fout.write(bbAdminMail)
+    fout.close()
 
 #
 # Inform the user about the remaining configuration needed
-#
-echo
-echo "Installation complete. Please review the output above for any errors."
-echo "Then edit the master.cfg file in $BMASTER and start the build master and"
-echo "build slave by running 'make start' in $BMASTER and $BSLAVE directories."
-echo
+# We should correct this for slave only/master only builds
+print """
+Installation complete. Please review the output above for any errors.
+Then edit the master.cfg file in %s and start the build master and
+build slave by running 'make start' in %s and %s directories.
+""" % (bbMasterDir, bbMasterDir, bbSlaveDir)
+
 
-- 
1.7.1




More information about the yocto mailing list