clients/remote-clients/remote-clients/remote-clients/install_clients.sh

194 lines
6.5 KiB
Bash
Executable File

#!/bin/bash
#
# Copyright (c) 2016-2017 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
#
skip_req=0
while getopts ":hs" opt; do
case $opt in
h)
echo "Usage:"
echo "install_clients [OPTION...]"
echo "-h show help options"
echo "-s skip installing of dependencies through package manager"
echo ""
echo "This script installs the remote clients for Titanium Cloud. It automatically"
echo "uses the package manager detected on your system to pull in dependencies. The"
echo "installation process is dependent on the following packages. If your system"
echo "already includes these packages, or you prefer to manage them manually, then"
echo "you can skip this step by specifying the -s option."
echo " python-dev python-setuptools gcc git python-pip libxml2-dev libxslt-dev"
echo " libssl-dev libffi-dev libssl-dev"
echo ""
echo "If this script is run within a virtualenv then dependent packages will not be"
echo "installed and client packages will be installed within the virtualenv."
echo ""
exit 0
;;
s)
skip_req=1
;;
\?)
echo "Invalid option: -$OPTARG, valid options are -h and -s"
exit 1
;;
esac
done
if [ -z "${VIRTUAL_ENV}" ]; then
# Determine what type of terminal it is running in
uname_kernel_name="$(uname -s)"
case "${uname_kernel_name}" in
Linux*) machine=Linux;;
Darwin*) machine=Mac;;
CYGWIN*) machine=Cygwin;;
*) machine="UNKNOWN:${uname_kernel_name}"
esac
echo "Running on ${machine}"
if [[ $EUID != 0 && ${machine} != Cygwin ]]; then
echo "Root access is required. Please run with sudo or as root."
exit 1
fi
# install tools for the script, like pip
if [[ skip_req -eq 0 ]]; then
which apt-get > /dev/null
aptget_missing=$?
which yum > /dev/null
yum_missing=$?
if [[ "$aptget_missing" == "0" ]]; then
apt-get install python-dev python-setuptools gcc git libxml2-dev libxslt-dev libssl-dev libffi-dev libssl-dev --no-upgrade || exit 1
easy_install pip || exit 1
elif [[ "$yum_missing" == "0" ]]; then
yum install python-devel python-setuptools gcc git libxml2-devel libxslt-devel openssl-devel libffi-devel || exit 1
easy_install pip || exit 1
elif [[ "${machine}" == Cygwin ]]; then
setup-x86_64.exe -q -P bash_completion -P gcc-core -P git -P libffi-devel -P libxml2 -P libxslt -P openssl-devel || exit 1
elif [[ "${machine}" == Mac ]]; then
# If brew does not exist, install homebrew
which brew > /dev/null
if [[ $? != "0" ]]; then
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" || exit 1
fi
# Install python 2.7
# It comes with setuptools, pip, openssl
su "$SUDO_USER" -c 'brew install python@2' || exit 1
export PATH="/usr/local/opt/python2/bin:$PATH"
# Install gcc@4.9
su "$SUDO_USER" -c 'brew install gcc@4.9' || exit 1
else
echo "No supported package managers detected (apt-get, yum, brew)"
echo "Please ensure the following are installed on your system before continuing:"
echo "python-dev python-setuptools gcc git python-pip"
read -p "Continue with installation? y/n: " PACKMAN_CONTINUE_INPUT
while [[ "$PACKMAN_CONTINUE_INPUT" != "y" && "$PACKMAN_CONTINUE_INPUT" != "n" ]]
do
echo invalid input: $PACKMAN_CONTINUE_INPUT
read -p "Continue with installation? y/n: " PACKMAN_CONTINUE_INPUT
done
if [[ "$PACKMAN_CONTINUE_INPUT" == "n" ]]; then
echo "exiting installer..."
exit 0
fi
fi
fi
else
echo "Installing clients to virtual env: ${VIRTUAL_ENV}"
fi
# log standard output and standard error, because there is quite a lot of it
# only output what is being installed and the progress to the console (echo)
SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
exec 3>&1 1>> $SCRIPTDIR/client_installation.log 2>&1
# extract all clients
echo -n Extracting individual clients ... 1>&3
# centos 7 have an issue where the "positional" package does not install
# the pbr requirement. We will manually install it here.
if ! pip install "pbr>=1.8"; then
echo "Failed to install requirements" 1>&3
exit 1
fi
while true;do echo -n . 1>&3;sleep 1;done &
trap 'kill $! 2>/dev/null' EXIT
for file in *.tgz
do
if ! tar -zxf $file; then
echo "Failed to extract file $file" 1>&3
exit 1
fi
done
if [ -f "requirements.txt" ]
then
if ! pip -q install -r requirements.txt -c upper_constraints.txt; then
echo "Failed to install requirements" 1>&3
exit 1
fi
fi
kill $!
echo [DONE] 1>&3
# first remove any clients already installed
# we need to do this in order to downgrade to the ones we are installing
# because some of our tis clients are older than the most recent openstack clients
pip freeze | grep -wF -f installed_clients.txt | xargs pip uninstall -y
for dir in ./*/
do
cd $dir
if [ -f "setup.py" ]
then
echo -n Installing $(python setup.py --name) ... 1>&3
fi
while true;do echo -n . 1>&3;sleep 1;done &
if [ -f "requirements.txt" ]
then
grep -vwF -f ../installed_clients.txt requirements.txt > requirements.txt.temp
mv requirements.txt.temp requirements.txt
sed -i -e 's/# Apache-2.0//g' requirements.txt
if ! pip -q install -r requirements.txt -c ../upper_constraints.txt; then
echo "Failed to install requirements for $(python setup.py --name)" 1>&3
exit 1
fi
fi
if [ -f "setup.py" ]
then
if ! python setup.py -q install; then
echo "Failed to install $(python setup.py --name)" 1>&3
exit 1
fi
fi
# install bash completion
if [ -d "tools" -a -z "${VIRTUAL_ENV}" ]
then
cd tools
if [ -d "/etc/bash_completion.d" ]
then
count=`ls -1 *.bash_completion 2>/dev/null | wc -l`
if [ $count != 0 ]
then
cp *.bash_completion /etc/bash_completion.d
fi
fi
cd ../
fi
kill $!
echo [DONE] 1>&3
cd ../
done