Skip to content
Snippets Groups Projects
ox-installer.sh 7.1 KiB
Newer Older
benedikt.kroening's avatar
benedikt.kroening committed
#!/bin/bash
#
# Copyright (C) 2019 OX Software GmbH
# 
# This file is part of OX Automation.
#
# OX Automation is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OX Automation is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# 
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OX Automation. If not, see <http://www.gnu.org/licenses/>.
#
#
# Authors:
# Benedikt Kroening <benedikt.kroening@open-xchange.com>
#
set -e
SCRIPT_DIR="$( cd "$(dirname "$0")" ; pwd -P)"

pushd ${SCRIPT_DIR}
STARTED_AT=$(date)

# sourcing some commonly used functions and executing basic checks
source ${SCRIPT_DIR}/lib/common.bash
source ${SCRIPT_DIR}/lib/setup.bash

# sourcing the default configuration to use
# This may be overriden by some arguments below
benedikt.kroening's avatar
benedikt.kroening committed
# This config file will still be loaded to provide defaults
benedikt.kroening's avatar
benedikt.kroening committed
# exportProperties ${SCRIPT_DIR}/config/config
benedikt.kroening's avatar
benedikt.kroening committed
exportProperties ${SCRIPT_DIR}/setup/versions
benedikt.kroening's avatar
benedikt.kroening committed
if [[ -z "$CONFIG_DIR" ]] ; then
    echo "CONFIG_DIR variable is empty, fallback to ${SCRIPT_DIR}/config/config"
    export CONFIG_DIR="${SCRIPT_DIR}/config/config"
else
    echo "CONFIG_DIR variable set, using $CONFIG_DIR"
fi
exportProperties ${CONFIG_DIR}
benedikt.kroening's avatar
benedikt.kroening committed

## Help text
show_usage() {
echo -n "

This scripts lets you install a fully fledged Open-Xchange App Suite 
environment with configured database and dovecot backends.

Easiest way to get a working OX App Suite this:
    $ ./ox-installer.sh --singlenode

    Per component options (can be combined):
        --middleware    Installs middleware components
        --frontend      Installs frontnend with apache2 balancer
        --guard         not yet supported
        --documents     not yet supported
        --database      Installs mysql or mariadb server
        -d | --dovecot       Installs local only dovecot test server
benedikt.kroening's avatar
benedikt.kroening committed

    Installation types (not combineable):
benedikt.kroening's avatar
benedikt.kroening committed
        -s | --singlenode    This will install and init an basic OX instance (db, mw, fe)
benedikt.kroening's avatar
benedikt.kroening committed

    Configuration options:
        --init          This will start configuration scripts after component installation
benedikt.kroening's avatar
benedikt.kroening committed
        --config <file> Configuration file to load
benedikt.kroening's avatar
benedikt.kroening committed

Examples:

Singlenode setup with everything you need:
    $ ./ox-installer.sh --singlenode --dovecot

"
}

### reading config from command line; overriding defaults
POSITIONAL=()
while [[ $# -gt 0 ]]
do
key="$1"

case $key in
    -h|--help)
    show_usage
    exit 0
    shift
    ;;
    --debug)
    echo "WARNING: Debug flag set (--debug)"
    set -x
    shift
    ;;
    # -t|--type)
    # INSTALL_TYPE="$2"
    # shift
    # shift
    # ;;
    --middleware)
benedikt.kroening's avatar
benedikt.kroening committed
    export INSTALL_MIDDLEWARE=true
benedikt.kroening's avatar
benedikt.kroening committed
    shift
    ;;
    --frontend)
benedikt.kroening's avatar
benedikt.kroening committed
    export INSTALL_FRONTEND=true
benedikt.kroening's avatar
benedikt.kroening committed
    shift
    ;;
    --database)
benedikt.kroening's avatar
benedikt.kroening committed
    export INSTALL_DATABASE=true
benedikt.kroening's avatar
benedikt.kroening committed
    shift
    ;;
    --guard)
benedikt.kroening's avatar
benedikt.kroening committed
    export INSTALL_GUARD=true
benedikt.kroening's avatar
benedikt.kroening committed
    shift
    ;;
    --documents)
benedikt.kroening's avatar
benedikt.kroening committed
    export INSTALL_DOCUMENTS=true
benedikt.kroening's avatar
benedikt.kroening committed
    shift
    ;;
benedikt.kroening's avatar
benedikt.kroening committed
    export INSTALL_DOVECOT=true
    export OX_MAIL_HOST=localhost
    export OX_MAIL_DOMAIN=$(hostname)
    echo "WARNING: overriding OX_MAIL_HOST and OX_MAIL_DOMAIN with local only dovecot configuration!"
    sleep 3
benedikt.kroening's avatar
benedikt.kroening committed
    shift
    ;;
benedikt.kroening's avatar
benedikt.kroening committed
    export INSTALL_DATABASE=true
    export INSTALL_MIDDLEWARE=true
    export INSTALL_FRONTEND=true
benedikt.kroening's avatar
benedikt.kroening committed
    export INSTALL_TYPE=singlenode
    shift
    ;;
benedikt.kroening's avatar
benedikt.kroening committed
    # --config)
    # export CONFIG_DIR="$2"
    # exportProperties ${CONFIG_DIR}
    # shift
benedikt.kroening's avatar
benedikt.kroening committed
    # shift
    # ;;
benedikt.kroening's avatar
benedikt.kroening committed
    # --repo-guard)
    # OX_REPO_GUARD="$2"
    # echo "WARNING: Using $OX_REPO_GUARD as guard repository source"
    # shift 
    # shift 
    # ;;
    *) # unknown option
    echo "Unknonwn option: $1"
    POSITIONAL+=("$1") # save it in an array for later
    shift 
    ;;
esac
done
set -- "${POSITIONAL[@]}" # restore positional parameters

# checking if Install variables are set, if not default will be set to false
checkInstallDefaults
benedikt.kroening's avatar
benedikt.kroening committed

echo ""
benedikt.kroening's avatar
benedikt.kroening committed
echo "Setup checks done... Setup will install an OX with following components:"
benedikt.kroening's avatar
benedikt.kroening committed
echo "===   (CTRL+C to cancel)   ==="
printenv | grep "^INSTALL_"
benedikt.kroening's avatar
benedikt.kroening committed
printenv | grep "^OX_"
benedikt.kroening's avatar
benedikt.kroening committed
echo "The following versions will be used:"
printenv | grep "^AS_"
benedikt.kroening's avatar
benedikt.kroening committed
echo "===   (CTRL+C to cancel)   ==="
sleep 5

benedikt.kroening's avatar
benedikt.kroening committed
checkRootPrivileges
detectDistribution

preInstallActions 
writeRepositories
addOxBuildKey

if [ "$INSTALL_JAVA" = true ] ; then
    setup/install-java.sh
fi

benedikt.kroening's avatar
benedikt.kroening committed
if [ "$INSTALL_DATABASE" = true ] ; then
    setup/install-database.sh
fi

benedikt.kroening's avatar
benedikt.kroening committed
if [ "$INSTALL_MIDDLEWARE" = true ] ; then
    # Install OX middleware (optionally with documents enabled)
benedikt.kroening's avatar
benedikt.kroening committed
    setup/install-middleware.sh
fi

benedikt.kroening's avatar
benedikt.kroening committed
if [ "$INSTALL_FRONTEND" = true ] ; then
benedikt.kroening's avatar
benedikt.kroening committed
    # Install OX App Suite frontend 
benedikt.kroening's avatar
benedikt.kroening committed
    setup/install-frontend.sh
if [ "$INSTALL_DOCUMENTS" = true ] ; then
    if [[ "${INSTALL_TYPE}" == *"singlenode"* ]]; then
        # ensure that all components will be "force" installed if on any singlenode
        echo "Installing documents for singlenode environment ..."
        features/documents.sh --install --middleware --frontend --documents-collaboration
    else
        # let the environment variables do the selection magic 
        echo "Installing documents ..." 
        features/documents.sh --install --middleware --documents-collaboration
if [ "$INSTALL_DOCUMENTCONVERTER" = true ] ; then
    if [[ "${INSTALL_TYPE}" == *"singlenode"* ]]; then
        # ensure that all components will be "force" installed if on any singlenode
        echo "Installing documents for singlenode environment ..."
        features/documentconverter.sh --install --server --client
    else
        # let the environment variables do the selection magic 
        echo "Installing documents ..." 
        features/documentconverter.sh --install --server
    fi
fi

if [ "$INSTALL_GUARD" = true ] ; then
    if [[ "${INSTALL_TYPE}" == *"singlenode"* ]]; then
        # ensure that all components will be "force" installed if on any singlenode
        echo "Installing guard for singlenode environment ..."
        features/guard.sh --install --middlware --backend --frontend
    else
        # let the environment variables do the selection magic 
        echo "Installing guard ..." 
        features/guard.sh --install
    fi
fi 

if [ "$INSTALL_DOVECOT" = true ] ; then
    setup/install-dovecot.sh -s 
fi 

benedikt.kroening's avatar
benedikt.kroening committed
if [ "${OX_INIT}" = true ]; then
    echo "Init flag set to true... starting environment init ..."
    sleep 5

    if [ "$INSTALL_DATABASE" = true ] ; then
        config/init-database.sh
    fi

    if [ "$INSTALL_FRONTEND" = true ] ; then
        config/init-frontend.sh    
    fi
    
    if [ "$INSTALL_MIDDLEWARE" = true ] ; then
        config/init-middleware.sh 
    fi
benedikt.kroening's avatar
benedikt.kroening committed
fi

FINISHED_AT=$(date)
echo "====================================================================================="
echo "Started at:   $STARTED_AT"
echo "Finished at:  $FINISHED_AT"

popd