#!/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 # This config file will still be loaded to provide defaults # exportProperties ${SCRIPT_DIR}/config/config exportProperties ${SCRIPT_DIR}/setup/versions 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} ## 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 Configuration options: --init This will start configuration scripts after component installation (enabled by default in config) --config <file> Configuration file to load Examples: Singlenode setup with everything you need: $ ./ox-installer.sh --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 ;; --middleware) export INSTALL_MIDDLEWARE=true shift ;; --frontend) export INSTALL_FRONTEND=true shift ;; --database) export INSTALL_DATABASE=true shift ;; --guard) export INSTALL_GUARD=true shift ;; --documents) export INSTALL_DOCUMENTS=true shift ;; --documentconverter) export INSTALL_DOCUMENTCONVERTER=true shift ;; -d|--dovecot) 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 shift ;; -s|--singlenode) export INSTALL_DATABASE=true export INSTALL_MIDDLEWARE=true export INSTALL_FRONTEND=true export INSTALL_TYPE=singlenode shift ;; --config) export CONFIG_DIR="$2" exportProperties ${CONFIG_DIR} 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 echo "" echo "Setup checks done... Following environment is prepared:" echo "=== (CTRL+C to cancel) ===" printenv | grep "^DATABASE_" printenv | grep "^OX_" echo "The following versions will be used:" printenv | grep "^AS_" echo "The following components will be installed:" printenv | grep "^INSTALL_" echo "=== (CTRL+C to cancel) ===" sleep 5 checkRootPrivileges detectDistribution preInstallActions addOxBuildKey writeRepositories if [ "$INSTALL_JAVA" = true ] ; then setup/install-java.sh fi if [ "$INSTALL_DATABASE" = true ] ; then setup/install-database.sh fi if [ "$INSTALL_MIDDLEWARE" = true ] ; then # Install OX middleware (optionally with documents enabled) setup/install-middleware.sh fi if [ "$INSTALL_FRONTEND" = true ] ; then # Install OX App Suite frontend setup/install-frontend.sh fi 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 fi fi 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 fi 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 fi FINISHED_AT=$(date) echo "=====================================================================================" echo "Started at: $STARTED_AT" echo "Finished at: $FINISHED_AT" popd