directory and run this:
@example
-./makebuildserver.sh
+./makebuildserver.py
@end example
-This will take a long time - most of it spent installing the necessary parts
-of the Android SDK for all the various platforms. Luckily you only need to
-do it occasionally.
+This will take a long time, and use a lot of bandwidth - most of it spent
+installing the necessary parts of the Android SDK for all the various
+platforms. Luckily you only need to do it occasionally. Once you have a
+working build server image, if the recipes change (e.g. when packages need
+to be added) you can just run that script again and the existing one will
+be updated in place.
Once it's complete you'll have a new base box called 'buildserver' which is
what's used for the actual builds. You can then build packages as normal,
--- /dev/null
+#!/usr/bin/python
+
+import os
+import sys
+import subprocess
+import time
+
+def vagrant(params, cwd=None):
+ p = subprocess.Popen(['vagrant'] + params, cwd=cwd,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = p.communicate()
+ return (p.returncode, out, err)
+
+boxfile = 'buildserver.box'
+serverdir = 'buildserver'
+
+if not os.path.exists('makebuildserver.py') or not os.path.exists(serverdir):
+ print 'This must be run from the correct directory!'
+ sys.exit(1)
+
+if os.path.exists(boxfile):
+ os.remove(boxfile)
+
+vagrant(['halt'], serverdir)
+print "Configuring build server VM"
+vagrant(['up'], serverdir)
+print "Stopping build server VM"
+vagrant(['halt'], serverdir)
+
+print "Waiting for build server VM to be finished"
+ready = False
+while not ready:
+ time.sleep(2)
+ returncode, out, err = vagrant(['status'], serverdir)
+ if returncode != 0:
+ print "Error while checking status"
+ sys.exit(1)
+ for line in out.splitlines():
+ if line.startswith("default"):
+ if line.find("poweroff") != -1:
+ ready = True
+ else:
+ print "Status: " + line
+
+print "Packaging"
+vagrant(['package', '--output', os.path.join('..', boxfile)], serverdir)
+print "Adding box"
+vagrant(['box', 'add', 'buildserver', boxfile, '-f'])
+
+os.remove(boxfile)
+