BuildBot setup notes

I am currently using a Debian stable (5.01) system, but this should work similarly on other distributions or with BuildBot installed from source.

$ sudo aptitude install buildbot

edit /etc/default/buildbot:

BB_NUMBER[0]=0                  # index for the other values; negative disables the bot
BB_NAME[0]="foo"                # short name printed on startup / stop
BB_USER[0]="buildbot"           # user to run as
BB_BASEDIR[0]="/var/lib/buildmaster"            # basedir argument to buildbot (absolute path)
BB_OPTIONS[0]=""                # buildbot options
BB_PREFIXCMD[0]=""              # prefix command, i.e. nice, linux32, dchroot

BB_NUMBER[1]=1
BB_NAME[1]="bar"
BB_USER[1]="buildbot"
BB_BASEDIR[1]="/var/lib/buildslave"
BB_OPTIONS[1]=""
BB_PREFIXCMD[1]=""
$ sudo buildbot create-master /var/lib/buildmaster
$ sudo cp /var/lib/buildmaster/master.cfg.sample /var/lib/buildmaster/master.cfg

edit /var/lib/buildmaster/master.cfg:

change the Builders code to:

repourl = "git://git.etherboot.org/scm/gpxe.git"
branch = "master"

from buildbot.process import factory
from buildbot.steps.source import Git
from buildbot.steps.shell import Compile
f1 = factory.BuildFactory()
f1.addStep(Git(repourl=repourl, branch=branch))
f1.addStep(Compile(command=["make", "-C", "src"]))

change the owner of these files to the one the Debian init scripts expect:

$ sudo chown -R buildbot /var/lib/buildmaster

configure a slave:

$ sudo buildbot create-slave /var/lib/buildslave localhost:9989 bot1name bot1passwd
$ sudo chown -R buildbot /var/lib/buildslave

start the master and slave:

$ sudo /etc/init.d/buildbot start

At this point, the web interface (port 8010 by default) should be accessible on the master.

To force a test build, try something like:

$ sudo buildbot sendchange --master localhost:9989 --username change --revision 92a9978b4403628345ca03ba4edc7641352460fa --comments "Test change #3" COPYING

(COPYING is there since some file is needed or else no build will happen; in a real setup, sendchange would be called by a git commit hook or a cron job with actual commit information.)