User:Bhearsum:Build/VMware team
Contents
VMware team
This document describes how to create a VMware team consisting of a Linux buildslave, Win32 buildslave, and Linux CVS server/buildmaster.
Prerequisites
Before completing anything below you should have the following 3 VMs:
Create the Team
- File->New->Team
- Next
- Pick a name and location, click Next
- Select "Yes", click Next
- Use "Add->Existing Virtual Machine" to add all 3 of the above VMs
- The buildserver should be first in the list and have a delay of "30s"
- The other VMs should have a delay of 10s
- Click Next
- Select "Yes", click Next
- Add one LAN Segement, click Next
- Add an Ethernet Adapter to each VM, set all of them to "LAN 1", click Next
- Click Finish
Set-up the IP addresses of the VMs
Linux ref image
Create the file /etc/sysconfig/network-scripts/ifcfg-eth1 with the following contents:
DEVICE=eth1 ONBOOT=yes BOOTPROTO=static BROADCAST=10.0.0.255 IPADDR=10.0.0.2 NETMASK=255.255.255.0 NETWORK=10.0.0.0/24
Buildserver ref image
Create the file /etc/sysconfig/network-scripts/ifcfg-eth1 with the following contents:
DEVICE=eth1 ONBOOT=yes BOOTPROTO=static BROADCAST=10.0.0.255 IPADDR=10.0.0.1 NETMASK=255.255.255.0 NETWORK=10.0.0.0/24
Win32 ref image
- Start->Settings->Control Panel->Network Connections
- Right click "Local Area Connection 2" (maybe 3) -> Properties
- Double click "Internet Protocol (TCP/IP)"
- Select "Use the following IP address"
- IP Address: 10.0.0.3
- Subnet mask: 255.255.255.0
- Click "OK"
Create Buildslaves
Linux ref image
Login as root and do the following:
mkdir /buildbot chown buildbot buildbot/
Then login as buildbot and do:
cd /buildbot mkdir default cd default buildbot create-slave . 10.0.0.1:9990 linux l1nuxbu1ld3r
As root again, create the file /etc/default/buildbot with the contents:
# buildbots to manage # add a new set of variables for each buildbot to start # BB_NUMBER -> index for the buildbot # BB_NAME -> short name that is printed when starting/stopping # BB_USER -> user to run the buildbot as # BB_BASEDIR -> the absolute path to the buildbot master or slave # BB_OPTIONS -> extra options to pass to buildbot # BB_PREFIXCMD -> prefix command, ie. nice, linux32, etc. # # Each of the preceeding are arrays. Each Buildbot you wish to run should # increase the index of each. For example, the first Buildbot should use # [0] on each array. The next one uses [1], etc. BB_NUMBER[0]=0 BB_NAME[0]="Default Buildbot" BB_USER[0]="buildbot" BB_BASEDIR[0]="/buildbot/default/" BB_OPTIONS[0]="" BB_PREFIXCMD[0]=""
And create the file /etc/init.d/buildbot with the contents:
#! /bin/bash # initscript for buildbot ### BEGIN INIT INFO # Provides: cvsd # Required-Start: $local_fs $network # Required-Stop: $local_fs # Should-Start: $remote_fs # Should-Stop: $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: S 0 1 6 # Short-Description: Buildbot # Description: Buildbot ### END INIT INFO PATH=/sbin:/bin:/usr/sbin:/usr/bin DESC="BuildBot" USER=buildbot DAEMON=/tools/buildbot/bin/buildbot DNAME=buildbot PROCNAME=$NAME [ -r /etc/default/buildbot ] && . /etc/default/buildbot test -x ${DAEMON} || exit 0 . /lib/lsb/init-functions check_config() { errors=0 for i in ${BB_NUMBER[@]}; do [ $i -ge 0 ] || continue if [ -z "${BB_NAME[$i]}" ]; then echo >&2 "buildbot $i: no name" errors=$(($errors+1)) fi if [ -z "${BB_USER[$i]}" ]; then echo >&2 "buildbot $i: no user" errors=$(($errors+1)) elif ! getent passwd ${BB_USER[$i]} >/dev/null; then echo >&2 "buildbot $i: unknown user ${BB_USER[$i]}" errors=$(($errors+1)) fi if [ ! -d "${BB_BASEDIR[$i]}" ]; then echo >&2 "buildbot $i: no base directory ${BB_BASEDIR[$i]}" errors=$(($errors+1)) fi done [ $errors -eq 0 ] || exit 1 } check_config start_buildbot() { NAME="$1" USER="$2" BASEDIR="$3" PREFIXCMD="$4" OPTIONS="$5" #START="--start --quiet --exec ${DAEMON} --name ${NAME} --pidfile ${BASEDIR}/twistd.pid" #[ -n "${USER}" ] && START="${START} --chuid ${USER}" #START="${START} -- start ${BASEDIR} ${OPTIONS}" #${PREFIXCMD} start-stop-daemon ${START} >/dev/null 2>&1 ${PREFIXCMD} su -s /bin/bash -c "${DAEMON} start ${BASEDIR} ${OPTIONS}" - ${USER} return $? } stop_buildbot() { NAME="$1" USER="$2" BASEDIR="$3" PREFIXCMD="$4" ${PREFIXCMD} su -s /bin/bash -c "${DAEMON} stop ${BASEDIR}" - ${USER} return $? } reload_buildbot() { NAME="$1" USER="$2" BASEDIR="$3" PREFIXCMD="$4" ${PREFIXCMD} su -s /bin/bash -c "${DAEMON} sighup ${BASEDIR}" - ${USER} return $? } do_start () { errors=0 for i in ${BB_NUMBER[@]}; do [ $i -ge 0 ] || continue echo "Starting buildbot ${BB_NAME[$i]}" if start_buildbot "${BB_NAME[$i]}" "${BB_USER[$i]}" "${BB_BASEDIR[$i]}" \ "${BB_PREFIXCMD[$i]}" "${BB_OPTIONS[$i]}" then echo "started" else echo "not started" errors=$(($errors+1)) fi done return $errors } do_stop () { errors=0 for i in ${BB_NUMBER[@]}; do [ $i -ge 0 ] || continue echo "Stopping buildbot ${BB_NAME[$i]}" if stop_buildbot "${BB_NAME[$i]}" "${BB_USER[$i]}" "${BB_BASEDIR[$i]}" \ "${BB_PREFIXCMD[$i]}" then echo "stopped" else echo "not stopped" errors=$(($errors+1)) fi done return $errors } do_reload () { errors=0 for i in ${BB_NUMBER[@]}; do [ $i -ge 0 ] || continue echo "Reload buildbot ${BB_NAME[$i]}" if reload_buildbot "${BB_NAME[$i]}" "${BB_USER[$i]}" "${BB_BASEDIR[$i]}" \ "${BB_PREFIXCMD[$i]}" then echo "reloaded" else echo "not reloaded" errors=$(($errors+1)) fi done return $errors } do_restart () { errors=0 for i in ${BB_NUMBER[@]}; do [ $i -ge 0 ] || continue echo "Restarting buildbot ${BB_NAME[$i]}" stop_buildbot "${BB_NAME[$i]}" "${BB_USER[$i]}" "${BB_BASEDIR[$i]}" \ "${BB_PREFIXCMD[$i]}" || true if start_buildbot "${BB_NAME[$i]}" "${BB_USER[$i]}" "${BB_BASEDIR[$i]}" \ "${BB_PREFIXCMD[$i]}" "${BB_OPTIONS[$i]}" then echo "restarted" else echo "not restarted" errors=$(($errors+1)) fi done return $errors } case "$1" in start) do_start exit $? ;; stop) do_stop exit $? ;; reload) do_reload exit $? ;; restart|force-reload) do_restart exit $? ;; *) log_warning_msg "Usage: $0 {start|stop|restart|reload|force-reload}" exit 1 ;; esac exit 0
Then do:
chmod +x buildbot
To have Buildbot start with the system run the following command:
chkconfig --add buildbot
Win32 ref image
Adapted from http://buildbot.net/trac/wiki/RunningBuildbotOnWindows Open up a command line (as an Administrator) and do the following:
buildbot create-slave d:\buildbot\default 10.0.0.1:9990 win32 w1nbu1ld3r
Add permission to allow the builder user to "Log on as a service":
- Start->Settings->Control Panel->Administrative Tools->Local Security Policy
- Local Policies->User Rights Assignment
- Add 'cltbld' to the "Log on as a service" policy.
Back in the console enter:
buildbot_service.py --user WIN2K3-REF-IMG\cltbld --password [cltbld password] --startup auto install
Give the cltbld user full permissions to some registry keys:
- Start->Run->'regedit'
- HKLM\System\CurrentControlSet\Services
- Right click on Buildbot->Permissions
- Give 'cltbld' Full Control.
Back in the console do:
buildbot_service.py start "D:\buildbot\default"
The service will remember this directory for future starts and stops.