114 lines
2.8 KiB
Bash
Executable File
114 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
set -eux
|
|
|
|
function python-install() {
|
|
local name=$1
|
|
local svc_root=$2
|
|
|
|
pushd /opt/stack/venvs
|
|
SITE_PCKGS="--no-site-packages"
|
|
# Nova depends on python-libvirt which can't be installed via pip
|
|
if [ $name == "nova" ]; then
|
|
SITE_PCKGS="--system-site-packages"
|
|
fi
|
|
virtualenv $SITE_PCKGS $name
|
|
popd
|
|
|
|
set +u
|
|
source /opt/stack/venvs/$name/bin/activate
|
|
set -u
|
|
|
|
if [ -e $svc_root/requirements.txt ]; then
|
|
reqs=$svc_root/requirements.txt
|
|
elif [ -e $svc_root/tools/pip-requires ]; then
|
|
reqs=$svc_root/tools/pip-requires
|
|
else
|
|
reqs=""
|
|
fi
|
|
|
|
# bug #1201253 : virtualenv-1.10.1 embeds setuptools-0.9.8, which
|
|
# doesn't manage correctly HTTPS sockets when downloading pbr from
|
|
# https://pypi.python.org/simple/ if using http_proxy and
|
|
# https_proxy envvars
|
|
pip install -U 'setuptools>=1.0'
|
|
|
|
if [ -n "$reqs" ] ; then
|
|
pip install -r $reqs
|
|
# FIXME: pip requires doesn't include MySQL-python
|
|
pip install MySQL-python
|
|
fi
|
|
|
|
pip install $svc_root
|
|
|
|
set +u
|
|
deactivate
|
|
set -u
|
|
}
|
|
|
|
|
|
function install-os-service() {
|
|
local user=$1
|
|
local repo=$(echo $2 | sed 's/github.com/review.openstack.org/')
|
|
local branch=$3
|
|
|
|
id $user || useradd $user --system -d /var/run/$user -s /bin/false
|
|
|
|
install -d -m 0750 -o $user -g $user /etc/$user
|
|
|
|
local svc_root=/opt/stack/$user
|
|
local git_dir="--git-dir $svc_root/.git"
|
|
|
|
# if the repository is an absolute local path then
|
|
# we assume its present, on the correct branch and use it
|
|
# this would be the case when the source was retrieved by
|
|
# the source-repositories element
|
|
if [ "${repo:0:1}" = "/" ] ; then
|
|
python-install $user $repo
|
|
elif [ ! -e $svc_root ]; then
|
|
git clone --depth=1 -b $branch $repo $svc_root
|
|
python-install $user $svc_root
|
|
else
|
|
if ! git $git_dir remote -v | grep $repo; then
|
|
echo "ERROR: $svc_root exists and did not come from $repo"
|
|
exit 1
|
|
fi
|
|
actual_rev=$(git $git_dir show | head -1 | awk '{print $2}')
|
|
git $git_dir checkout $branch
|
|
expected_rev=$(git $git_dir show | head -1 | awk '{print $2}')
|
|
if [ "$expected_rev" != "$actual_rev" ]; then
|
|
echo "ERROR: $repo exists and is not on rev $branch"
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
function usage() {
|
|
echo "options:"
|
|
echo " -h show usage and exit"
|
|
echo " -r service's git repo url"
|
|
echo " -b repo branch or ref (default 'master')"
|
|
echo " -u name of the service run-as user"
|
|
exit 0
|
|
}
|
|
|
|
while getopts r:u:c:n:h:b: opt; do
|
|
case "$opt" in
|
|
u) user=$OPTARG;;
|
|
h) usage;;
|
|
r) repo=$OPTARG;;
|
|
b) branch=$OPTARG;;
|
|
\?) usage;;
|
|
esac
|
|
done
|
|
|
|
branch=${branch:-master}
|
|
|
|
if [[ -z "$user" || -z "$repo" ]]; then
|
|
echo "missing required parameter"
|
|
exit 1
|
|
fi
|
|
|
|
install-packages python-dev git-core gcc libc6-dev libxml2-dev libxslt-dev libz-dev
|
|
install-os-service "$user" "$repo" "$branch"
|