| #!/bin/bash |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| set -o errexit |
| set -o nounset |
| set -o verbose |
| |
| readonly MESOS_VERSION=1.5.0 |
| |
| function remove_unused { |
| # The default bento/ubuntu-16.04 image includes juju-core, which adds ~300 MB to our image. |
| apt-get purge -y --auto-remove juju-core |
| |
| rm -f /home/vagrant/VBoxGuestAdditions.iso |
| } |
| |
| function install_base_packages { |
| apt-get update |
| apt-get -y install \ |
| bison \ |
| curl \ |
| git \ |
| jq \ |
| libapr1-dev \ |
| libcurl4-nss-dev \ |
| libffi-dev \ |
| libkrb5-dev \ |
| libsasl2-dev \ |
| libsvn-dev \ |
| openjdk-8-jdk-headless \ |
| python-dev |
| update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java |
| # Installing zookeeperd as a separate command, as otherwise openjdk-7-jdk is also installed. |
| apt-get install -y zookeeperd |
| } |
| |
| function install_docker { |
| # Instructions from https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ |
| apt-get install -y apt-transport-https ca-certificates curl software-properties-common |
| curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - |
| add-apt-repository \ |
| "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ |
| $(lsb_release -cs) \ |
| stable" |
| apt-get update |
| apt-get -y install \ |
| apparmor \ |
| docker-ce |
| docker run -d -p 5000:5000 --restart=always --name registry registry:2 |
| } |
| |
| function install_docker2aci { |
| DOCKER2ACI_VERSION="0.17.1" |
| GOLANG_VERSION="1.9.2" |
| |
| TEMP_PATH=$(mktemp -d) |
| pushd "$TEMP_PATH" |
| |
| echo "Downloading go..." |
| curl -sL "https://storage.googleapis.com/golang/go${GOLANG_VERSION}.linux-amd64.tar.gz" | tar -xz |
| |
| export GOROOT="$PWD/go" |
| export PATH="$PATH:$GOROOT/bin" |
| |
| echo "Downloading docker2aci source..." |
| curl -sL "https://github.com/appc/docker2aci/archive/v${DOCKER2ACI_VERSION}.tar.gz" | tar -xz |
| pushd "docker2aci-${DOCKER2ACI_VERSION}" |
| |
| # This is a version of https://github.com/appc/docker2aci/blob/v0.9.3/build.sh that has been |
| # modified to work without the need to be in a git repo. |
| ORG_PATH="github.com/appc" |
| REPO_PATH="${ORG_PATH}/docker2aci" |
| GLDFLAGS="-X github.com/appc/docker2aci/lib.Version=${DOCKER2ACI_VERSION}" |
| |
| if [ ! -h "gopath/src/${REPO_PATH}" ]; then |
| mkdir -p "gopath/src/${ORG_PATH}" |
| ln -s ../../../.. "gopath/src/${REPO_PATH}" || exit 255 |
| fi |
| export GOBIN="${PWD}/bin" |
| export GOPATH="${PWD}/gopath:${PWD}/Godeps/_workspace" |
| eval "$(go env)" |
| echo "Building docker2aci..." |
| go build -o "$GOBIN/docker2aci" -ldflags "${GLDFLAGS}" "${REPO_PATH}/" |
| mv "$GOBIN/docker2aci" /usr/local/bin/docker2aci |
| |
| popd |
| popd |
| |
| rm -rf "$TEMP_PATH" |
| } |
| |
| function install_mesos { |
| apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF |
| DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]') |
| CODENAME=$(lsb_release -cs) |
| echo "deb http://repos.mesosphere.io/${DISTRO} ${CODENAME} main" \ |
| > /etc/apt/sources.list.d/mesosphere.list |
| apt-get update |
| apt-get -y install mesos=${MESOS_VERSION}* |
| } |
| |
| function warm_artifact_cache { |
| # Gradle caches in the user's home directory. Since development commands |
| # are executed by the vagrant user, switch to that user. |
| su - vagrant -c ' |
| git clone --depth 1 https://github.com/apache/aurora.git |
| pushd aurora |
| ./build-support/jenkins/build.sh |
| popd |
| rm -rf aurora' |
| |
| THIRD_PARTY_DIR=/home/vagrant/aurora/third_party |
| mkdir -p "$THIRD_PARTY_DIR" |
| |
| # Fetch the mesos egg, needed to build python components. |
| # The mesos.executor target in 3rdparty/python/BUILD expects to find the native egg in |
| # third_party. |
| SVN_ROOT='https://svn.apache.org/repos/asf/aurora/3rdparty' |
| pushd "$THIRD_PARTY_DIR" |
| wget -c \ |
| ${SVN_ROOT}/ubuntu/xenial64/python/mesos.executor-${MESOS_VERSION}-py2.7-linux-x86_64.egg |
| popd |
| |
| chown -R vagrant:vagrant aurora |
| } |
| |
| function compact_box { |
| apt-get autoremove -y --purge |
| apt-get clean |
| |
| # By design, this will fail as it writes until the disk is full. |
| dd if=/dev/zero of=/junk bs=1M || true |
| rm -f /junk |
| sync |
| } |
| |
| remove_unused |
| install_base_packages |
| install_docker |
| install_docker2aci |
| install_mesos |
| warm_artifact_cache |
| compact_box |