| #!/bin/bash |
| # Dependencies: vagrant >= 1.5.0 (for vagrantcloud support), VirtualBox |
| # System Requirements: 4 GiB of RAM free. |
| set -u -e |
| |
| MESOS_BASEURL=https://archive.apache.org/dist/mesos |
| BOX_CPUS=4 |
| |
| usage() { |
| cat <<EOF |
| Usage: make-mesos-native-egg.sh TARGET_DISTRIBUTION MESOS_VERSION AURORA_3RDPARTY_ROOT |
| |
| Build a mesos Python egg in a pristine Vagrant environment. |
| |
| TARGET_DISTRIBUTION is one of (centos6, centos7, jessie64, trusty64, xenial64). |
| MESOS_VERSION is a released version of mesos available on archive.apache.org. |
| AURORA_3RDPARTY_ROOT is the path to a sparse checkout of the Aurora 3rdparty repo. |
| EOF |
| exit ${1:-1} |
| } |
| |
| setup_tempdir() { |
| TMPDIR=$(mktemp -d -t make-mesos-eggs.XXXXX) |
| cleanup() { |
| rm -frv "$TMPDIR" |
| } |
| # TODO(ksweeney): Use atexit.sh from mesos and its superior handling of this cleanup idiom. |
| trap cleanup EXIT |
| } |
| |
| fetch_and_build_mesos() { |
| local mesos_version=$1 |
| |
| cat <<EOF |
| wget --progress=dot "$MESOS_BASEURL/$mesos_version/mesos-${mesos_version}.tar.gz" |
| tar zxvf mesos-${mesos_version}.tar.gz |
| cd mesos-$mesos_version |
| ./configure --disable-java --enable-optimize |
| export MAKEFLAGS="-j$BOX_CPUS" |
| make |
| find . -name '*.egg' -exec cp -v {} /mesos-egg \\; |
| EOF |
| } |
| |
| DEBIAN_JESSIE64_DEPENDENCIES=( |
| g++ |
| make |
| libapr1-dev |
| libcurl4-nss-dev |
| libsasl2-dev |
| libsvn-dev |
| make |
| patch |
| python-dev |
| python-virtualenv |
| zlib1g-dev |
| wget |
| ) |
| build_debian_jessie64() { |
| local mesos_version=$1 output_basedir=$2 |
| local python_outdir=$output_basedir/debian/jessie64/python |
| local image_name=debian:jessie-slim |
| |
| pushd "$TMPDIR" |
| docker run -i -v $(pwd):/mesos-egg $image_name bash <<EOF |
| set -e -u |
| |
| apt-get update |
| apt-get -y install ${DEBIAN_JESSIE64_DEPENDENCIES[*]} |
| $(fetch_and_build_mesos "$mesos_version") |
| EOF |
| mkdir -pv "$python_outdir" |
| cp -v mesos.executor*.egg "$python_outdir" |
| popd |
| } |
| |
| UBUNTU_TRUSTY64_DEPENDENCIES=( |
| g++ |
| libapr1-dev |
| libcurl4-nss-dev |
| libsasl2-dev |
| libsvn-dev |
| make |
| patch |
| python-dev |
| wget |
| zlib1g-dev |
| ) |
| build_ubuntu_trusty64() { |
| local mesos_version=$1 output_basedir=$2 |
| local python_outdir=$output_basedir/ubuntu/trusty64/python |
| local image_name=ubuntu:trusty |
| |
| pushd "$TMPDIR" |
| docker run -i -v $(pwd):/mesos-egg $image_name bash <<EOF |
| set -e -u |
| |
| sudo apt-get update |
| sudo apt-get -y install ${UBUNTU_TRUSTY64_DEPENDENCIES[*]} |
| $(fetch_and_build_mesos "$mesos_version") |
| EOF |
| mkdir -pv "$python_outdir" |
| cp -v mesos.executor*.egg "$python_outdir" |
| popd |
| } |
| |
| UBUNTU_XENIAL64_DEPENDENCIES=( |
| g++ |
| libapr1-dev |
| libcurl4-nss-dev |
| libsasl2-dev |
| libsvn-dev |
| make |
| patch |
| python-dev |
| python-virtualenv |
| wget |
| zlib1g-dev |
| ) |
| build_ubuntu_xenial64() { |
| local mesos_version=$1 output_basedir=$2 |
| local python_outdir=$output_basedir/ubuntu/xenial64/python |
| local image_name=ubuntu:xenial |
| |
| pushd "$TMPDIR" |
| docker run -i -v $(pwd):/mesos-egg $image_name bash <<EOF |
| set -e -u |
| |
| apt-get update |
| apt-get -y install ${UBUNTU_XENIAL64_DEPENDENCIES[*]} |
| $(fetch_and_build_mesos "$mesos_version") |
| EOF |
| mkdir -pv "$python_outdir" |
| cp -v mesos.executor*.egg "$python_outdir" |
| popd |
| } |
| |
| CENTOS6_X86_64_DEPENDENCIES=( |
| apr-devel |
| cyrus-sasl-devel |
| cyrus-sasl-md5 |
| devtoolset-7-binutils |
| devtoolset-7-gcc |
| devtoolset-7-gcc-c++ |
| devtoolset-7-toolchain |
| libcurl-devel |
| make |
| patch |
| python27-python-devel |
| subversion-devel |
| zlib-devel |
| wget |
| tar |
| ) |
| build_centos6() { |
| local mesos_version=$1 output_basedir=$2 |
| local python_outdir=$output_basedir/centos/6/python |
| local image_name=centos:6 |
| |
| pushd "$TMPDIR" |
| docker run -i -v $(pwd):/mesos-egg $image_name bash <<EOF |
| set -e -u |
| |
| # We need Software Collections for Python 2.7 (we dropped support for 2.6). |
| # wget must get installed before everything else to fetch the additional repos. |
| yum -y install centos-release-scl-rh |
| yum -y install ${CENTOS6_X86_64_DEPENDENCIES[*]} |
| |
| # Mesos requires gcc 4.8+, which is available in devtools-7 on centos 6. |
| scl enable devtoolset-7 bash |
| scl enable python27 - <<EOS |
| $(fetch_and_build_mesos "$mesos_version") |
| EOS |
| EOF |
| mkdir -pv "$python_outdir" |
| cp -v mesos.executor*.egg "$python_outdir" |
| popd |
| } |
| |
| CENTOS7_X86_64_DEPENDENCIES=( |
| apr-devel |
| cyrus-sasl-devel |
| cyrus-sasl-md5 |
| gcc-c++ |
| libcurl-devel |
| make |
| patch |
| python-devel |
| subversion-devel |
| wget |
| zlib-devel |
| tar |
| ) |
| build_centos7() { |
| local mesos_version=$1 output_basedir=$2 |
| local python_outdir=$output_basedir/centos/7/python |
| local image_name=centos:7 |
| |
| pushd "$TMPDIR" |
| docker run -i -v $(pwd):/mesos-egg $image_name bash <<EOF |
| set -e -u |
| |
| yum -y install ${CENTOS7_X86_64_DEPENDENCIES[*]} |
| $(fetch_and_build_mesos "$mesos_version") |
| EOF |
| mkdir -pv "$python_outdir" |
| cp -v mesos.executor*.egg "$python_outdir" |
| popd |
| } |
| |
| main() { |
| local target_distribution=$1 |
| local mesos_version=$2 |
| local output_basedir=$3 |
| |
| if [[ ! -d "$output_basedir" ]]; then |
| echo "'$output_basedir' is not a directory." |
| echo |
| usage 1 |
| fi |
| setup_tempdir |
| pushd "$TMPDIR" |
| case "$target_distribution" in |
| jessie64) |
| build_debian_jessie64 "$mesos_version" "$output_basedir" |
| ;; |
| trusty64) |
| build_ubuntu_trusty64 "$mesos_version" "$output_basedir" |
| ;; |
| xenial64) |
| build_ubuntu_xenial64 "$mesos_version" "$output_basedir" |
| ;; |
| centos6) |
| build_centos6 "$mesos_version" "$output_basedir" |
| ;; |
| centos7) |
| build_centos7 "$mesos_version" "$output_basedir" |
| ;; |
| *) |
| echo "Invalid distribution '$target_distribution'." |
| echo |
| usage 1 |
| ;; |
| esac |
| popd |
| } |
| |
| if [[ ${1:-""} = -h ]]; then usage 0; elif [[ $# -ne 3 ]]; then usage 1; fi |
| main "$@" |