aboutsummaryrefslogtreecommitdiff
path: root/etc/bootstrap/bbot-bootstrap.sh
diff options
context:
space:
mode:
Diffstat (limited to 'etc/bootstrap/bbot-bootstrap.sh')
-rwxr-xr-xetc/bootstrap/bbot-bootstrap.sh131
1 files changed, 131 insertions, 0 deletions
diff --git a/etc/bootstrap/bbot-bootstrap.sh b/etc/bootstrap/bbot-bootstrap.sh
new file mode 100755
index 0000000..65deddc
--- /dev/null
+++ b/etc/bootstrap/bbot-bootstrap.sh
@@ -0,0 +1,131 @@
+#!/bin/sh
+
+# file : etc/bootstrap/bbot-bootstrap.sh
+# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+# license : TBC; see accompanying LICENSE file
+
+usage="Usage: $0 [<options>]"
+
+set -e # Exit on errors.
+
+diag ()
+{
+ echo "$*" 1>&2
+}
+
+error ()
+{
+ diag "$*"
+ exit 1
+}
+
+# Note that this function will execute a command with arguments that contain
+# spaces but it will not print them as quoted (and neither does set -x).
+#
+run ()
+{
+ diag "+ $@"
+ "$@"
+ if test "$?" -ne "0"; then
+ exit 1;
+ fi
+}
+
+# Defaults that can be changed via command line.
+#
+cxx=g++
+build=/tmp
+environment="$HOME/environment"
+
+# Parse options.
+#
+while test $# -ne 0; do
+ case $1 in
+ --cxx)
+ shift
+ if test $# -eq 0; then
+ error "missing C++ compiler after --cxx"
+ fi
+ cxx="$1"
+ shift
+ ;;
+ --build)
+ shift
+ if test $# -eq 0; then
+ error "missing build directory after --build"
+ fi
+ build="$1"
+ shift
+ ;;
+ --environment)
+ shift
+ if test $# -eq 0; then
+ error "missing environment directory after --environment"
+ fi
+ environment="$1"
+ shift
+ ;;
+ *)
+ error "unexpected argument '$1'"
+ ;;
+ esac
+done
+
+# Defaults that can be changed for testing.
+#
+# Note: build_options is an array-like (expanded unquoted).
+#
+tftp="196.254.111.222"
+install="/usr/local"
+build_options=
+verbose=3
+
+#install="/tmp/bbot-install"
+#tftp="127.0.0.1:55123"
+#build_options="--install-dir $install"
+
+PATH="$install/bin:$PATH"
+export PATH
+
+# If we already have the bbot worker, assume we are bootstrapped.
+#
+if bbot-worker --version >/dev/null 2>&1; then
+ exec bbot-worker --startup --build "$build" --environment "$environment" \
+ --tftp-host "$tftp" --verbose "$verbose"
+fi
+
+# Bootstrap the toolchain and then build bbot.
+#
+run rm -rf "$build/bootstrap"
+run mkdir -p "$build/bootstrap"
+run cd "$build/bootstrap"
+
+run curl -s -S -O "tftp://$tftp/build2-toolchain.tar.xz"
+run tar -xf build2-toolchain.tar.xz
+run rm build2-toolchain.tar.xz
+
+run curl -s -S -O "tftp://$tftp/trust"
+trust="$(cat trust)"
+run rm trust
+
+# Bootstrap and install the toolchain (by default into /usr/local using sudo).
+#
+bstrap="$(echo build2-toolchain-*)"
+run cd "$bstrap"
+run ./build.sh --trust "$trust" $build_options "$cxx"
+run cd ..
+run rm -r "$bstrap"
+
+# Build and install the bbot worker.
+#
+config="$(echo build2-toolchain-*)"
+run cd "$config"
+run bpkg build --yes bbot
+run bpkg install bbot
+run cd ..
+run rm -r "$config"
+
+# Finish off by uploading the result manifest produced by the bbot worker.
+#
+run bbot-worker --bootstrap >manifest
+run curl -s -S --upload-file manifest "tftp://$tftp/manifest"