blob: 293df3def4aa7ae175d15c3a85aaa230c2ad4bc9 [file] [log] [blame]
#!/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 Docker container.
TARGET_DISTRIBUTION is one of (centos6, centos7, stretch64, 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_STRETCH64_DEPENDENCIES=(
g++
make
libapr1-dev
libcurl4-nss-dev
libsasl2-dev
libsvn-dev
make
patch
python-dev
python-virtualenv
zlib1g-dev
wget
)
build_debian_stretch64() {
local mesos_version=$1 output_basedir=$2
local python_outdir=$output_basedir/debian/stretch64/python
local image_name=debian:stretch-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_STRETCH64_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
stretch64)
build_debian_stretch64 "$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 "$@"