Line 1: |
Line 1: |
− | We are using [https://buildbot.net/ Buildbot] to build and test the current development version of Octave on multiple systems in a number of different configurations.
| + | GNU Octave uses [https://buildbot.net/ Buildbot] to build and test the current development version on multiple systems in a number of different configurations. |
| | | |
| {{Note|The current status of the builds may be found at http://buildbot.octave.org:8010/#/waterfall.}} | | {{Note|The current status of the builds may be found at http://buildbot.octave.org:8010/#/waterfall.}} |
Line 57: |
Line 57: |
| |} | | |} |
| | | |
− | = Build Slave Configuration = | + | = Setup and run a Buildbot Worker = |
| | | |
− | To run a build slave for Octave, you must do the following:
| + | Your system may be behind a firewall. It does not have to have a distinct public IP address. |
| | | |
− | * Contact the [mailto:octave-maintainers@gnu.org Octave Maintainers] mailing list to let us know that you wish to provide a system to use as a build slave. | + | To support Octave development and run a Buildbot Worker, you must do the following: |
| + | |
| + | * Contact the [https://octave.discourse.group/c/maintainers/7 Octave Maintainers on Discourse] to let us know that you wish to provide a system to use as a Buildbot Worker. We will give you a <code>WORKERNAME</code> and a '''secret''' <code>PASSWORD</code> to configure your Buildbot Worker. |
| * Install buildbot. Packages exist for most distributions. See the buildbot docs for other options. You should create a separate user account with no special privileges that will run buildbot. | | * Install buildbot. Packages exist for most distributions. See the buildbot docs for other options. You should create a separate user account with no special privileges that will run buildbot. |
− | * Create a configuration file (see below). | + | * Decide for a <code>BASEDIR</code>. For example, if the home directory for the buildbot user is {{Path|/var/lib/buildbot}} and your <code>WORKERNAME</code> is set to <code>'debian-x86_64'</code> , then <code>BASEDIR</code> might be {{Path|/var/lib/buildbot/worker/debian-x86_64}}. |
− | * Run buildbot on the slave system, preferably by starting it automatically when your system boots. It should be running with the buildbot user ID. | + | * <code>MASTERHOST</code> is <code>buildbot.octave.org</code> and <code>PORT</code> is <code>9989</code>. |
| + | * Create the configuration<pre>buildbot-worker create-worker BASEDIR MASTERHOST:PORT WORKERNAME PASSWORD</pre> |
| + | * Run buildbot on the worker system, preferably by starting it automatically when your system boots. It should be running with the buildbot user ID. <pre>buildbot-worker start BASEDIR</pre> |
| | | |
− | You may also want to set up '''ccache''' to work with buildbot (strongly recommended to speed up builds). If you create a directory {{Path|~/buildbot/bin}}, it will be added to the execution PATH when buildbot runs commands on the slave. This directory can have symbolic links like the following: | + | == ccache == |
| + | |
| + | You may also want to set up '''ccache''' to work with buildbot (strongly recommended to speed up builds). If you create a directory {{Path|~/buildbot/bin}}, it will be added to the execution PATH when the Buildbot Master runs commands on the Buildbot Worker. This directory can have symbolic links like the following: |
| | | |
| lrwxrwxrwx 1 buildbot buildbot 15 Aug 26 11:39 gcc -> /usr/bin/ccache | | lrwxrwxrwx 1 buildbot buildbot 15 Aug 26 11:39 gcc -> /usr/bin/ccache |
Line 74: |
Line 80: |
| | | |
| They should point to the actual location of ccache if it is not in {{Path|/usr/bin}}. | | They should point to the actual location of ccache if it is not in {{Path|/usr/bin}}. |
− |
| |
− | Your system may be behind a firewall. It does not have to have a distinct public IP address.
| |
− |
| |
− | == Sample Slave Configuration File ==
| |
− |
| |
− | You must edit the settings for <code>basedir</code>, <code>slavename</code>, and <code>password</code>. The <code>basedir</code> should be the absolute and fully expanded name of the directory containing the configuration file. For example, if the home directory for the buildbot user is {{Path|/var/lib/buildbot}} and your <code>slavename</code> is set to 'debian-x86_64' , then <code>basedir</code> might be {{Path|/var/lib/buildbot/slaves/debian-x86_64}}. The password should not be anything valuable. You'll be asked to provide the <code>slavename</code> and <code>password</code> so that they may be added to the master configuration on buildbot.octave.org. Do '''not''' post the password to the octave-maintainers mailing list.
| |
− |
| |
− | <syntaxhighlight lang="python">
| |
− | import os
| |
− |
| |
− | from buildslave.bot import BuildSlave
| |
− | from twisted.application import service
| |
− |
| |
− | basedir = '/PATH/TO/DIRECTORY/CONTAINING/THIS/CONFIGURATION/FILE'
| |
− | rotateLength = 10000000
| |
− | maxRotatedFiles = 10
| |
− |
| |
− | # if this is a relocatable tac file, get the directory containing the TAC
| |
− | if basedir == '.':
| |
− | import os.path
| |
− | basedir = os.path.abspath(os.path.dirname(__file__))
| |
− |
| |
− | # note: this line is matched against to check that this is a buildslave
| |
− | # directory; do not edit it.
| |
− | application = service.Application('buildslave')
| |
− |
| |
− | try:
| |
− | from twisted.python.logfile import LogFile
| |
− | from twisted.python.log import ILogObserver, FileLogObserver
| |
− | logfile = LogFile.fromFullPath(os.path.join(basedir, "twistd.log"), rotateLength=rotateLength,
| |
− | maxRotatedFiles=maxRotatedFiles)
| |
− | application.setComponent(ILogObserver, FileLogObserver(logfile).emit)
| |
− | except ImportError:
| |
− | # probably not yet twisted 8.2.0 and beyond, can't set log yet
| |
− | pass
| |
− |
| |
− | buildmaster_host = 'buildbot.octave.org'
| |
− | port = 9989
| |
− | slavename = 'SLAVE-NAME'
| |
− | passwd = 'PASSWORD'
| |
− | keepalive = 600
| |
− | usepty = 0
| |
− | umask = None
| |
− | maxdelay = 300
| |
− | allow_shutdown = None
| |
− |
| |
− | s = BuildSlave(buildmaster_host, port, slavename, passwd, basedir,
| |
− | keepalive, usepty, umask=umask, maxdelay=maxdelay,
| |
− | allow_shutdown=allow_shutdown)
| |
− | s.setServiceParent(application)
| |
− | </syntaxhighlight>
| |
| | | |
| == Space Requirements == | | == Space Requirements == |
Line 133: |
Line 88: |
| | | |
| If the directory containing the build and ccache directories doesn't have sufficient space, then these directory names may point to a separate partition that does have enough space available. | | If the directory containing the build and ccache directories doesn't have sufficient space, then these directory names may point to a separate partition that does have enough space available. |
− |
| |
− | == Starting the Slave ==
| |
− |
| |
− | With everything in place, you can run the slave server with the following commands (assuming that your <code>basedir</code> is {{Path|/var/lib/buildbot/slaves/debian-x86_64}}).
| |
− |
| |
− | cd ~buildbot/slaves
| |
− | sudo -u buildbot buildslave start debian-x86_64
| |
| | | |
| [[Category:Building]] | | [[Category:Building]] |