summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Ipsum <richard.ipsum@codethink.co.uk>2014-02-24 16:19:28 +0000
committerRichard Ipsum <richard.ipsum@codethink.co.uk>2014-03-28 12:33:40 +0000
commit71035b208075a8f12cdbe0e256be48260d865e5d (patch)
tree0f82281f8150d15cc9ef92f6c3251cd5a1379f59
parentd3f87e928e0f1648062551d09a9f7f63a24049bb (diff)
downloaddefinitions-71035b208075a8f12cdbe0e256be48260d865e5d.tar.gz
Add distbuild config extension
-rw-r--r--distbuild.configure159
1 files changed, 159 insertions, 0 deletions
diff --git a/distbuild.configure b/distbuild.configure
new file mode 100644
index 00000000..e8022062
--- /dev/null
+++ b/distbuild.configure
@@ -0,0 +1,159 @@
+#!/bin/sh
+# Copyright (C) 2013-2014 Codethink Limited
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# This is a "morph deploy" configure extension to configure a Baserock
+# build node, as part of a distributed building cluster. It uses the
+# following variables from the environment:
+#
+# * DISTBUILD_CONTROLLER: if 'yes', machine is set up as the controller.
+# * DISTBUILD_WORKER: if 'yes', machine is set up as a worker.
+# * TROVE_ID: hostname and Trove prefix of the server to pull source
+# from and push built artifacts to.
+#
+# The following variable is optional:
+#
+# * ARTIFACT_CACHE_SERVER: by default artifacts are pushed to the same
+# Trove that served the source, but you can use a different one.
+#
+# The following variable is required for worker nodes only:
+#
+# * CONTROLLERHOST: hostname or IP address of distbuild controller machine.
+# * WORKER_SSH_KEY: identity used to authenticate with Trove
+#
+# The following variable is required for the controller node only:
+#
+# * WORKERS: hostnames or IP address of worker nodes, comma-separated.
+
+set -e
+
+
+# If ARTIFACT_CACHE_SERVER isn't set, default to $TROVE_ID.
+if [ "x$ARTIFACT_CACHE_SERVER" = x ]
+then
+ ARTIFACT_CACHE_SERVER="$TROVE_ID"
+fi
+
+set -u
+
+
+# Create the mount point for extra disk space.
+install -d -o 0 -g 0 -m 0755 "$1/srv/distbuild"
+
+
+# Configuration shared by all instances of Morph. For reasons of
+# convenience, this sets the controller-initiator-address, so
+# that when users invoke "morph", they don't need to manually
+# specify it, or to manually add another configuration file to
+# use. However, the setting may only be set for the distbuild
+# initiator (which is what the user invokes), so in ALL other
+# configuration files we unset it.
+#
+# We disable the disk space requirement checks on non-worker nodes.
+# They don't make sense unless you're building locally.
+
+cat <<EOF > "$1/etc/morph.conf"
+[config]
+log = /var/log/morph.log
+log-max = 100M
+cachedir = /srv/distbuild
+tempdir = /srv/distbuild/tmp
+trove-host = $TROVE_ID
+controller-initiator-address = $CONTROLLERHOST
+tempdir-min-space = 0
+cachedir-min-space = 0
+build-ref-prefix = $TROVE_ID
+artifact-cache-server = http://${ARTIFACT_CACHE_SERVER}:8080/
+git-resolve-cache-server = http://${TROVE_ID}:8080/
+EOF
+
+
+# Configuration for a distbuild controller. This configuration
+# file gets used by the systemd unit that runs the controller.
+# The existence of this configuration file triggers the systemd
+# unit, so we only create it on nodes that are meant to act as
+# the controller.
+
+if [ "$DISTBUILD_CONTROLLER" = True ]
+then
+ cat <<EOF > "$1/etc/morph-controller.conf"
+[config]
+log = /var/log/morph-controller.log
+log-max = 100M
+writeable-cache-server = http://${ARTIFACT_CACHE_SERVER}:8081/
+worker = $WORKERS
+controller-helper-address = 127.0.0.1
+EOF
+
+ # Configuration for the controller's helper process. This
+ # gets used by the systemd unit that starts the helper.
+
+cat <<EOF > "$1/etc/morph-controller-helper.conf"
+[config]
+log = /var/log/morph-controller-helper.log
+log-max = 100M
+parent-port = 5656
+parent-address = 127.0.0.1
+EOF
+
+fi
+
+# Configuration for a distbuild worker. This gets reference
+# by the systemd unit that starts the worker. Again, the
+# existence of morph-worker.conf triggers the systemd unit
+# to starts the worker, so we only create it on systems
+# that are meant to be a worker.
+
+if [ "$DISTBUILD_WORKER" = True ]
+then
+ cat <<EOF > "$1/etc/morph-worker.conf"
+[config]
+log = /var/log/morph-worker.log
+log-max = 100M
+controller-initiator-address =
+EOF
+
+ # This will be used for a systemd generator which
+ # nfs mounts the ccache from the trove
+ echo "$TROVE_ID" > "$1/etc/trove-host"
+
+ # Configuration for the controller's helper process. This
+ # gets used by the systemd unit that starts the helper.
+
+cat <<EOF > "$1/etc/morph-worker-helper.conf"
+[config]
+log = /var/log/morph-worker-helper.log
+log-max = 100M
+parent-address = 127.0.0.1
+EOF
+
+
+ # Configuration for the Morph cache server daemon. We
+ # only run the cache server on workers.
+
+cat <<EOF > "$1/etc/morph-cache-server.conf"
+[config]
+port = 8080
+artifact-dir = /srv/distbuild/artifacts
+direct-mode = True
+fcgi-server = False
+EOF
+
+echo "Copy distbuild worker SSH key to system"
+mkdir -p "$1/root/.ssh"
+install -m 0600 "$WORKER_SSH_KEY" "$1/root/.ssh/id_rsa"
+install -m 0644 "${WORKER_SSH_KEY}.pub" "$1/root/.ssh/id_rsa.pub"
+
+fi