Skip to content
Snippets Groups Projects
ox-installer.sh 6.16 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
exportProperties ${SCRIPT_DIR}/setup/versions

## 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
    export INIT=true
    shift
    ;;
    --docker)
    export INSTALL_TYPE=docker
benedikt.kroening's avatar
benedikt.kroening committed
    export INIT=false
benedikt.kroening's avatar
benedikt.kroening committed
    shift
    ;;
benedikt.kroening's avatar
benedikt.kroening committed
    # --build-docker)
    # export INSTALL_TYPE=build_docker
    # export INIT=false
    # shift
    # ;;
benedikt.kroening's avatar
benedikt.kroening committed
    --init)
    export INIT=true
    shift
    ;;
benedikt.kroening's avatar
benedikt.kroening committed
    --config)
    exportProperties "$2"
    shift
    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 ""
echo "Setup checks done... Setup will install an OX with following modules:"
echo "===   (CTRL+C to cancel)   ==="
printenv | grep "^INSTALL_"
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
if [ -z ${INSTALL_TYPE} ]; then
    echo "No install type specified. We will see what happens ..."
benedikt.kroening's avatar
benedikt.kroening committed
fi

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
benedikt.kroening's avatar
benedikt.kroening committed
    # Install OX middleware (optionally with guard and documents enabled)
benedikt.kroening's avatar
benedikt.kroening committed
    setup/install-middleware.sh
fi

benedikt.kroening's avatar
benedikt.kroening committed
if [ "$INSTALL_DOCUMENTCONVERTER" = true ] ; then
    setup/install-documentconverter.sh
benedikt.kroening's avatar
benedikt.kroening committed
if [ "$INSTALL_FRONTEND" = true ] ; then
benedikt.kroening's avatar
benedikt.kroening committed
    # Install OX App Suite frontend (optionally with guard and documents)
benedikt.kroening's avatar
benedikt.kroening committed
    setup/install-frontend.sh

if [ "$INSTALL_GUARD" = true ] ; then
    if [[ "${INSTALL_TYPE}" == *"singlenode"* ]]; then
        # ensure that all components will be "force" installed if on 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 [ "${INIT}" = true ]; then
    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