Add new setup and SysV scripts
Removed SysV EL6 standalone file, removed old setup scripts Change-Id: Ib4486c11af9f90061fe93dda6f4c28a1dcc038f2
This commit is contained in:
parent
3956124935
commit
881daee16c
|
@ -2,6 +2,10 @@ Murano API README
|
|||
=====================
|
||||
Murano API is a project that provides access to engine via API.
|
||||
|
||||
INSTALL FROM SOURCE
|
||||
=====================
|
||||
Please, use setup.sh script with root user privileges for install/uninstall of the software.
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
* `Murano <http://murano.mirantis.com>`__
|
||||
|
|
|
@ -0,0 +1,379 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Common functions file
|
||||
#
|
||||
DEBUGLVL=2
|
||||
RUN_DIR=${RUN_DIR:-$(cd $(dirname "$0") && pwd)}
|
||||
LOGFILE="$RUN_DIR/install.log"
|
||||
PIPAPPS="pip python-pip pip-python"
|
||||
PIPCMD=""
|
||||
PIPARGS=""
|
||||
TRBL_FILE=""
|
||||
|
||||
if [ "$DEBUGLVL" -eq 4 ]; then
|
||||
set -x
|
||||
fi
|
||||
function log {
|
||||
if [ "$DEBUGLVL" -gt 0 ]; then
|
||||
chars=$(echo "@$" | wc -c)
|
||||
case $DEBUGLVL in
|
||||
1)
|
||||
echo -e "LOG:>$@"
|
||||
;;
|
||||
2)
|
||||
echo -e "$(date +"%m-%d-%Y %H:%M") LOG:>$@" | tee --append $LOGFILE
|
||||
;;
|
||||
3)
|
||||
echo -e "$(date +"%m-%d-%Y %H:%M") LOG:>$@" >> $LOGFILE
|
||||
;;
|
||||
4)
|
||||
echo -e "$(date +"%m-%d-%Y %H:%M") LOG:>$@" | tee --append $LOGFILE
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
function lowercase(){
|
||||
echo "$1" | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/"
|
||||
}
|
||||
function get_os(){
|
||||
KERNEL=$(uname -r)
|
||||
MACH=$(uname -m)
|
||||
OS=$(uname)
|
||||
if [ "${OS}" = "Linux" ] ; then
|
||||
if [ -f /etc/redhat-release ] ; then
|
||||
DISTRO_BASED_ON='RedHat'
|
||||
PACKAGER='yum'
|
||||
PKG_MGR='rpm'
|
||||
DIST=$(cat /etc/redhat-release |sed s/\ release.*//)
|
||||
PSUEDONAME=$(cat /etc/redhat-release | sed s/.*\(// | sed s/\)//)
|
||||
REV=$(cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//)
|
||||
elif [ -f /etc/SuSE-release ] ; then
|
||||
DISTRO_BASED_ON='SuSe'
|
||||
PACKAGER='zypper'
|
||||
PKG_MGR='rpm'
|
||||
PSUEDONAME=$(cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//)
|
||||
REV=$(cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //)
|
||||
elif [ -f /etc/debian_version ] ; then
|
||||
DISTRO_BASED_ON='Debian'
|
||||
PACKAGER='apt-get'
|
||||
PKG_MGR='dpkg'
|
||||
DIST=$(cat /etc/lsb-release | grep '^DISTRIB_ID' | awk -F= '{ print $2 }')
|
||||
PSUEDONAME=$(cat /etc/lsb-release | grep '^DISTRIB_CODENAME' | awk -F= '{ print $2 }')
|
||||
REV=$(cat /etc/lsb-release | grep '^DISTRIB_RELEASE' | awk -F= '{ print $2 }')
|
||||
fi
|
||||
if [ -f /etc/UnitedLinux-release ] ; then
|
||||
DIST="${DIST}[$(cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//)]"
|
||||
fi
|
||||
OS=$(lowercase $OS)
|
||||
DISTRO_BASED_ON=$(lowercase $DISTRO_BASED_ON)
|
||||
readonly OS
|
||||
readonly DIST
|
||||
readonly DISTRO_BASED_ON
|
||||
readonly PSUEDONAME
|
||||
readonly REV
|
||||
readonly KERNEL
|
||||
readonly MACH
|
||||
#readonly PACKAGER
|
||||
else
|
||||
OS=unknown
|
||||
readonly OS
|
||||
log "Unsupported OS:\"$OS\", sorry, exiting!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
function find_or_install()
|
||||
{
|
||||
_searching_for=$1
|
||||
_pkg_mrg_cmd=''
|
||||
_pkgr_cmd=''
|
||||
retval=0
|
||||
case $(lowercase $DISTRO_BASED_ON) in
|
||||
"debian")
|
||||
_pkg_mrg_cmd="$PKG_MGR -s $_searching_for"
|
||||
_pkgr_cmd="$PACKAGER install $_searching_for --yes"
|
||||
;;
|
||||
*)
|
||||
_pkg_mrg_cmd="$PKG_MGR -q $_searching_for"
|
||||
_pkgr_cmd="$PACKAGER install $_searching_for -y"
|
||||
;;
|
||||
esac
|
||||
$_pkg_mrg_cmd > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
log "Package \"$_searching_for\" already installed"
|
||||
retval=2
|
||||
else
|
||||
log "Installing \"$_searching_for\"..."
|
||||
$_pkgr_cmd > /dev/null 2>&1
|
||||
if [ $? -ne 0 ];then
|
||||
log "...installation fails, exiting!"
|
||||
retval=1
|
||||
else
|
||||
log "...success"
|
||||
retval=0
|
||||
fi
|
||||
fi
|
||||
return $retval
|
||||
}
|
||||
function is_py_package_installed()
|
||||
{
|
||||
retval=0
|
||||
py_pkg=$1
|
||||
found_pkg=$($PIPCMD freeze | grep -E "^$py_pkg")
|
||||
if [ $? -ne 0 ]; then
|
||||
retval=1
|
||||
fi
|
||||
echo $found_pkg
|
||||
return $retval
|
||||
}
|
||||
function genpass()
|
||||
{
|
||||
echo $(date | md5sum |head -c${5:-13})
|
||||
}
|
||||
function shslash()
|
||||
{
|
||||
echo $1 | sed 's/\//\\\//g'
|
||||
}
|
||||
function split()
|
||||
{
|
||||
# Prefix local names with the function name to try to avoid conflicts
|
||||
# local split_wordlist
|
||||
split_wordlist="$1"
|
||||
shift
|
||||
read "$@" <<EOF-split-end-of-arguments
|
||||
${split_wordlist}
|
||||
EOF-split-end-of-arguments
|
||||
}
|
||||
# Returns true if v1 >= v2, false if v1 < v2
|
||||
function version_ge()
|
||||
{
|
||||
# Prefix local names with the function name to try to avoid conflicts
|
||||
# local version_ge_1 version_ge_2 version_ge_a version_ge_b
|
||||
# local version_ge_save_ifs
|
||||
version_ge_v1="$1"
|
||||
version_ge_v2="$2"
|
||||
version_ge_save_ifs="$IFS"
|
||||
while test -n "${version_ge_v1}${version_ge_v2}"; do
|
||||
IFS="."
|
||||
split "$version_ge_v1" version_ge_a version_ge_v1
|
||||
split "$version_ge_v2" version_ge_b version_ge_v2
|
||||
IFS="$version_ge_save_ifs"
|
||||
#echo " compare $version_ge_a $version_ge_b"
|
||||
test "0$version_ge_a" -gt "0$version_ge_b" && return 0 # v1>v2: true
|
||||
test "0$version_ge_a" -lt "0$version_ge_b" && return 1 # v1<v2:false
|
||||
done
|
||||
# version strings are both empty & no differences found - must be equal.
|
||||
return 0 # v1==v2: true
|
||||
}
|
||||
function find_pip()
|
||||
{
|
||||
_pipargs=""
|
||||
pip_min_ver="1.4"
|
||||
for cmd in $PIPAPPS
|
||||
do
|
||||
_cmd=$(which $cmd 2>/dev/null)
|
||||
if [ $? -eq 0 ];then
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -z "$_cmd" ];then
|
||||
echo "Can't find \"pip\" in system, please install it first, exiting!"
|
||||
exit 1
|
||||
else
|
||||
_pip_ver=$($_cmd --version | grep -oE "[0-9]\.[0-9]" | head -n1)
|
||||
if [ -n "$_pip_ver" ]; then
|
||||
version_ge $_pip_ver $pip_min_ver
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Upgrading pip ..."
|
||||
$_cmd install --upgrade pip==$pip_min_ver
|
||||
if [ $? -ne 0 ]; then
|
||||
log "...pip upgrade fails, exiting!"
|
||||
exit 1
|
||||
else
|
||||
log "...success"
|
||||
sleep 2
|
||||
for cmd in $PIPAPPS
|
||||
do
|
||||
_cmd=$(which $cmd 2>/dev/null)
|
||||
if [ $? -eq 0 ];then
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
_pip_ver=$($_cmd --version | grep -oE "[0-9]\.[0-9]" | head -n1)
|
||||
version_ge $_pip_ver "1.5"
|
||||
if [ $? -eq 0 ]; then
|
||||
log "For future use, sorry, use pip v$pip_min_ver, exiting!"
|
||||
exit 1
|
||||
##_pipargs="--allow-unverified --allow-external"
|
||||
#_pipargs="--allow-all-external"
|
||||
#mk_dir "/root/.pip"
|
||||
#_pipcfg="/root/.pip/pip.conf"
|
||||
#if [ ! -f "$_pipcfg" ]; then
|
||||
# touch $_pipcfg
|
||||
#fi
|
||||
#iniset 'install' 'allow-all-external' 'true' "$_pipcfg"
|
||||
#iniset 'install' 'allow-all-unverified' 'true' "$_pipcfg"
|
||||
#log "Setuptools upgrade required..."
|
||||
#$cmd install setuptools --no-use-wheel --upgrade >> $LOGFILE 2>&1
|
||||
#if [ $? -ne 0 ]; then
|
||||
# log "...upgrade fails, exiting"
|
||||
# exit 1
|
||||
#else
|
||||
# log "...success"
|
||||
#fi
|
||||
fi
|
||||
log "Found pip version - $_pip_ver"
|
||||
fi
|
||||
PIPARGS=$_pipargs
|
||||
PIPCMD=$_cmd
|
||||
fi
|
||||
}
|
||||
function add_daemon_credentials()
|
||||
{
|
||||
retval=0
|
||||
daemonuser=${1:-murano}
|
||||
daemongroup=${2:-murano}
|
||||
daemonhomedir=${3:-/home/$daemonuser}
|
||||
getent group $daemongroup > /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Creating group \"$daemongroup\"..."
|
||||
groupadd -r $daemongroup
|
||||
if [ $? -eq 0 ]; then
|
||||
log "...success"
|
||||
else
|
||||
log "Can't create \"$daemongroup\", exiting!"
|
||||
retval=1
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
log "Group \"$daemongroup\" exists"
|
||||
fi
|
||||
getent passwd $daemonuser > /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Creating user \"$daemonuser\"..."
|
||||
useradd -r -g $daemongroup -G $daemongroup -d $daemonhomedir -s $(which nologin) -c "Murano Daemons" $daemonuser
|
||||
if [ $? -eq 0 ]; then
|
||||
log "...success"
|
||||
else
|
||||
log "Can't create \"$daemonuser\", exiting!"
|
||||
retval=1
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
log "User \"$daemonuser\" exists"
|
||||
fi
|
||||
return $retval
|
||||
}
|
||||
function remove_daemon_credentials()
|
||||
{
|
||||
retval=0
|
||||
daemonuser=${1:-murano}
|
||||
daemongroup=${2:-murano}
|
||||
daemonhomedir=${3:-/home/$daemonuser}
|
||||
getent passwd $daemonuser > /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
log "Deleting user \"$daemonuser\"..."
|
||||
userdel -f $daemonuser
|
||||
if [ $? -eq 0 ]; then
|
||||
if [ -d "$daemonhomedir" ]; then
|
||||
rm -rf $daemonhomedir
|
||||
fi
|
||||
log "...success"
|
||||
else
|
||||
log "Can't delete \"$daemonuser\", exiting!"
|
||||
retval=1
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
getent group $daemongroup > /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
log "Deleting group \"$daemongroup\"..."
|
||||
groupdel $daemongroup
|
||||
if [ $? -eq 0 ]; then
|
||||
log "...success"
|
||||
else
|
||||
log "Can't delete \"$daemongroup\", exiting!"
|
||||
retval=1
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
return $retval
|
||||
}
|
||||
function iniset()
|
||||
{
|
||||
local section=$1
|
||||
local option=$2
|
||||
local value=$3
|
||||
local file=$4
|
||||
local line
|
||||
|
||||
if [ -z "$section" ] ; then
|
||||
# No section name specified
|
||||
sed -i -e "s/^\($option[ \t]*=[ \t]*\).*$/\1$value/" "$file"
|
||||
else
|
||||
# Check if section already exists
|
||||
if ! grep -q "^\[$section\]" "$file" ; then
|
||||
# Add section at the end
|
||||
echo -e "\n[$section]" >>"$file"
|
||||
fi
|
||||
|
||||
# Check if parameter in the section exists
|
||||
line=$(sed -ne "/^\[$section\]/,/^\[.*\]/ { /^$option[ \t]*=/ p; }" "$file")
|
||||
if [ -z "$line" ] ; then
|
||||
# Add parameter if it is not exists
|
||||
sed -i -e "/^\[$section\]/ a\\
|
||||
$option = $value
|
||||
" "$file"
|
||||
else
|
||||
# Replace existing parameter
|
||||
sed -i -e "/^\[$section\]/,/^\[.*\]/ s|^\($option[ \t]*=[ \t]*\).*$|\1$value|" "$file"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
function mk_dir()
|
||||
{
|
||||
retval=0
|
||||
path_to_check=$1
|
||||
if [ -d "$path_to_check" ]; then
|
||||
log "Path \"$path_to_check\" already exists."
|
||||
elif [ -f "$path_to_check" ]; then
|
||||
log "Path \"path_to_check\" is an existing file, exiting!"
|
||||
exit 1
|
||||
else
|
||||
mkdir -p "$path_to_check"
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Can't create \"$path_to_check\", exiting!"
|
||||
retval=1
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
if [ $# -eq 3 ]; then
|
||||
owner_user=$2
|
||||
owner_group=$3
|
||||
chown -R $owner_user:$owner_group $path_to_check
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Can't set ownership to \"$owner_user:$owner_group\" for \"$path_to_check\", exiting!"
|
||||
retval=1
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
return $retval
|
||||
}
|
||||
function get_service_exec_path()
|
||||
{
|
||||
retval=0
|
||||
if [ -z "$SERVICE_EXEC_PATH" ]; then
|
||||
SERVICE_EXEC_PATH=$(which $DAEMON_NAME)
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Can't find \"$DAEMON_NAME\", please install the \"$SERVICE_SRV_NAME\" by running \"$(basename "$0") install\" or set variable SERVICE_EXEC_PATH=/path/to/daemon before running setup script, exiting!"
|
||||
retval=1
|
||||
fi
|
||||
else
|
||||
if [ ! -x "$SERVICE_EXEC_PATH" ]; then
|
||||
log "\"$SERVICE_EXEC_PATH\" in not executable, please install the \"$DAEMON_NAME\" or set variable SERVICE_EXEC_PATH=/path/to/daemon before running setup script, exiting!"
|
||||
retval=1
|
||||
fi
|
||||
fi
|
||||
return $retval
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
SysV init scripts
|
||||
=====================
|
||||
murano-api-redhat - for RedHat based Linux distibution
|
||||
murano-api-debian - for Debian based Linux distibution
|
|
@ -0,0 +1,104 @@
|
|||
#!/bin/sh
|
||||
# Copyright (c) 2013 Mirantis, Inc.
|
||||
#
|
||||
# Licensed 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.
|
||||
# Author: Igor Yozhikov <iyozhikov@mirantis.com>
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: murano-api
|
||||
# Required-Start: $network $local_fs $remote_fs $syslog
|
||||
# Required-Stop: $remote_fs
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: OpenStack Murano API Server
|
||||
# Description: This startup script launches murano-api service daemon.
|
||||
### END INIT INFO
|
||||
|
||||
|
||||
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
|
||||
DESC="murano-api"
|
||||
NAME=murano-api
|
||||
DAEMON=$(which murano-api)
|
||||
PIDFILE=/var/run/murano/$NAME.pid
|
||||
SCRIPTNAME=/etc/init.d/openstack-$NAME
|
||||
SYSTEM_USER=murano
|
||||
CONFIG_FILE=/etc/murano/murano-api.conf
|
||||
# Exit if the package is not installed
|
||||
[ -x $DAEMON ] || exit 5
|
||||
|
||||
# source function library
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
|
||||
|
||||
do_start()
|
||||
{
|
||||
if [ ! -d "/var/run/murano" ]; then
|
||||
mkdir -p /var/run/murano
|
||||
chown -R $SYSTEM_USER /var/run/murano
|
||||
fi
|
||||
start-stop-daemon --start --background --quiet --chuid $SYSTEM_USER:$SYSTEM_USER --make-pidfile --pidfile $PIDFILE --startas $DAEMON --test -- --config-file=$CONFIG_FILE > /dev/null || return 1
|
||||
start-stop-daemon --start --background --quiet --chuid $SYSTEM_USER:$SYSTEM_USER --make-pidfile --pidfile $PIDFILE --startas $DAEMON -- --config-file=$CONFIG_FILE || return 2
|
||||
}
|
||||
|
||||
do_stop()
|
||||
{
|
||||
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE
|
||||
RETVAL="$?"
|
||||
rm -f $PIDFILE
|
||||
return "$RETVAL"
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
log_daemon_msg "Starting $DESC" "$NAME"
|
||||
do_start
|
||||
case "$?" in
|
||||
0|1) log_end_msg 0 ;;
|
||||
2) log_end_msg 1 ;;
|
||||
esac
|
||||
;;
|
||||
stop)
|
||||
log_daemon_msg "Stopping $DESC" "$NAME"
|
||||
do_stop
|
||||
case "$?" in
|
||||
0|1) log_end_msg 0 ;;
|
||||
2) log_end_msg 1 ;;
|
||||
esac
|
||||
;;
|
||||
status)
|
||||
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
|
||||
;;
|
||||
restart|force-reload)
|
||||
log_daemon_msg "Restarting $DESC" "$NAME"
|
||||
do_stop
|
||||
case "$?" in
|
||||
0|1)
|
||||
do_start
|
||||
case "$?" in
|
||||
0) log_end_msg 0 ;;
|
||||
1) log_end_msg 1 ;; # Old process is still running
|
||||
*) log_end_msg 1 ;; # Failed to start
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
# Failed to stop
|
||||
log_end_msg 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
|
@ -15,13 +15,13 @@
|
|||
# Author: Igor Yozhikov <iyozhikov@mirantis.com>
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: murano-api
|
||||
# Provides: murano-api
|
||||
# Required-Start: $network $local_fs $remote_fs $syslog
|
||||
# Required-Stop: $remote_fs
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: OpenStack Murano API Server
|
||||
# Description: This startup script launches murano-api service daemon.
|
||||
# Description: This startup script launches murano-api service daemon.
|
||||
### END INIT INFO
|
||||
# chkconfig: 3 90 10
|
||||
# description: This startup script launches murano-api service daemon.
|
||||
|
@ -99,4 +99,4 @@ case "$1" in
|
|||
echo $"Usage: $0 {start|stop|status|restart}"
|
||||
exit 2
|
||||
esac
|
||||
exit $?
|
||||
exit $?
|
282
setup-centos.sh
282
setup-centos.sh
|
@ -1,282 +0,0 @@
|
|||
#!/bin/sh
|
||||
# Copyright (c) 2013 Mirantis, Inc.
|
||||
#
|
||||
# Licensed 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.
|
||||
#
|
||||
# CentOS script.
|
||||
|
||||
LOGLVL=1
|
||||
SERVICE_CONTENT_DIRECTORY=`cd $(dirname "$0") && pwd`
|
||||
PREREQ_PKGS="upstart wget git make python-pip python-devel mysql-connector-python libxml2-devel libxslt-devel libffi-devel"
|
||||
PIPAPPS="pip python-pip pip-python"
|
||||
PIPCMD=""
|
||||
SERVICE_SRV_NAME="murano-api"
|
||||
GIT_CLONE_DIR=`echo $SERVICE_CONTENT_DIRECTORY | sed -e "s/$SERVICE_SRV_NAME//"`
|
||||
#ETC_CFG_DIR="/etc/$SERVICE_SRV_NAME"
|
||||
ETC_CFG_DIR="/etc/murano"
|
||||
LOG_DIR="/var/log/murano/"
|
||||
DB_DIR="/var/db/murano/"
|
||||
SERVICE_CONFIG_FILE_PATH="$ETC_CFG_DIR/murano-api.conf"
|
||||
|
||||
# Functions
|
||||
# Loger function
|
||||
log()
|
||||
{
|
||||
MSG=$1
|
||||
if [ $LOGLVL -gt 0 ]; then
|
||||
echo "LOG:> $MSG"
|
||||
fi
|
||||
}
|
||||
|
||||
# Check or install package
|
||||
in_sys_pkg()
|
||||
{
|
||||
PKG=$1
|
||||
rpm -q $PKG > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
log "Package \"$PKG\" already installed"
|
||||
else
|
||||
log "Installing \"$PKG\"..."
|
||||
yum install $PKG --assumeyes > /dev/null 2>&1
|
||||
if [ $? -ne 0 ];then
|
||||
log "installation fails, exiting!!!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# find pip
|
||||
find_pip()
|
||||
{
|
||||
for cmd in $PIPAPPS
|
||||
do
|
||||
_cmd=$(which $cmd 2>/dev/null)
|
||||
if [ $? -eq 0 ];then
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -z $_cmd ];then
|
||||
echo "Can't find \"pip\" in system, please install it first, exiting!"
|
||||
exit 1
|
||||
else
|
||||
PIPCMD=$_cmd
|
||||
fi
|
||||
}
|
||||
|
||||
# git clone
|
||||
gitclone()
|
||||
{
|
||||
FROM=$1
|
||||
CLONEROOT=$2
|
||||
log "Cloning from \"$FROM\" repo to \"$CLONEROOT\""
|
||||
cd $CLONEROOT && git clone $FROM > /dev/null 2>&1
|
||||
if [ $? -ne 0 ];then
|
||||
log "cloning from \"$FROM\" fails, exiting!!!"
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
# install
|
||||
inst()
|
||||
{
|
||||
CLONE_FROM_GIT=$1
|
||||
# Checking packages
|
||||
for PKG in $PREREQ_PKGS
|
||||
do
|
||||
in_sys_pkg $PKG
|
||||
done
|
||||
# Find python pip
|
||||
find_pip
|
||||
# If clone from git set
|
||||
if [ ! -z $CLONE_FROM_GIT ]; then
|
||||
# Preparing clone root directory
|
||||
if [ ! -d $GIT_CLONE_DIR ]; then
|
||||
log "Creting $GIT_CLONE_DIR direcory..."
|
||||
mkdir -p $GIT_CLONE_DIR
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Can't create $GIT_CLONE_DIR, exiting!!!"
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
# Cloning from GIT
|
||||
GIT_WEBPATH_PRFX="https://github.com/stackforge/"
|
||||
gitclone "$GIT_WEBPATH_PRFX$SERVICE_SRV_NAME.git" $GIT_CLONE_DIR
|
||||
# End clone from git section
|
||||
fi
|
||||
|
||||
# Setupping...
|
||||
log "Running setup.py"
|
||||
MRN_CND_SPY=$SERVICE_CONTENT_DIRECTORY/setup.py
|
||||
if [ -e $MRN_CND_SPY ]; then
|
||||
chmod +x $MRN_CND_SPY
|
||||
log "$MRN_CND_SPY output:_____________________________________________________________"
|
||||
## Setup through pip
|
||||
# Creating tarball
|
||||
rm -rf $SERVICE_CONTENT_DIRECTORY/*.egg-info
|
||||
cd $SERVICE_CONTENT_DIRECTORY && python $MRN_CND_SPY egg_info
|
||||
if [ $? -ne 0 ];then
|
||||
log "\"$MRN_CND_SPY\" egg info creation FAILS, exiting!!!"
|
||||
exit 1
|
||||
fi
|
||||
rm -rf $SERVICE_CONTENT_DIRECTORY/dist/*
|
||||
cd $SERVICE_CONTENT_DIRECTORY && $MRN_CND_SPY sdist
|
||||
if [ $? -ne 0 ];then
|
||||
log "\"$MRN_CND_SPY\" tarball creation FAILS, exiting!!!"
|
||||
exit 1
|
||||
fi
|
||||
# Running tarball install
|
||||
TRBL_FILE=$(basename `ls $SERVICE_CONTENT_DIRECTORY/dist/*.tar.gz`)
|
||||
$PIPCMD install $SERVICE_CONTENT_DIRECTORY/dist/$TRBL_FILE
|
||||
if [ $? -ne 0 ];then
|
||||
log "$PIPCMD install \"$TRBL_FILE\" FAILS, exiting!!!"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
log "$MRN_CND_SPY not found!"
|
||||
fi
|
||||
# Creating etc directory for config files
|
||||
if [ ! -d $ETC_CFG_DIR ]; then
|
||||
log "Creting $ETC_CFG_DIR direcory..."
|
||||
mkdir -p $ETC_CFG_DIR
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Can't create $ETC_CFG_DIR, exiting!!!"
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
# Creating log directory for the murano
|
||||
if [ ! -d $LOG_DIR ];then
|
||||
log "Creating $LOG_DIR direcory..."
|
||||
mkdir -p $LOG_DIR
|
||||
if [ $? -ne 0 ];then
|
||||
log "Can't create $LOG_DIR, exiting!!!"
|
||||
exit 1
|
||||
fi
|
||||
chmod -R a+rw $LOG_DIR
|
||||
fi
|
||||
# making smaple configs
|
||||
log "Making sample configuration files at \"$ETC_CFG_DIR\""
|
||||
for file in `ls $SERVICE_CONTENT_DIRECTORY/etc/murano`
|
||||
do
|
||||
cp -f "$SERVICE_CONTENT_DIRECTORY/etc/murano/$file" "$ETC_CFG_DIR/$file.sample"
|
||||
done
|
||||
log "Creating $DB_DIR"
|
||||
if [ ! -d "$DB_DIR" ]; then
|
||||
mkdir -p $DB_DIR
|
||||
if [ $? -ne 0 ];then
|
||||
log "Can't create \"$DB_DIR\", exiting!!!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# searching for service executable in path
|
||||
get_service_exec_path()
|
||||
{
|
||||
if [ -z "$SERVICE_EXEC_PATH" ]; then
|
||||
SERVICE_EXEC_PATH=`which $SERVICE_SRV_NAME`
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Can't find \"$SERVICE_SRV_NAME\", please install the \"$SERVICE_SRV_NAME\" by running \"$(basename "$0") install\" or set variable SERVICE_EXEC_PATH=/path/to/daemon before running setup script, exiting!"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if [ ! -x "$SERVICE_EXEC_PATH" ]; then
|
||||
log "\"$SERVICE_EXEC_PATH\" in not executable, please install the \"$SERVICE_SRV_NAME\" or set variable SERVICE_EXEC_PATH=/path/to/daemon before running setup script, exiting!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# inject init
|
||||
injectinit()
|
||||
{
|
||||
echo "description \"$SERVICE_SRV_NAME service\"
|
||||
author \"Igor Yozhikov <iyozhikov@mirantis.com>\"
|
||||
start on runlevel [2345]
|
||||
stop on runlevel [!2345]
|
||||
respawn
|
||||
exec $SERVICE_EXEC_PATH --config-file=$SERVICE_CONFIG_FILE_PATH" > "/etc/init/$SERVICE_SRV_NAME.conf"
|
||||
log "Reloading initctl"
|
||||
initctl reload-configuration
|
||||
}
|
||||
|
||||
# purge init
|
||||
purgeinit()
|
||||
{
|
||||
rm -f /etc/init/$SERVICE_SRV_NAME.conf
|
||||
log "Reloading initctl"
|
||||
initctl reload-configuration
|
||||
}
|
||||
|
||||
# uninstall
|
||||
uninst()
|
||||
{
|
||||
# Uninstall trough pip
|
||||
find_pip
|
||||
# looking up for python package installed
|
||||
PYPKG=`echo $SERVICE_SRV_NAME | tr -d '-'`
|
||||
_pkg=$($PIPCMD freeze | grep $PYPKG)
|
||||
if [ $? -eq 0 ]; then
|
||||
log "Removing package \"$PYPKG\" with pip"
|
||||
$PIPCMD uninstall $_pkg --yes
|
||||
else
|
||||
log "Python package \"$PYPKG\" not found"
|
||||
fi
|
||||
}
|
||||
|
||||
# postinstall
|
||||
postinst()
|
||||
{
|
||||
log "Please, make proper configuration, located at \"$ETC_CFG_DIR\", before starting the \"$SERVICE_SRV_NAME\" daemon!"
|
||||
}
|
||||
# Command line args'
|
||||
COMMAND="$1"
|
||||
case $COMMAND in
|
||||
inject-init )
|
||||
get_service_exec_path
|
||||
log "Injecting \"$SERVICE_SRV_NAME\" to init..."
|
||||
injectinit
|
||||
postinst
|
||||
;;
|
||||
|
||||
install )
|
||||
inst
|
||||
get_service_exec_path
|
||||
injectinit
|
||||
postinst
|
||||
;;
|
||||
|
||||
installfromgit )
|
||||
inst "yes"
|
||||
get_service_exec_path
|
||||
injectinit
|
||||
postinst
|
||||
;;
|
||||
|
||||
purge-init )
|
||||
log "Purging \"$SERVICE_SRV_NAME\" from init..."
|
||||
stop $SERVICE_SRV_NAME
|
||||
purgeinit
|
||||
;;
|
||||
|
||||
uninstall )
|
||||
log "Uninstalling \"$SERVICE_SRV_NAME\" from system..."
|
||||
stop $SERVICE_SRV_NAME
|
||||
purgeinit
|
||||
uninst
|
||||
;;
|
||||
|
||||
* )
|
||||
echo -e "Usage: $(basename "$0") command \nCommands:\n\tinstall - Install $SERVICE_SRV_NAME software\n\tuninstall - Uninstall $SERVICE_SRV_NAME software\n\tinject-init - Add $SERVICE_SRV_NAME to the system start-up\n\tpurge-init - Remove $SERVICE_SRV_NAME from the system start-up"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
|
@ -1,5 +1,5 @@
|
|||
#!/bin/sh
|
||||
# Copyright (c) 2013 Mirantis, Inc.
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2014 Mirantis, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
|
@ -13,253 +13,311 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# Ubuntu script.
|
||||
|
||||
LOGLVL=1
|
||||
SERVICE_CONTENT_DIRECTORY=`cd $(dirname "$0") && pwd`
|
||||
PREREQ_PKGS="wget make git python-pip python-dev python-mysqldb libxml2-dev libxslt-dev libffi-dev"
|
||||
SERVICE_SRV_NAME="murano-api"
|
||||
GIT_CLONE_DIR=`echo $SERVICE_CONTENT_DIRECTORY | sed -e "s/$SERVICE_SRV_NAME//"`
|
||||
#ETC_CFG_DIR="/etc/$SERVICE_SRV_NAME"
|
||||
ETC_CFG_DIR="/etc/murano"
|
||||
LOG_DIR="/var/log/murano/"
|
||||
DB_DIR="/var/db/murano/"
|
||||
SERVICE_CONFIG_FILE_PATH="$ETC_CFG_DIR/murano-api.conf"
|
||||
|
||||
# Functions
|
||||
# Loger function
|
||||
log()
|
||||
{
|
||||
MSG=$1
|
||||
if [ $LOGLVL -gt 0 ]; then
|
||||
echo "LOG:> $MSG"
|
||||
fi
|
||||
}
|
||||
|
||||
# Check or install package
|
||||
in_sys_pkg()
|
||||
{
|
||||
PKG=$1
|
||||
dpkg -s $PKG > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
log "Package \"$PKG\" already installed"
|
||||
else
|
||||
log "Installing \"$PKG\"..."
|
||||
apt-get install $PKG --yes > /dev/null 2>&1
|
||||
if [ $? -ne 0 ];then
|
||||
log "installation fails, exiting!!!"
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# git clone
|
||||
gitclone()
|
||||
{
|
||||
FROM=$1
|
||||
CLONEROOT=$2
|
||||
log "Cloning from \"$FROM\" repo to \"$CLONEROOT\""
|
||||
cd $CLONEROOT && git clone $FROM > /dev/null 2>&1
|
||||
if [ $? -ne 0 ];then
|
||||
log "cloning from \"$FROM\" fails, exiting!!!"
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
# install
|
||||
inst()
|
||||
{
|
||||
CLONE_FROM_GIT=$1
|
||||
# Checking packages
|
||||
for PKG in $PREREQ_PKGS
|
||||
do
|
||||
in_sys_pkg $PKG
|
||||
done
|
||||
|
||||
# If clone from git set
|
||||
if [ ! -z $CLONE_FROM_GIT ]; then
|
||||
# Preparing clone root directory
|
||||
if [ ! -d $GIT_CLONE_DIR ];then
|
||||
log "Creting $GIT_CLONE_DIR direcory..."
|
||||
mkdir -p $GIT_CLONE_DIR
|
||||
if [ $? -ne 0 ];then
|
||||
log "Can't create $GIT_CLONE_DIR, exiting!!!"
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
# Cloning from GIT
|
||||
GIT_WEBPATH_PRFX="https://github.com/stackforge/"
|
||||
gitclone "$GIT_WEBPATH_PRFX$SERVICE_SRV_NAME.git" $GIT_CLONE_DIR
|
||||
# End clone from git section
|
||||
fi
|
||||
# Setupping...
|
||||
log "Running setup.py"
|
||||
MRN_CND_SPY=$SERVICE_CONTENT_DIRECTORY/setup.py
|
||||
if [ -e $MRN_CND_SPY ]; then
|
||||
chmod +x $MRN_CND_SPY
|
||||
log "$MRN_CND_SPY output:_____________________________________________________________"
|
||||
## Setup through pip
|
||||
# Creating tarball
|
||||
rm -rf $SERVICE_CONTENT_DIRECTORY/*.egg-info
|
||||
cd $SERVICE_CONTENT_DIRECTORY && python $MRN_CND_SPY egg_info
|
||||
if [ $? -ne 0 ];then
|
||||
log "\"$MRN_CND_SPY\" egg info creation FAILS, exiting!!!"
|
||||
exit 1
|
||||
fi
|
||||
rm -rf $SERVICE_CONTENT_DIRECTORY/dist/*
|
||||
cd $SERVICE_CONTENT_DIRECTORY && $MRN_CND_SPY sdist
|
||||
if [ $? -ne 0 ];then
|
||||
log "\"$MRN_CND_SPY\" tarball creation FAILS, exiting!!!"
|
||||
exit 1
|
||||
fi
|
||||
# Running tarball install
|
||||
TRBL_FILE=$(basename `ls $SERVICE_CONTENT_DIRECTORY/dist/*.tar.gz`)
|
||||
pip install $SERVICE_CONTENT_DIRECTORY/dist/$TRBL_FILE
|
||||
if [ $? -ne 0 ];then
|
||||
log "pip install \"$TRBL_FILE\" FAILS, exiting!!!"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
log "$MRN_CND_SPY not found!"
|
||||
fi
|
||||
# Creating etc directory for config files
|
||||
if [ ! -d $ETC_CFG_DIR ];then
|
||||
log "Creating $ETC_CFG_DIR direcory..."
|
||||
mkdir -p $ETC_CFG_DIR
|
||||
if [ $? -ne 0 ];then
|
||||
log "Can't create $ETC_CFG_DIR, exiting!!!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
# Creating log directory for the murano
|
||||
if [ ! -d $LOG_DIR ];then
|
||||
log "Creating $LOG_DIR direcory..."
|
||||
mkdir -p $LOG_DIR
|
||||
if [ $? -ne 0 ];then
|
||||
log "Can't create $LOG_DIR, exiting!!!"
|
||||
exit 1
|
||||
fi
|
||||
chmod -R a+rw $LOG_DIR
|
||||
fi
|
||||
log "Copy sample configuration files at \"$ETC_CFG_DIR\""
|
||||
for file in $(ls $SERVICE_CONTENT_DIRECTORY/etc/murano)
|
||||
do
|
||||
cp -f "$SERVICE_CONTENT_DIRECTORY/etc/murano/$file" "$ETC_CFG_DIR/$file"
|
||||
done
|
||||
log "Creating $DB_DIR"
|
||||
if [ ! -d "$DB_DIR" ]; then
|
||||
mkdir -p $DB_DIR
|
||||
if [ $? -ne 0 ];then
|
||||
log "Can't create \"$DB_DIR\", exiting!!!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# searching for service executable in path
|
||||
get_service_exec_path()
|
||||
{
|
||||
if [ -z "$SERVICE_EXEC_PATH" ]; then
|
||||
SERVICE_EXEC_PATH=`which $SERVICE_SRV_NAME`
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Can't find \"$SERVICE_SRV_NAME\", please install the \"$SERVICE_SRV_NAME\" by running \"$(basename "$0") install\" or set variable SERVICE_EXEC_PATH=/path/to/daemon before running setup script, exiting!"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if [ ! -x "$SERVICE_EXEC_PATH" ]; then
|
||||
log "\"$SERVICE_EXEC_PATH\" in not executable, please install the \"$SERVICE_SRV_NAME\" or set variable SERVICE_EXEC_PATH=/path/to/daemon before running setup script, exiting!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# inject init
|
||||
injectinit()
|
||||
{
|
||||
ln -s /lib/init/upstart-job /etc/init.d/$SERVICE_SRV_NAME
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Can't create symlink, please run \"$(basename "$0") purge-init\" before \"$(basename "$0") inject-init\", exiting"
|
||||
exit 1
|
||||
RUN_DIR=$(cd $(dirname "$0") && pwd)
|
||||
INC_FILE="$RUN_DIR/common.inc"
|
||||
if [ -f "$INC_FILE" ]; then
|
||||
source "$INC_FILE"
|
||||
else
|
||||
echo "Can't load \"$INC_FILE\" or file not found, exiting!"
|
||||
exit 1
|
||||
fi
|
||||
echo "description \"$SERVICE_SRV_NAME service\"
|
||||
author \"Igor Yozhikov <iyozhikov@mirantis.com>\"
|
||||
start on runlevel [2345]
|
||||
stop on runlevel [!2345]
|
||||
respawn
|
||||
exec start-stop-daemon --start --chuid root --user root --name $SERVICE_SRV_NAME --exec $SERVICE_EXEC_PATH -- --config-file=$SERVICE_CONFIG_FILE_PATH" > "/etc/init/$SERVICE_SRV_NAME.conf"
|
||||
log "Reloading initctl"
|
||||
initctl reload-configuration
|
||||
}
|
||||
#
|
||||
DAEMON_NAME="murano-api"
|
||||
DAEMON_USER="murano"
|
||||
DAEMON_GROUP="murano"
|
||||
DAEMON_CFG_DIR="/etc/murano"
|
||||
DAEMON_LOG_DIR="/var/log/murano"
|
||||
LOGFILE="/tmp/${DAEMON_NAME}_install.log"
|
||||
DAEMON_DB_CONSTR="sqlite:///$DAEMON_CFG_DIR/$DAEMON_NAME.sqlite"
|
||||
common_pkgs="wget git make gcc python-pip python-setuptools"
|
||||
# Distro-specific package namings
|
||||
debian_pkgs="python-dev python-mysqldb libxml2-dev libxslt1-dev libffi-dev mysql-client"
|
||||
redhat_pkgs="python-devel MySQL-python libxml2-devel libxslt-devel libffi-devel mysql"
|
||||
#
|
||||
get_os
|
||||
eval req_pkgs="\$$(lowercase $DISTRO_BASED_ON)_pkgs"
|
||||
REQ_PKGS="$common_pkgs $req_pkgs"
|
||||
|
||||
# purge init
|
||||
purgeinit()
|
||||
function install_prerequisites()
|
||||
{
|
||||
rm -f /etc/init.d/$SERVICE_SRV_NAME
|
||||
rm -f /etc/init/$SERVICE_SRV_NAME.conf
|
||||
log "Reloading initctl"
|
||||
initctl reload-configuration
|
||||
retval=0
|
||||
_dist=$(lowercase $DISTRO_BASED_ON)
|
||||
if [ $_dist = "redhat" ]; then
|
||||
yum repolist | grep -qoE "epel"
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Enabling EPEL6..."
|
||||
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm >> $LOGFILE 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
log "... can't enable EPEL6, exiting!"
|
||||
retval=1
|
||||
return $retval
|
||||
fi
|
||||
fi
|
||||
yum --quiet makecache
|
||||
fi
|
||||
for pack in $REQ_PKGS
|
||||
do
|
||||
find_or_install "$pack"
|
||||
if [ $? -eq 1 ]; then
|
||||
retval=1
|
||||
break
|
||||
else
|
||||
retval=0
|
||||
fi
|
||||
done
|
||||
return $retval
|
||||
}
|
||||
|
||||
# uninstall
|
||||
uninst()
|
||||
function make_tarball()
|
||||
{
|
||||
# Uninstall trough pip
|
||||
# looking up for python package installed
|
||||
PYPKG=`echo $SERVICE_SRV_NAME | tr -d '-'`
|
||||
pip freeze | grep $PYPKG
|
||||
if [ $? -eq 0 ]; then
|
||||
log "Removing package \"$PYPKG\" with pip"
|
||||
pip uninstall $PYPKG --yes
|
||||
else
|
||||
log "Python package \"$PYPKG\" not found"
|
||||
fi
|
||||
retval=0
|
||||
log "Preparing tarball package..."
|
||||
setuppy="$RUN_DIR/setup.py"
|
||||
if [ -e "$setuppy" ]; then
|
||||
chmod +x $setuppy
|
||||
rm -rf $RUN_DIR/*.egg-info
|
||||
cd $RUN_DIR && python $setuppy egg_info > /dev/null 2>&1
|
||||
if [ $? -ne 0 ];then
|
||||
log "...\"$setuppy\" egg info creation fails, exiting!!!"
|
||||
retval=1
|
||||
exit 1
|
||||
fi
|
||||
rm -rf $RUN_DIR/dist/*
|
||||
log "...\"setup.py sdist\" output will be recorded in \"$LOGFILE\""
|
||||
cd $RUN_DIR && $setuppy sdist >> $LOGFILE 2>&1
|
||||
if [ $? -ne 0 ];then
|
||||
log "...\"$setuppy\" tarball creation fails, exiting!!!"
|
||||
retval=1
|
||||
exit 1
|
||||
fi
|
||||
#TRBL_FILE=$(basename $(ls $RUN_DIR/dist/*.tar.gz | head -n 1))
|
||||
TRBL_FILE=$(ls $RUN_DIR/dist/*.tar.gz | head -n 1)
|
||||
if [ ! -e "$TRBL_FILE" ]; then
|
||||
log "...tarball not found, exiting!"
|
||||
retval=1
|
||||
else
|
||||
log "...success, tarball created as \"$TRBL_FILE\""
|
||||
retval=0
|
||||
fi
|
||||
else
|
||||
log "...\"$setuppy\" not found, exiting!"
|
||||
retval=1
|
||||
fi
|
||||
return $retval
|
||||
}
|
||||
|
||||
# postinstall
|
||||
postinst()
|
||||
function run_pip_install()
|
||||
{
|
||||
log "Please, make proper configuration, located at \"$ETC_CFG_DIR\", before starting the \"$SERVICE_SRV_NAME\" daemon!"
|
||||
find_pip
|
||||
retval=0
|
||||
tarball_file=${1:-$TRBL_FILE}
|
||||
log "Running \"$PIPCMD install $PIPARGS $tarball_file\" output will be recorded in \"$LOGFILE\""
|
||||
$PIPCMD install $PIPARGS $tarball_file >> $LOGFILE 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
log "...pip install fails, exiting!"
|
||||
retval=1
|
||||
exit 1
|
||||
fi
|
||||
return $retval
|
||||
}
|
||||
function prepare_db()
|
||||
{
|
||||
retval=0
|
||||
_dist=$(lowercase $DISTRO_BASED_ON)
|
||||
_mysql_db_name="murano_api"
|
||||
_mysql_db_user="muranoUser"
|
||||
_mysql_db_pass="$(genpass)"
|
||||
_mysql_root_pass="swordfish"
|
||||
_mysql_cmd="CREATE DATABASE IF NOT EXISTS $_mysql_db_name DEFAULT CHARACTER SET=utf8; GRANT ALL PRIVILEGES ON $_mysql_db_name.* TO '$_mysql_db_user'@'localhost' IDENTIFIED BY '$_mysql_db_pass'; GRANT ALL PRIVILEGES ON $_mysql_db_name.* TO '$_mysql_db_user'@'%' IDENTIFIED BY '$_mysql_db_pass';"
|
||||
mysql_packages="mysql-server"
|
||||
case $_dist in
|
||||
"debian")
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
;;
|
||||
esac
|
||||
log "Installing and configuring MySQL server..."
|
||||
for pack in $mysql_packages
|
||||
do
|
||||
find_or_install "$pack"
|
||||
_ret=$?
|
||||
if [ $_ret -eq 1 ]; then
|
||||
retval=1
|
||||
break
|
||||
elif [ $_ret -eq 2 ]; then
|
||||
log "MySQL server already installed, so create db manually with command like this!"
|
||||
log "$_mysql_cmd"
|
||||
break
|
||||
fi
|
||||
unset _ret
|
||||
done
|
||||
if [ -n "$DEBIAN_FRONTEND" ]; then
|
||||
unset DEBIAN_FRONTEND
|
||||
fi
|
||||
_mycfn=$(find /etc -name "my.cnf" | head -n 1)
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Can't find \"my.cfn\" under \"/etc/...\""
|
||||
retval=1
|
||||
exit 1
|
||||
fi
|
||||
iniset 'mysqld' 'bind-address' '127.0.0.1' "$_mycfn"
|
||||
iniset 'mysqld' 'port' '3306' "$_mycfn"
|
||||
case $_dist in
|
||||
"debian")
|
||||
unset DEBIAN_FRONTEND
|
||||
service mysql restart
|
||||
;;
|
||||
*)
|
||||
service mysqld restart
|
||||
;;
|
||||
esac
|
||||
mysqladmin -u root password "$_mysql_root_pass"
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Trying with default password..."
|
||||
mysqladmin -u root -p$_mysql_root_pass password "$_mysql_root_pass"
|
||||
if [ $? -ne 0 ]; then
|
||||
log "Can't set MySQL root user password, please run manually:"
|
||||
log "$_mysql_cmd"
|
||||
log "Set connection sting to \"mysql://$_mysql_db_user:$_mysql_db_pass@localhost:3306/$_mysql_db_name\" if you plan to use MySQL, sqlite will be used by default!"
|
||||
retval=1
|
||||
return $retval
|
||||
else
|
||||
log "...success, MySQL root password reset \"\$_mysql_root_pass value\""
|
||||
fi
|
||||
fi
|
||||
mysql -uroot -p$_mysql_root_pass -e "$_mysql_cmd"
|
||||
if [ $? -ne 0 ]; then
|
||||
log "DB creation fails, please run manually:"
|
||||
log "$_mysql_cmd"
|
||||
retval 1
|
||||
fi
|
||||
DAEMON_DB_CONSTR="mysql://$_mysql_db_user:$_mysql_db_pass@localhost:3306/$_mysql_db_name"
|
||||
return $retval
|
||||
}
|
||||
function inject_init()
|
||||
{
|
||||
retval=0
|
||||
_dist=$(lowercase $DISTRO_BASED_ON)
|
||||
eval src_init_sctipt="$DAEMON_NAME-$_dist"
|
||||
_initscript="openstack-$DAEMON_NAME"
|
||||
cp -f "$RUN_DIR/etc/init.d/$src_init_sctipt" "/etc/init.d/$_initscript" || retval=$?
|
||||
chmod +x "/etc/init.d/$_initscript" || retval=$?
|
||||
iniset '' 'SYSTEM_USER' "$DAEMON_USER" "/etc/init.d/$_initscript"
|
||||
iniset '' 'DAEMON' "$(shslash $SERVICE_EXEC_PATH)" "/etc/init.d/$_initscript"
|
||||
case $_dist in
|
||||
"debian")
|
||||
update-rc.d $_initscript defaults || retval=$?
|
||||
update-rc.d $_initscript enable || retval=$?
|
||||
;;
|
||||
*)
|
||||
chkconfig --add $_initscript || retval=$?
|
||||
chkconfig $_initscript on || retval=$?
|
||||
;;
|
||||
esac
|
||||
return $retval
|
||||
}
|
||||
function purge_init()
|
||||
{
|
||||
retval=0
|
||||
_dist=$(lowercase $DISTRO_BASED_ON)
|
||||
_initscript="openstack-$DAEMON_NAME"
|
||||
service $_initscript stop
|
||||
if [ $? -ne 0 ]; then
|
||||
retval=1
|
||||
fi
|
||||
case $_dist in
|
||||
"debian")
|
||||
update-rc.d $_initscript disable
|
||||
update-rc.d -f $_initscript remove || retval=$?
|
||||
;;
|
||||
*)
|
||||
chkconfig $_initscript off || retval=$?
|
||||
chkconfig --del $_initscript || retval=$?
|
||||
;;
|
||||
esac
|
||||
rm -f "/etc/init.d/$_initscript" || retval=$?
|
||||
return $retval
|
||||
}
|
||||
function run_pip_uninstall()
|
||||
{
|
||||
find_pip
|
||||
retval=0
|
||||
pack_to_del=$(is_py_package_installed "$DAEMON_NAME")
|
||||
if [ $? -eq 0 ]; then
|
||||
log "Running \"$PIPCMD uninstall $PIPARGS $DAEMON_NAME\" output will be recorded in \"$LOGFILE\""
|
||||
$PIPCMD uninstall $pack_to_del --yes >> $LOGFILE 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
log "...can't uninstall $DAEMON_NAME with $PIPCMD"
|
||||
retval=1
|
||||
else
|
||||
log "...success"
|
||||
fi
|
||||
else
|
||||
log "Python package for \"$DAEMON_NAME\" not found"
|
||||
fi
|
||||
return $retval
|
||||
}
|
||||
function install_daemon()
|
||||
{
|
||||
install_prerequisites || exit 1
|
||||
make_tarball || exit $?
|
||||
run_pip_install || exit $?
|
||||
add_daemon_credentials "$DAEMON_USER" "$DAEMON_GROUP" || exit $?
|
||||
log "Creating required directories..."
|
||||
mk_dir "$DAEMON_CFG_DIR" "$DAEMON_USER" "$DAEMON_GROUP" || exit 1
|
||||
mk_dir "$DAEMON_LOG_DIR" "$DAEMON_USER" "$DAEMON_GROUP" || exit 1
|
||||
log "Making sample configuration files at \"$DAEMON_CFG_DIR\""
|
||||
_src_conf_dir="$RUN_DIR/etc/murano"
|
||||
for file in $(ls $_src_conf_dir)
|
||||
do
|
||||
#cp -f "$_src_conf_dir/$file" "$DAEMON_CFG_DIR/$file.sample"
|
||||
cp -f "$_src_conf_dir/$file" "$DAEMON_CFG_DIR/$file"
|
||||
config_file=$_prefix$(echo $file | sed -e 's/.sample$//')
|
||||
#if [ ! -e "$DAEMON_CFG_DIR/$file" ]; then
|
||||
if [ ! -e "$DAEMON_CFG_DIR/$config_file" ]; then
|
||||
cp -f "$_src_conf_dir/$file" "$DAEMON_CFG_DIR/$config_file"
|
||||
else
|
||||
log "\"$DAEMON_CFG_DIR/$config_file\" exists, skipping copy."
|
||||
fi
|
||||
done
|
||||
log "Setting log file and sqlite db placement..."
|
||||
iniset 'DEFAULT' 'log_file' "$(shslash $DAEMON_LOG_DIR/$DAEMON_NAME.log)" "$DAEMON_CFG_DIR/$DAEMON_NAME.conf"
|
||||
iniset 'DEFAULT' 'verbose' 'True' "$DAEMON_CFG_DIR/$DAEMON_NAME.conf"
|
||||
iniset 'DEFAULT' 'debug' 'True' "$DAEMON_CFG_DIR/$DAEMON_NAME.conf"
|
||||
iniset 'database' 'connection' "$(shslash $DAEMON_DB_CONSTR)" "$DAEMON_CFG_DIR/$DAEMON_NAME.conf"
|
||||
log "Searching daemon in \$PATH..."
|
||||
get_service_exec_path || exit $?
|
||||
log "...found at \"$SERVICE_EXEC_PATH\""
|
||||
log "Installing SysV init script."
|
||||
inject_init || exit $?
|
||||
prepare_db
|
||||
if [ $? -eq 0 ]; then
|
||||
iniset 'database' 'connection' "$(shslash $DAEMON_DB_CONSTR)" "$DAEMON_CFG_DIR/$DAEMON_NAME.conf"
|
||||
log "...database configuration finished."
|
||||
fi
|
||||
log "Everything done, please, verify \"$DAEMON_CFG_DIR/$DAEMON_NAME.conf\", service created as \"openstack-murano-api\"."
|
||||
}
|
||||
function uninstall_daemon()
|
||||
{
|
||||
log "Removing SysV init script..."
|
||||
purge_init || exit $?
|
||||
remove_daemon_credentials "$DAEMON_USER" "$DAEMON_GROUP" || exit $?
|
||||
run_pip_uninstall || exit $?
|
||||
log "Software uninstalled, daemon configuration files and logs located at \"$DAEMON_CFG_DIR\" and \"$DAEMON_LOG_DIR\"."
|
||||
}
|
||||
# Command line args'
|
||||
COMMAND="$1"
|
||||
case $COMMAND in
|
||||
inject-init )
|
||||
get_service_exec_path
|
||||
log "Injecting \"$SERVICE_SRV_NAME\" to init..."
|
||||
injectinit
|
||||
postinst
|
||||
;;
|
||||
install)
|
||||
rm -rf $LOGFILE
|
||||
log "Installing \"$DAEMON_NAME\" to system..."
|
||||
install_daemon
|
||||
;;
|
||||
|
||||
install )
|
||||
inst
|
||||
get_service_exec_path
|
||||
injectinit
|
||||
postinst
|
||||
;;
|
||||
uninstall )
|
||||
log "Uninstalling \"$DAEMON_NAME\" from system..."
|
||||
uninstall_daemon
|
||||
;;
|
||||
|
||||
installfromgit )
|
||||
inst "yes"
|
||||
get_service_exec_path
|
||||
injectinit
|
||||
postinst
|
||||
;;
|
||||
|
||||
purge-init )
|
||||
log "Purging \"$SERVICE_SRV_NAME\" from init..."
|
||||
stop $SERVICE_SRV_NAME
|
||||
purgeinit
|
||||
;;
|
||||
|
||||
uninstall )
|
||||
log "Uninstalling \"$SERVICE_SRV_NAME\" from system..."
|
||||
stop $SERVICE_SRV_NAME
|
||||
purgeinit
|
||||
uninst
|
||||
;;
|
||||
|
||||
* )
|
||||
echo "Usage: $(basename "$0") command \nCommands:\n\tinstall - Install $SERVICE_SRV_NAME software\n\tuninstall - Uninstall $SERVICE_SRV_NAME software\n\tinject-init - Add $SERVICE_SRV_NAME to the system start-up\n\tpurge-init - Remove $SERVICE_SRV_NAME from the system start-up"
|
||||
exit 1
|
||||
;;
|
||||
* )
|
||||
echo -e "Usage: $(basename "$0") [command] \nCommands:\n\tinstall - Install \"$DAEMON_NAME\" software\n\tuninstall - Uninstall \"$DAEMON_NAME\" software"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
|
|
Loading…
Reference in New Issue