Skip to content
Snippets Groups Projects
ox-installer.sh 7.46 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

    Configuration options:
        --init          This will start configuration scripts after component installation (enabled by default in config)
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 --dovecot
benedikt.kroening's avatar
benedikt.kroening committed

"
}

### 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
    ;;
    --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
    ;;
    --codecept)
    export EXECUTE_CODECEPT=true
    shift
    ;;
    --config)
    export CONFIG_DIR="$2"
    exportProperties ${CONFIG_DIR}
    shift
    shift
    ;;
benedikt.kroening's avatar
benedikt.kroening committed
    *) # 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 ""
echo "Setup checks done... Following environment is prepared:"
benedikt.kroening's avatar
benedikt.kroening committed
echo "===   (CTRL+C to cancel)   ==="
benedikt.kroening's avatar
benedikt.kroening committed
printenv | grep "^DATABASE_"
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_"
echo "The following components will be installed:"
printenv | grep "^INSTALL_"
benedikt.kroening's avatar
benedikt.kroening committed
echo "===   (CTRL+C to cancel)   ==="
sleep 5

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

preInstallActions 
addOxBuildKey
writeRepositories
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 --middleware --backend --frontend
    else
        # let the environment variables do the selection magic 
        # You may need to set GUARD_MIDDLEWARE, GUARD_BACKEND, GUARD_FRONTEND
        echo "Installing guard ..." 
        features/guard.sh --install
    fi
fi 

if [ "$INSTALL_DOVECOT" = 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/dovecot.sh --install --enable
    else
        # let the environment variables do the selection magic 
        echo "Docker/Dovecot install is currently not supported by ox-installer...." 
        exit 1
    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
if [ "${EXECUTE_CODECEPT}" = true ] ; then
    echo "Init Codecept...."
    features/codecept.sh --enable
fi

benedikt.kroening's avatar
benedikt.kroening committed
FINISHED_AT=$(date)
echo "====================================================================================="
echo "Started at:   $STARTED_AT"
echo "Finished at:  $FINISHED_AT"

popd