<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[146829] contrib/buildbot-test/README.md</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="https://trac.macports.org/changeset/146829">146829</a></dd>
<dt>Author</dt> <dd>raimue@macports.org</dd>
<dt>Date</dt> <dd>2016-03-18 10:16:18 -0700 (Fri, 18 Mar 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>How to set up both master and slave on localhost

This setup is only intended for development and runs both master and slave on
the same machine. Instructions for production systems are still missing.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#contribbuildbottestREADMEmd">contrib/buildbot-test/README.md</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="contribbuildbottestREADMEmd"></a>
<div class="modfile"><h4>Modified: contrib/buildbot-test/README.md (146828 => 146829)</h4>
<pre class="diff"><span>
<span class="info">--- contrib/buildbot-test/README.md        2016-03-18 17:14:44 UTC (rev 146828)
+++ contrib/buildbot-test/README.md        2016-03-18 17:16:18 UTC (rev 146829)
</span><span class="lines">@@ -1,49 +1,144 @@
</span><span class="cx"> # Hacking on the MacPorts buildbot
</span><span class="cx"> 
</span><ins>+## Setting up both buildbot master and slave for testing on localhost
</ins><span class="cx"> 
</span><del>-## Setting up a buildbot master for testing
</del><ins>+These steps explain how to install buildbot locally for hacking on the infrastructure. This will run both the buildbot master and buildbot slave on localhost. Note the buildbot slave will run in a non-default prefix, to avoid interfering with your installation in /opt/local.
</ins><span class="cx"> 
</span><del>-### 1. Install buildbot
</del><ins>+### Setting up buildbot master on localhost
</ins><span class="cx"> 
</span><ins>+#### 1. Install buildbot
+
</ins><span class="cx">     sudo port install buildbot
</span><span class="cx"> 
</span><del>-### 2. Create new directory for buildbot configuration
</del><span class="cx"> 
</span><del>-    buildbot create-master ~/buildbot-master
</del><ins>+#### 2. Create new directory with buildbot master configuration
</ins><span class="cx"> 
</span><del>-### 3. Add and edit sample configuration files
</del><ins>+    sudo mkdir -p /opt/mp-buildbot
+    sudo chown -R $USER:buildbot /opt/mp-buildbot
+    sudo chmod -R 775 /opt/mp-buildbot
</ins><span class="cx"> 
</span><del>-    cd ~/buildbot-master
</del><ins>+    buildbot create-master /opt/mp-buildbot/master
+
+
+#### 3. Add and edit sample configuration files
+
+    cd /opt/mp-buildbot/master
</ins><span class="cx">     ln -s .../path/to/contrib/buildbot-test/master.cfg
</span><span class="cx">     cp .../path/to/contrib/buildbot-test/config.json.sample config.json
</span><span class="cx">     cp .../path/to/contrib/buildbot-test/slaves.json.sample slaves.json
</span><span class="cx"> 
</span><span class="cx"> Check settings in config.json and adapt as needed.
</span><span class="cx"> 
</span><del>-### 4. Set up authentication
</del><span class="cx"> 
</span><del>-    cd ~/buildbot-master
</del><ins>+#### 4. Set up authentication
+
+    cd /opt/mp-buildbot/master
</ins><span class="cx">     htpasswd -c -d ./htpasswd admin
</span><span class="cx"> 
</span><del>-### 5. Starting buildbot
</del><span class="cx"> 
</span><ins>+#### 5. Starting buildbot
+
</ins><span class="cx"> To start buildbot, execute the `start` command. The OS X firewall will request you to allow access for Python. Then you can view the buildbot instance in your web browser. 
</span><span class="cx"> 
</span><del>-    buildbot start ~/buildbot-master
</del><ins>+    buildbot start /opt/mp-buildbot/master
</ins><span class="cx">     open http://localhost:8010/
</span><span class="cx"> 
</span><del>-### 5. Testing changes
</del><span class="cx"> 
</span><ins>+#### 5. Testing changes
+
</ins><span class="cx"> After making any changes to `master.cfg`, you can reload the configuration with the `reconfig` command. This is faster than doing a full `restart`. In a similar way, you can completely `stop` the buildbot.
</span><span class="cx"> 
</span><del>-    buildbot reconfig ~/buildbot-master
</del><ins>+    buildbot reconfig /opt/mp-buildbot/master
</ins><span class="cx">  
</span><del>-    buildbot restart ~/buildbot-master
</del><ins>+    buildbot restart /opt/mp-buildbot/master
</ins><span class="cx"> 
</span><del>-    buildbot stop ~/buildbot-master
</del><ins>+    buildbot stop /opt/mp-buildbot/master
</ins><span class="cx"> 
</span><span class="cx"> 
</span><ins>+### Setting up buildbot slave on localhost
</ins><span class="cx"> 
</span><del>-## Setting up a buildbot slave
</del><ins>+This will use your copy of MacPorts in /opt/local for all tooling, but actual builds on the slave will be made in a separate prefix. Make sure this installation provides an up-to-date ports tree.
</ins><span class="cx"> 
</span><ins>+
+#### 1. Install MacPorts into a new prefix
+
+You need to use a new prefix for this installation. These instructions will use `/opt/mp-buildbot/prefix`.
+
+You will have to install this from source following
+
+* https://guide.macports.org/#installing.macports.source.multiple
+
+
+#### 2. Install buildbot-slave
+
+Install buildbot-slave in your *normal* `/opt/local` prefix:
+
+    sudo port install buildbot-slave
+
+
+#### 3. Create new directory with buildbot slave configuration
+
+Create a directory that will contain the buildslaves working directory. 
+
+    sudo mkdir -p /opt/mp-buildbot
+    sudo chown -R $USER:buildbot /opt/mp-buildbot
+    sudo chmod -R 775 /opt/mp-buildbot
+
+Create two buildslaves, one for base running as the buildbot user, one for ports running as root:
+
+    OSXVERS=$(sw_vers -productVersion | grep -oE '^[0-9]+\.[0-9]+')
+    ARCH=$(uname -m)
+    PASSWORD=... # add your password here
+
+    sudo -H -u buildbot buildslave \
+                create-slave --umask 022 \
+                /opt/mp-buildbot/slave-base \
+                localhost:9989 \
+                base-$OSXVERS-$ARCH \
+                $PASSWORD
+    
+    sudo -H buildslave \
+                create-slave --umask 022 \
+                /opt/mp-buildbot/slave-ports \
+                localhost:9989 \
+                ports-$OSXVERS-$ARCH \
+                $PASSWORD
+
+#### 3. Add new builldbot slaves to buildbot master configuration
+
+Add the buildslaves to your buildmaster's master.cfg using the password you provided when creating them. Then reload the buildbot master configuration.
+
+    $EDITOR /opt/mp-buildbot/master/slaves.json
+
+XXX: edit build\_platforms in master.cfg
+
+IMPORTANT! Change the following configuration options in config.json:
+
+    $EDITOR /opt/mp-buildbot/master/config.json
+
+&gt; &quot;slaveprefix&quot;:  &quot;/opt/mp-buildbot/prefix&quot;
+&gt; &quot;toolsprefix&quot;:  &quot;/opt/local&quot;
+
+Reconfigure the buildbot master:
+
+    buildbot reconfig /opt/mp-buildbot/master
+
+
+#### 4. Start the two buildslaves
+
+These commands start the new build slaves. They should connect to the master successfully and be visible in the webinterface.
+
+    sudo -H -u buildbot buildslave start /opt/mp-buildbot/slave-base
+    sudo -H buildslave start /opt/mp-buildbot/slave-ports
+
+
+#### 5. Test your first build
+
</ins><span class="cx"> TODO
</span><ins>+
+
+## Setting up buildbot master and slaves for production
+
+These instructions explain how to install buildbot in a production environment, in which master slaves run on different machines to produce MacPorts packages.
+
+TODO
</ins></span></pre>
</div>
</div>

</body>
</html>