Remove install_rally script
Change-Id: Ib53e7413071c46ad1a82008658740f974201443a
This commit is contained in:
parent
d77be1abf3
commit
9811aa9726
@ -106,6 +106,9 @@ Removed
|
|||||||
Validators plugins. It was deprecated since Rally 0.10.0 in favor of
|
Validators plugins. It was deprecated since Rally 0.10.0 in favor of
|
||||||
*platform*.
|
*platform*.
|
||||||
|
|
||||||
|
* *install_rally.sh* script is too complicated and installs only rally
|
||||||
|
framework without plugins.
|
||||||
|
|
||||||
Fixed
|
Fixed
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
|
826
install_rally.sh
826
install_rally.sh
@ -1,826 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# This script installs Rally.
|
|
||||||
# Specifically, it is able to install and configure
|
|
||||||
# Rally either globally (system-wide), or isolated in
|
|
||||||
# a virtual environment using the virtualenv tool.
|
|
||||||
#
|
|
||||||
# NOTE: The script assumes that you have the following
|
|
||||||
# programs already installed:
|
|
||||||
# -> Python 2.6, Python 2.7 or Python 3.4
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
PROG=$(basename "${0}")
|
|
||||||
|
|
||||||
running_as_root() {
|
|
||||||
test "$(/usr/bin/id -u)" -eq 0
|
|
||||||
}
|
|
||||||
|
|
||||||
VERBOSE=""
|
|
||||||
ASKCONFIRMATION=1
|
|
||||||
RECREATEDEST="ask"
|
|
||||||
USEVIRTUALENV="yes"
|
|
||||||
DEVELOPMENT_MODE="false"
|
|
||||||
|
|
||||||
# ansi colors for formatting heredoc
|
|
||||||
ESC=$(printf "\e")
|
|
||||||
GREEN="$ESC[0;32m"
|
|
||||||
NO_COLOR="$ESC[0;0m"
|
|
||||||
RED="$ESC[0;31m"
|
|
||||||
|
|
||||||
PYTHON2=$(which python || true)
|
|
||||||
PYTHON3=$(which python3 || true)
|
|
||||||
PYTHON=${PYTHON2:-$PYTHON3}
|
|
||||||
VIRTUALENV_VERSION="15.1.0"
|
|
||||||
VIRTUALENV_URL="https://raw.github.com/pypa/virtualenv/$VIRTUALENV_VERSION/virtualenv.py"
|
|
||||||
|
|
||||||
RALLY_GIT_URL="https://git.openstack.org/openstack/rally"
|
|
||||||
RALLY_GIT_BRANCH="master"
|
|
||||||
RALLY_CONFIGURATION_DIR=/etc/rally
|
|
||||||
RALLY_DATABASE_DIR=/var/lib/rally/database
|
|
||||||
DBTYPE=sqlite
|
|
||||||
DBNAME=rally.sqlite
|
|
||||||
|
|
||||||
# Variable used by script_interrupted to know what to cleanup
|
|
||||||
CURRENT_ACTION="none"
|
|
||||||
|
|
||||||
## Exit status codes (mostly following <sysexits.h>)
|
|
||||||
# successful exit
|
|
||||||
EX_OK=0
|
|
||||||
|
|
||||||
# wrong command-line invocation
|
|
||||||
EX_USAGE=64
|
|
||||||
|
|
||||||
# missing dependencies (e.g., no C compiler)
|
|
||||||
EX_UNAVAILABLE=69
|
|
||||||
|
|
||||||
# wrong python version
|
|
||||||
EX_SOFTWARE=70
|
|
||||||
|
|
||||||
# cannot create directory or file
|
|
||||||
EX_CANTCREAT=73
|
|
||||||
|
|
||||||
# user aborted operations
|
|
||||||
EX_TEMPFAIL=75
|
|
||||||
|
|
||||||
# misused as: unexpected error in some script we call
|
|
||||||
EX_PROTOCOL=76
|
|
||||||
|
|
||||||
# abort RC [MSG]
|
|
||||||
#
|
|
||||||
# Print error message MSG and abort shell execution with exit code RC.
|
|
||||||
# If MSG is not given, read it from STDIN.
|
|
||||||
#
|
|
||||||
abort () {
|
|
||||||
local rc="$1"
|
|
||||||
shift
|
|
||||||
(echo -en "$RED$PROG: ERROR: $NO_COLOR";
|
|
||||||
if [ $# -gt 0 ]; then echo "$@"; else cat; fi) 1>&2
|
|
||||||
exit "$rc"
|
|
||||||
}
|
|
||||||
|
|
||||||
# die RC HEADER <<...
|
|
||||||
#
|
|
||||||
# Print an error message with the given header, then abort shell
|
|
||||||
# execution with exit code RC. Additional text for the error message
|
|
||||||
# *must* be passed on STDIN.
|
|
||||||
#
|
|
||||||
die () {
|
|
||||||
local rc="$1"
|
|
||||||
header="$2"
|
|
||||||
shift 2
|
|
||||||
cat 1>&2 <<__EOF__
|
|
||||||
$RED==========================================================
|
|
||||||
$PROG: ERROR: $header
|
|
||||||
==========================================================
|
|
||||||
$NO_COLOR
|
|
||||||
__EOF__
|
|
||||||
if [ $# -gt 0 ]; then
|
|
||||||
# print remaining arguments one per line
|
|
||||||
for line in "$@"; do
|
|
||||||
echo "$line" 1>&2;
|
|
||||||
done
|
|
||||||
else
|
|
||||||
# additional message text provided on STDIN
|
|
||||||
cat 1>&2;
|
|
||||||
fi
|
|
||||||
cat 1>&2 <<__EOF__
|
|
||||||
|
|
||||||
If the above does not help you resolve the issue, please contact the
|
|
||||||
Rally team by sending an email to the OpenStack mailing list
|
|
||||||
openstack-discuss@lists.openstack.org. Include the full output of this
|
|
||||||
script to help us identifying the problem.
|
|
||||||
$RED
|
|
||||||
Aborting installation!$NO_COLOR
|
|
||||||
__EOF__
|
|
||||||
exit "$rc"
|
|
||||||
}
|
|
||||||
|
|
||||||
script_interrupted () {
|
|
||||||
echo "Interrupted by the user. Cleaning up..."
|
|
||||||
[ -n "${VIRTUAL_ENV}" -a "${VIRTUAL_ENV}" == "$VENVDIR" ] && deactivate
|
|
||||||
|
|
||||||
case $CURRENT_ACTION in
|
|
||||||
creating_venv|venv-created)
|
|
||||||
if [ -d "$VENVDIR" ]
|
|
||||||
then
|
|
||||||
if ask_yn "Do you want to delete the virtual environment in '$VENVDIR'?"
|
|
||||||
then
|
|
||||||
rm -rf "$VENVDIR"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
downloading-src|src-downloaded)
|
|
||||||
# This is only relevant when installing with --system,
|
|
||||||
# otherwise the git repository is cloned into the
|
|
||||||
# virtualenv directory
|
|
||||||
if [ -d "$SOURCEDIR" ]
|
|
||||||
then
|
|
||||||
if ask_yn "Do you want to delete the downloaded source in '$SOURCEDIR'?"
|
|
||||||
then
|
|
||||||
rm -rf "$SOURCEDIR"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
abort $EX_TEMPFAIL "Script interrupted by the user"
|
|
||||||
}
|
|
||||||
|
|
||||||
trap script_interrupted SIGINT
|
|
||||||
|
|
||||||
print_usage () {
|
|
||||||
cat <<__EOF__
|
|
||||||
Usage: $PROG [options]
|
|
||||||
|
|
||||||
This script will install Rally in your system.
|
|
||||||
|
|
||||||
Options:
|
|
||||||
$GREEN -h, --help $NO_COLOR Print this help text
|
|
||||||
$GREEN -v, --verbose $NO_COLOR Verbose mode
|
|
||||||
$GREEN -s, --system $NO_COLOR Install system-wide.
|
|
||||||
$GREEN -d, --target DIRECTORY$NO_COLOR Install Rally virtual environment into DIRECTORY.
|
|
||||||
(Default: $HOME/rally if not root).
|
|
||||||
$GREEN --url $NO_COLOR Git repository public URL to download Rally from.
|
|
||||||
This is useful when you have only installation script and want to install Rally
|
|
||||||
from custom repository.
|
|
||||||
(Default: ${RALLY_GIT_URL}).
|
|
||||||
(Ignored when you are already in git repository).
|
|
||||||
$GREEN --branch $NO_COLOR Git branch name, tag (Rally release), commit hash, ref, or other
|
|
||||||
tree-ish to install. (Default: master)
|
|
||||||
Ignored when you are already in git repository.
|
|
||||||
$GREEN -f, --overwrite $NO_COLOR Deprecated. Use -r instead.
|
|
||||||
$GREEN -r, --recreate $NO_COLOR Remove target directory if it already exist.
|
|
||||||
If neither '-r' nor '-R' is set default behaviour is to ask.
|
|
||||||
$GREEN -R, --no-recreate $NO_COLOR Do not remove target directory if it already exist.
|
|
||||||
If neither '-r' nor '-R' is set default behaviour is to ask.
|
|
||||||
$GREEN -y, --yes $NO_COLOR Do not ask for confirmation: assume a 'yes' reply
|
|
||||||
to every question.
|
|
||||||
$GREEN -D, --dbtype TYPE $NO_COLOR Select the database type. TYPE can be one of
|
|
||||||
'sqlite', 'mysql', 'postgresql'.
|
|
||||||
Default: sqlite
|
|
||||||
$GREEN --db-user USER $NO_COLOR Database user to use. Only used when --dbtype
|
|
||||||
is either 'mysql' or 'postgresql'.
|
|
||||||
$GREEN --db-password PASSWORD$NO_COLOR Password of the database user. Only used when
|
|
||||||
--dbtype is either 'mysql' or 'postgresql'.
|
|
||||||
$GREEN --db-host HOST $NO_COLOR Database host. Only used when --dbtype is
|
|
||||||
either 'mysql' or 'postgresql'
|
|
||||||
$GREEN --db-name NAME $NO_COLOR Name of the database. Only used when --dbtype is
|
|
||||||
either 'mysql' or 'postgresql'
|
|
||||||
$GREEN -p, --python EXE $NO_COLOR The python interpreter to use. Default: $PYTHON
|
|
||||||
$GREEN --develop $NO_COLOR Install Rally with editable source code try.
|
|
||||||
(Default: false)
|
|
||||||
$GREEN --no-color $NO_COLOR Disable output coloring.
|
|
||||||
|
|
||||||
__EOF__
|
|
||||||
}
|
|
||||||
|
|
||||||
# ask_yn PROMPT
|
|
||||||
#
|
|
||||||
# Ask a Yes/no question preceded by PROMPT.
|
|
||||||
# Set the env. variable REPLY to 'yes' or 'no'
|
|
||||||
# and return 0 or 1 depending on the users'
|
|
||||||
# answer.
|
|
||||||
#
|
|
||||||
ask_yn () {
|
|
||||||
if [ $ASKCONFIRMATION -eq 0 ]; then
|
|
||||||
# assume 'yes'
|
|
||||||
REPLY='yes'
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
while true; do
|
|
||||||
read -p "$1 [yN] " REPLY
|
|
||||||
case "$REPLY" in
|
|
||||||
[Yy]*) REPLY='yes'; return 0 ;;
|
|
||||||
[Nn]*|'') REPLY='no'; return 1 ;;
|
|
||||||
*) echo "Please type 'y' (yes) or 'n' (no)." ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
have_command () {
|
|
||||||
type "$1" >/dev/null 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
require_command () {
|
|
||||||
if ! have_command "$1"; then
|
|
||||||
abort 1 "Could not find required command '$1' in system PATH. Aborting."
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
require_python () {
|
|
||||||
require_command "$PYTHON"
|
|
||||||
if "$PYTHON" -c 'import sys; sys.exit(sys.version_info[:2] >= (2, 6))'
|
|
||||||
then
|
|
||||||
die $EX_UNAVAILABLE "Wrong version of python is installed" <<__EOF__
|
|
||||||
|
|
||||||
Rally requires Python version 2.6+. Unfortunately, we do not support
|
|
||||||
your version of python: $("$PYTHON" -V 2>&1 | sed 's/python//gi').
|
|
||||||
|
|
||||||
If a version of Python suitable for using Rally is present in some
|
|
||||||
non-standard location, you can specify it from the command line by
|
|
||||||
running this script again with option '--python' followed by the path of
|
|
||||||
the correct 'python' binary.
|
|
||||||
__EOF__
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
which_missing_packages () {
|
|
||||||
if [ ! -f bindep.txt ]; then
|
|
||||||
abort $EX_PROTOCOL \
|
|
||||||
"bindep.txt not found. Unable to find missing packages."
|
|
||||||
fi
|
|
||||||
require_command "bindep"
|
|
||||||
require_command "lsb_release"
|
|
||||||
echo "$(bindep -b | tr '\n' ' ')"
|
|
||||||
}
|
|
||||||
|
|
||||||
which_missing_commands () {
|
|
||||||
# These commands are required to run install_rally.sh
|
|
||||||
local missing=""
|
|
||||||
if ! have_command "wget"; then
|
|
||||||
missing="wget"
|
|
||||||
fi
|
|
||||||
if ! have_command "git"; then
|
|
||||||
missing="$missing git"
|
|
||||||
fi
|
|
||||||
if ! have_command "pip"; then
|
|
||||||
missing="$missing python-pip"
|
|
||||||
fi
|
|
||||||
echo "$missing"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Download command
|
|
||||||
download() {
|
|
||||||
wget -nv $VERBOSE --no-check-certificate -O "$@";
|
|
||||||
}
|
|
||||||
|
|
||||||
get_pkg_manager () {
|
|
||||||
if have_command apt-get; then
|
|
||||||
# Debian/Ubuntu
|
|
||||||
if [ "$ASKCONFIRMATION" -eq 0 ]; then
|
|
||||||
pkg_manager="apt-get install --yes --force-yes"
|
|
||||||
else
|
|
||||||
pkg_manager="apt-get install"
|
|
||||||
fi
|
|
||||||
elif have_command dnf; then
|
|
||||||
# dnf based RHEL/CentOS/Fedora
|
|
||||||
if [ "$ASKCONFIRMATION" -eq 0 ]; then
|
|
||||||
pkg_manager="dnf install -y"
|
|
||||||
else
|
|
||||||
pkg_manager="dnf install"
|
|
||||||
fi
|
|
||||||
elif have_command zypper; then
|
|
||||||
# SuSE. Needs to be before yum based RHEL/CentOS/Fedora to handle cases when
|
|
||||||
# yum is installed on SUSE to fulfill dependencies.
|
|
||||||
if [ "$ASKCONFIRMATION" -eq 0 ]; then
|
|
||||||
pkg_manager="zypper -n --no-gpg-checks --non-interactive install --auto-agree-with-licenses"
|
|
||||||
else
|
|
||||||
pkg_manager="zypper install"
|
|
||||||
fi
|
|
||||||
elif have_command yum; then
|
|
||||||
# yum based RHEL/CentOS/Fedora
|
|
||||||
if [ "$ASKCONFIRMATION" -eq 0 ]; then
|
|
||||||
pkg_manager="yum install -y"
|
|
||||||
else
|
|
||||||
pkg_manager="yum install"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# MacOSX maybe?
|
|
||||||
echo "Cannot determine what package manager this system has, so I cannot check if requisite software is installed. I'm proceeding anyway, but you may run into errors later."
|
|
||||||
fi
|
|
||||||
echo $pkg_manager
|
|
||||||
}
|
|
||||||
|
|
||||||
install_required_sw () {
|
|
||||||
# instead of guessing which distribution this is, we check for the
|
|
||||||
# package manager name as it basically identifies the distro
|
|
||||||
local missing pkg_manager
|
|
||||||
missing=$1
|
|
||||||
pkg_manager=$(get_pkg_manager)
|
|
||||||
|
|
||||||
if [ -n "$missing" ]; then
|
|
||||||
cat <<__EOF__
|
|
||||||
The following software packages need to be installed
|
|
||||||
in order for Rally to work:$GREEN $missing
|
|
||||||
$NO_COLOR
|
|
||||||
__EOF__
|
|
||||||
|
|
||||||
# If we are root
|
|
||||||
if running_as_root; then
|
|
||||||
cat <<__EOF__
|
|
||||||
In order to install the required software you would need to run as
|
|
||||||
'root' the following command:
|
|
||||||
$GREEN
|
|
||||||
$pkg_manager $missing
|
|
||||||
$NO_COLOR
|
|
||||||
__EOF__
|
|
||||||
# ask if we have to install it
|
|
||||||
if ask_yn "Do you want me to install these packages for you?"; then
|
|
||||||
# install
|
|
||||||
if [[ "$missing" == *python-pip* ]]; then
|
|
||||||
missing=${missing//python-pip/}
|
|
||||||
if ! $pkg_manager python-pip; then
|
|
||||||
if ask_yn "Error installing python-pip. Install from external source?"; then
|
|
||||||
local pdir=$(mktemp /tmp/tmp.XXXXXXXXXX -d)
|
|
||||||
local getpip="$pdir/get-pip.py"
|
|
||||||
download "$getpip" https://bootstrap.pypa.io/get-pip.py
|
|
||||||
if ! "$PYTHON" "$getpip"; then
|
|
||||||
abort $EX_PROTOCOL "Error while installing python-pip from external source."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
abort $EX_TEMPFAIL \
|
|
||||||
"Please install python-pip manually."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ -n "$missing" ] && ! $pkg_manager $missing; then
|
|
||||||
abort $EX_UNAVAILABLE "Error while installing $missing"
|
|
||||||
fi
|
|
||||||
# installation successful
|
|
||||||
else # don't want to install the packages
|
|
||||||
die $EX_UNAVAILABLE "missing software prerequisites" <<__EOF__
|
|
||||||
Please, install the required software before installing Rally
|
|
||||||
|
|
||||||
__EOF__
|
|
||||||
fi
|
|
||||||
else # Not running as root
|
|
||||||
cat <<__EOF__
|
|
||||||
There is a small chance that the required software
|
|
||||||
is actually installed though we failed to detect it,
|
|
||||||
so you may choose to proceed with Rally installation
|
|
||||||
anyway. Be warned however, that continuing is very
|
|
||||||
likely to fail!
|
|
||||||
|
|
||||||
__EOF__
|
|
||||||
if ask_yn "Proceed with installation anyway?"
|
|
||||||
then
|
|
||||||
echo "Proceeding with installation at your request... keep fingers crossed!"
|
|
||||||
else
|
|
||||||
die $EX_UNAVAILABLE "missing software prerequisites" <<__EOF__
|
|
||||||
Please ask your system administrator to install the missing packages,
|
|
||||||
or, if you have root access, you can do that by running the following
|
|
||||||
command from the 'root' account:
|
|
||||||
$GREEN
|
|
||||||
$pkg_manager $missing
|
|
||||||
$NO_COLOR
|
|
||||||
__EOF__
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
install_db_connector () {
|
|
||||||
case $DBTYPE in
|
|
||||||
mysql)
|
|
||||||
pip install pymysql
|
|
||||||
;;
|
|
||||||
postgresql)
|
|
||||||
pip install psycopg2
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
install_virtualenv () {
|
|
||||||
DESTDIR=$1
|
|
||||||
|
|
||||||
if [ -n "$VIRTUAL_ENV" ]; then
|
|
||||||
die $EX_SOFTWARE "Virtualenv already active" <<__EOF__
|
|
||||||
A virtual environment seems to be already active. This will cause
|
|
||||||
this script to FAIL.
|
|
||||||
|
|
||||||
Run 'deactivate', then run this script again.
|
|
||||||
__EOF__
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Use the latest virtualenv that can use `.tar.gz` files
|
|
||||||
VIRTUALENV_DST="$DESTDIR/virtualenv-$VIRTUALENV_VERSION.py"
|
|
||||||
mkdir -p "$DESTDIR"
|
|
||||||
download "$VIRTUALENV_DST" "$VIRTUALENV_URL"
|
|
||||||
"$PYTHON" "$VIRTUALENV_DST" $VERBOSE --no-setuptools --no-pip --no-wheel \
|
|
||||||
-p "$PYTHON" "$DESTDIR"
|
|
||||||
|
|
||||||
. "$DESTDIR/bin/activate"
|
|
||||||
|
|
||||||
download - https://bootstrap.pypa.io/get-pip.py | python -\
|
|
||||||
|| die $EX_PROTOCOL \
|
|
||||||
"Error while running get-pip.py" <<__EOF__
|
|
||||||
|
|
||||||
The required Python package pip could not be installed
|
|
||||||
in virtualenv.
|
|
||||||
|
|
||||||
__EOF__
|
|
||||||
|
|
||||||
pip install setuptools wheel || die $EX_PROTOCOL \
|
|
||||||
"Error while running 'pip install setuptools wheel'" <<__EOF__
|
|
||||||
|
|
||||||
The required Python package setuptools, wheel could not be installed
|
|
||||||
in virtualenv.
|
|
||||||
|
|
||||||
__EOF__
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_rally_configuration () {
|
|
||||||
SRCDIR=$1
|
|
||||||
ETCDIR=$RALLY_CONFIGURATION_DIR
|
|
||||||
DBDIR=$RALLY_DATABASE_DIR
|
|
||||||
|
|
||||||
[ -d "$ETCDIR" ] || mkdir -p "$ETCDIR"
|
|
||||||
cp "$SRCDIR"/etc/rally/rally.conf.sample "$ETCDIR"/rally.conf
|
|
||||||
|
|
||||||
[ -d "$DBDIR" ] || mkdir -p "$DBDIR"
|
|
||||||
local CONF_TMPFILE=$(mktemp /tmp/tmp.XXXXXXXXXX)
|
|
||||||
sed "s|#connection *=.*|connection = \"$DBCONNSTRING\"|" "$ETCDIR"/rally.conf > "$CONF_TMPFILE"
|
|
||||||
cat "$CONF_TMPFILE" > "$ETCDIR"/rally.conf
|
|
||||||
rm "$CONF_TMPFILE"
|
|
||||||
rally db recreate
|
|
||||||
}
|
|
||||||
|
|
||||||
rally_venv () {
|
|
||||||
echo "Installing Rally virtualenv in directory '$VENVDIR' ..."
|
|
||||||
CURRENT_ACTION="creating-venv"
|
|
||||||
if ! install_virtualenv "$VENVDIR"; then
|
|
||||||
die $EX_PROTOCOL "Unable to create a new virtualenv in '$VENVDIR': 'virtualenv.py' script exited with code $rc." <<__EOF__
|
|
||||||
The script was unable to create a valid virtual environment.
|
|
||||||
__EOF__
|
|
||||||
fi
|
|
||||||
CURRENT_ACTION="venv-created"
|
|
||||||
rc=0
|
|
||||||
}
|
|
||||||
|
|
||||||
### Main program ###
|
|
||||||
short_opts='d:vsyfrRhD:p:'
|
|
||||||
long_opts='target:,verbose,overwrite,recreate,no-recreate,system,yes,dbtype:,python:,db-user:,db-password:,db-host:,db-name:,help,url:,branch:,develop,no-color'
|
|
||||||
|
|
||||||
set +e
|
|
||||||
if [ "x$(getopt -T)" = 'x' ]; then
|
|
||||||
# GNU getopt
|
|
||||||
args=$(getopt --name "$PROG" --shell sh -l "$long_opts" -o "$short_opts" -- "$@")
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
abort 1 "Type '$PROG --help' to get usage information."
|
|
||||||
fi
|
|
||||||
# use 'eval' to remove getopt quoting
|
|
||||||
eval set -- "$args"
|
|
||||||
else
|
|
||||||
# old-style getopt, use compatibility syntax
|
|
||||||
args=$(getopt "$short_opts" "$@")
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
abort 1 "Type '$PROG -h' to get usage information."
|
|
||||||
fi
|
|
||||||
eval set -- "$args"
|
|
||||||
fi
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Command line parsing
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
case "$1" in
|
|
||||||
-d|--target)
|
|
||||||
shift
|
|
||||||
VENVDIR=$(readlink -m "$1")
|
|
||||||
;;
|
|
||||||
-h|--help)
|
|
||||||
print_usage
|
|
||||||
exit $EX_OK
|
|
||||||
;;
|
|
||||||
-v|--verbose)
|
|
||||||
VERBOSE="-v"
|
|
||||||
;;
|
|
||||||
-s|--system)
|
|
||||||
USEVIRTUALENV="no"
|
|
||||||
;;
|
|
||||||
-f|--overwrite)
|
|
||||||
RECREATEDEST=yes
|
|
||||||
;;
|
|
||||||
-r|--recreate)
|
|
||||||
RECREATEDEST=yes
|
|
||||||
;;
|
|
||||||
-R|--no-recreate)
|
|
||||||
RECREATEDEST=no
|
|
||||||
;;
|
|
||||||
-y|--yes)
|
|
||||||
ASKCONFIRMATION=0
|
|
||||||
;;
|
|
||||||
--url)
|
|
||||||
shift
|
|
||||||
RALLY_GIT_URL=$1
|
|
||||||
;;
|
|
||||||
--branch)
|
|
||||||
shift
|
|
||||||
RALLY_GIT_BRANCH=$1
|
|
||||||
;;
|
|
||||||
-D|--dbtype)
|
|
||||||
shift
|
|
||||||
DBTYPE=$1
|
|
||||||
case $DBTYPE in
|
|
||||||
sqlite|mysql|postgresql);;
|
|
||||||
*)
|
|
||||||
print_usage | die $EX_USAGE \
|
|
||||||
"An invalid option has been detected."
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
--db-user)
|
|
||||||
shift
|
|
||||||
DBUSER=$1
|
|
||||||
;;
|
|
||||||
--db-password)
|
|
||||||
shift
|
|
||||||
DBPASSWORD=$1
|
|
||||||
;;
|
|
||||||
--db-host)
|
|
||||||
shift
|
|
||||||
DBHOST=$1
|
|
||||||
;;
|
|
||||||
--db-name)
|
|
||||||
shift
|
|
||||||
DBNAME=$1
|
|
||||||
;;
|
|
||||||
-p|--python)
|
|
||||||
shift
|
|
||||||
PYTHON=$1
|
|
||||||
;;
|
|
||||||
--develop)
|
|
||||||
DEVELOPMENT_MODE=true
|
|
||||||
;;
|
|
||||||
--no-color)
|
|
||||||
RED=""
|
|
||||||
GREEN=""
|
|
||||||
NO_COLOR=""
|
|
||||||
;;
|
|
||||||
--)
|
|
||||||
shift
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
print_usage | die $EX_USAGE "An invalid option has been detected."
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
### Post-processing ###
|
|
||||||
|
|
||||||
if [ "$USEVIRTUALENV" == "no" ] && [ -n "$VENVDIR" ]; then
|
|
||||||
die $EX_USAGE "Ambiguous arguments" <<__EOF__
|
|
||||||
Option -d/--target can not be used with --system.
|
|
||||||
__EOF__
|
|
||||||
fi
|
|
||||||
|
|
||||||
if running_as_root; then
|
|
||||||
if [ -z "$VENVDIR" ]; then
|
|
||||||
USEVIRTUALENV='no'
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [ "$USEVIRTUALENV" == 'no' ]; then
|
|
||||||
die $EX_USAGE "Insufficient privileges" <<__EOF__
|
|
||||||
$REDRoot permissions required in order to install system-wide.
|
|
||||||
As non-root user you may only install in virtualenv.$NO_COLOR
|
|
||||||
__EOF__
|
|
||||||
fi
|
|
||||||
if [ -z "$VENVDIR" ]; then
|
|
||||||
VENVDIR="$HOME"/rally
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Fix RALLY_DATABASE_DIR if virtualenv is used
|
|
||||||
if [ "$USEVIRTUALENV" = 'yes' ]
|
|
||||||
then
|
|
||||||
RALLY_CONFIGURATION_DIR=$VENVDIR/etc/rally
|
|
||||||
RALLY_DATABASE_DIR="$VENVDIR"/database
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$DBTYPE" = 'sqlite' ]; then
|
|
||||||
if [ "${DBNAME:0:1}" = '/' ]; then
|
|
||||||
DBFILE="$DBNAME"
|
|
||||||
else
|
|
||||||
DBFILE="${RALLY_DATABASE_DIR}/${DBNAME}"
|
|
||||||
fi
|
|
||||||
DBCONNSTRING="sqlite:///${DBFILE}"
|
|
||||||
else
|
|
||||||
if [ -z "$DBUSER" -o -z "$DBPASSWORD" -o -z "$DBHOST" -o -z "$DBNAME" ]
|
|
||||||
then
|
|
||||||
die $EX_USAGE "Missing mandatory options" <<__EOF__
|
|
||||||
When specifying a database type different than 'sqlite', you also have
|
|
||||||
to specify the database name, host, and username and password of a
|
|
||||||
valid user with write access to the database.
|
|
||||||
|
|
||||||
Please, re-run the script with valid values for the options:
|
|
||||||
$GREEN
|
|
||||||
--db-host
|
|
||||||
--db-name
|
|
||||||
--db-user
|
|
||||||
--db-password$NO_COLOR
|
|
||||||
__EOF__
|
|
||||||
fi
|
|
||||||
DBAUTH="$DBUSER:$DBPASSWORD@$DBHOST"
|
|
||||||
if [ "$DBTYPE" = 'mysql' ]; then
|
|
||||||
DBCONNSTRING="$DBTYPE+pymysql://$DBAUTH/$DBNAME"
|
|
||||||
elif [ "$DBTYPE" = 'postgresql' ]; then
|
|
||||||
DBCONNSTRING="$DBTYPE+psycopg2://$DBAUTH/$DBNAME"
|
|
||||||
else
|
|
||||||
DBCONNSTRING="$DBTYPE://$DBAUTH/$DBNAME"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check and install prerequisites
|
|
||||||
install_required_sw "$(which_missing_commands)"
|
|
||||||
require_python
|
|
||||||
|
|
||||||
|
|
||||||
# Install virtualenv, if required
|
|
||||||
if [ "$USEVIRTUALENV" = 'yes' ]; then
|
|
||||||
if [ -d "$VENVDIR" ]
|
|
||||||
then
|
|
||||||
if [ $RECREATEDEST = 'ask' ]; then
|
|
||||||
echo "Destination directory '$VENVDIR' already exists."
|
|
||||||
echo "I can wipe it out in order to make a new installation,"
|
|
||||||
echo "but this means any files in that directory, and the ones"
|
|
||||||
echo "underneath it will be deleted."
|
|
||||||
echo
|
|
||||||
|
|
||||||
if ! ask_yn "Do you want to wipe the installation directory '$VENVDIR'?"
|
|
||||||
then
|
|
||||||
echo "*Not* overwriting destination directory '$VENVDIR'."
|
|
||||||
RECREATEDEST=no
|
|
||||||
else
|
|
||||||
RECREATEDEST=yes
|
|
||||||
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $RECREATEDEST = 'yes' ];
|
|
||||||
then
|
|
||||||
echo "Removing directory $VENVDIR as requested."
|
|
||||||
rm $VERBOSE -rf "$VENVDIR"
|
|
||||||
rally_venv
|
|
||||||
elif [ $RECREATEDEST = 'no' ];
|
|
||||||
then
|
|
||||||
echo "Using existing virtualenv at $VENVDIR..."
|
|
||||||
. "$VENVDIR"/bin/activate
|
|
||||||
else
|
|
||||||
abort 66 "Internal error: unexpected value '$RECREATEDEST' for RECREATEDEST."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
rally_venv
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install rally
|
|
||||||
ORIG_WD=$(pwd)
|
|
||||||
|
|
||||||
BASEDIR=$(dirname "$(readlink -e "$0")")
|
|
||||||
|
|
||||||
# If we are inside the git repo, don't download it again.
|
|
||||||
if [ -d "$BASEDIR"/.git ]
|
|
||||||
then
|
|
||||||
SOURCEDIR=$BASEDIR
|
|
||||||
(
|
|
||||||
cd "$BASEDIR"
|
|
||||||
if find . -name '*.py[co]' -exec rm -f {} +; then
|
|
||||||
echo "Wiped python compiled files."
|
|
||||||
else
|
|
||||||
echo "Warning! Unable to wipe python compiled files"
|
|
||||||
fi
|
|
||||||
)
|
|
||||||
else
|
|
||||||
if [ "$USEVIRTUALENV" = 'yes' ]
|
|
||||||
then
|
|
||||||
SOURCEDIR="$VENVDIR"/src
|
|
||||||
else
|
|
||||||
SOURCEDIR="$ORIG_WD"/rally.git
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! [ -d "$SOURCEDIR"/.git ]
|
|
||||||
then
|
|
||||||
echo "Downloading Rally from git repository $RALLY_GIT_URL ..."
|
|
||||||
CURRENT_ACTION="downloading-src"
|
|
||||||
git clone "$RALLY_GIT_URL" "$SOURCEDIR"
|
|
||||||
(
|
|
||||||
cd "$SOURCEDIR"
|
|
||||||
git checkout "$RALLY_GIT_BRANCH"
|
|
||||||
)
|
|
||||||
if ! [ -d "$SOURCEDIR"/.git ]; then
|
|
||||||
abort $EX_CANTCREAT "Unable to download git repository"
|
|
||||||
fi
|
|
||||||
CURRENT_ACTION="src-downloaded"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
install_db_connector
|
|
||||||
|
|
||||||
# Install rally
|
|
||||||
cd "$SOURCEDIR"
|
|
||||||
# Get latest available pip and reset shell cache
|
|
||||||
pip install -U 'pip!=8'
|
|
||||||
hash -r
|
|
||||||
|
|
||||||
# Install dependencies
|
|
||||||
pip install pbr 'tox<=1.6.1' bindep
|
|
||||||
|
|
||||||
# Install binary dependencies
|
|
||||||
install_required_sw "$(which_missing_packages)"
|
|
||||||
|
|
||||||
# Uninstall possible previous version
|
|
||||||
pip uninstall -y rally || true
|
|
||||||
# Install rally
|
|
||||||
if [ "$DEVELOPMENT_MODE" = "true" ]; then
|
|
||||||
pip install --constraint ./upper-constraints.txt --editable .
|
|
||||||
else
|
|
||||||
pip install --constraint ./upper-constraints.txt .
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd "$ORIG_WD"
|
|
||||||
|
|
||||||
# Post-installation
|
|
||||||
if [ "$USEVIRTUALENV" = 'yes' ]
|
|
||||||
then
|
|
||||||
# Fix bash_completion
|
|
||||||
cat >> "$VENVDIR"/bin/activate <<__EOF__
|
|
||||||
|
|
||||||
. "$VENVDIR/etc/bash_completion.d/rally.bash_completion"
|
|
||||||
__EOF__
|
|
||||||
|
|
||||||
setup_rally_configuration "$SOURCEDIR"
|
|
||||||
|
|
||||||
if ! [ "$DEVELOPMENT_MODE" = "true" ]; then
|
|
||||||
SAMPLESDIR=$VENVDIR/samples
|
|
||||||
mkdir -p "$SAMPLESDIR"
|
|
||||||
cp -r "$SOURCEDIR"/samples/* "$SAMPLESDIR"/
|
|
||||||
fi
|
|
||||||
mkdir -p "$VENVDIR"/etc/bash_completion.d
|
|
||||||
install "$SOURCEDIR"/etc/rally.bash_completion \
|
|
||||||
"$VENVDIR"/etc/bash_completion.d/
|
|
||||||
|
|
||||||
cat <<__EOF__
|
|
||||||
$GREEN==============================
|
|
||||||
Installation of Rally is done!
|
|
||||||
==============================
|
|
||||||
$NO_COLOR
|
|
||||||
In order to work with Rally you have to enable the virtual environment
|
|
||||||
with the command:
|
|
||||||
|
|
||||||
. $VENVDIR/bin/activate
|
|
||||||
|
|
||||||
You need to run the above command on every new shell you open before
|
|
||||||
using Rally, but just once per session.
|
|
||||||
|
|
||||||
Information about your Rally installation:
|
|
||||||
|
|
||||||
* Method:$GREEN virtualenv$NO_COLOR
|
|
||||||
* Virtual Environment at:$GREEN $VENVDIR$NO_COLOR
|
|
||||||
* Database at:$GREEN $RALLY_DATABASE_DIR$NO_COLOR
|
|
||||||
* Configuration file at:$GREEN $RALLY_CONFIGURATION_DIR$NO_COLOR
|
|
||||||
* Samples at:$GREEN $SAMPLESDIR$NO_COLOR
|
|
||||||
|
|
||||||
__EOF__
|
|
||||||
else
|
|
||||||
setup_rally_configuration "$SOURCEDIR"
|
|
||||||
|
|
||||||
if ! [ "$DEVELOPMENT_MODE" = "true" ]; then
|
|
||||||
SAMPLESDIR=/usr/share/rally/samples
|
|
||||||
mkdir -p "$SAMPLESDIR"
|
|
||||||
cp -r "$SOURCEDIR"/samples/* "$SAMPLESDIR"/
|
|
||||||
fi
|
|
||||||
ln -s /usr/local/etc/bash_completion.d/rally.bash_completion \
|
|
||||||
/etc/bash_completion.d/ 2> /dev/null || true
|
|
||||||
if [ -f "${DBFILE}" ]; then
|
|
||||||
chmod 777 "$DBFILE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat <<__EOF__
|
|
||||||
$GREEN==============================
|
|
||||||
Installation of Rally is done!
|
|
||||||
==============================
|
|
||||||
$NO_COLOR
|
|
||||||
Rally is now installed in your system. Information about your Rally
|
|
||||||
installation:
|
|
||||||
|
|
||||||
* Method:$GREEN system$NO_COLOR
|
|
||||||
* Database at:$GREEN $RALLY_DATABASE_DIR$NO_COLOR
|
|
||||||
* Configuration file at:$GREEN $RALLY_CONFIGURATION_DIR$NO_COLOR
|
|
||||||
* Samples at:$GREEN $SAMPLESDIR$NO_COLOR
|
|
||||||
__EOF__
|
|
||||||
fi
|
|
Loading…
Reference in New Issue
Block a user