From dfb79081b1624dc9c019b02468e59c0fd10e6330 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Mon, 17 Mar 2014 12:36:15 +0000 Subject: Import distbuild configuration files into definitions.git These files should be installed into distbuild worker and controller systems using the install-files configure extension, by adding the following line in the cluster morphology. INSTALL_FILES: distbuild/manifest These files were previously in the internal Codethink chunk repo 'distbuild-setup', and were installed by a Makefile. --- .../system-generators/ccache-nfs-mount-generator | 16 ++++++++++++++++ distbuild/manifest | 19 +++++++++++++++++++ .../usr/lib/systemd/system/morph-cache-server.service | 9 +++++++++ .../systemd/system/morph-controller-helper.service | 10 ++++++++++ .../usr/lib/systemd/system/morph-controller.service | 9 +++++++++ .../lib/systemd/system/morph-worker-helper.service | 10 ++++++++++ distbuild/usr/lib/systemd/system/morph-worker.service | 10 ++++++++++ .../morph-cache-server.service | 1 + .../morph-controller-helper.service | 1 + .../multi-user.target.wants/morph-controller.service | 1 + .../morph-worker-helper.service | 1 + .../multi-user.target.wants/morph-worker.service | 1 + 12 files changed, 88 insertions(+) create mode 100755 distbuild/lib/systemd/system-generators/ccache-nfs-mount-generator create mode 100644 distbuild/manifest create mode 100644 distbuild/usr/lib/systemd/system/morph-cache-server.service create mode 100644 distbuild/usr/lib/systemd/system/morph-controller-helper.service create mode 100644 distbuild/usr/lib/systemd/system/morph-controller.service create mode 100644 distbuild/usr/lib/systemd/system/morph-worker-helper.service create mode 100644 distbuild/usr/lib/systemd/system/morph-worker.service create mode 120000 distbuild/usr/lib/systemd/system/multi-user.target.wants/morph-cache-server.service create mode 120000 distbuild/usr/lib/systemd/system/multi-user.target.wants/morph-controller-helper.service create mode 120000 distbuild/usr/lib/systemd/system/multi-user.target.wants/morph-controller.service create mode 120000 distbuild/usr/lib/systemd/system/multi-user.target.wants/morph-worker-helper.service create mode 120000 distbuild/usr/lib/systemd/system/multi-user.target.wants/morph-worker.service diff --git a/distbuild/lib/systemd/system-generators/ccache-nfs-mount-generator b/distbuild/lib/systemd/system-generators/ccache-nfs-mount-generator new file mode 100755 index 00000000..127bc84f --- /dev/null +++ b/distbuild/lib/systemd/system-generators/ccache-nfs-mount-generator @@ -0,0 +1,16 @@ +#!/bin/sh +read trove_host "$1/srv-distbuild-ccache.mount" < Date: Mon, 24 Feb 2014 16:19:12 +0000 Subject: Add distbuild stratum --- distbuild.morph | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 distbuild.morph diff --git a/distbuild.morph b/distbuild.morph new file mode 100644 index 00000000..896b9110 --- /dev/null +++ b/distbuild.morph @@ -0,0 +1,20 @@ +name: distbuild +kind: stratum +description: Morph distributed build software +build-depends: +- morph: foundation +- morph: core +- morph: tools +chunks: +- name: bottle + repo: upstream:bottle + ref: baserock/morph + build-depends: [] +- name: morph-cache-server + repo: baserock:baserock/morph-cache-server + ref: master + build-depends: [] +- name: flup + repo: upstream:flup + ref: baserock/morph + build-depends: [] -- cgit v1.2.1 From c2ce64c5b4839f959161a7b397589d16a37cd530 Mon Sep 17 00:00:00 2001 From: Richard Ipsum Date: Mon, 24 Feb 2014 16:19:44 +0000 Subject: Add armv7lhf distbuild system --- distbuild-system-armv7lhf-highbank.morph | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 distbuild-system-armv7lhf-highbank.morph diff --git a/distbuild-system-armv7lhf-highbank.morph b/distbuild-system-armv7lhf-highbank.morph new file mode 100644 index 00000000..fdad7cc7 --- /dev/null +++ b/distbuild-system-armv7lhf-highbank.morph @@ -0,0 +1,20 @@ +arch: armv7lhf +configuration-extensions: +- set-hostname +- add-config-files +- simple-network +- nfsboot +- install-files +- distbuild +- fstab +description: Morph distributed build node for armv7lhf highbank +kind: system +name: distbuild-system-armv7lhf-highbank +strata: +- morph: build-essential +- morph: core +- morph: foundation +- morph: bsp-armv7-highbank +- morph: tools +- morph: nfs +- morph: distbuild -- cgit v1.2.1 From 87b3934d36a7a9532d6af720cd5b04e3082a0e9c Mon Sep 17 00:00:00 2001 From: Richard Ipsum Date: Mon, 24 Feb 2014 16:19:28 +0000 Subject: Add distbuild config extension --- distbuild.configure | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 distbuild.configure diff --git a/distbuild.configure b/distbuild.configure new file mode 100644 index 00000000..31afc813 --- /dev/null +++ b/distbuild.configure @@ -0,0 +1,161 @@ +#!/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 < "$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 < "$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 < "$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 < "$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 < "$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 < "$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" + +# Add trove's host key +ssh-keyscan -t dsa,ecdsa,rsa "$TROVE_ID" >> "$1/root/.ssh/known_hosts" +fi -- cgit v1.2.1 From 84cb06607e2530757e8ab545b10de5fae3b6862a Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Mon, 17 Mar 2014 16:08:57 +0000 Subject: distbuild: Add example cluster for deployment Since the nodes are deployed as NFS root file systems, there's no VERSION_LABEL field in this cluster, as there is no upgrade method. The build nodes are stateless and deployed fresh each time. --- example-distbuild-cluster.morph | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 example-distbuild-cluster.morph diff --git a/example-distbuild-cluster.morph b/example-distbuild-cluster.morph new file mode 100644 index 00000000..736a5beb --- /dev/null +++ b/example-distbuild-cluster.morph @@ -0,0 +1,37 @@ +name: example-distbuild-cluster +kind: cluster +description: | + This is an example cluster morph that can be adapted to set up a + Baserock distributed build network. + + You will need to deploy a Trove for the distributed build network + to use before deploying this cluster. The worker SSH key file should + be generated as part of the Trove deployment. It is the key used by + workers to authenticate with the Trove to give them read access to + all source repositories. +systems: +- morph: distbuild-system-x86_64-generic + deploy-defaults: + TROVE_ID: $MY_TROVE + CONTROLLERHOST: build-controller + DISTBUILD_CONTROLLER: no + DISTBUILD_WORKER: yes + FSTAB_SRC: LABEL=src /srv/distbuild auto defaults,rw,noatime 0 2 + INSTALL_FILES: distbuild/manifest + NFSBOOT_CONFIGURE: yes + WORKER_SSH_KEY: ssh-keys/worker.key + deploy: + build-controller: + type: nfsboot + location: $MY_TROVE + DISTBUILD_CONTROLLER: yes + HOSTNAME: build-controller + WORKERS: build-node-1, build-node-2 + build-node-1: + type: nfsboot + location: $MY_TROVE + HOSTNAME: build-node-1 + build-node-2: + type: nfsboot + location: $MY_TROVE + HOSTNAME: build-node-2 -- cgit v1.2.1