blob: 72d9cd1e6f3208e5f42d8e9b0e9d0a8f034c7455 [file] [log] [blame]
#! /bin/bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
# Load RVM into a shell session *as a function*
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
# First try to load from a user install
source "$HOME/.rvm/scripts/rvm"
elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
# Then try to load from a root install
source "/usr/local/rvm/scripts/rvm"
else
printf "ERROR: An RVM installation was not found.\n"
fi
BASEDIR=$PWD/boxes
DEVCLOUD_BASEBUILD_DIR=$BASEDIR/basebox-build
echo $DEVCLOUD_BASEBUILD_DIR
DEVCLOUD_XEN_BASEBUILD_DIR=$BASEDIR/xenbox-build
DEVCLOUD_BASE_NAME='devcloudbase'
DEVCLOUD_XEN_BASE_NAME='devcloudbase-xen'
OS='ubuntu-12.04.1-server-i386'
basebox() {
set +x
rvm rvmrc trust $DEVCLOUD_BASEBUILD_DIR/
case "$1" in
build)
cd $DEVCLOUD_BASEBUILD_DIR/
set -ex
vagrant basebox define $DEVCLOUD_BASE_NAME $OS
cp definition.rb postinstall.sh preseed.cfg definitions/$DEVCLOUD_BASE_NAME/
vagrant basebox build $DEVCLOUD_BASE_NAME -f -a -n -r
vagrant basebox export $DEVCLOUD_BASE_NAME -f
set +ex
cd $DEVCLOUD_XEN_BASEBUILD_DIR
set -ex
vagrant box add $DEVCLOUD_BASE_NAME $DEVCLOUD_BASEBUILD_DIR/${DEVCLOUD_BASE_NAME}.box -f
;;
clean)
cd $DEVCLOUD_BASEBUILD_DIR/
set -x
rm -f iso/*.iso
vagrant -f basebox destroy $DEVCLOUD_BASE_NAME #-f
vagrant basebox undefine $DEVCLOUD_BASE_NAME
#hackery to inherit the proper rvmrc for the hacked vagrant
set +x
cd $BAS$DEVCLOUD_XEN_BASEBUILD_DIR
set -x
vagrant -f box remove $DEVCLOUD_BASE_NAME virtualbox
set +x
cd $DEVCLOUD_BASEBUILD_DIR
set -x
rm -f ${DEVCLOUD_BASE_NAME}.box
set +x
cd $BASEDIR
#rvm --force gemset delete vagrant-release-cloudstack
;;
esac
}
xenbox() {
set +x
rvm rvmrc trust $DEVCLOUD_XEN_BASEBUILD_DIR/
case "$1" in
build)
cd $DEVCLOUD_XEN_BASEBUILD_DIR
#adding it here because it needs to be added into the $VAGRANT_HOME of
#the hacked vagrant
set -ex
vagrant up
vagrant halt
vagrant package default --output ${DEVCLOUD_XEN_BASE_NAME}.box
vagrant box add $DEVCLOUD_XEN_BASE_NAME ${DEVCLOUD_XEN_BASE_NAME}.box -f
;;
clean)
cd $DEVCLOUD_XEN_BASEBUILD_DIR
set -x
vagrant -f box remove $DEVCLOUD_XEN_BASE_NAME virtualbox
vagrant destroy -f
rm -f ${DEVCLOUD_XEN_BASE_NAME}.box
set +x
#rvm --force gemset delete vagrant-xen-cloudstack
set -x
;;
esac
}
usage() {
cat <<EOF
$(basename $0) [-h] [-b] [c] (basebox|xenbox) | all
Builds / cleans boxes used to build the devcloud box
where:
-h show this help text
-b builds the box(es)
-c cleans the box(es)
EOF
}
while getopts 'hbc' option; do
case "$option" in
h) usage
exit
;;
b) action="build"
;;
c) action="clean"
;;
?) printf "illegal option: '%s'\n" "$OPTARG" >&2
echo "$usage" >&2
exit 1
;;
esac
done
shift $((OPTIND - 1))
posargs=$@
#removes duplicate positionals
posargs=$(echo "$posargs" | tr ' ' '\n' | nl | sort -u -k2 | sort -n | cut -f2-)
for arg in $posargs; do
case "$arg" in
basebox)
true
;;
xenbox)
true
;;
all)
true
;;
*)
usage
exit 1
;;
esac
done
cd $BASEDIR
for arg in $posargs; do
case "$1" in
"all")
case "$action" in
clean)
xenbox $action
basebox $action
;;
build)
basebox $action
xenbox $action
;;
esac
;;
$arg)
$arg $action
;;
esac
done