Merge remote-tracking branch 'upstream/master' into gerrit-submission
[osm/RO.git] / scripts / install-openmano.sh
index 624dce3..3789992 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/bash
 
 ##
-# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U.
+# Copyright 2015 Telefonica Investigacion y Desarrollo, S.A.U.
 # This file is part of openmano
 # All Rights Reserved.
 #
@@ -26,7 +26,7 @@
 #Ask for database user and password if not provided
 
 function usage(){
-    echo -e "usage: sudo $0 [OPTIONS]"
+    echo -e "usage: sudo -E $0 [OPTIONS]"
     echo -e "Install last stable source code in ./openmano and the needed packages"
     echo -e "On a Ubuntu 16.04 it configures openmano as a service"
     echo -e "  OPTIONS"
@@ -34,6 +34,11 @@ function usage(){
     echo -e "     -p PASS:    database admin password to be used or installed. Prompts if needed"
     echo -e "     -q --quiet: install in unattended mode"
     echo -e "     -h --help:  show this help"
+    echo -e "     -b REFSPEC: install from source code using a specific branch (master, v2.0, ...) or tag"
+    echo -e "                    -b master          (main RO branch)"
+    echo -e "                    -b v2.0            (v2.0 branch)"
+    echo -e "                    -b tags/v1.1.0     (a specific tag)"
+    echo -e "                    ..."
     echo -e "     --develop:  install last version for developers, and do not configure as a service"
     echo -e "     --forcedb:  reinstall mano_db DB, deleting previous database if exists and creating a new one"
     echo -e "     --updatedb: do not reinstall mano_db DB if it exists, just update database"
@@ -76,7 +81,8 @@ function ask_user(){
 }
 
 GIT_URL=https://osm.etsi.org/gerrit/osm/RO.git
-GIT_OVIM_URL=https://osm.etsi.org/gerrit/osm/openvim.git
+export GIT_OVIM_URL=https://osm.etsi.org/gerrit/osm/openvim.git
+export GIT_OSMIM_URL=https://osm.etsi.org/gerrit/osm/IM.git
 DBUSER="root"
 DBPASSWD=""
 DBPASSWD_PARAM=""
@@ -88,8 +94,9 @@ FORCE=""
 NOCLONE=""
 NO_PACKAGES=""
 NO_DB=""
+COMMIT_ID=""
 
-while getopts ":u:p:hiq-:" o; do
+while getopts ":u:p:b:hiq-:" o; do
     case "${o}" in
         u)
             export DBUSER="$OPTARG"
@@ -98,6 +105,9 @@ while getopts ":u:p:hiq-:" o; do
             export DBPASSWD="$OPTARG"
             export DBPASSWD_PARAM="-p$OPTARG"
             ;;
+        b)
+            export COMMIT_ID=${OPTARG}
+            ;;
         q)
             export QUIET_MODE=yes
             export DEBIAN_FRONTEND=noninteractive
@@ -107,7 +117,7 @@ while getopts ":u:p:hiq-:" o; do
             ;;
         -)
             [ "${OPTARG}" == "help" ] && usage && exit 0
-            [ "${OPTARG}" == "develop" ] && DEVELOP="y" && continue
+            [ "${OPTARG}" == "develop" ] && export DEVELOP="y" && continue
             [ "${OPTARG}" == "forcedb" ] && DB_FORCE_UPDATE="${DB_FORCE_UPDATE}--forcedb" && continue
             [ "${OPTARG}" == "updatedb" ] && DB_FORCE_UPDATE="${DB_FORCE_UPDATE}--updatedb" && continue
             [ "${OPTARG}" == "force" ]   &&  FORCE="y" && continue
@@ -190,6 +200,7 @@ else  #[ "$_DISTRO" != "Ubuntu" -a "$_DISTRO" != "CentOS" -a "$_DISTRO" != "Red"
         echo "Cancelled" && exit 1
 fi
 
+export _DISTRO="$_DISTRO"
 #check if installed as a service
 INSTALL_AS_A_SERVICE=""
 [[ "$_DISTRO" == "Ubuntu" ]] &&  [[ ${_RELEASE%%.*} == 16 ]] && [[ -z $DEVELOP ]] && INSTALL_AS_A_SERVICE="y"
@@ -197,14 +208,14 @@ INSTALL_AS_A_SERVICE=""
 # Next operations require knowing BASEFOLDER
 if [[ -z "$NOCLONE" ]]; then
     if [[ -n "$INSTALL_AS_A_SERVICE" ]] ; then
-        BASEFOLDER=__openmano__${RANDOM}
+        export BASEFOLDER=__openmano__${RANDOM}
     else
-        BASEFOLDER="${PWD}/openmano"
+        export BASEFOLDER="${PWD}/openmano"
     fi
     [[ -n "$FORCE" ]] && rm -rf $BASEFOLDER #make idempotent
 else
     HERE=$(dirname $(readlink -f ${BASH_SOURCE[0]}))
-    BASEFOLDER=$(dirname $HERE)
+    export BASEFOLDER=$(dirname $HERE)
 fi
 
 if [[ -z "$NO_PACKAGES" ]]
@@ -213,13 +224,14 @@ then
         "#################################################################\n"\
         "#####        UPDATE REPOSITORIES                            #####\n"\
         "#################################################################"
-    [ "$_DISTRO" == "Ubuntu" ] && apt-get update -y
+    [ "$_DISTRO" == "Ubuntu" ] && apt-get update -y &&
+        add-apt-repository -y cloud-archive:queens && apt-get update -y
 
     [ "$_DISTRO" == "CentOS" -o "$_DISTRO" == "Red" ] && yum check-update -y
-    [ "$_DISTRO" == "CentOS" ] && sudo yum install -y epel-release
+    [ "$_DISTRO" == "CentOS" ] && yum install -y epel-release
     [ "$_DISTRO" == "Red" ] && wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm \
-        && sudo rpm -ivh epel-release-7-5.noarch.rpm && sudo yum install -y epel-release && rm -f epel-release-7-5.noarch.rpm
-    [ "$_DISTRO" == "CentOS" -o "$_DISTRO" == "Red" ] && sudo yum repolist
+        && rpm -ivh epel-release-7-5.noarch.rpm && yum install -y epel-release && rm -f epel-release-7-5.noarch.rpm
+    [ "$_DISTRO" == "CentOS" -o "$_DISTRO" == "Red" ] && yum repolist
 
     echo -e "\n"\
         "#################################################################\n"\
@@ -232,17 +244,25 @@ then
         "#################################################################\n"\
         "#####        INSTALL PYTHON PACKAGES                        #####\n"\
         "#################################################################"
-    [ "$_DISTRO" == "Ubuntu" ] && install_packages "python-yaml python-bottle python-mysqldb python-jsonschema python-paramiko python-argcomplete python-requests python-logutils libxml2-dev libxslt-dev python-dev python-pip"
-    [ "$_DISTRO" == "CentOS" -o "$_DISTRO" == "Red" ] && install_packages "PyYAML MySQL-python python-jsonschema python-paramiko python-argcomplete python-requests python-logutils libxslt-devel libxml2-devel python-devel python-pip"
+    [ "$_DISTRO" == "Ubuntu" ] && install_packages "python-yaml python-bottle python-mysqldb python-jsonschema "\
+        "python-paramiko python-argcomplete python-requests python-logutils libxml2-dev libxslt-dev python-dev "\
+        "python-pip python-crypto python-networkx"
+    [ "$_DISTRO" == "CentOS" -o "$_DISTRO" == "Red" ] && install_packages "PyYAML MySQL-python python-jsonschema "\
+        "python-paramiko python-argcomplete python-requests python-logutils libxslt-devel libxml2-devel python-devel "\
+        "python-pip python-crypto python-networkx"
     # The only way to install python-bottle on Centos7 is with easy_install or pip
     [ "$_DISTRO" == "CentOS" -o "$_DISTRO" == "Red" ] && easy_install -U bottle
 
     # required for vmware connector TODO move that to separete opt in install script
-    sudo pip install --upgrade pip
-    sudo pip install pyvcloud
-    sudo pip install progressbar
-    sudo pip install prettytable
-    sudo pip install pyvmomi
+    pip2 install pip==9.0.3 || exit 1   #  --upgrade pip    install pip 10 that does not work
+    pip2 install pyvcloud==19.1.1 || exit 1
+    pip2 install progressbar || exit 1
+    pip2 install prettytable || exit 1
+    pip2 install pyvmomi || exit 1
+
+    # required for OpenNebula connector
+    pip2 install untangle || exit 1
+    pip2 install -e git+https://github.com/python-oca/python-oca#egg=oca || exit 1
 
     # required for AWS connector
     [ "$_DISTRO" == "Ubuntu" ] && install_packages "python-boto"
@@ -272,25 +292,37 @@ if [[ -z $NOCLONE ]]; then
             echo "'${BASEFOLDER}' folder exists. Use "--force" to overwrite" >&2 && exit 1
         fi
     fi
-    su $SUDO_USER -c "git clone ${GIT_URL} ${BASEFOLDER}"
-    LATEST_STABLE_TAG=`git -C "${BASEFOLDER}" tag -l v[0-9].* | tail -n1`
-    [[ -z $DEVELOP ]] && su $SUDO_USER -c "git -C ${BASEFOLDER} checkout tags/${LATEST_STABLE_TAG}"
+    su $SUDO_USER -c "git clone ${GIT_URL} ${BASEFOLDER}" || ! echo "Error cannot clone from '$GIT_URL'" >&2 || exit 1
+    if [[ -n $COMMIT_ID ]] ; then
+        echo -e "Installing osm-RO from refspec: $COMMIT_ID"
+        su $SUDO_USER -c "git -C ${BASEFOLDER} checkout $COMMIT_ID" ||
+            ! echo "Error cannot checkout '$COMMIT_ID' from '$GIT_URL'" >&2 || exit 1
+    elif [[ -z $DEVELOP ]]; then
+        LATEST_STABLE_TAG=`git -C "${BASEFOLDER}" tag -l "v[0-9]*" | sort -V | tail -n1`
+        echo -e "Installing osm-RO from refspec: tags/${LATEST_STABLE_TAG}"
+        su $SUDO_USER -c "git -C ${BASEFOLDER} checkout tags/${LATEST_STABLE_TAG}" ||
+            ! echo "Error cannot checkout 'tags/${LATEST_STABLE_TAG}' from '$GIT_URL'" >&2 || exit 1
+    else
+        echo -e "Installing osm-RO from refspec: master"
+    fi
     su $SUDO_USER -c "cp ${BASEFOLDER}/.gitignore-common ${BASEFOLDER}/.gitignore"
 fi
 
 echo -e "\n"\
     "#################################################################\n"\
-    "#####        INSTALLING OVIM LIBRARY                        #####\n"\
+    "#####        INSTALLING OSM-IM LIBRARY                      #####\n"\
     "#################################################################"
-su $SUDO_USER -c "git -C ${BASEFOLDER} clone ${GIT_OVIM_URL} openvim"
-[[ -z $DEVELOP ]] && su $SUDO_USER -c "git -C ${BASEFOLDER}/openvim checkout v2.0"
+    ${BASEFOLDER}/scripts/install-osm-im.sh
+    OSM_IM_PATH=`python -c 'import osm_im; print osm_im.__path__[0]'` ||
+        ! echo "ERROR installing python-osm-im library!!!" >&2  || exit 1
 
-# Install debian dependencies before setup.py
-[ "$_DISTRO" == "Ubuntu" ] && install_packages "libmysqlclient-dev"
-[ "$_DISTRO" == "CentOS" -o "$_DISTRO" == "Red" ] && install_packages "libmysqlclient-dev"  #TODO check if that's the name in CentOS and RedHat
-make -C ${BASEFOLDER}/openvim lite
-rm -rf "${BASEFOLDER}/openvim"
-OSMLIBOVIM_PATH=`python -c 'import lib_osm_openvim; print lib_osm_openvim.__path__[0]'`
+echo -e "\n"\
+    "#################################################################\n"\
+    "#####        INSTALLING OVIM LIBRARY                        #####\n"\
+    "#################################################################"
+    ${BASEFOLDER}/scripts/install-lib-osm-openvim.sh
+    OSMLIBOVIM_PATH=`python -c 'import lib_osm_openvim; print lib_osm_openvim.__path__[0]'` ||
+        ! echo "ERROR installing python-lib-osm-openvim library!!!" >&2  || exit 1
 
 if [ "$_DISTRO" == "CentOS" -o "$_DISTRO" == "Red" ]
 then
@@ -395,7 +427,7 @@ then
     # echo 'alias service-openmano="service openmano"' >> ${HOME}/.bashrc
     echo
     echo "Done!  installed at /opt/openmano"
-    echo " Manage server with 'sudo service osm-ro start|stop|status|...' "
+    echo " Manage server with 'sudo -E service osm-ro start|stop|status|...' "
 else
     echo
     echo "Done!  you may need to logout and login again for loading client configuration"