<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.fightorder.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Buildbot</id>
	<title>Buildbot - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.fightorder.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Buildbot"/>
	<link rel="alternate" type="text/html" href="https://www.fightorder.net/wiki/index.php?title=Buildbot&amp;action=history"/>
	<updated>2026-04-21T00:41:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://www.fightorder.net/wiki/index.php?title=Buildbot&amp;diff=2570&amp;oldid=prev</id>
		<title>Qrow: Created page with &quot;Spring uses a [https://buildbot.springrts.com/waterfall buildbot] to automaticly compile commits to the git repository to test if the commit broke something and to create the official installers.  There are currently three buildbot setups, based on Gentoo, OSX and ubuntu (this page, but deprecated).  =Setting up buildmaster=  &lt;pre&gt; sudo apt-get install buildbot cd spring/buildbot/master cp passwords.py.template passwords.py buildbot s...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.fightorder.net/wiki/index.php?title=Buildbot&amp;diff=2570&amp;oldid=prev"/>
		<updated>2026-03-04T02:01:20Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Spring uses a [https://buildbot.springrts.com/waterfall buildbot] to automaticly compile commits to the git repository to test if the commit broke something and to create the official installers.  There are currently three buildbot setups, based on &lt;a href=&quot;/wiki/index.php?title=Buildbot:Gentoo&quot; title=&quot;Buildbot:Gentoo&quot;&gt;Gentoo&lt;/a&gt;, &lt;a href=&quot;/wiki/index.php?title=Buildbot:OSX&quot; title=&quot;Buildbot:OSX&quot;&gt;OSX&lt;/a&gt; and ubuntu (this page, but deprecated).  =Setting up buildmaster=  &amp;lt;pre&amp;gt; sudo apt-get install buildbot cd spring/buildbot/master cp passwords.py.template passwords.py buildbot s...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Spring uses a [https://buildbot.springrts.com/waterfall buildbot] to automaticly compile commits to the git repository to test if the commit broke something and to create the official installers.&lt;br /&gt;
&lt;br /&gt;
There are currently three buildbot setups, based on [[Buildbot:Gentoo|Gentoo]], [[Buildbot:OSX|OSX]] and ubuntu (this page, but deprecated).&lt;br /&gt;
&lt;br /&gt;
=Setting up buildmaster=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install buildbot&lt;br /&gt;
cd spring/buildbot/master&lt;br /&gt;
cp passwords.py.template passwords.py&lt;br /&gt;
buildbot start&lt;br /&gt;
buildbot create-master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After creating the master, the generated `public_html` can be erased and linked to the `buildbot/master/public_html` in the Spring repository.&lt;br /&gt;
&lt;br /&gt;
= Setting up buildslave (Making the chroot)=&lt;br /&gt;
&lt;br /&gt;
At least debootstrap and schroot are required. I didn&amp;#039;t compile an exhaustive list of other dependencies on the host system, so YMMV.&lt;br /&gt;
&lt;br /&gt;
==Configuring schroot==&lt;br /&gt;
&lt;br /&gt;
Add a file (name does not matter) to `/etc/schroot/chroot.d` with the following contents, after substituting an absolute path for `$DIR`:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[buildbot-maverick]&lt;br /&gt;
description=Ubuntu Maverick&lt;br /&gt;
directory=$DIR&lt;br /&gt;
type=directory&lt;br /&gt;
users=buildbot&lt;br /&gt;
groups=buildbot&lt;br /&gt;
root-groups=root&lt;br /&gt;
personality=linux32&lt;br /&gt;
script-config=script-defaults&lt;br /&gt;
message-verbosity=verbose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, remove or comment out the `/home` bind mount in `/etc/schroot/default/fstab`!&lt;br /&gt;
&lt;br /&gt;
This configuration has been tested with schroot 1.4.23. With any other version YMMV.&lt;br /&gt;
&lt;br /&gt;
==Building and entering the chroot==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
debootstrap --variant=buildd --arch i386 maverick $DIR http://ftp.cvut.cz/ubuntu/&lt;br /&gt;
mkdir -p $DIR/home/buildbot/www&lt;br /&gt;
chown buildbot:buildbot $DIR/home/buildbot&lt;br /&gt;
schroot -c buildbot-maverick&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Inside the chroot=&lt;br /&gt;
&lt;br /&gt;
== Run (as root)==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;#039;deb http://ftp.cvut.cz/ubuntu maverick universe&amp;#039; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sed s/deb/deb-src/g /etc/apt/sources.list &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install nano git-core python-dev python-setuptools&lt;br /&gt;
&lt;br /&gt;
cd /root&lt;br /&gt;
git clone git://github.com/buildbot/buildbot.git&lt;br /&gt;
cd buildbot&lt;br /&gt;
git checkout v0.8.3p1&lt;br /&gt;
cd slave&lt;br /&gt;
python setup.py install&lt;br /&gt;
mkdir /slave&lt;br /&gt;
chown buildbot:buildbot /slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build dependencies for Windows build (except MinGW, see below):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install cmake nsis p7zip-full unzip wget pandoc wine&lt;br /&gt;
apt-get install openjdk-6-jdk   #to enable building of Java AIs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build dependencies for Linux build:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libboost-all-dev libdevil-dev libfreetype6-dev libopenal-dev \&lt;br /&gt;
	libogg-dev libvorbis-dev libglew-dev libsdl-dev libxcursor-dev \&lt;br /&gt;
	p7zip-full&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build dependencies for validation test:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install gdb libcurl4-gnutls-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build dependencies for doxygen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install doxygen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build dependencies for cppcheck:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install cppcheck&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Speed up linking:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install binutils-gold&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Recompile MinGW package with dwarf2 exceptions instead of sjlj exceptions (as root)==&lt;br /&gt;
&lt;br /&gt;
First recompile the compiler itself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir mingw&lt;br /&gt;
cd mingw&lt;br /&gt;
apt-get build-dep gcc-mingw32&lt;br /&gt;
apt-get source gcc-mingw32&lt;br /&gt;
cd gcc-mingw32-4.4.4&lt;br /&gt;
editor debian/rules   # remove --enable-sjlj-exceptions, add --disable-sjlj-exceptions --with-dwarf2&lt;br /&gt;
dpkg-buildpackage -rfakeroot -b&lt;br /&gt;
cd ..&lt;br /&gt;
dpkg -i gcc-mingw32*.deb&lt;br /&gt;
echo &amp;quot;gcc-mingw32 hold&amp;quot;|dpkg --set-selections&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then recompile the runtime libraries against the new compiler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get build-dep mingw32-runtime&lt;br /&gt;
apt-get source mingw32-runtime&lt;br /&gt;
cd mingw32-runtime-3.15.2&lt;br /&gt;
dpkg-buildpackage -rfakeroot -b&lt;br /&gt;
cd ..&lt;br /&gt;
dpkg -i mingw32-runtime*.deb&lt;br /&gt;
echo &amp;quot;mingw32-runtime hold&amp;quot;|dpkg --set-selections&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optionally, remove build dependencies (check what apt-get build-dep installed!):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get purge autoconf automake autotools-dev cdbs debhelper fdupes gettext \&lt;br /&gt;
	gettext-base groff-base html2text intltool intltool-debian libcroco3 \&lt;br /&gt;
	libfont-afm-perl libgmp3-dev libgmpxx4ldbl libhtml-format-perl \&lt;br /&gt;
	libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl \&lt;br /&gt;
	libmail-sendmail-perl libmailtools-perl libmpfr-dev \&lt;br /&gt;
	libsys-hostname-long-perl libunistring0 liburi-perl libwww-perl \&lt;br /&gt;
	libxml-parser-perl lzma m4 man-db mingw-w64 po-debconf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Patch a few things ==&lt;br /&gt;
&lt;br /&gt;
We set up ld to allow only one execution at the same time, to prevent thrashing the box due to multiple parallel linker jobs.&lt;br /&gt;
We &amp;quot;patch&amp;quot; makensis to not sync the installer to disk after every tiny chunk of data it has written.&lt;br /&gt;
This speeds installer building up by an order of magnitude.&lt;br /&gt;
&lt;br /&gt;
First, copy over ld, makensis and no-msync.c from spring/buildbot/slave (Spring repository) to the chroot.&lt;br /&gt;
Then switch to the directory (inside the chroot!) where you copied those files and do:&lt;br /&gt;
&lt;br /&gt;
For Linux builds:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv /usr/bin/ld /usr/bin/ld.orig&lt;br /&gt;
cp ld /usr/bin/ld&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For MinGW builds:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv /usr/bin/i586-mingw32msvc-ld /usr/bin/i586-mingw32msvc-ld.orig&lt;br /&gt;
cp ld /usr/bin/i586-mingw32msvc-ld&lt;br /&gt;
mv /usr/i586-mingw32msvc/bin/ld /usr/i586-mingw32msvc/bin/ld.orig&lt;br /&gt;
cp ld /usr/i586-mingw32msvc/bin/ld&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For makensis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -shared -m32 no-msync.c -o no-msync.so&lt;br /&gt;
cp makensis no-msync.so /usr/local/bin/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Run (as buildbot user)==&lt;br /&gt;
&lt;br /&gt;
Substitute MASTER with host:port of the buildmaster and SLAVENAME and PASSWORD with the slave name and password as configured in the master.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildslave create-slave /slave MASTER SLAVENAME PASSWORD&lt;br /&gt;
cd /slave&lt;br /&gt;
git clone git://github.com/spring/mingwlibs.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ccache==&lt;br /&gt;
&lt;br /&gt;
To install ccache simply run `apt-get install ccache` (inside the chroot) and (optionally) tweak the settings (cache size etc.)&lt;br /&gt;
&lt;br /&gt;
= Outside the chroot again=&lt;br /&gt;
&lt;br /&gt;
Get the Makefile from the Spring repository that can be used to start/stop the slave easily:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://raw.github.com/spring/spring/master/buildbot/master/buildbot.mk -O Makefile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you can use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make start-slave    # creates schroot session and starts buildslave in it&lt;br /&gt;
make stop-slave     # stops buildslave and remove schroot session&lt;br /&gt;
make enter-chroot   # enter the schroot as buildbot user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure you review the Makefile and fix the chroot name, paths, etc. before using it!&lt;br /&gt;
(That applies to anything in this readme really.)&lt;br /&gt;
&lt;br /&gt;
[[Category:Buildbot]]&lt;/div&gt;</summary>
		<author><name>Qrow</name></author>
	</entry>
</feed>