diff options
Diffstat (limited to 'install/ishtar-install')
| -rwxr-xr-x | install/ishtar-install | 423 | 
1 files changed, 423 insertions, 0 deletions
| diff --git a/install/ishtar-install b/install/ishtar-install new file mode 100755 index 000000000..defdf7766 --- /dev/null +++ b/install/ishtar-install @@ -0,0 +1,423 @@ +#!/bin/bash + +set -e + +cecho() { +  local code="\033[" +  case "$1" in +    black  | bk) color="${code}0;30m";; +    red    |  r) color="${code}1;31m";; +    green  |  g) color="${code}1;32m";; +    yellow |  y) color="${code}1;33m";; +    blue   |  b) color="${code}1;34m";; +    purple |  p) color="${code}1;35m";; +    cyan   |  c) color="${code}1;36m";; +    gray   | gr) color="${code}0;37m";; +    *) local text="$1" +  esac +  [ -z "$text" ] && local text="$color$2${code}0m" +  echo -e "$text" +} + +command_exists() { +    command -v "$@" > /dev/null 2>&1 +} + +# Check if this is a forked Linux distro +check_forked() { +    # Check for lsb_release command existence, it usually exists in forked distros +    if command_exists lsb_release; then +        # Check if the `-u` option is supported +        set +e +        lsb_release -a -u > /dev/null 2>&1 +        lsb_release_exit_code=$? +        set -e + +        # Check if the command has exited successfully, it means we're in a forked distro +        if [ "$lsb_release_exit_code" = "0" ]; then +            # Print info about current distro +            cat <<-EOF +            You're using '$lsb_dist' version '$dist_version'. +EOF + +            # Get the upstream release info +            lsb_dist=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'id' | cut -d ':' -f 2 | tr -d '[[:space:]]') +            dist_version=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'codename' | cut -d ':' -f 2 | tr -d '[[:space:]]') + +            # Print info about upstream distro +            cat <<-EOF +            Upstream release is '$lsb_dist' version '$dist_version'. +EOF +        fi +    fi +} + +do_install() { + +    echo "" +    cecho g "*******************************************************************************" +    cecho g "++++++                      Ishtar installation script                   ++++++" +    cecho g "*******************************************************************************" +    echo "" + +    # check user +    user="$(id -un 2>/dev/null || true)" + +    sh_c='sh -c' +    if [ "$user" != 'root' ]; then +        if command_exists sudo; then +            sh_c='sudo -E sh -c' +        elif command_exists su; then +            sh_c='su -c' +        else +            cecho r "  Error: this installer needs the ability to run commands as root." +            cecho r "  We are unable to find either "sudo" or "su" available to make this happen." +            exit 1 +        fi +    fi + +    # check distribution +    lsb_dist='' +    dist_version='' +    backports_activated='' +    if command_exists lsb_release; then +        lsb_dist="$(lsb_release -si)" +    fi +    if [ -z "$lsb_dist" ] && [ -r /etc/lsb-release ]; then +        lsb_dist="$(. /etc/lsb-release && echo "$DISTRIB_ID")" +    fi +    if [ -z "$lsb_dist" ] && [ -r /etc/debian_version ]; then +        lsb_dist='debian' +    fi +    if [ -z "$lsb_dist" ] && [ -r /etc/fedora-release ]; then +        lsb_dist='fedora' +    fi +    if [ -z "$lsb_dist" ] && [ -r /etc/oracle-release ]; then +        lsb_dist='oracleserver' +    fi +    if [ -z "$lsb_dist" ]; then +        if [ -r /etc/centos-release ] || [ -r /etc/redhat-release ]; then +            lsb_dist='centos' +        fi +    fi +    if [ -z "$lsb_dist" ] && [ -r /etc/os-release ]; then +        lsb_dist="$(. /etc/os-release && echo "$ID")" +    fi + +    lsb_dist="$(echo "$lsb_dist" | tr '[:upper:]' '[:lower:]')" + +    case "$lsb_dist" in + +        ubuntu) +            if command_exists lsb_release; then +                dist_version="$(lsb_release --codename | cut -f2)" +            fi +            if [ -z "$dist_version" ] && [ -r /etc/lsb-release ]; then +                dist_version="$(. /etc/lsb-release && echo "$DISTRIB_CODENAME")" +            fi +        ;; + +        debian) +            MAINBACKS=`cat /etc/apt/sources.list | grep jessie-backports |grep -v "^#"` +            ALLBACKS='' +            if [ "$(ls -A /etc/apt/sources.list.d/)" ]; then +                ALLBACKS=`cat /etc/apt/sources.list.d/* | grep jessie-backports |grep -v "^#"` +            fi +            if [ "$ALLBACKS" != '' ] || [ "$MAINBACKS" != '' ]; then +                backports_activated='true'; +            fi +            dist_version="$(cat /etc/debian_version | sed 's/\/.*//' | sed 's/\..*//')" +            case "$dist_version" in +                8) +                    dist_version="jessie" +                ;; +                7) +                    dist_version="wheezy" +                ;; +            esac +        ;; + +        oracleserver) +            # need to switch lsb_dist to match yum repo URL +            lsb_dist="oraclelinux" +            dist_version="$(rpm -q --whatprovides redhat-release --queryformat "%{VERSION}\n" | sed 's/\/.*//' | sed 's/\..*//' | sed 's/Server*//')" +        ;; + +        fedora|centos) +            dist_version="$(rpm -q --whatprovides redhat-release --queryformat "%{VERSION}\n" | sed 's/\/.*//' | sed 's/\..*//' | sed 's/Server*//')" +        ;; + +        *) +            if command_exists lsb_release; then +                dist_version="$(lsb_release --codename | cut -f2)" +            fi +            if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then +                dist_version="$(. /etc/os-release && echo "$VERSION_ID")" +            fi +        ;; + + +    esac + +    # Check if this is a forked Linux distro +    check_forked + +    case "$lsb_dist" in +        ubuntu|debian) +            ;; +        *) +            echo "" +            cecho r " Sorry. Either your platform is not easily detectable or not supported by" +            cecho r " this installer." +            echo "" +            exit 1 +    esac + +    default_db='' +    cat >&2 <<-'EOF' + +------------------------------------------------------------------------------- +  A PostgreSQL database is needed to install Ishtar. If you do not plan to use +  a database host on another computer you need to install PostgreSQL. + +EOF +    while [ "$default_db" == '' ] +    do +        cecho y '* Default PostgreSQL host? [localhost] ' +        read choice +        if [ "$choice" == '' ]; then +            default_db='127.0.0.1' +        elif [ "$choice" == 'localhost' ]; then +            default_db='127.0.0.1' +        else +            default_db=$choice +        fi +    done + +    webserver='' +    cat >&2 <<-'EOF' + +------------------------------------------------------------------------------- +  A webserver is needed to make Ishtar available to the outside. +  Be carreful if another webserver is already configured, you'll have to serve +  your pages on a different port. + +EOF +    MSG="" +    while [ "$webserver" == '' ] +    do +        cecho y '* Which webserver do you want to use? ([nginx]/none) ' +        read choice +        case "$choice" in +            nginx ) webserver="nginx";; +            none ) webserver="none";; +            '' ) webserver="nginx";; +        esac +    done + +    version='' +    cat >&2 <<-'EOF' + +------------------------------------------------------------------------------- +  Two version are usually available for Ishtar: develop/master. Develop is the +  bleeding edge version and you can experience problems with this version. +  Master is the safest choice. + +EOF +    while [ "$version" == '' ] +    do +        cecho y "* Which version would you like to use? ([develop]/master) " +        read choice +        case "$choice" in +            develop ) version="develop";; +            master ) version="master";; +            '' ) version="develop";; +        esac +    done + +    etc_path="/etc/ishtar/" +    if [ -d "$etc_path" ]; then +        echo "" +        cecho r "ERROR: it seems that "$etc_path" already exists. If this is a remnant " +        cecho r "of an old installation please delete this path before installing." +        echo "" +        exit 1 +    fi + + +    install_path='' +    cat >&2 <<-'EOF' + +------------------------------------------------------------------------------- +  By default Ishtar base path is '/srv/'. With this base path Ishtar is +  installed in '/srv/ishtar/choosen_version/'. + +EOF +    while [ "$install_path" == '' ] +    do +        cecho y "* Which base install path for Ishtar? [/srv/]" +        read choice +        if [ -z "$choice" ]; then +            install_path='/srv' +        elif [ ! -d "$choice" ]; then +            echo 'Not a valid path.' +        else +            install_path=$choice +        fi +    done + +    full_install_path=$install_path'/ishtar/' +    if [ -d "$full_install_path" ]; then +        echo "" +        cecho r "ERROR: it seems that "$full_install_path" already exists. If this is a " +        cecho r "remnant of an old installation please delete this directory before installing." +        echo "" +        exit 1 +    fi + +    echo "" +    cecho g "*******************************************************************************" +    echo "" + +    # Run setup for each distro accordingly +    case "$lsb_dist" in +        ubuntu|debian) +            if [ "$dist_version" != "jessie" ] && [ "$dist_version" != "wheezy" ]; then +                echo "" +                cecho r " Sorry this script cannot manage your version of Debian/Ubuntu." +                echo "" +                exit 1 +            fi + +            echo "-------------------------------------------------------------------------------"; +            cecho y "Update debian packages cache"; +            echo ""; +            export DEBIAN_FRONTEND=noninteractive +            ( set -x; $sh_c 'sleep 3; apt-get update' ) +            if ! command_exists git; then +                echo "-------------------------------------------------------------------------------"; +                cecho y "Installing git..."; +                echo ""; +                ( set -x; $sh_c 'sleep 3; apt-get install -y -q git' ) +            fi +            if ! command_exists apg; then +                echo "-------------------------------------------------------------------------------"; +                cecho y "Installing apg..."; +                echo ""; +                ( set -x; $sh_c 'sleep 3; apt-get install -y -q apg' ) +            fi +            if ! command_exists pip; then +                echo "-------------------------------------------------------------------------------"; +                cecho y "Installing pip..."; +                echo ""; +                ( set -x; $sh_c 'sleep 3; apt-get install -y -q python-pip' ) +            fi +            if [ "$webserver" == 'nginx' ]; then +                echo "-------------------------------------------------------------------------------"; +                cecho y "Installing nginx and uwsgi..."; +                echo ""; +                ( set -x; $sh_c 'sleep 3; apt-get install -y -q  uwsgi uwsgi-plugin-python nginx' ) +            fi + +            if [ "$dist_version" == "wheezy" ]; then +                if [ "$default_db" == '127.0.0.1' ]; then +                    echo "-------------------------------------------------------------------------------"; +                    cecho y "Installing postgresql" +                    echo "" +                    POSTGIS=postgresql-9.1-postgis +                    ( set -x; $sh_c 'sleep 3; apt-get install -y -q postgresql '$POSTGIS ) +                fi + +                echo "-------------------------------------------------------------------------------"; +                cecho y "Installing Ishtar dependencies" +                echo ""; +                ( set -x; $sh_c 'sleep 3; apt-get install -y -q python python-django \ +          libjs-jquery libjs-jquery-ui python-pisa python-django-registration \ +          python-utidylib python-lxml python-imaging python-django-south \ +          python-psycopg2 python-gdal gettext python-unicodecsv memcached \ +          python-tidylib python-django-extra-views python-memcache python-dbf' ) + +                echo "-------------------------------------------------------------------------------"; +                cecho y "Installing BeautifulSoup4" +                echo ""; + +                ( set -x; $sh_c 'pip install BeautifulSoup4==4.3.2' ) +                echo "-------------------------------------------------------------------------------"; +                cecho y "Installing django-simple-history" +                echo ""; +                ( set -x; $sh_c 'pip install git+https://github.com/treyhunner/django-simple-history.git@0fd9b8e9c6f36b0141367b502420efe92d4e21ce' ) + +            fi + +            if [ "$dist_version" == "jessie" ]; then +                if [ "$backports_activated" != 'true' ]; then +                    echo "" +                    cecho r "  In order to install Ishtar you have to activate Debian backports." +                    echo "  To do that:" +                    echo "" +                    echo "    echo 'deb http://ftp.debian.org/debian jessie-backports main contrib non-free' >> /etc/apt/sources.list" +                    echo "" +                    cecho p "  Run again Ishtar installation script after that." +                    exit 1 +                fi + +                if [ "$default_db" == '127.0.0.1' ]; then +                    echo "-------------------------------------------------------------------------------"; +                    cecho y "Installing postgresql" +                    echo "" +                    POSTGIS=postgresql-9.4-postgis-2.3 +                    ( set -x; $sh_c 'sleep 3; apt-get install -y -q postgresql '$POSTGIS ) +                fi +                echo "-------------------------------------------------------------------------------"; +                cecho y "Installing Ishtar dependencies" +                echo ""; +                ( set -x; $sh_c 'sleep 3; apt-get install -t jessie-backports -y -q python python-django\ +                      python-django-registration' ) +                ( set -x; $sh_c 'sleep 3; apt-get install -y -q \ +                      python-pisa python-bs4 python-django-formtools\ +                      python-tidylib python-lxml python-imaging python-html5lib\ +                      python-psycopg2 python-gdal gettext python-unicodecsv memcached \ +                      python-django-extra-views python-memcache python-dbf python-markdown' ) +                echo "-------------------------------------------------------------------------------"; +                cecho y "Installing django-simple-history" +                echo ""; +                ( set -x; $sh_c 'pip install git+https://github.com/treyhunner/django-simple-history.git@1.8.2#egg=django-simple-history' ) + +            fi +            ;; + +    esac +    echo "-------------------------------------------------------------------------------"; +    cecho y "Installing Ishtar sources" +    echo ""; + +    cd $install_path +    if [ "$dist_version" == "wheezy" ]; then +        ( set -x; git clone https://nimn@gitlab.com/iggdrasil/oook_replace.git 2> /dev/null ) +    fi +    ( set -x; git clone https://gitlab.com/iggdrasil/ishtar.git 2> /dev/null ) +    cd ishtar +    git fetch 2> /dev/null +    git checkout $version 2> /dev/null + +    mkdir -p $etc_path +    echo "ISHTAR_PATH="$full_install_path > $etc_path"config" +    echo "ISHTAR_DB="$default_db >> $etc_path"config" +    echo "ISHTAR_WEBSERVER="$webserver >> $etc_path"config" +    echo "# settings added to all instances" >> $etc_path"extra_settings.py" +    echo "" +    cecho g "*******************************************************************************" +    echo ""; +    cecho g "Installation done." +    cecho g "Base configuration stored in: "$etc_path"config" +    echo "" +    echo "You can edit "$etc_path"extra_settings.py to add Django settings to all new" +    echo "instances."; +    echo ""; +    cecho y "Next you will have to create an instance with: ./ishtar-prepare-instance" +    echo ""; + +} + +do_install + | 
