Permalink
Fetching contributors…
Cannot retrieve contributors at this time
executable file 196 lines (167 sloc) 4.96 KB
#!/bin/bash
# Copyright (c) 2012 VMware, Inc.
# Install vcap components on Ubuntu systems.
set -o errexit
usage() {
cat <<EOF
usage: $0 options
OPTIONS:
-h Show this message
-a Answer yes to all questions
-p http proxy i.e. -p http://username:password@host:port/
-c deployment config
-d cloudfoundry home
-D cloudfoundry domain (default: vcap.me)
-r cloud foundry repo base
-b cloud foundry repo branch/tag/SHA
EOF
}
function run_cmd () {
if [ -z "$PROXY" ]; then
sudo $*
else
sudo env http_proxy=$PROXY $*
fi
}
function clear_bundler_settings () {
[ $# -ge 1 ] || return 1
local DIR=$1
# Do we have a Bundler problem?
find $DIR -type d -name .bundle | grep -Fq .bundle || return 0
if [ "$ALL" != true ]; then
read -p "Remembered Bundler options could cause you troubles, do you want me to clear them for you? [Y/n]"
[[ $REPLY =~ ^[nN] ]] && return 0
fi
(cd $DIR && find -type d -name .bundle -prune -exec rm -r {} \; )
}
RUBY="/usr/bin/ruby"
GEM="/usr/bin/gem"
APT_CONFIG="-o Acquire::http::No-Cache=True -o Acquire::BrokenProxy=true -o Acquire::Retries=3"
if [ -n "$http_proxy" ]; then
if [ -z "$https_proxy" ]; then
echo "Please set https_proxy env variable."
exit 1
fi
PROXY=$http_proxy
fi
while getopts "had:p:c:D:r:b:" OPTION
do
case $OPTION in
h)
usage
exit 1
;;
a)
ALL=true
;;
c)
CONFIG_FILE=$OPTARG
;;
d)
CLOUDFOUNDRY_HOME=$OPTARG
;;
D)
CLOUDFOUNDRY_DOMAIN=$OPTARG
;;
r)
VCAP_REPO_BASE=$OPTARG
;;
b)
VCAP_REPO_BRANCH=$OPTARG
;;
p)
PROXY=$OPTARG
export http_proxy=$PROXY
export https_proxy=$PROXY
esac
done
if [ -z "$CLOUDFOUNDRY_HOME" ]; then
CLOUDFOUNDRY_HOME=~/cloudfoundry
fi
if [ -z "$CLOUDFOUNDRY_DOMAIN" ]; then
CLOUDFOUNDRY_DOMAIN=vcap.me
fi
if [ -z "$VCAP_REPO_BASE" ]; then
VCAP_REPO_BASE=https://github.com/cloudfoundry
fi
if [ -z "$VCAP_REPO_BRANCH" ]; then
VCAP_REPO_BRANCH=master
fi
# apt-get update
run_cmd apt-get update
# Check if we have access to the web
echo "Installing wget..."
if ! run_cmd apt-get $APT_CONFIG install -qym wget; then
echo "Can't install prerequisite: wget"
exit 1
fi
echo "Checking web connectivity."
if ! wget -q -T 2 -t 2 -O - http://api.run.pivotal.io/info | grep "Cloud Foundry sponsored by Pivotal" > /dev/null; then
echo "Giving up. Cannot connect to the web. Check your proxy settings if you are behind a proxy."
exit 1
fi
# Install chef
readonly PREREQUISITES=(ruby ruby-dev libopenssl-ruby rdoc ri irb build-essential ssl-cert)
echo "Installing prerequisites..."
run_cmd apt-get $APT_CONFIG install -qym "${PREREQUISITES[@]}"
if [ ! -f ${GEM} ] || [ `${GEM} -v` \< "1.3.6" ]; then
# Blobstore_client requires gem >= 1.3.6
echo "Installing rubygems..."
CWD=`pwd`
cd /tmp
wget -q http://production.cf.rubygems.org/rubygems/rubygems-1.3.6.tgz
tar zxf rubygems-1.3.6.tgz
cd rubygems-1.3.6
sudo ${RUBY} setup.rb --no-format-executable > /dev/null
cd ${CWD}
fi
# we need to install net-ssh ans net-ssh-gatewayto avoid dependency problems on chef.
echo "Installing net-ssh..."
NET_SSH_VERSION="2.2.2"
${GEM} list -i net-ssh -v ${NET_SSH_VERSION} || sudo ${GEM} install net-ssh --version ${NET_SSH_VERSION} -q --no-ri --no-rdoc > /dev/null
echo "Installing net-ssh-gateway..."
NET_SSH_GATEWAY_VERSION=" 1.0.0"
${GEM} list -i net-ssh-gateway -v ${NET_SSH_GATEWAY_VERSION} || sudo ${GEM} install net-ssh-gateway --version ${NET_SSH_GATEWAY_VERSION} -q --no-ri --no-rdoc > /dev/null
echo "Installing chef..."
CHEF_VERSION="10.16.4"
${GEM} list -i chef -v ${CHEF_VERSION} || sudo ${GEM} install chef --version ${CHEF_VERSION} -q --no-ri --no-rdoc > /dev/null
# Install blobstore_client
echo "Installing blobstore_client..."
BLOB_VERSION="0.4.0"
${GEM} list -i blobstore_client -v ${BLOB_VERSION} || sudo ${GEM} install blobstore_client --version ${BLOB_VERSION} -q --no-ri --no-rdoc > /dev/null
# Install rake
echo "Installing rake..."
${GEM} list -i rake -i || sudo ${GEM} install rake -q --no-ri --no-rdoc > /dev/null
# Clone cloudfoundry repo
echo "Installing git..."
run_cmd apt-get $APT_CONFIG install -qym git-core
[ -d $CLOUDFOUNDRY_HOME ] || mkdir $CLOUDFOUNDRY_HOME
REPO=vcap
if [ ! -d $CLOUDFOUNDRY_HOME/${REPO} ]; then
if ! (cd $CLOUDFOUNDRY_HOME
git clone --no-checkout $VCAP_REPO_BASE/$REPO
cd $REPO
git checkout $VCAP_REPO_BRANCH
git submodule update --recursive --init
); then
echo "Unable to clone cloudfoundry $REPO repo."
exit 1
fi
else
clear_bundler_settings $CLOUDFOUNDRY_HOME/$REPO
fi
# Launch chef
ARGS=""
if [ -n "$CLOUDFOUNDRY_HOME" ]; then
ARGS="-d $CLOUDFOUNDRY_HOME"
fi
if [ -n "$CLOUDFOUNDRY_DOMAIN" ]; then
ARGS="$ARGS -D $CLOUDFOUNDRY_DOMAIN"
fi
if [ -n "$CONFIG_FILE" ]; then
ARGS="$ARGS -c $CONFIG_FILE"
fi
echo ""
echo "Launching chef..."
sleep 3
$CLOUDFOUNDRY_HOME/vcap/dev_setup/lib/chefsolo_launch.rb $ARGS