diff options
Diffstat (limited to 'etc/bootstrap/bbot-bootstrap.sh')
-rwxr-xr-x | etc/bootstrap/bbot-bootstrap.sh | 131 |
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" |