nextcloud/install_nextcloud.sh

6086 lines
178 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
script_name="$(basename $(realpath $0))"
working_dir="$(dirname $(realpath $0))"
conf_file="${working_dir}/conf/${script_name%%.*}.conf"
declare -a unsorted_website_arr+
declare -a website_arr
err_log="$(mktemp)"
backup_date=$(date +%Y-%m-%d-%H%M)
# =============
# --- Some functions
# =============
clean_up() {
if [[ -f "$_backup_crontab_file" ]]; then
echononl "(Re)Install previously saved crontab from '$_backup_crontab_file'.."
if [[ -n "$log_file" ]] ; then
echo "" >> $log_file
echo "# - (Re)Install previously saved crontab from '$_backup_crontab_file'" >> $log_file
echo "# -" >> $log_file
echo "crontab $_backup_crontab_file" >> $log_file
crontab $_backup_crontab_file >> $log_file 2>&1
else
crontab $_backup_crontab_file >> $err_log 2>&1
fi
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
if [[ -n "$log_file" ]] ; then
error "For more informations see log output at '$log_file'."
fi
fi
fi
# Perform program exit housekeeping
rm -f $err_log
blank_line
exit $1
}
is_number() {
return $(test ! -z "${1##*[!0-9]*}" > /dev/null 2>&1);
# - also possible
# -
#[[ ! -z "${1##*[!0-9]*}" ]] && return 0 || return 1
#return $([[ ! -z "${1##*[!0-9]*}" ]])
}
echononl(){
echo X\\c > /tmp/shprompt$$
if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then
echo -e -n " $*\\c" 1>&2
else
echo -e -n " $*" 1>&2
fi
rm /tmp/shprompt$$
}
echo_done() {
if $terminal ; then
echo -e "\033[80G[ \033[32mdone\033[m ]"
else
echo " [ done ]"
fi
}
echo_ok() {
if $terminal ; then
echo -e "\033[80G[ \033[32mok\033[m ]"
else
echo " [ ok ]"
fi
}
echo_warning() {
if $terminal ; then
echo -e "\033[80G[ \033[33m\033[1mwarn\033[m ]"
else
echo " [ warning ]"
fi
}
echo_failed(){
if $terminal ; then
echo -e "\033[80G[ \033[1;31mfailed\033[m ]"
else
echo ' [ failed! ]'
fi
}
echo_skipped() {
if $terminal ; then
echo -e "\033[80G[ \033[37mskipped\033[m ]"
else
echo " [ skipped ]"
fi
}
fatal (){
echo ""
echo ""
if $terminal ; then
echo -e " [ \033[31m\033[1mFatal\033[m ]: $*"
echo ""
echo -e " \033[31m\033[1m Script will be interrupted..\033[m\033[m"
else
echo "fatal: $*"
echo "Script will be interrupted.."
fi
clean_up 1
}
error(){
echo ""
if $terminal ; then
echo -e " [ \033[31m\033[1mFehler\033[m ]: $*"
else
echo "Error: $*"
fi
echo ""
}
warn (){
echo ""
if $terminal ; then
echo -e " [ \033[33m\033[1mWarning\033[m ]: $*"
else
echo "Warning: $*"
fi
echo ""
}
info (){
echo ""
if $terminal ; then
echo -e " [ \033[32m\033[1mInfo\033[m ]: $*"
else
echo "Info: $*"
fi
echo ""
}
detect_os_1 () {
if $(which lsb_release > /dev/null 2>&1) ; then
os_dist="$(lsb_release -i | awk '{print tolower($3)}')"
os_version="$(lsb_release -r | awk '{print tolower($2)}')"
os_codename="$(lsb_release -c | awk '{print tolower($2)}')"
if [[ "$os_dist" = "debian" ]]; then
if $(echo "$os_version" | grep -q '\.') ; then
os_version=$(echo "$os_version" | cut --delimiter='.' -f1)
fi
fi
elif [[ -e "/etc/os-release" ]]; then
. /etc/os-release
os_dist=$ID
os_version=${VERSION_ID}
fi
# remove whitespace from os_dist and os_version
os_dist="${os_dist// /}"
os_version="${os_version// /}"
}
# - Check if a given array (parameter 2) contains a given string (parameter 1)
# -
containsElement () {
local e
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
return 1
}
trim() {
local var="$*"
var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters
var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters
echo -n "$var"
}
blank_line() {
if $terminal ; then
echo ""
fi
}
# ----------
# - Jobhandling
# ----------
# - Run 'clean_up' for signals SIGHUP SIGINT SIGTERM
# -
trap clean_up SIGHUP SIGINT SIGTERM
# ----------
# - Some checks ..
# ----------
if [[ -n "$1" ]]; then
DEFAULT_WEBSITE="$1"
if [[ -n "$2" ]]; then
DEFAULT_VERSION="$2"
fi
fi
# - Running in a terminal?
# -
if [[ -t 1 ]] ; then
terminal=true
else
terminal=false
fi
# -Is systemd supported on this system?
# -
systemd_supported=false
systemd=$(which systemd)
systemctl=$(which systemctl)
if [[ -n "$systemd" ]] && [[ -n "$systemctl" ]] ; then
systemd_supported=true
fi
clear
# ----------
# Read Configurations from $conf_file
# ----------
# - Give your default values here
# -
DEFAULT_SSL_CERT_GROUP="$(stat -c "%G" /etc/ssl/private/ssl-cert-snakeoil.key)"
DEFAULT_SRC_BASE_DIR="$working_dir"
DEFAULT_ADMIN_USER="admin"
DEFAULT_WEB_DIRS_ROOT="/var/www"
DEFAULT_PHP_ENGINE="FPM"
DEFAULT_DATABASE_TYPE="mysql"
DEFAULT_DATABASE_HOST="localhost"
DEFAULT_WEBSERVER_SOFTWARE="apache2"
DEFAULT_HTTP_USER="www-data"
DEFAULT_HTTP_GROUP="www-data"
if [[ -f "$conf_file" ]]; then
source "$conf_file"
else
warn "No configuration file '$conf_file' present.\n\n Loading default values.."
fi
[[ -z "$SRC_BASE_DIR" ]] && SRC_BASE_DIR="$DEFAULT_SRC_BASE_DIR"
[[ -z "$WEB_DIRS_ROOT" ]] && WEB_DIRS_ROOT=$DEFAULT_WEB_DIRS_ROOT
[[ -z "$PHP_ENGINE" ]] && PHP_ENGINE="$DEFAULT_PHP_ENGINE"
[[ -z "$DATABASE_TYPE" ]] && DATABASE_TYPE="$DEFAULT_DATABASE_TYPE"
[[ -z "$DATABASE_HOST" ]] && DATABASE_HOST="$DEFAULT_DATABASE_HOST"
[[ -z "$ADMIN_USER" ]] && ADMIN_USER="$DEFAULT_ADMIN_USER"
[[ -z "$SSL_CERT_GROUP" ]] && SSL_CERT_GROUP="$DEFAULT_SSL_CERT_GROUP"
if [[ -z "$WEBSERVER_SOFTWARE" ]] ; then
WEBSERVER_SOFTWARE="$DEFAULT_WEBSERVER_SOFTWARE"
elif [[ "$WEBSERVER_SOFTWARE" != "apache2" ]] && [[ "$WEBSERVER_SOFTWARE" != "nginx" ]] ; then
WEBSERVER_SOFTWARE="$DEFAULT_WEBSERVER_SOFTWARE"
fi
DEFAULT_IPV4="$(ip a | grep " inet " | grep "scope global" | awk '{print$2}' | cut -d'/' -f1 | head -1 2> /dev/null)"
DEFAULT_IPV6="$(ip a | grep " inet6 " | grep "scope global" | awk '{print$2}' | cut -d'/' -f1 | head -1 2> /dev/null)"
DEFAULT_IPV4_CO="$DEFAULT_IPV4"
DEFAULT_IPV6_CO="$DEFAULT_IPV6"
# ==========
# - Begin Main Script
# ==========
# ----------
# - Headline
# ----------
if $terminal ; then
echo ""
echo -e "\033[1m----------\033[m"
echo -e "\033[32m\033[1mRunning script \033[m\033[1m$script_name\033[32m .. \033[m"
echo -e "\033[1m----------\033[m"
fi
echo ""
echo " Insert the name of the website containing the nextcloud instance .."
echo ""
if [[ -n "$WEBSITE" ]] ;then
DEFAULT_WEBSITE="$WEBSITE"
fi
WEBSITE=
if [[ -n "$DEFAULT_WEBSITE" ]]; then
echononl "\033[1mWebsite Name [${DEFAULT_WEBSITE}]:\033[m "
read WEBSITE
if [[ "X$WEBSITE" = "X" ]]; then
WEBSITE="$DEFAULT_WEBSITE"
fi
else
echononl "\033[1mWebsite Name:\033[m "
read WEBSITE
while [[ "X$WEBSITE" = "X" ]]; do
echo -e "\n \033[33m\033[1mName of website is required!\033[m\n"
echononl "\033[1mWebsite Name:\033[m "
read WEBSITE
done
fi
DEFAULT_WEB_BASE_DIR="${WEB_DIRS_ROOT}/$WEBSITE"
if [[ ! -d "${WEB_DIRS_ROOT}/$WEBSITE" ]] ; then
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert Website Base Directory."
echo ""
echo ""
if [[ -n "$DEFAULT_WEB_BASE_DIR" ]] ; then
echononl "\033[1mWebsite Base Directory [$DEFAULT_WEB_BASE_DIR]:\033[m "
read WEB_BASE_DIR
if [[ "X$WEB_BASE_DIR" = "X" ]]; then
WEB_BASE_DIR="$DEFAULT_WEB_BASE_DIR"
fi
else
WEB_BASE_DIR=
echononl "\033[1mWebsite Base Directory:\033[m "
read WEB_BASE_DIR
while [[ "X$WEB_BASE_DIR" = "X" ]] ; do
echo -e "\n \033[33m\033[1mWebsites Base Directory is required!\033[m\n"
echononl "\033[1mWebsites Base Directory:\033[m "
read WEB_BASE_DIR
done
fi
else
WEB_BASE_DIR="${WEB_DIRS_ROOT}/$WEBSITE"
fi
# - IPv4/IPv6 Address for nextclud service
# -
if [[ -n "$(dig +short "$WEBSITE" A)" ]]; then
DEFAULT_IPV4="$(dig +short "$WEBSITE" A)"
fi
if [[ -n "$(dig +short "$WEBSITE" AAAA)" ]]; then
DEFAULT_IPV6="$(dig +short "$WEBSITE" AAAA)"
fi
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert IPv4 address for Nextcloud Service.."
echo ""
echo ""
if [[ -n "$DEFAULT_IPV4" ]]; then
echononl "IPv4 address Nextcloud Service [${DEFAULT_IPV4}]: "
read IPV4
if [[ "X${IPV4}" = "X" ]]; then
IPV4=$DEFAULT_IPV4
fi
else
echononl "IPv4 address Nextcloud Service: "
read IPV4
while [[ "X$IPV4" = "X" ]] ; do
echo -e "\n \033[33m\033[1mIPv4 address Nextcloud Service is required!\033[m\n"
echononl "\033[1mIPv4 address Nextcloud Service:\033[m "
read IPV4
done
fi
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert IPv6 address for Nextcloud Service.."
echo ""
echo ""
if [[ -n "$DEFAULT_IPV6" ]]; then
echononl "IPv6 address Nextcloud Service [${DEFAULT_IPV6}]: "
read IPV6
if [[ "X${IPV6}" = "X" ]]; then
IPV6=$DEFAULT_IPV6
fi
else
echononl "IPv6 address Nextcloud Service: "
read IPV6
while [[ "X$IPV6" = "X" ]] ; do
echo -e "\n \033[33m\033[1mIPv6 address Nextcloud Service is required!\033[m\n"
echononl "\033[1mIPv6 address Nextcloud Service:\033[m "
read IPV6
done
fi
#if [[ ! -d "${WEB_BASE_DIR}" ]]; then
# fatal "Website '$WEBSITE' seems not to be existent at this server.\n\n \033[37m\033[1mCreate Website first!\033[m"
#fi
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert (new) Nextcloud version number."
echo ""
echo ""
if [[ -n "$VERSION" ]] ;then
DEFAULT_VERSION="$VERSION"
fi
VERSION=
if [[ -n "$DEFAULT_VERSION" ]]; then
echononl "\033[1mNextcloud version number [${DEFAULT_VERSION}]:\033[m "
read VERSION
if [[ "X$VERSION" = "X" ]]; then
VERSION="$DEFAULT_VERSION"
fi
else
echononl "\033[1mNextcloud version number:\033[m "
read VERSION
while [[ "X$VERSION" = "X" ]]; do
echo -e "\n \033[33m\033[1mNextcloud version number is required!\033[m\n"
echononl "\033[1mNextcloud version number:\033[m "
read VERSION
done
fi
log_dir="${SRC_BASE_DIR}/log_nextcloud-${VERSION}"
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert admin username for the new Nextcloud installation."
echo ""
echo ""
if [[ -n "$ADMIN_USER" ]] ;then
DEFAULT_ADMIN_USER="$ADMIN_USER"
fi
ADMIN_USER=
if [[ -n "$DEFAULT_ADMIN_USER" ]]; then
echononl "\033[1mAdmin user name [${DEFAULT_ADMIN_USER}]:\033[m "
read ADMIN_USER
if [[ "X$ADMIN_USER" = "X" ]]; then
ADMIN_USER="$DEFAULT_ADMIN_USER"
fi
else
echononl "\033[1mAdmin user name:\033[m "
read ADMIN_USER
while [[ "X$ADMIN_USER" = "X" ]]; do
echo -e "\n \033[33m\033[1mAdmin user name is required!\033[m\n"
echononl "\033[1mAdmin user name:\033[m "
read ADMIN_USER
done
fi
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert Password for admin user."
echo ""
echo ""
_ADMIN_PASSWD_1="X"
_ADMIN_PASSWD_2="Y"
while [[ "$_ADMIN_PASSWD_1" != "$_ADMIN_PASSWD_2" ]] ; do
echononl "\033[1mPassword for admin user:\033[m "
read -s _ADMIN_PASSWD_1
blank_line
if [[ "X$_ADMIN_PASSWD_1" = "X" ]]; then
echo -e "\n \033[33m\033[1mPassword for admin user is required!\033[m\n"
continue
fi
echononl "\033[1mRepeat password:\033[m "
read -s _ADMIN_PASSWD_2
if [[ "$_ADMIN_PASSWD_1" != "$_ADMIN_PASSWD_2" ]]; then
echo -e "\n\n \033[33m\033[1mPasswords did not match!\033[m\n"
else
ADMIN_PASS="$_ADMIN_PASSWD_1"
fi
done
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert Type of PHP engine."
echo ""
echo ""
PHP_ENGINE=
echononl "\033[1mPHP engine [$DEFAULT_PHP_ENGINE]:\033[m "
read PHP_ENGINE
if [[ "X$PHP_ENGINE" = "X" ]]; then
PHP_ENGINE="$DEFAULT_PHP_ENGINE"
fi
echononl "Determin main PHP Version.."
_php_version="$(php --version 2> /dev/null | head -1 | awk '{print$2}')"
if [[ -n "$_php_version" ]] ; then
DEFAULT_PHP_VERSION="$(echo $_php_version | cut -d '.' -f1,2)"
if [[ -n "$DEFAULT_PHP_VERSION" ]]; then
echo_ok
else
echo_failed
fi
else
echo_failed
fi
if [[ "$PHP_ENGINE" = "FPM" ]] ; then
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert PHP (Main) Version."
echo ""
echo " Examples: 7.2 or 7.3"
echo ""
PHP_VERSION=
if [[ -n "$DEFAULT_PHP_VERSION" ]] ;then
echononl "\033[1mPHP Version [${DEFAULT_PHP_VERSION}]:\033[m "
read PHP_VERSION
if [[ -z "$(trim $PHP_VERSION)" ]]; then
PHP_VERSION="$DEFAULT_PHP_VERSION"
fi
else
echononl "\033[1mPHP Version:\033[m "
read PHP_VERSION
while [[ "X$PHP_VERSION" = "X" ]] ; do
echo -e "\n \033[33m\033[1mPHP version number is required!\033[m\n"
echononl "\033[1mPHP Version:\033[m "
read PHP_VERSION
done
fi
fi
if [[ ! -d "/usr/local/php-$PHP_VERSION" ]]; then
fatal "No Installation of PHP Version $PHP_VERSION found..\n\n \033[37m\033[1mInstall PHP version $PHP_VERSION first!\033[m"
fi
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert Database type (mysql or postgres)."
echo ""
echo ""
DATABASE_TYPE=
echononl "\033[1mDatabase Type [${DEFAULT_DATABASE_TYPE}]:\033[m "
read DATABASE_TYPE
if [[ "X$DATABASE_TYPE" = "X" ]]; then
DATABASE_TYPE="$DEFAULT_DATABASE_TYPE"
fi
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert Database name."
echo ""
echo ""
if [[ -n "$DATABASE_NAME" ]] ;then
DEFAULT_DATABASE_NAME="$DATABASE_NAME"
fi
DATABASE_NAME=
if [[ -n "$DEFAULT_DATABASE_NAME" ]]; then
echononl "\033[1mDatabase Name [${DEFAULT_DATABASE_NAME}]:\033[m "
read DATABASE_NAME
if [[ "X$DATABASE_NAME" = "X" ]]; then
DATABASE_NAME="$DEFAULT_DATABASE_NAME"
fi
else
echononl "\033[1mDatabase Name:\033[m "
read DATABASE_NAME
while [[ "X$DATABASE_NAME" = "X" ]]; do
echo -e "\n \033[33m\033[1mDatabase Name is required!\033[m\n"
echononl "\033[1mDatabase Name:\033[m "
read DATABASE_NAME
done
fi
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert Database host."
echo ""
echo ""
DATABASE_HOST=
echononl "\033[1mDatabase Host [${DEFAULT_DATABASE_HOST}]\033[m "
read DATABASE_HOST
if [[ "X$DATABASE_HOST" = "X" ]]; then
DATABASE_HOST="$DEFAULT_DATABASE_HOST"
fi
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert Database user."
echo ""
echo ""
if [[ -n "$DATABASE_USER" ]] ;then
DEFAULT_DATABASE_USER="$DATABASE_USER"
fi
DATABASE_USER=
if [[ -n "$DEFAULT_DATABASE_USER" ]]; then
echononl "\033[1mDatabase User [${DEFAULT_DATABASE_USER}]:\033[m "
read DATABASE_USER
if [[ "X$DATABASE_USER" = "X" ]]; then
DATABASE_USER="$DEFAULT_DATABASE_USER"
fi
else
echononl "\033[1mDatabase User:\033[m "
read DATABASE_USER
while [[ "X$DATABASE_USER" = "X" ]]; do
echo -e "\n \033[33m\033[1mDatabase User is required!\033[m\n"
echononl "\033[1mDatabase User:\033[m "
read DATABASE_USER
done
fi
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert Database password."
echo ""
echo ""
if [[ -n "$DATABASE_PASS" ]] ;then
DEFAULT_DATABASE_PASS="$DATABASE_PASS"
fi
DATABASE_PASS=
if [[ -n "$DEFAULT_DATABASE_PASS" ]]; then
echononl "\033[1mDatabase Password [${DEFAULT_DATABASE_PASS}]:\033[m "
read DATABASE_PASS
if [[ "X$DATABASE_PASS" = "X" ]]; then
DATABASE_PASS="$DEFAULT_DATABASE_PASS"
fi
else
echononl "\033[1mDatabase Password:\033[m "
read DATABASE_PASS
while [[ "X$DATABASE_PASS" = "X" ]]; do
echo -e "\n \033[33m\033[1mDatabase Password is required!\033[m\n"
echononl "\033[1mDatabase Password:\033[m "
read DATABASE_PASS
done
fi
# - Install redis-service?
# -
INSTALL_REDIS_SERVICE=false
REDIS_SERVICE_INSTALLED=false
declare -a dpkg_pkg_redis=()
check_package="redis-server"
if ! $(dpkg -l "$check_package" 2> /devnull | grep -q -E "^ii\s+${check_package}\s+" 2>/dev/null) ; then
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " redis service seems not to be installed."
echo ""
echo ""
echononl "Install redis service [yes/no]: "
read OK
while [[ "${OK,,}" != "yes" ]] && [[ "${OK,,}" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
if [[ ${OK,,} = "yes" ]] ; then
INSTALL_REDIS_SERVICE=true
dpkg_pkg_redis+=("redis-server")
dpkg_pkg_redis+=("redis-tools")
else
INSTALL_REDIS_SERVICE=false
fi
else
REDIS_SERVICE_INSTALLED=true
fi
# - Install ColaboraOnline?
# -
INSTALL_COLABORA_SERVICE=false
COLABORA_SERVICE_INSTALLED=false
# - Detect Detect OS distribution and Version
# -
echo ""
echo -e " \033[32m--\033[m"
echo ""
echononl "Detect OS distribution and Version"
detect_os_1 > /dev/null 2>&1
if [[ $? -gt 0 ]] ; then
echo_failed
else
echo_ok
fi
if [[ "${os_dist,,}" = "debian" ]] ; then
declare -a dpkg_pkg_colabora_online=()
check_package="coolwsd"
if ! $(dpkg -l "$check_package" 2> /devnull | grep -q -E "^ii\s+${check_package}\s+" 2>/dev/null) ; then
echo ""
echo " ColaboraOnline service seems not to be installed."
echo ""
echo ""
echononl "Install ColaboraOnline service [yes/no]: "
read OK
while [[ "${OK,,}" != "yes" ]] && [[ "${OK,,}" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
if [[ ${OK,,} = "yes" ]] ; then
INSTALL_COLABORA_SERVICE=true
dpkg_pkg_colabora_online+=("coolwsd")
dpkg_pkg_colabora_online+=("code-brand")
dpkg_pkg_colabora_online+=("collaboraofficebasis-de")
dpkg_pkg_colabora_online+=("apparmor")
else
INSTALL_COLABORA_SERVICE=false
fi
else
COLABORA_SERVICE_INSTALLED=true
fi
fi
# - More information is needed if ColaboraOnline service is to be installed
# -
if $INSTALL_COLABORA_SERVICE || $COLABORA_SERVICE_INSTALLED ; then
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert hostname for ColaboraOnline Service.."
echo ""
echo ""
HOSTNAME_CO=
echononl "\033[1mHostname for ColaboraOnline Service:\033[m "
read HOSTNAME_CO
while [[ "X$HOSTNAME_CO" = "X" ]] ; do
echo -e "\n \033[33m\033[1mHostname for ColaboraOnline Service is required!\033[m\n"
echononl "\033[1mHostname for ColaboraOnline Service:\033[m "
read HOSTNAME_CO
done
WOPI_URL="https://$HOSTNAME_CO"
fi
if $INSTALL_COLABORA_SERVICE ; then
if [[ -n "$(dig +short "$HOSTNAME_CO" A)" ]]; then
DEFAULT_IPV4_CO="$(dig +short "$HOSTNAME_CO" A)"
fi
if [[ -n "$(dig +short "$HOSTNAME_CO" AAAA)" ]]; then
DEFAULT_IPV6_CO="$(dig +short "$HOSTNAME_CO" AAAA)"
fi
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert IPv4 address for ColaboraOnline Service.."
echo ""
echo ""
if [[ -n "$DEFAULT_IPV4_CO" ]]; then
echononl "IPv4 address ColaboraOnline Service [${DEFAULT_IPV4_CO}]: "
read IPV4_CO
if [[ "X${IPV4_CO}" = "X" ]]; then
IPV4_CO=$DEFAULT_IPV4_CO
fi
else
echononl "IPv4 address ColaboraOnline Service: "
read IPV4_CO
while [[ "X$IPV4_CO" = "X" ]] ; do
echo -e "\n \033[33m\033[1mIPv4 address ColaboraOnline Service is required!\033[m\n"
echononl "\033[1mIPv4 address ColaboraOnline Service:\033[m "
read IPV4_CO
done
fi
echo ""
echo -e " \033[32m--\033[m"
echo ""
echo " Insert IPv6 address for ColaboraOnline Service.."
echo ""
echo ""
if [[ -n "$DEFAULT_IPV6_CO" ]]; then
echononl "IPv6 address ColaboraOnline Service [${DEFAULT_IPV6_CO}]: "
read IPV6_CO
if [[ "X${IPV6_CO}" = "X" ]]; then
IPV6_CO=$DEFAULT_IPV6_CO
fi
else
echononl "IPv6 address ColaboraOnline Service: "
read IPV6_CO
while [[ "X$IPV6_CO" = "X" ]] ; do
echo -e "\n \033[33m\033[1mIPv6 address ColaboraOnline Service is required!\033[m\n"
echononl "\033[1mIPv6 address ColaboraOnline Service:\033[m "
read IPV6_CO
done
fi
fi
_WEBSERVER_SOFTWARE="$WEBSERVER_SOFTWARE"
WEBSERVER_SOFTWARE=""
_default_val=""
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo " Which Webserver is installed?"
echo ""
echo ""
if [[ "$_WEBSERVER_SOFTWARE" = "apache2" ]] ; then
echo -e " \033[37m\033[1m[1] Apache2\033[m"
echo " [2] Nginx"
_default_val="apache2"
else
echo " [1] Apache2"
echo -e " \033[37m\033[1m[2] Nginx\033[m"
_default_val="nginx"
fi
echo ""
echononl "Choose a number or press <RETURN> for highlighted value: "
while [[ "$WEBSERVER_SOFTWARE" != "apache2" && "$WEBSERVER_SOFTWARE" != "nginx" ]] ; do
read OPTION
case $OPTION in
1) WEBSERVER_SOFTWARE="apache2"
;;
2) WEBSERVER_SOFTWARE="nginx"
;;
'') WEBSERVER_SOFTWARE="$_default_val"
;;
*) WEBSERVER_SOFTWARE=""
echo ""
echo -e "\tWrong entry! [ 1 = Apache2 ; 2 = Nginx ] or type <RETURN>"
echo ""
echononl " Reentry: "
;;
esac
done
apache2_installed=false
nginx_installed=false
if [[ "$WEBSERVER_SOFTWARE" = "apache2" ]] ; then
apache2_installed=true
else
nginx_installed=true
fi
# ----------
# Some checks
# ----------
# - Determin PHP binary
# -
php_binary="$(realpath "$(which php)")"
if [[ -z "$php_binary" ]]; then
if [[ -x "/usr/local/php/bin/php" ]]; then
php_binary="/usr/local/php/bin/php"
else
fatal "No PHP binary present"
fi
else
if [[ ! -x "$php_binary" ]]; then
fatal "Found PHP binary '$php_binary', but this file is not executable!"
fi
fi
if $apache2_installed ; then
# - Determin user/group of the webserver
# -
httpd_binary="$(which httpd)"
if [ -z "$httpd_binary" ]; then
httpd_binary="$(ps -axu | grep httpd | grep -e "^root" | grep -v grep | awk '{print$11}')"
if [ -z "$httpd_binary" ]; then
if [ -x "/usr/local/apache2/bin/httpd" ]; then
httpd_binary="/usr/local/apache2/bin/httpd"
fi
fi
fi
if [ -x "$httpd_binary" ];then
# - Determin websever user
# -
_HTTP_USER="`$httpd_binary -t -D DUMP_RUN_CFG | grep -i -e "^User" | awk '{print$2}' | cut -d\"=\" -f2 | tr -d '"'`"
_HTTP_GROUP="`$httpd_binary -t -D DUMP_RUN_CFG | grep -i -e "^Group" | awk '{print$2}' | cut -d\"=\" -f2 | tr -d '"'`"
# - Is webserver running ?
# -
PID=$(ps aux | grep "$(realpath $httpd_binary)" | grep -e "^root" | grep -v grep | awk '{print$2}')
if [[ "X${PID}X" = "XX" ]] ;then
IS_HTTPD_RUNNING=false
else
IS_HTTPD_RUNNING=true
fi
fi
if [[ -n "$_HTTP_USER" ]] ; then
if [[ -n "$HTTP_USER" ]] && [[ "$_HTTP_USER" != "$HTTP_USER" ]]; then
warn "The script has determined \033[1;37m${_HTTP_USER}\033[m as Webservers user. This\n value differs from the value given in your configuration file, \n which is \033[1;37m${HTTP_USER}\033[m and takes precedence."
else
HTTP_USER=$_HTTP_USER
fi
else
[[ -n "$HTTP_USER" ]] || HTTP_USER=$DEFAULT_HTTP_USER
fi
if [[ -n "$_HTTP_GROUP" ]] ; then
if [[ -n "$HTTP_GROUP" ]] && [[ "$_HTTP_GROUP" != "$HTTP_GROUP" ]]; then
warn "The script has determined \033[1;37m${_HTTP_GROUP}\033[m as Webservers group. This\n value differs from the value given in your configuration file, \n which is \033[1;37m${HTTP_GROUP}\033[m and takes precedence."
else
HTTP_GROUP=$_HTTP_GROUP
fi
else
[[ -n "$HTTP_GROUP" ]] || HTTP_GROUP=$DEFAULT_HTTP_GROUP
fi
# - Determin ServerRoot Directory
# -
apache_base_dir=`$_httpd_binary -t -D DUMP_RUN_CFG | grep ServerRoot | awk '{print$2}' | tr -d '"'`
if [ "`realpath /usr/local/apache2`" = "$apache_base_dir" ]; then
apache_base_dir="/usr/local/apache2"
_apache_base_dir_realpath="`realpath $apache_base_dir`"
elif [ -z "$apache_base_dir" ]; then
if [ -d "`realpath /usr/local/apache2`" ];then
apache_base_dir="/usr/local/apache2"
_apache_base_dir_realpath="`realpath $apache_base_dir`"
fi
else
_apache_base_dir_realpath=$apache_base_dir
fi
if [[ ! -d "${_apache_base_dir_realpath}/conf/vhosts" ]] ; then
warn "No Apache VHost directory found."
apache_vhost_dir=""
else
apache_vhost_dir="${_apache_base_dir_realpath}/conf/vhosts"
fi
else
#if [[ -z "$(which nginx)" ]] ; then
# fatal "Nginx service binary not found"
#fi
[[ -z "$HTTP_USER" ]] && HTTP_USER="$DEFAULT_HTTP_USER"
[[ -z "$HTTP_GROUP" ]] && HTTP_GROUP="$DEFAULT_HTTP_GROUP"
nginx_vhost_dir="/etc/nginx/sites-available"
nginx_vhost_enabled_dir="/etc/nginx/sites-enabled"
fi
DATA_DIR=${WEB_BASE_DIR}/data
INSTALL_DIR=${WEB_BASE_DIR}/nextcloud-${VERSION}
echo ""
echo ""
echo -e "\033[32m--\033[m"
echo -e "\033[1;32mStarting Nextcloud Installation for \033[1;37m${WEBSITE}\033[m"
echo -e "\033[32m--\033[m"
echo ""
echo " Nextcloud verion.....................: $VERSION"
echo " Nextcloud installation directory.....: $INSTALL_DIR"
echo " Nextcloud data directory.............: $DATA_DIR"
echo ""
echo " Admin user name......................: $ADMIN_USER"
echo " Passord for admin user...............: $ADMIN_PASS"
echo ""
echo " Website..............................: $WEBSITE"
echo " IPv4 Address Nextcloud Service.......: $IPV4"
echo " IPv6 Address Nextcloud Service.......: $IPV6"
echo ""
echo " Web base directory...................: $WEB_BASE_DIR"
echo ""
echo " Source directory for source archiv...: $SRC_BASE_DIR"
echo ""
if $apache2_installed ; then
echo " Webserver Type.......................: Apache2"
echo " Apache Vhost Directory...............: $apache_vhost_dir"
elif $nginx_installed ; then
echo " Webserver Type.......................: Nginx"
echo " Nginx VHost directory................: $nginx_vhost_dir"
else
fatal "Webserver Type (apache2 or nginx) not given"
fi
echo " Webserver user.......................: $HTTP_USER"
echo " Webserver group......................: $HTTP_GROUP"
echo ""
echo " PHP version..........................: $PHP_VERSION"
echo " PHP Engine...........................: $PHP_ENGINE"
echo ""
echo " Databse name.........................: $DATABASE_NAME"
echo " Database type........................: $DATABASE_TYPE"
echo " Database user........................: $DATABASE_USER"
echo " Database password....................: $DATABASE_PASS"
echo ""
echo -e " Install redis service?...............: \033[33m${INSTALL_REDIS_SERVICE}\033[m"
echo -e " Install ColaboraOnline service.......: \033[33m${INSTALL_COLABORA_SERVICE}\033[m"
if $INSTALL_COLABORA_SERVICE ; then
echo " Hostname ColaboraOnline Service...: $HOSTNAME_CO"
echo " IPv4 ColaboraOnline Service.......: $IPV4_CO"
echo " IPv6 ColaboraOnline Service.......: $IPV6_CO"
echo " Group of os installed certs.......: $SSL_CERT_GROUP"
elif $COLABORA_SERVICE_INSTALLED ; then
echo ""
echo " Hostname ColaboraOnline Service......: $HOSTNAME_CO"
fi
echo ""
echo ""
echo ""
echo -n " Type upper case 'YES' to continue executing with this parameters: "
read OK
if [[ "$OK" = "YES" ]] ; then
echo ""
echo ""
echo -e "\033[1;32mGoing to install \033[1;37mNextcloud $VERSION\033[1;32m at \033[1;37m$(hostname -f)\033[m"
echo ""
else
fatal "Abort by user request - Answer as not 'YES'"
fi
echo ""
# - Create log directory"
# -
if [[ -d "${log_dir}" ]] ; then
echononl "Backup existent log directory .."
mv "${log_dir}" "${log_dir}.$backup_date"
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
fatal "Cannot backup log directory '${log_dir}'!"
fi
fi
echononl "Create log directory '${log_dir}' .."
mkdir "${log_dir}" > /dev/null 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
fatal "Cannot create log directory '${log_dir}'!"
fi
log_file="${log_dir}/main.log"
:> $log_file
echo "# - Starte Nextcloud Installation mit folgenden Parametern:" >> ${log_dir}/main.log
echo "# -" >> $log_file
echo "# - Nextcloud verion.....................: $VERSION" >> $log_file
echo "# - Nextcloud installation directory.....: $INSTALL_DIR" >> $log_file
echo "# - Nextcloud data directory.............: $DATA_DIR" >> $log_file
echo "# -" >> $log_file
echo "# - Admin user name......................: $ADMIN_USER" >> $log_file
echo "# - Passord for admin user...............: $ADMIN_PASS" >> $log_file
echo "# -" >> $log_file
echo "# - Website..............................: $WEBSITE" >> $log_file
echo "# - IPv4 Address Nextcloud Service.......: $IPV4" >> $log_file
echo "# - IPv6 Address Nextcloud Service.......: $IPV6" >> $log_file
echo "# -" >> $log_file
echo "# - Web base directory...................: $WEB_BASE_DIR" >> $log_file
echo "# -" >> $log_file
echo "# - Source directory for source archiv...: $SRC_BASE_DIR" >> $log_file
if $apache2_installed ; then
echo "# - Webserver Type.......................: Apache2" >> $log_file
echo " # -Apache Vhost Directory...............: $apache_vhost_dir" >> $log_file
elif $nginx_installed ; then
echo "# - Webserver Type.......................: Nginx" >> $log_file
echo "# - Nginx VHost directory................: $nginx_vhost_dir" >> $log_file
fi
echo "# -" >> $log_file
echo "# - Webserver user.......................: $HTTP_USER" >> $log_file
echo "# - Webserver group......................: $HTTP_GROUP" >> $log_file
echo "# -" >> $log_file
echo "# - PHP version..........................: $PHP_VERSION" >> $log_file
echo "# - PHP Engine...........................: $PHP_ENGINE" >> $log_file
echo "# -" >> $log_file
echo "# - Databse name.........................: $DATABASE_NAME" >> $log_file
echo "# - Database type........................: $DATABASE_TYPE" >> $log_file
echo "# - Database user........................: $DATABASE_USER" >> $log_file
echo "# - Database password....................: $DATABASE_PASS" >> $log_file
echo "# -" >> $log_file
echo "# - Install redis service?...............: $INSTALL_REDIS_SERVICE" >> $log_file
echo "# - Install ColaboraOnline service.......: $INSTALL_COLABORA_SERVICE" >> $log_file
if $INSTALL_COLABORA_SERVICE ; then
echo "# - Hostname ColaboraOnline Service...: $HOSTNAME_CO" >> $log_file
echo "# - IPv4 ColaboraOnline Service.......: $IPV4_CO" >> $log_file
echo "# - IPv6 ColaboraOnline Service.......: $IPV6_CO" >> $log_file
echo "# - Group of os installed certs.......: $SSL_CERT_GROUP" >> $log_file
elif $COLABORA_SERVICE_INSTALLED ; then
echo "# - Hostname ColaboraOnline Service...: $HOSTNAME_CO" >> $log_file
fi
echo "" >> $log_file
echo "" >> $log_file
echo "VERSION=$VERSION" >> $log_file
echo "INSTALL_DIR=$INSTALL_DIR" >> $log_file
echo "DATA_DIR=$DATA_DIR" >> $log_file
echo "ADMIN_USER=$ADMIN_USER" >> $log_file
echo "ADMIN_PASS=$ADMIN_PASS" >> $log_file
echo "WEBSITE=$WEBSITE" >> $log_file
echo "WEB_BASE_DIR=$WEB_BASE_DIR" >> $log_file
echo "IPV4=$IPV4" >> $log_file
echo "IPV6=$IPV6" >> $log_file
echo "SRC_BASE_DIR=$SRC_BASE_DIR" >> $log_file
if $apache2_installed ; then
echo "apache_vhost_dir=$apache_vhost_dir" >> $log_file
elif $nginx_installed ; then
echo "nginx_vhost_dir=$nginx_vhost_dir" >> $log_file
fi
echo "HTTP_USER=$HTTP_USER" >> $log_file
echo "HTTP_GROUP=$HTTP_GROUP" >> $log_file
echo "PHP_VERSION=$PHP_VERSION" >> $log_file
echo "PHP_ENGINE=$PHP_ENGINE" >> $log_file
echo "DATABASE_NAME=$DATABASE_NAME" >> $log_file
echo "DATABASE_TYPE=$DATABASE_TYPE" >> $log_file
echo "DATABASE_USER=$DATABASE_USER" >> $log_file
echo "DATABASE_PASS=$DATABASE_PASS" >> $log_file
echo "INSTALL_REDIS_SERVICE=$INSTALL_REDIS_SERVICE" >> $log_file
echo "INSTALL_COLABORA_SERVICE=$INSTALL_COLABORA_SERVICE" >> $log_file
echo "" >> $log_file
echo "HOSTNAME_CO=$HOSTNAME_CO" >> $log_file
echo "IPV4_CO=$IPV4_CO" >> $log_file
echo "IPV6_CO=$IPV6_CO" >> $log_file
echo "SSL_CERT_GROUP=$SSL_CERT_GROUP" >> $log_file
echo "" >> $log_file
echo "" >> $log_file
# -----
# - Install redis service
# -----
echo ""
echo ""
echo -e "\033[37m\033[1mInstall redis service..\033[m"
echo ""
echo "" >> $log_file
echo "" >> $log_file
echo "# -----" >> $log_file
echo "# - Install redis service" >> $log_file
echo "# -----" >> $log_file
if ! $INSTALL_REDIS_SERVICE ; then
if $REDIS_SERVICE_INSTALLED ; then
echo "# -" >> $log_file
echo "# - Redis Service is already installed." >> $log_file
info "Redis Service is already installed."
else
echo "# -" >> $log_file
echo "# -Redis Service is NOT installed, but also NOT requested for installation!" >> $log_file
warn "Redis Service is NOT installed, but also NOT requested for installation!"
fi
else
for _debian_pkg in ${dpkg_pkg_redis[@]} ; do
echononl "Installing $_debian_pkg .."
if ! dpkg -l $_debian_pkg 2> /dev/null | grep -e "^ii" > /dev/null 2>&1 ; then
echo "" >> $log_file
echo "# - Installing $_debian_pkg" >> $log_file
echo "# -" >> $log_file
echo "DEBIAN_FRONTEND=noninteractive apt-get install -q -y $_debian_pkg" >> $log_file
DEBIAN_FRONTEND=noninteractive apt-get install -q -y $_debian_pkg >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
else
echo_skipped
fi
done
fi
# - Adjust parameter unixsocket
# -
redis_conf_file="/etc/redis/redis.conf"
echo "" >> $log_file
echo "# - Adjust configuration for 'unixsocket' (file: '$redis_conf_file')" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration for 'unixsocket' (file: '$redis_conf_file').."
if ! $(grep -q -E "^\s*unixsocket\s+" "$redis_conf_file" 2> /dev/null ) ; then
if $(grep -q -E "^\s*#\s*unixsocket\s+" "$redis_conf_file" 2> /dev/null ) ; then
cat <<EOF >> $log_file
perl -i.ORIG -n -p -e "s/^(\s*#\s*unixsocket\s+(.*))/\1\nunixsocket \2/g" "$redis_conf_file"
EOF
perl -i.ORIG -n -p -e "s/^(\s*#\s*unixsocket\s+(.*))/\1\nunixsocket \2/g" "$redis_conf_file" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
else
cat <<END >> $log_file
cat <<EOF >> $redis_conf_file
# Changed by $script_name at $backup_date
#
unixsocket /var/run/redis/redis.sock
EOF
END
cat <<EOF >> $redis_conf_file
# Changed by $script_name at $backup_date
#
unixsocket /var/run/redis/redis.sock
EOF
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
fi
else
echo_skipped
fi
# - Adjust parameter unixsocketperm
# -
_parameter="unixsocketperm"
_value="770"
echo "" >> $log_file
echo "# - Adjust configuration for '${_parameter}' (file: '$redis_conf_file')" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration for '${_parameter}' (file: '$redis_conf_file').."
if ! $(grep -q -E "^\s*${_parameter}\s+" "$redis_conf_file" 2> /dev/null ) ; then
if $(grep -q -E "^\s*#\s*${_parameter}\s+" "$redis_conf_file" 2> /dev/null ) ; then
cat <<EOF >> $log_file
perl -i.ORIG -n -p -e "s/^(\s*#\s*${_parameter}\s+.*)/\1\n${_parameter} ${_value}/g" "$redis_conf_file"
EOF
perl -i.ORIG -n -p -e "s/^(\s*#\s*${_parameter}\s+(.*))/\1\n${_parameter} ${_value}/g" "$redis_conf_file" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
else
cat <<END >> $log_file
cat <<EOF >> $redis_conf_file
# Changed by $script_name at $backup_date
#
${_parameter} 770
EOF
END
cat <<EOF >> $redis_conf_file
# Changed by $script_name at $backup_date
#
${_parameter} 770
EOF
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
fi
else
echo_skipped
fi
echo "" >> $log_file
echo "# - Restart redis service" >> $log_file
echo "# -" >> $log_file
echononl "Restart redis service.."
if $systemd_supported ; then
echo "systemctl restart redis-server" >> $log_file
systemctl restart redis-server >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
else
echo "/etc/init.d/redis-server restart" >> $log_file
/etc/init.d/redis-server restart >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
fi
REDIS_SOCKET="$(grep -E "^\s*unixsocket\s+" $redis_conf_file 2> /dev/null | awk '{print$2}' 2> /dev/null)"
REDIS_GROUP="$(stat -c "%G" $REDIS_SOCKET)"
echo "" >> $log_file
echo "REDIS_SOCKET=$REDIS_SOCKET" >> $log_file
echo "REDIS_GROUP=$REDIS_GROUP" >> $log_file
echo "" >> $log_file
# - Add webserver user to redis group
# -
echo "" >> $log_file
echo "# - Add webserver user '${HTTP_USER}' to redis group ${REDIS_GROUP}" >> $log_file
echo "# -" >> $log_file
echononl "Add webserver user '${HTTP_USER}' to redis group ${REDIS_GROUP}.."
if ! $(grep -E "^redis:" /etc/group 2> /dev/null | grep -q "$HTTP_USER" 2> /dev/null) ; then
usermod -a -G "$REDIS_GROUP" "$HTTP_USER" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
else
echo_skipped
fi
REDIS_SERVICE_INSTALLED=true
# -----
# - Install Install ColaboraOnline Service
# -----
echo ""
echo ""
echo -e "\033[37m\033[1mInstall ColaboraOnline Service..\033[m"
echo ""
echo "" >> $log_file
echo "" >> $log_file
echo "# -----" >> $log_file
echo "# - Install ColaboraOnline Service" >> $log_file
echo "# -----" >> $log_file
if ! $INSTALL_COLABORA_SERVICE ; then
if $COLABORA_SERVICE_INSTALLED ; then
echo "# -" >> $log_file
echo "# - ColaboraOnline Service is already installed." >> $log_file
info "ColaboraOnline Service is already installed."
else
echo "# -" >> $log_file
echo "# -ColaboraOnline Service is NOT installed, but also NOT requested for installation!" >> $log_file
warn "ColaboraOnline Service is NOT installed, but also NOT requested for installation!"
fi
else
echononl "Backup configuration directory for coolwsd.."
if [[ -d "/etc/coolwsd" ]] ; then
echo "" >> $log_file
echo "# - Backup existing directory '/etc/coolwsd'.." >> $log_file
echo "mv \"/etc/coolwsd\" \"/etc/coolwsd.${backup_date}\"" >> $log_file
mv "/etc/coolwsd" "/etc/coolwsd.${backup_date}" >> $log_file 2>&1
if [[ $? -eq 0 ]] ; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
echo_skipped
fi
blank_line
# - Add key for ColaboraOnline Repository
# -
_failed=false
echo "" >> $log_file
echo "# - Add key for ColaboraOnline Repository" >> $log_file
echo "# -" >> $log_file
echononl "Add key for ColaboraOnline Repository.."
#echo "wget -O /tmp/co-apt.key \\
#https://collaboraoffice.com/downloads/gpg/collaboraonline-release-keyring.gpg" >> $log_file
#wget -O /tmp/co-apt.key \
# https://collaboraoffice.com/downloads/gpg/collaboraonline-release-keyring.gpg >> $log_file 2>&1
echo "wget -O /etc/apt/trusted.gpg.d/collaboraonline-release-keyring.gpg \\
https://collaboraoffice.com/downloads/gpg/collaboraonline-release-keyring.gpg" >> $log_file
wget -O /etc/apt/trusted.gpg.d/collaboraonline-release-keyring.gpg \
https://collaboraoffice.com/downloads/gpg/collaboraonline-release-keyring.gpg >> $log_file 2>&1
if [[ "$?" -gt 0 ]]; then
_failed=true
echo_failed
error "For more informations see log output at '$log_file'."
else
echo "" >> $log_file
echo "apt-key add /tmp/co-apt.key" >> $log_file
#apt-key add /tmp/co-apt.key >> $log_file 2>&1
#if [[ "$?" -eq 0 ]]; then
# echo_ok
#else
# _failed=true
# echo_failed
#fi
fi
if $_failed ; then
error "Something went wrong with adding repositoty key..."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Add Repository ColaboraOnline
# -
echo "" >> $log_file
echo "# - Add debian Repository for ColaboraOnline" >> $log_file
echo "# -" >> $log_file
echononl "Add debian Repository for ColaboraOnline"
# cat <<END >> $log_file
#cat <<EOF > /etc/apt/sources.list.d/collaboraonline.list
#deb https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-debian${os_version} ./
#EOF
#END
# cat <<EOF > /etc/apt/sources.list.d/collaboraonline.list 2>> $log_file
#deb https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-debian${os_version} ./
#EOF
cat <<END >> $log_file
cat <<EOF > /etc/apt/sources.list.d/collaboraonline.sources
Types: deb
URIs: https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-deb
Suites: ./
Signed-By: /etc/apt/trusted.gpg.d/collaboraonline-release-keyring.gpg
END
cat <<EOF > /etc/apt/sources.list.d/collaboraonline.sources 2>> $log_file
Types: deb
URIs: https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-deb
Suites: ./
Signed-By: /etc/apt/trusted.gpg.d/collaboraonline-release-keyring.gpg
EOF
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
# - Update package index files
# -
echo "" >> $log_file
echo "# - Update package index files" >> $log_file
echo "# -" >> $log_file
echononl "Update package index files"
echo "apt-get update" >> $log_file
apt-get update >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Install ColaboraOnline packages
# -
_failed=false
for _debian_pkg in ${dpkg_pkg_colabora_online[@]} ; do
echononl "Installing $_debian_pkg .."
if ! dpkg -l $_debian_pkg 2> /dev/null | grep -e "^ii" > /dev/null 2>&1 ; then
echo "" >> $log_file
echo "# - Installing $_debian_pkg" >> $log_file
echo "# -" >> $log_file
echo "DEBIAN_FRONTEND=noninteractive apt-get install -q -y $_debian_pkg" >> $log_file
DEBIAN_FRONTEND=noninteractive apt-get install -q -y $_debian_pkg >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
_failed=true
echo_failed
error "For more informations see log output at '$log_file'."
fi
else
echo_skipped
fi
done
if $_failed ; then
error "Something went wrong with installing debian packages (ColaboraOnline).."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
COOLWSD_USER="$(stat -c "%U" /etc/coolwsd/coolwsd.xml)"
echo "" >> $log_file
echo "COOLWSD_USER=$COOLWSD_USER" >> $log_file
echo "" >> $log_file
# - Add coolwsd user to group 'ssl-cert'
# -
echo "" >> $log_file
echo "# - Add coolwsd user '${COOLWSD_USER}' to group ${SSL_CERT_GROUP}" >> $log_file
echo "# -" >> $log_file
echononl "Add coolwsd user '${COOLWSD_USER}' to group ${SSL_CERT_GROUP}.."
if ! $(grep -E "^${SSL_CERT_GROUP}:" /etc/group 2> /dev/null | grep -q "$COOLWSD_USER" 2> /dev/null) ; then
usermod -a -G "${SSL_CERT_GROUP}" "$COOLWSD_USER" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
else
echo_skipped
fi
# - Symlimk Snakeoil Cert '/etc/coolwsd/cert.pem' --> '/etc/ssl/certs/ssl-cert-snakeoil.pem'
# -
_symlink_src="/etc/ssl/certs/ssl-cert-snakeoil.pem"
_symlink_dst="/etc/coolwsd/cert.pem"
echo "" >> $log_file
echo "# - Symlink '${_symlink_dst}' --> ${_symlink_src}" >> $log_file
echo "# -" >> $log_file
echo "ln -s \"$_symlink_src\" \"$_symlink_dst\"" >> $log_file
echononl "Symlink '${_symlink_dst}' --> ${_symlink_src}"
ln -s "$_symlink_src" "$_symlink_dst" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Symlimk Snakeoil Cert '/etc/coolwsd/ca-chain.cert.pem' --> '/etc/ssl/certs/ssl-cert-snakeoil.pem'
# -
_symlink_src="/etc/ssl/certs/ssl-cert-snakeoil.pem"
_symlink_dst="/etc/coolwsd/ca-chain.cert.pem"
echo "" >> $log_file
echo "# - Symlink '${_symlink_dst}' --> ${_symlink_src}" >> $log_file
echo "# -" >> $log_file
echo "ln -s \"$_symlink_src\" \"$_symlink_dst\"" >> $log_file
echononl "Symlink '${_symlink_dst}' --> ${_symlink_src}"
ln -s "$_symlink_src" "$_symlink_dst" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Symlimk Snakeoil Cert '/etc/coolwsd/key.pem' --> '/etc/ssl/private/ssl-cert-snakeoil.key'
# -
_symlink_src="/etc/ssl/private/ssl-cert-snakeoil.key"
_symlink_dst="/etc/coolwsd/key.pem"
echo "" >> $log_file
echo "# - Symlink '${_symlink_dst}' --> ${_symlink_src}" >> $log_file
echo "# -" >> $log_file
echo "ln -s \"$_symlink_src\" \"$_symlink_dst\"" >> $log_file
echononl "Symlink '${_symlink_dst}' --> ${_symlink_src}"
ln -s "$_symlink_src" "$_symlink_dst" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
blank_line
# - Restart 'coolwsd' service
# -
echo "" >> $log_file
echo "# - Start 'coolwsd' service" >> $log_file
echo "# -" >> $log_file
echononl "Start 'coolwsd' service.."
if $systemd_supported ; then
echo "systemctl start coolwsd" >> $log_file
sleep 2
systemctl start coolwsd >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
echo "/etc/init.d/coolwsd start" >> $log_file
/etc/init.d/coolwsd restart>> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
fi
blank_line
# - Check if regular certificates for ${HOSTNAME_CO} already present
# -
if [[ -e "/var/lib/dehydrated/certs/${HOSTNAME_CO}/fullchain.pem" ]]; then
server_cert="/var/lib/dehydrated/certs/${HOSTNAME_CO}/fullchain.pem"
server_key="/var/lib/dehydrated/certs/${HOSTNAME_CO}/privkey.pem"
else
if $apache2_installed && [[ -f "/usr/local/apache2/conf/server-bundle.crt" ]] \
&& [[ -f "/usr/local/apache2/conf/server.key" ]] ; then
server_cert="/usr/local/apache2/conf/server-bundle.crt"
server_key="/usr/local/apache2/conf/server.key"
else
server_key="/etc/ssl/private//etc/ssl/private"
server_cert="/etc/ssl/certs/ssl-cert-snakeoil.pem"
fi
fi
if $apache2_installed ; then
if [[ -d "$apache_vhost_dir" ]] ; then
# - Backup apache vhost file if exists
# -
if [[ -f "${apache_vhost_dir}/${HOSTNAME_CO}.conf.static" ]]; then
echo "" >> $log_file
echo "# - Backup existing file '${apache_vhost_dir}/${HOSTNAME_CO}.conf.static'" >> $log_file
echo "# -" >> $log_file
echononl "Backup existing file '${apache_vhost_dir}/${HOSTNAME_CO}.conf.static'" >> $log_file
echo "mv \"${apache_vhost_dir}/${HOSTNAME_CO}.conf.static\" \"${apache_vhost_dir}/${HOSTNAME_CO}.conf.static.$backup_date\"" >> $log_file
mv "${apache_vhost_dir}/${HOSTNAME_CO}.conf.static" "${apache_vhost_dir}/${HOSTNAME_CO}.conf.static.$backup_date" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
fi
echo "" >> $log_file
echo "# - Create apache vhost entry for (lokal) ColaboraOnline service" >> $log_file
echo "# -" >> $log_file
echononl "Create apache vhost entry for (lokal) ColaboraOnline service"
cat<<EOF > "${apache_vhost_dir}/${HOSTNAME_CO}.conf.static" 2>> $log_file
<VirtualHost ${IPV4_CO}:443 [${IPV6_CO}]:443>
ServerName $HOSTNAME_CO
Options -Indexes
# Encoded slashes need to be allowed
AllowEncodedSlashes NoDecode
# Container uses a unique non-signed certificate
SSLProxyEngine On
SSLProxyVerify None
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off
# keep the host
ProxyPreserveHost On
# static html, js, images, etc. served from coolwsd
# browser is the client part of Collabora Online
ProxyPass /browser https://127.0.0.1:9980/browser retry=0
ProxyPassReverse /browser https://127.0.0.1:9980/browser
# WOPI discovery URL
ProxyPass /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0
ProxyPassReverse /hosting/discovery https://127.0.0.1:9980/hosting/discovery
# Capabilities
ProxyPass /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities retry=0
ProxyPassReverse /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities
# Main websocket
ProxyPassMatch "/cool/(.*)/ws$" wss://127.0.0.1:9980/cool/\$1/ws nocanon
# Admin Console websocket
ProxyPass /cool/adminws wss://127.0.0.1:9980/cool/adminws
# Download as, Fullscreen presentation and Image upload operations
ProxyPass /cool https://127.0.0.1:9980/cool
ProxyPassReverse /cool https://127.0.0.1:9980/cool
# Compatibility with integrations that use the /lool/convert-to endpoint
ProxyPass /lool https://127.0.0.1:9980/cool
ProxyPassReverse /lool https://127.0.0.1:9980/cool
SSLEngine on
SSLCertificateFile $server_cert
SSLCertificateKeyFile $server_key
CustomLog /var/log/apache2/ip_requests.log base_requests
CustomLog /var/log/apache2/${HOSTNAME_CO}.log combined
ErrorLog /var/log/apache2/${HOSTNAME_CO}-error.log
</VirtualHost>
EOF
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
# - Remove symlink for apache vhost file (if exists)
# -
if [[ -h "${apache_vhost_dir}/${HOSTNAME_CO}.conf" ]]; then
echo "" >> $log_file
echo "# - Remove existing Symlink '${apache_vhost_dir}/${HOSTNAME_CO}.conf'" >> $log_file
echo "# -" >> $log_file
echononl "Remove existing Symlink '${apache_vhost_dir}/${HOSTNAME_CO}.conf'" >> $log_file
echo "rm -f \"${apache_vhost_dir}/${HOSTNAME_CO}.conf\"" >> $log_file
rm -f "${apache_vhost_dir}/${HOSTNAME_CO}.conf" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
fi
# - Backup apache vhost file if exists
# -
if [[ -f "${apache_vhost_dir}/${HOSTNAME_CO}.conf" ]]; then
echo "" >> $log_file
echo "# - Backup existing file '${apache_vhost_dir}/${HOSTNAME_CO}.conf'" >> $log_file
echo "# -" >> $log_file
echononl "Backup existing file '${apache_vhost_dir}/${HOSTNAME_CO}.conf'" >> $log_file
echo "mv \"${apache_vhost_dir}/${HOSTNAME_CO}.conf\" \"${apache_vhost_dir}/${HOSTNAME_CO}.conf.$backup_date\"" >> $log_file
mv "${apache_vhost_dir}/${HOSTNAME_CO}.conf" "${apache_vhost_dir}/${HOSTNAME_CO}.conf.$backup_date" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
fi
# - Symlimk Apache VHost file '${HOSTNAME_CO}.conf' --> '${HOSTNAME_CO}.conf.static'
# -
_symlink_src="${HOSTNAME_CO}.conf.static"
_symlink_dst="${apache_vhost_dir}/${HOSTNAME_CO}.conf"
echo "" >> $log_file
echo "# - Symlink '${_symlink_dst}' --> ${_symlink_src}" >> $log_file
echo "# -" >> $log_file
echononl "Symlink '${_symlink_dst}' --> ${_symlink_src}"
ln -s "$_symlink_src" "$_symlink_dst" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
COLABORA_SERVICE_INSTALLED=true
fi
elif $nginx_installed ; then
if [[ -d "$nginx_vhost_dir" ]]; then
# - Remove symlink for nginx vhost file (if exists)
# -
if [[ -h "${nginx_vhost_enabled_dir}/${HOSTNAME_CO}.conf" ]]; then
echo "" >> $log_file
echo "# - Remove existing Symlink '${nginx_vhost_enabled_dir}/${HOSTNAME_CO}.conf'" >> $log_file
echo "# -" >> $log_file
echononl "Remove existing Symlink '${nginx_vhost_enabled_dir}/${HOSTNAME_CO}.conf'" >> $log_file
echo "rm -f \"${nginx_vhost_enabled_dir}/${HOSTNAME_CO}.conf\"" >> $log_file
rm -f "${nginx_vhost_enabled_dir}/${HOSTNAME_CO}.conf" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
fi # if [[ -h "${nginx_vhost_enabled_dir}/${HOSTNAME_CO}.conf" ]]; then
# - Backup nginx vhost file if exists
# -
if [[ -f "${nginx_vhost_dir}/${HOSTNAME_CO}.conf" ]]; then
echo "" >> $log_file
echo "# - Backup existing file '${nginx_vhost_dir}/${HOSTNAME_CO}.conf'" >> $log_file
echo "# -" >> $log_file
echononl "Backup existing file '${nginx_vhost_dir}/${HOSTNAME_CO}.conf'" >> $log_file
echo "mv \"${nginx_vhost_dir}/${HOSTNAME_CO}.conf\" \"${nginx_vhost_dir}/${HOSTNAME_CO}.conf.$backup_date\"" >> $log_file
mv "${nginx_vhost_dir}/${HOSTNAME_CO}.conf" "${nginx_vhost_dir}/${HOSTNAME_CO}.conf.$backup_date" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
fi # if [[ -f "${nginx_vhost_dir}/${HOSTNAME_CO}.conf" ]]
echo "" >> $log_file
echo "# - Create nginx vhost entry for '$HOSTNAME_CO'" >> $log_file
echo "# -" >> $log_file
echononl "Create nginx vhost entry for '$HOSTNAME_CO'"
cat<<EOF > "${nginx_vhost_dir}/${HOSTNAME_CO}.conf" 2>> $log_file
# --- $HOSTNAME_CO
# ---
# see: https://www.collaboraoffice.com/code/nginx-reverse-proxy/
# ---
server {
listen 80;
listen [::]:80;
server_name co-01.oopen.de;
# Enforce HTTPS
return 301 https://\$server_name\$request_uri;
}
# ---
# see: https://www.collaboraoffice.com/code/nginx-reverse-proxy/
# ---
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name ${HOSTNAME_CO};
root /var/www/${HOSTNAME_CO};
ssl_certificate ${server_cert};
ssl_certificate_key ${server_key};
# Include location directive for Let's Encrypt ACME Challenge
#
# Needed for (automated) updating certificate
#
include snippets/letsencrypt-acme-challenge.conf;
# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;
# static files
location ^~ /browser {
proxy_pass https://localhost:9980;
proxy_set_header Host \$http_host;
}
# WOPI discovery URL
location ^~ /hosting/discovery {
proxy_pass https://localhost:9980;
proxy_set_header Host \$http_host;
}
# Capabilities
location ^~ /hosting/capabilities {
proxy_pass https://localhost:9980;
proxy_set_header Host \$http_host;
}
# main websocket
location ~ ^/cool/(.*)/ws$ {
proxy_pass https://localhost:9980;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host \$http_host;
proxy_read_timeout 36000s;
}
# download, presentation and image upload
# we accept 'lool' to be backward compatible
location ~ ^/(c|l)ool {
proxy_pass https://localhost:9980;
proxy_set_header Host \$http_host;
}
# Admin Console websocket
location ^~ /cool/adminws {
proxy_pass https://localhost:9980;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host \$http_host;
proxy_read_timeout 36000s;
}
}
EOF
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Symlimk Nginx VHost file
# -
# - '${nginx_vhost_enabled_dir}/${HOSTNAME_CO}.conf' --> '${nginx_vhost_dir}/${HOSTNAME_CO}.conf'
# -
_symlink_src="${nginx_vhost_dir}/${HOSTNAME_CO}.conf"
_symlink_dst="${nginx_vhost_enabled_dir}/${HOSTNAME_CO}.conf"
echo "" >> $log_file
echo "# - Symlink '${_symlink_dst}' --> ${_symlink_src}" >> $log_file
echo "# -" >> $log_file
echononl "Symlink '${_symlink_dst}' --> ${_symlink_src}"
echo "ln -s \"$_symlink_src\" \"$_symlink_dst\"" >> $log_file
ln -s "$_symlink_src" "$_symlink_dst" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echononl "Backup existing document root directory '/var/www/${HOSTNAME_CO}'.."
if [[ -d "/var/www/${HOSTNAME_CO}" ]] ; then
echo "" >> $log_file
echo "# - Backup existing document root directory '/var/www/${HOSTNAME_CO}'" >> $log_file
echo "# -" >> $log_file
echo "mv \"/var/www/${HOSTNAME_CO}\" \"/var/www/${HOSTNAME_CO}.${backup_date}\"" >> $log_file
mv "/var/www/${HOSTNAME_CO}" "/var/www/${HOSTNAME_CO}.${backup_date}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
else
echo_skipped
fi
echo "" >> $log_file
echo "# - Ceate documentroot directory '/var/www/${HOSTNAME_CO}'." >> $log_file
echo "# -" >> $log_file
echononl "Ceate documentroot directory '/var/www/${HOSTNAME_CO}'."
echo "mkdir \"/var/www/${HOSTNAME_CO}\"" >> $log_file
mkdir "/var/www/${HOSTNAME_CO}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
fi
echo "" >> $log_file
echo "# - Create index file '/var/www/${HOSTNAME_CO}/index.html'" >> $log_file
echo "# -" >> $log_file
echo "cat <<EOF > /var/www/${HOSTNAME_CO}/index.html
<!doctype html>
<html>
<head>
<title>HTTP Error 404 / Http Fehler 404</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
<style type=\"text/css\">
body {
background: #eee;
font: normal normal 16px/140% Arial, Helvetica, Trebuchet MS, Geneva, sans-serif;
word-wrap: break-word;
}
h1 {
font-size: 30px;
font-weight: bold;
line-height: 100%;
}
h2 {
font-size: 18px;
font-weight: bold;
line-height: 100%;
}
.Container {
background: #fff;
width: 825px;
}
.Content {
background: #fff;
font-size: 12px;
height: 400px;
line-height: 16px;
padding: 10px 20px;
}
</style>
<link rel=\"shortcut icon\" href=\"/favicon.ico\" />
</head>
<body>
<div class=\"Container\">
<div class=\"Logo\"></div>
<div class=\"Content\">
<h1>HTTP Error 404</h1>
<h2>The site you have requestet was not found on this Server</h2>
<p>Please check your spelling and try again.</p>
<p>Thank You very much!</p>
<h1>HTTP Fehler 404</h1>
<h2>Die von Ihnen aufgerufene Seite gibt es leider nicht - Sorry</h2>
<p>Bitte pr&uuml;fen Sie die Adresse und versuchen es nochmals.</p>
<p>Vielen Dank f&uuml;r Ihr Verst&auml;ndnis!</p>
</div><!-- .Content -->
</div><!-- .Container -->
</body>
</html>
EOF" >> $log_file
echononl "Create index file '/var/www/${HOSTNAME_CO}/index.html'"
cat <<EOF > /var/www/${HOSTNAME_CO}/index.html 2>> $log_file
<!doctype html>
<html>
<head>
<title>HTTP Error 404 / Http Fehler 404</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
body {
background: #eee;
font: normal normal 16px/140% Arial, Helvetica, Trebuchet MS, Geneva, sans-serif;
word-wrap: break-word;
}
h1 {
font-size: 30px;
font-weight: bold;
line-height: 100%;
}
h2 {
font-size: 18px;
font-weight: bold;
line-height: 100%;
}
.Container {
background: #fff;
width: 825px;
}
.Content {
background: #fff;
font-size: 12px;
height: 400px;
line-height: 16px;
padding: 10px 20px;
}
</style>
<link rel="shortcut icon" href="/favicon.ico" />
</head>
<body>
<div class="Container">
<div class="Logo"></div>
<div class="Content">
<h1>HTTP Error 404</h1>
<h2>The site you have requestet was not found on this Server</h2>
<p>Please check your spelling and try again.</p>
<p>Thank You very much!</p>
<h1>HTTP Fehler 404</h1>
<h2>Die von Ihnen aufgerufene Seite gibt es leider nicht - Sorry</h2>
<p>Bitte pr&uuml;fen Sie die Adresse und versuchen es nochmals.</p>
<p>Vielen Dank f&uuml;r Ihr Verst&auml;ndnis!</p>
</div><!-- .Content -->
</div><!-- .Container -->
</body>
</html>
EOF
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
fi
else
error "Cant find nginx's vhost directory!"
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi # if [[ -d "$nginx_vhost_dir" ]]
fi # if $apache2_installed
echo "" >> $log_file
echo "# - Setup script 'check_cert_coolwsd.sh'" >> $log_file
echo "# -" >> $log_file
echononl "Setup script 'check_cert_coolwsd.sh'"
_failed=false
if [[ -f "/root/bin/nextcloud/conf/check_cert_coolwsd.conf.sample" ]]; then
if [[ ! -f "/root/bin/nextcloud/conf/check_cert_coolwsd.conf" ]]; then
cp -a "/root/bin/nextcloud/conf/check_cert_coolwsd.conf.sample" \
"/root/bin/nextcloud/conf/check_cert_coolwsd.conf"
if [[ $? -ne 0 ]] ; then
_failed=true
fi
fi
cat << EOF >> $log_file
perl -i -n -p -e "s/^\\s*HOSTNAME_CO\\s*=.*/HOSTNAME_CO=\"${HOSTNAME_CO}\"" \\
/root/bin/nextcloud/conf/check_cert_coolwsd.conf
EOF
perl -i -n -p -e "s/^\s*HOSTNAME_CO\s*=.*/HOSTNAME_CO="${HOSTNAME_CO}"/" \
/root/bin/nextcloud/conf/check_cert_coolwsd.conf >> "$log_file" 2>&1
if [[ $? -ne 0 ]]; then
_failed=true
fi
if $_failed ; then
echo_failed
error "Failed to setup script 'check_cert_coolwsd.sh'."
else
echo_ok
echononl "Initial run of script 'check_cert_coolwsd.sh'.."
if [[ -x "/root/bin/nextcloud/check_cert_coolwsd.sh" ]]; then
/root/bin/nextcloud/check_cert_coolwsd.sh
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
fi
else
echo_skipped
warn "Cannot find script '/root/bin/nextcloud/check_cert_coolwsd.sh'"
fi
fi
else
echo_skipped
warn "Cannot find sample configuration file '/root/bin/nextcloud/conf/check_cert_coolwsd.conf.sample'"
echo "# -" >> $log_file
echo "# - Cannot find sample configuration file '/root/bin/nextcloud/conf/check_cert_coolwsd.conf.sample'" >> $log_file
echo "# - Skip configuration of script '/root/bin/nextcloud/check_cert_coolwsd.sh'" >> $log_file
echo "# -" >> $log_file
fi
echononl "Create cronjob for checcking/renewing lollwsd certs.."
if [[ -x "/root/bin/nextcloud/check_cert_coolwsd.sh" ]] ; then
_crontab_tmp_file=/tmp/crontab_root.$$
crontab -l > $_crontab_tmp_file 2> /dev/null
if ! grep -q -E "/root/bin/nextcloud/check_cert_coolwsd.sh" $_crontab_tmp_file 2> /dev/null ; then
echo "" >> $_crontab_tmp_file
echo "# - Check if certificates for coolwsd service are up to date" >> $_crontab_tmp_file
echo "# -" >> $_crontab_tmp_file
echo "17 05 * * * /root/bin/nextcloud/check_cert_coolwsd.sh" >> $_crontab_tmp_file
crontab $_crontab_tmp_file
if [[ $? -eq 0 ]]; then
echo_done
else
echo_failed
error "Creating cronjob for checcking/renewing lollwsd certs failed!"
fi
else
echo_skipped
fi
else
echo_skipped
warn "Script '/root/bin/nextcloud/check_cert_coolwsd.sh' not found'."
fi
fi
# -----
# - Doing some pre-installation tasks
# -----
echo ""
echo ""
echo -e "\033[37m\033[1mDoing some pre-installation tasks..\033[m"
echo ""
echo "" >> $log_file
echo "" >> $log_file
echo "# -----" >> $log_file
echo "# - Doing some pre-installation tasks" >> $log_file
echo "# -----" >> $log_file
# - Deaktiviere Cronjobs
# -
_backup_crontab_file=/tmp/crontab_root.${backup_date}
echo "" >> $log_file
echo "# - Backup Crontab to '$_backup_crontab_file'" >> $log_file
echo "# -" >> $log_file
echononl "Backup Crontab to '$_backup_crontab_file'"
echo "crontab -l > $_backup_crontab_file" >> $log_file
crontab -l > $_backup_crontab_file 2>> $log_file
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interupted by user"
fi
echo "" >> $log_file
echo "# - Remove crontab for root" >> $log_file
echo "# -" >> $log_file
echononl "Remove crontab for root.."
echo "crontab -r" >> $log_file
crontab -r >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interupted by user"
fi
if $apache2_installed ; then
# - Stop Apache Webserver
# -
echo "" >> $log_file
echo "# - Stop Apache Webserver" >> $log_file
echo "# -" >> $log_file
echononl "Stop Apache Webserver.."
if $systemd_supported ; then
echo "systemctl stop apache2" >> $log_file
systemctl stop apache2 >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interupted by user"
fi
else
echo "/etc/init.d/apache2 stop" >> $log_file
/etc/init.d/apache2 stop >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interupted by user"
fi
fi
elif $nginx_installed ; then
# - Stop Nginx Webserver
# -
echo "" >> $log_file
echo "# - Stop Nginx Webserver" >> $log_file
echo "# -" >> $log_file
echononl "Stop Nginx Webserver.."
if $systemd_supported ; then
echo "systemctl stop nginx" >> $log_file
systemctl stop nginx >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interupted by user"
fi
else
echo "/etc/init.d/nginx stop" >> $log_file
/etc/init.d/nginx stop >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interupted by user"
fi
fi
fi
# -----
# - Some checks
# -----
echo ""
echo ""
echo -e "\033[37m\033[1mDoing some checks..\033[m"
echo ""
echo "" >> $log_file
echo "" >> $log_file
echo "# -----" >> $log_file
echo "# - Doing some checks" >> $log_file
echo "# -----" >> $log_file
checks_all_is_fine=true
# - Check if database exists and is empty
# -
if [[ "$DATABASE_TYPE" = "mysql" ]] ; then
if [[ ! "$(mysqlshow -h $DATABASE_HOST -u $DATABASE_USER -p$DATABASE_PASS $DATABASE_NAME 2>/dev/null)" ]] ; then
fatal "Cannot connect database \033[1m$DATABASE_NAME\033[m!"
fi
_tables="$(mysql -h $DATABASE_HOST -u $DATABASE_USER -p$DATABASE_PASS $DATABASE_NAME -N -s -e 'SHOW TABLES' 2>/dev/null)"
if [[ -n "$_tables" ]] ; then
warn "Database \033[1m$DATABASE_NAME\033[m is NOT empty but this is an initial instalation!"
checks_all_is_fine=false
if [[ ! -d "${WEB_BASE_DIR}" ]]; then
_backup_dst_dir="$working_dir"
else
_backup_dst_dir="$WEB_BASE_DIR"
fi
echo "" >> $log_file
echo "# - Backup database '$DATABASE_NAME'" >> $log_file
echo "# -" >> $log_file
echononl "Backup database '$DATABASE_NAME' .."
echo "mysqldump -h $DATABASE_HOST -u $DATABASE_NAME -p$DATABASE_PASS --opt $DATABASE_NAME > ${_backup_dst_dir}/${DATABASE_NAME}.${backup_date}.sql" >> $log_file
mysqldump -h $DATABASE_HOST -u $DATABASE_NAME -p$DATABASE_PASS --opt $DATABASE_NAME > ${_backup_dst_dir}/${DATABASE_NAME}.${backup_date}.sql 2>> $log_file
if [[ $? -eq 0 ]] ; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
clean_up 1
fi
echo "" >> $log_file
echo "# - Drop tables of database '$DATABASE_NAME'" >> $log_file
echo "# -" >> $log_file
echononl "Drop tables of database '$DATABASE_NAME'"
_failed=false
declare -a _tables_not_deleted=()
for _table in $_tables ; do
echo "mysql -h $DATABASE_HOST -u $DATABASE_NAME -p$DATABASE_PASS $DATABASE_NAME -N -s -e \"DROP TABLE \\\`$_table\\\`\"" >> $log_file
mysql -h $DATABASE_HOST -u $DATABASE_NAME -p$DATABASE_PASS $DATABASE_NAME -N -s -e "DROP TABLE \`$_table\`" >> $log_file 2>&1
if [[ $? -ne 0 ]] ; then
_failed=true
_tables_not_deleted+=("$_table")
fi
done
if $_failed ; then
echo_failed
error "For more informations see log output at '$log_file'."
clean_up 1
else
echo_ok
fi
fi
elif [[ "$DATABASE_TYPE" = "postgres" ]] ; then
count="$(su - postgres -c "psql -q -A -t -l" | grep -c -e "^$DATABASE_NAME")"
if [[ $count -eq 0 ]]; then
warn "Cannot find database \033[1m$DATABASE_NAME\033[m!\n\n \033[1mCreate database first."
checks_all_is_fine=false
echo "" >> $log_file
echo "# - Create ROLE for user '$DATABASE_USER'" >> $log_file
echo "# -" >> $log_file
echononl "Create ROLE for user \033[1m$DATABASE_USER\033[m .."
echo "echo \"CREATE ROLE $DATABASE_USER WITH LOGIN NOCREATEDB NOCREATEROLE NOSUPERUSER ENCRYPTED PASSWORD '$DATABASE_PASS'\" | su - postgres -c \"psql\"" >> $log_file
EOF
echo "CREATE ROLE $DATABASE_USER WITH LOGIN NOCREATEDB NOCREATEROLE NOSUPERUSER ENCRYPTED PASSWORD '$DATABASE_PASS'" | su - postgres -c "psql" > $log_file 2>&1
if [[ $? -eq 0 ]] ; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
clean_up 1
fi
echo "" >> $log_file
echo "# - Create database '$DATABASE_NAME'" >> $log_file
echo "# -" >> $log_file
echononl "Create database \033[1m$DATABASE_NAME\033[m .."
echo "su - postgres -c \"createdb -E utf8 -O $DATABASE_USER $DATABASE_NAME\"" >> $log_file 2>&1
su - postgres -c "createdb -E utf8 -O $DATABASE_USER $DATABASE_NAME" >> $log_file 2>&1
if [[ $? -eq 0 ]] ; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
clean_up 1
fi
else
:
fi
fi
##!# - Backup Database
##!# -
##!echononl " Backup MySQL database '$DATABASE_NANE'.."
##!if [[ "$DATABASE_TYPE" = 'mysql' ]]; then
##! mysqldump $MYSQL_CREDENTIALS --opt $DATABASE_NAME > \
##! ${WEB_BASE_DIR}/${DATABASE_NAME}-v${PRIOR_VERSION}.${backup_date}.sql 2> $log_file
##! if [[ $? -eq 0 ]]; then
##! echo_ok
##! else
##! echo_failed
##! fatal "$(cat $log_file)"
##! fi
##!elif [[ "$DATABASE_TYPE" = 'postgres' ]]; then
##! PGPASSWORD=$PSQL_PASS pg_dump $DATABASE_NAME -h $PSQL_SERVER -U $PSQL_USER -f postfix-${backup_date}.sql
##! if [[ $? -eq 0 ]]; then
##! echo_ok
##! else
##! echo_failed
##! fatal "$(cat $log_file)"
##! fi
##!fi
# - Backup old installation directory
# -
if [[ -d "$INSTALL_DIR" ]] ; then
warn "Nextcloud's installation directory \033[1m$INSTALL_DIR\033[m already exists!"
checks_all_is_fine=false
echo "" >> $log_file
echo "# - Backup existing installation directory '${INSTALL_DIR}'" >> $log_file
echo "# -" >> $log_file
echononl "Backup existing installation directory '${INSTALL_DIR}'.."
echo "mv \"$INSTALL_DIR\" \"${INSTALL_DIR}.$backup_date\"" >> $log_file
mv "$INSTALL_DIR" "${INSTALL_DIR}.$backup_date" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interupted by user"
fi
fi
# - Backup old data directory
# -
if [[ -d "$DATA_DIR" ]] ; then
warn "Nextcloud's data directory \033[1m$DATA_DIR\033[m already exists"
checks_all_is_fine=false
echo "" >> $log_file
echo "# - Backup existing data directory '${DATA_DIR}'" >> $log_file
echo "# -" >> $log_file
echononl "Backup existing data directory '${DATA_DIR}'..
"
echo "mv \"$DATA_DIR\" \"${DATA_DIR}.$backup_date\"" >> $log_file
mv "$DATA_DIR" "${DATA_DIR}.$backup_date" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Abbruch durch User"
fi
fi
# - Delete symlink for data directory
# -
echononl "Delete symlink '${DATA_DIR}' if exists.."
if [[ -h "${DATA_DIR}" ]]; then
echo "" >> $log_file
echo "# - Delete symlink '${DATA_DIR}'" >> $log_file
echo "# -" >> $log_file
echo "rm \"${DATA_DIR}\"" >> $log_file
rm "${DATA_DIR}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
echo_skipped
fi
if $checks_all_is_fine ; then
info "All is fine.."
fi
# -----
# - Download/Unpack sources
# -----
echo ""
echo ""
echo -e "\033[37m\033[1mDownload/Unpack sources..\033[m"
echo ""
echo "" >> $log_file
echo "" >> $log_file
echo "# -----" >> $log_file
echo "# - Download/Unpack sources" >> $log_file
echo "# -----" >> $log_file
echononl "Create source directory '${SRC_BASE_DIR}'.."
if [[ ! -d "${SRC_BASE_DIR}" ]]; then
echo "" >> $log_file
echo "# - Create source directory '${SRC_BASE_DIR}'" >> $log_file
echo "# -" >> $log_file
echo "mkdir \"${SRC_BASE_DIR}\"" >> $log_file
mkdir "${SRC_BASE_DIR}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
clean_up 1
fi
else
echo_skipped
fi
# - downloud nextcloud source
# -
echononl "Download file 'nextcloud-${VERSION}.tar.bz2'.."
if [[ -f "${SRC_BASE_DIR}/nextcloud-${VERSION}.tar.bz2" ]]; then
echo_skipped
else
echo "" >> $log_file
echo "# - Download file 'nextcloud-${VERSION}.tar.bz2'" >> $log_file
echo "# -" >> $log_file
echo "wget -P ${SRC_BASE_DIR} https://download.nextcloud.com/server/releases/nextcloud-${VERSION}.tar.bz2" >> $log_file 2>&1
wget -P ${SRC_BASE_DIR} https://download.nextcloud.com/server/releases/nextcloud-${VERSION}.tar.bz2 >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
clean_up 1
fi
fi
echononl "Delete existing dir '${SRC_BASE_DIR}/nextcloud'.."
if [[ -d "${SRC_BASE_DIR}/nextcloud" ]]; then
echo "" >> $log_file
echo "# - Delete existing dir '${SRC_BASE_DIR}/nextcloud'.." >> $log_file
echo "# -" >> $log_file
echo "rm -rf \"${SRC_BASE_DIR}/nextcloud\"" >> $log_file
rm -rf "${SRC_BASE_DIR}/nextcloud" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
clean_up 1
fi
else
echo_skipped
fi
# - Entpacken
# -
echo "" >> $log_file
echo "# - Untar/Unpack 'nextcloud-${VERSION}.tar.bz2'" >> $log_file
echo "# -" >> $log_file
echononl "Untar/Unpack 'nextcloud-${VERSION}.tar.bz2'.."
echo "bunzip2 < \"${SRC_BASE_DIR}/nextcloud-${VERSION}.tar.bz2\" | tar -C ${SRC_BASE_DIR} -xf -" >> $log_file
bunzip2 < ${SRC_BASE_DIR}/nextcloud-${VERSION}.tar.bz2 | tar -C ${SRC_BASE_DIR} -xf - >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# -----
# - Create needed directories
# -----
echo ""
echo ""
echo -e "\033[37m\033[1mCreate needed directories..\033[m"
echo ""
echo "" >> $log_file
echo "" >> $log_file
echo "# -----" >> $log_file
echo "# - Create needed directories" >> $log_file
echo "# -----" >> $log_file
# - Create websites base directory
# -
echo "" >> $log_file
echo "# - Create websites base directory '${WEB_BASE_DIR}'" >> $log_file
echo "# -" >> $log_file
echononl "Create websites base directory '${WEB_BASE_DIR}'.."
if [[ ! -d "$WEB_BASE_DIR" ]] ; then
echo "mkdir \"$WEB_BASE_DIR\"" >> $log_file
mkdir "$WEB_BASE_DIR" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
echo_skipped
fi
# - Create Installation Directory
# -
echo "" >> $log_file
echo "# - Create (new) installation dir '${INSTALL_DIR}'" >> $log_file
echo "# -" >> $log_file
echononl "Create (new) installation dir '${INSTALL_DIR}'.."
echo "mkdir \"$INSTALL_DIR\"" >> $log_file
mkdir "$INSTALL_DIR" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Create data directory
# -
echo "" >> $log_file
echo "# - Create (new) data dir '${DATA_DIR}'" >> $log_file
echo "# -" >> $log_file
echononl "Create (new) data dir '${DATA_DIR}'.."
echo "mkdir \"$DATA_DIR\"" >> $log_file
mkdir "$DATA_DIR" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Set Permissions on new data directory
# -
echo "" >> $log_file
echo "# - Change permissions on '${DATA_DIR}'" >> $log_file
echo "# -" >> $log_file
echononl "Change permissions on '${DATA_DIR}'.."
echo "chown -R \"${HTTP_USER}\":\"${HTTP_GROUP}\" \"${DATA_DIR}\"" >> $log_file
chown -R "${HTTP_USER}":"${HTTP_GROUP}" "${DATA_DIR}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Create log directory
# -
echononl "Create (new) data dir '${WEB_BASE_DIR}/logs'.."
if [[ ! -d "${WEB_BASE_DIR}/logs" ]] ; then
echo "" >> $log_file
echo "# - Create log directory '${WEB_BASE_DIR}'/logs" >> $log_file
echo "# -" >> $log_file
echo "mkdir \"${WEB_BASE_DIR}/logs\"" >> $log_file
mkdir "${WEB_BASE_DIR}/logs" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
echo_skipped
fi
# - Set Permissions on log data directory
# -
echo "" >> $log_file
echo "# - Change permissions on '${WEB_BASE_DIR}/logs'" >> $log_file
echo "# -" >> $log_file
echononl "Change permissions on '${WEB_BASE_DIR}/logs'.."
echo "chown \"${HTTP_USER}\":\"${HTTP_GROUP}\" \"${WEB_BASE_DIR}/logs\"" >> $log_file
chown "${HTTP_USER}":"${HTTP_GROUP}" "${WEB_BASE_DIR}/logs" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# -----
# - Base Installation of nextcloud
# -----
echo ""
echo ""
echo -e "\033[37m\033[1mBase Installation of nextcloud..\033[m"
echo ""
echo "" >> $log_file
echo "" >> $log_file
echo "# -----" >> $log_file
echo "# - Base Installation of nextcloud" >> $log_file
echo "# -----" >> $log_file
# - Synchronisiere neues Installationsverzeichnis mit
# - den extrahierten Dateien
# -
echo "" >> $log_file
echo "# - Sync (new) nextlcoud to '${INSTALL_DIR}''" >> $log_file
echo "# -" >> $log_file
echononl "Sync (new) nextlcoud to '${INSTALL_DIR}'.."
echo "rsync -a \"${SRC_BASE_DIR}/nextcloud/\" \"${INSTALL_DIR}/\"" >> $log_file
rsync -a "${SRC_BASE_DIR}/nextcloud/" "${INSTALL_DIR}/" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echo "" >> $log_file
echo "# - Set actual date on directory '${INSTALL_DIR}'" >> $log_file
echo "# -" >> $log_file
echononl "Set actual date on directory '${INSTALL_DIR}'.."
echo "touch -t \"$(date +%Y%m%d%H%M.%S)\" \"${INSTALL_DIR}\"" >> $log_file
touch -t "$(date +%Y%m%d%H%M.%S)" "${INSTALL_DIR}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Set Permissions on new install directory
# -
echo "" >> $log_file
echo "# - Change permissions on '${INSTALL_DIR}'" >> $log_file
echo "# -" >> $log_file
echononl "Change permissions on '${INSTALL_DIR}'.."
echo "chown -R ${HTTP_USER}:${HTTP_GROUP} \"${INSTALL_DIR}\"" >> $log_file
chown -R "${HTTP_USER}":"${HTTP_GROUP}" "${INSTALL_DIR}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Delete symlink for old installation directory
# -
echononl "Delete symlink '${WEB_BASE_DIR}/nextcloud' if exists.."
if [[ -h "${WEB_BASE_DIR}/nextcloud" ]]; then
echo "" >> $log_file
echo "# - Delete symlink '${WEB_BASE_DIR}/nextcloud'" >> $log_file
echo "# -" >> $log_file
echo "rm \"${WEB_BASE_DIR}/nextcloud\"" >> $log_file
rm "${WEB_BASE_DIR}/nextcloud" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
echo_skipped
fi
if [[ -f "${WEB_BASE_DIR}/nextcloud" ]] || [[ -d "${WEB_BASE_DIR}/nextcloud" ]] ; then
warn "File or Directory '${WEB_BASE_DIR}/nextcloud' exists."
echo "" >> $log_file
echo "# - Backup directory '${WEB_BASE_DIR}/nextcloud'" >> $log_file
echo "# -" >> $log_file
echononl "Backup directory '${WEB_BASE_DIR}/nextcloud'.."
echo "mv \"${WEB_BASE_DIR}/nextcloud\" \"${WEB_BASE_DIR}/nextcloud.$backup_date\"" >> $log_file
mv "${WEB_BASE_DIR}/nextcloud" "${WEB_BASE_DIR}/nextcloud.$backup_date" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
echo_skipped
fi
# - Set symlink for new installation directory
# -
echo "" >> $log_file
echo "# - Set symlink for new installation dir 'nextcloud-${VERSION}'" >> $log_file
echo "# -" >> $log_file
echononl "Set symlink for new installation dir 'nextcloud-${VERSION}'.."
echo "\"ln -s nextcloud-${VERSION}\" \"${WEB_BASE_DIR}/nextcloud\"" >> $log_file
ln -s "nextcloud-${VERSION}" "${WEB_BASE_DIR}/nextcloud" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Delete symlink for 'htdocs' directory
# -
echononl "Delete symlink '${WEB_BASE_DIR}/htdocs' if exists.."
if [[ -h "${WEB_BASE_DIR}/htdocs" ]]; then
echo "" >> $log_file
echo "# - Delete symlink '${WEB_BASE_DIR}/htdocs'" >> $log_file
echo "# -" >> $log_file
echo "rm \"${WEB_BASE_DIR}/htdocs\"" >> $log_file
rm "${WEB_BASE_DIR}/htdocs" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
echo_skipped
fi
if [[ -f "${WEB_BASE_DIR}/htdocs" ]] || [[ -d "${WEB_BASE_DIR}/htdocs" ]] ; then
warn "File or Directory '${WEB_BASE_DIR}/htdocs' exists."
echo "" >> $log_file
echo "# - Backup directory '${WEB_BASE_DIR}/htdocs'" >> $log_file
echo "# -" >> $log_file
echononl "Backup directory '${WEB_BASE_DIR}/htdocs'.."
echo "mv \"${WEB_BASE_DIR}/htdocs\" \"${WEB_BASE_DIR}/htdocs.$backup_date\"" >> $log_file
mv "${WEB_BASE_DIR}/htdocs" "${WEB_BASE_DIR}/htdocs.$backup_date" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
echo_skipped
fi
# - Set symlink for htdocs directory
# -
echo "" >> $log_file
echo "# - Set symlink for htdocs directory" >> $log_file
echo "# -" >> $log_file
echononl "Set symlink for htdocs directory.."
echo "\"ln -s nextcloud\" \"${WEB_BASE_DIR}/htdocs\"" >> $log_file
ln -s "nextcloud" "${WEB_BASE_DIR}/htdocs" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# -----
# - Configuration tasks on the new Nextcloud Installation
# -----
echo ""
echo ""
echo -e "\033[37m\033[1mConfiguration tasks on the new Nextcloud Installation..\033[m"
echo ""
echo "" >> $log_file
echo "" >> $log_file
echo "# -----" >> $log_file
echo "# - Configuration tasks on the new Nextcloud Installation" >> $log_file
echo "# -----" >> $log_file
# - Create base configuration
# -
echo "" >> $log_file
echo "# - Create base configuration (file 'config/config.php')" >> $log_file
echo "# -" >> $log_file
echononl "Create base configuration (file 'config/config.php')"
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" maintenance:install \\
--database="${DATABASE_TYPE}" \\
--database-name="${DATABASE_NAME}" \\
--database-host="${DATABASE_HOST}" \\
--database-user="${DATABASE_USER}" \\
--database-pass="${DATABASE_PASS}" \\
--admin-user="${ADMIN_USER}" --admin-pass="${ADMIN_PASS}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" maintenance:install \
--database="${DATABASE_TYPE}" \
--database-name="${DATABASE_NAME}" \
--database-host="${DATABASE_HOST}" \
--database-user="${DATABASE_USER}" \
--database-pass="${DATABASE_PASS}" \
--admin-user="${ADMIN_USER}" --admin-pass="${ADMIN_PASS}" \
--data-dir="${DATA_DIR}">> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
blank_line
# - Some columns in the database are missing a conversion to big int. Due to the
# - fact that changing column types on big tables could take some time they were
# - not changed automatically. By running 'occ db:convert-filecache-bigint' those
# - pending changes could be applied manually. This operation needs to be made
# - while the instance is offline.
# -
# - For further details read the documentation page about this.
# -
# - filecache.mtime
# - filecache.storage_mtime
# -
echo "" >> $log_file
echo "# - Convert some database columns to 'big int'" >> $log_file
echo "# -" >> $log_file
echononl "Convert some database columns to 'big int'"
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" db:convert-filecache-bigint" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" -n db:convert-filecache-bigint >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
blank_line
# - Activate and Enable (default) encryption module
# -
echo "" >> $log_file
echo "# - Eabable the (default) encryption module" >> $log_file
echo "# -" >> $log_file
echononl "Eabable the (default) encryption module.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:enable encryption" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:enable encryption >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echo "" >> $log_file
echo "# - Enable encryption" >> $log_file
echo "# -" >> $log_file
echononl "Enable encryption.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" encryption:enable" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" encryption:enable >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Adjust 'trusted_domains'
# -
_parameter="trusted_domains"
_value="${WEBSITE}"
_type="string"
echo "" >> $log_file
echo "# - Add '${WEBSITE}' to trusted domains" >> $log_file
echo "# -" >> $log_file
echononl "Add '${WEBSITE}' to trusted domains.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set ${_parameter} 1 \\
--value="${_value} --type="${_type}""
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set ${_parameter} 1 \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Adjust 'overwrite.cli.url'
# -
_parameter="overwrite.cli.url"
_value="https://${WEBSITE}"
_type="string"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
--value="${_value} --type="${_type}""
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
## - # - Adjust 'trashbin_retention_obligation'
## - # -
## - _parameter="trashbin_retention_obligation"
## - _value="auto, 7"
## - _type="string"
## - echo "" >> $log_file
## - echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
## - echo "# -" >> $log_file
## - echononl "Adjust configuration parameter '$_parameter'.."
## -
## - cat <<EOF >> $log_file
## - sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
## - --value="https://${_value}" --type="${string}"
## - EOF
## - sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
## - --value="${_value}" --type="${string}" >> $log_file 2>&1
## -
## - if [[ $? -eq 0 ]]; then
## - echo_ok
## - else
## - echo_failed
## - error "For more informations see log output at '$log_file'."
## -
## - echononl "continue anyway [yes/no]: "
## - read OK
## - OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
## - while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
## - echononl "Wrong entry! - repeat [yes/no]: "
## - read OK
## - done
## - [[ $OK = "yes" ]] || fatal "Interrupted ny user."
## - fi
# - Adjust 'logtimezone'
# -
_parameter="logtimezone"
_value="Europe/Berlin"
_type="string"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
--value="https://${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Adjust parameter 'log_type'
# -
# - Defaults to none
# -
_parameter="log_type"
_value="file"
_type="string"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
--value="${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Adjust parameter 'logfile'
# -
# - Defaults to none
# -
_parameter="logfile"
_value="${WEB_BASE_DIR}/logs/cloud.log"
_type="string"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
--value="${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Adjust parameter 'loglevel'
# -
# - Defaults to none
# -
_parameter="loglevel"
_value=4
_type="integer"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
--value="${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
blank_line
# - Adjust 'filelocking.enabled'
# -
# - Prevents concurrent processes from accessing the same files at the same time.
# - Can help prevent side effects that would be caused by concurrent operations.
# - Mainly relevant for very large installations with many users working with
# - shared files.
# -
# - Defaults to true
# -
_parameter="filelocking.enabled"
_value="true"
_type="boolean"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
--value="${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Adjust 'memcache.local'
# -
# - Memory caching backend for locally stored data
# -
# - Defaults to none
# -
_parameter="memcache.local"
_value="\\OC\\Memcache\\APCu"
_type="string"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
--value="${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
if $REDIS_SERVICE_INSTALLED ; then
# - Adjust 'memcache.locking'
# -
# - Memory caching backend for file locking
# -
# - Defaults to none
# -
_parameter="memcache.locking"
_value="\\OC\\Memcache\\Redis"
_type="string"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
--value="${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Adjust 'memcache.distributed'
# -
# - Memory caching backend for locally stored data
# -
# - Defaults to none
# -
_parameter="memcache.distributed"
_value="\\OC\\Memcache\\Redis"
_type="string"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
--value="${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Adjust parameter 'redis' 'port'
# -
# - Connection details for redis to use for memory caching
# -
# - Defaults to none
# -
_parameter="redis"
_array_index="port"
_value=0
_type="integer"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter' '$_array_index'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter' '$_array_index'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" "$_array_index" \\
--value="${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" "$_array_index" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Adjust parameter 'redis' 'host'
# -
# - Connection details for redis to use for memory caching
# -
# - Defaults to none
# -
[[ -z "$redis_conf_file" ]] && redis_conf_file="/etc/redis/redis.conf"
REDIS_SOCKET="$(grep -E "^\s*unixsocket\s+" $redis_conf_file 2> /dev/null | awk '{print$2}' 2> /dev/null)"
if [[ -z "$REDIS_SOCKET" ]] ; then
warn "Variable 'REDIS_SOCKET' not set or empty.\n\n Set value to \033[1m/var/run/redis/redis.sock\033[m"
fi
_parameter="redis"
_array_index="host"
_value="$REDIS_SOCKET"
_type="string"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter' '$_array_index'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter' '$_array_index'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" "$_array_index" \\
--value="${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" "$_array_index" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Adjust parameter 'redis' 'timeout'
# -
# - Connection details for redis to use for memory caching
# -
# - Defaults to none
# -
_parameter="redis"
_array_index="timeout"
_value=0
_type="integer"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter' '$_array_index'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter' '$_array_index'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" "$_array_index" \\
--value="${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" "$_array_index" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
fi # if $REDIS_SERVICE_INSTALLED
# - Adjust 'default_language'
# -
_parameter="default_language"
_value="de"
_type="string"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
--value="https://${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Adjust 'default_locale'
# -
_parameter="default_locale"
_value="de_DE"
_type="string"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
--value="${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Adjust 'default_phone_region'
# -
_parameter="default_phone_region"
_value="DE"
_type="string"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
--value="${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Adjust 'activity_expire_days'
# -
_parameter="activity_expire_days"
_value=92
_type="integer"
echo "" >> $log_file
echo "# - Adjust configuration parameter '$_parameter'" >> $log_file
echo "# -" >> $log_file
echononl "Adjust configuration parameter '$_parameter'.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \\
--value="${_value}" --type="${_type}"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:system:set "$_parameter" \
--value="${_value}" --type="${_type}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
blank_line
echo "" >> $log_file
echo "# - Set a default quota of 5 GB" >> $log_file
echo "# -" >> $log_file
echononl "Set a default quota of 5 GB"
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:app:set files \\
default_quota --value="5 GB"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:app:set files \
default_quota --value="5 GB" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
blank_line
echo "" >> $log_file
echo "# - Set background jobs to 'Cron'" >> $log_file
echo "# -" >> $log_file
echononl "Set background jobs to 'Cron'"
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" background:cron" >> $log_file 2>&1
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" background:cron >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echo "" >> $log_file
echo "# - Create cronjob for nextcloud instance '${WEBSITE}'" >> $log_file
echo "# -" >> $log_file
echononl "Create cronjob for nextcloud instance '${WEBSITE}'"
if [[ ! -f "$_backup_crontab_file" ]]; then
crontab -l > "$_backup_crontab_file"
fi
if ! grep -q -E "${WEB_BASE_DIR}/htdocs/cron.php" "$_backup_crontab_file" 2> /dev/null ; then
echo "" >> "$_backup_crontab_file"
echo "# - Background job for nextcloud instance '${WEBSITE}'" >> "$_backup_crontab_file"
echo "# -" >> "$_backup_crontab_file"
echo "*/15 * * * * sudo -u \"$HTTP_USER\" /usr/local/php/bin/php -f ${WEB_BASE_DIR}/htdocs/cron.php" >> "$_backup_crontab_file"
echo_ok
else
echo_skipped
fi
# -----
# - Password Policies
# -----
echo ""
echo ""
echo -e "\033[37m\033[1mPassword Policies:\033[m"
echo ""
echo "" >> $log_file
echo "" >> $log_file
echo "# -----" >> $log_file
echo "# - Password Policies:" >> $log_file
echo "# -----" >> $log_file
echo "" >> $log_file
echo "# - Enforce passwords with at least one numeric character" >> $log_file
echo "# -" >> $log_file
echononl "Enforce passwords with at least one numeric character.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:app:set password_policy \\
enforceNumericCharacters --value="1"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:app:set password_policy \
enforceNumericCharacters --value="1" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echo "" >> $log_file
echo "# - Enforce passwords with at least one special character" >> $log_file
echo "# -" >> $log_file
echononl "Enforce passwords with at least one special character.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:app:set password_policy \\
enforceSpecialCharacters --value="1"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:app:set password_policy \
enforceSpecialCharacters --value="1" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echo "" >> $log_file
echo "# - Enforce passwords with at least one upper and lower case character" >> $log_file
echo "# -" >> $log_file
echononl "Enforce passwords with at least one upper and lower case character.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:app:set password_policy \\
enforceUpperLowerCase --value="1"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:app:set password_policy \
enforceUpperLowerCase --value="1" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echo "" >> $log_file
echo "# - Enforce passwords with a minimum length of 12 character" >> $log_file
echo "# -" >> $log_file
echononl "Enforce passwords with a minimum length of 12 character.."
cat <<EOF >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:app:set password_policy \\
minLength --value="12"
EOF
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:app:set password_policy \
minLength --value="12" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# -----
# - Configure apache2/nginx for the new cloud system
# -----
echo ""
echo ""
if $apache2_installed ; then
echo -e "\033[37m\033[1mConfigure apache2 for the new cloud system..\033[m"
elif $nginx_installed ; then
echo -e "\033[37m\033[1mConfigure nginx for the new cloud system..\033[m"
fi
echo ""
echo "" >> $log_file
echo "" >> $log_file
echo "# -----" >> $log_file
if $apache2_installed ; then
echo "# - Configure apache2 for the new cloud system" >> $log_file
elif $nginx_installed ; then
echo "# - Configure nginx for the new cloud system" >> $log_file
fi
echo "# -----" >> $log_file
# - Create Apache2 vhost configuration for ColaboraOnline service
# -
if [[ -e "/var/lib/dehydrated/certs/${WEBSITE}/fullchain.pem" ]]; then
server_cert="/var/lib/dehydrated/certs/${WEBSITE}/fullchain.pem"
server_key="/var/lib/dehydrated/certs/${WEBSITE}/privkey.pem"
else
server_cert="/usr/local/apache2/conf/server-bundle.crt"
server_key="/usr/local/apache2/conf/server.key"
fi
if $apache2_installed ; then
if [[ -d "$apache_vhost_dir" ]] ; then
# - Remove symlink for apache vhost file (if exists)
# -
if [[ -h "${apache_vhost_dir}/${WEBSITE}.conf" ]]; then
echo "" >> $log_file
echo "# - Remove existing Symlink '${apache_vhost_dir}/${WEBSITE}.conf'" >> $log_file
echo "# -" >> $log_file
echononl "Remove existing Symlink '${apache_vhost_dir}/${WEBSITE}.conf'" >> $log_file
echo "rm -f \"${apache_vhost_dir}/${WEBSITE}.conf\"" >> $log_file
rm -f "${apache_vhost_dir}/${WEBSITE}.conf" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
fi # f [[ -h "${apache_vhost_dir}/${WEBSITE}.conf" ]]
# - Backup apache vhost file if exists
# -
if [[ -f "${apache_vhost_dir}/${WEBSITE}.conf.php-fpm" ]]; then
echo "" >> $log_file
echo "# - Backup existing file '${apache_vhost_dir}/${WEBSITE}.conf.php-fpm'" >> $log_file
echo "# -" >> $log_file
echononl "Backup existing file '${apache_vhost_dir}/${WEBSITE}.conf.php-fpm'" >> $log_file
echo "mv \"${apache_vhost_dir}/${WEBSITE}.conf.php-fpm\" \"${apache_vhost_dir}/${WEBSITE}.conf.php-fpm.$backup_date\"" >> $log_file
mv "${apache_vhost_dir}/${WEBSITE}.conf.php-fpm" "${apache_vhost_dir}/${WEBSITE}.conf.php-fpm.$backup_date" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
fi
echo "" >> $log_file
echo "# - Create apache vhost entry for '$WEBSITE'" >> $log_file
echo "# -" >> $log_file
echononl "Create apache vhost entry for '$WEBSITE'"
cat<<EOF > "${apache_vhost_dir}/${WEBSITE}.conf.php-fpm" 2>> $log_file
# --- $WEBSITE
<VirtualHost ${IPV4}:80 [${IPV6}]:80>
ServerAdmin admin@oopen.de
ServerName $WEBSITE
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
CustomLog /var/log/apache2/ip_requests.log base_requests
CustomLog /var/log/apache2/${WEBSITE}-access.log combined
ErrorLog /var/log/apache2/${WEBSITE}-error.log
</VirtualHost>
<VirtualHost ${IPV4}:443 [${IPV6}]:443>
ServerAdmin admin@oopen.de
ServerName ${WEBSITE}
# Service Discovery
#
# !! We alraedy provide this servis via '.htaccess'-file !!
#
# The redirects for CalDAV or CardDAV does not work if Nextcloud is running behind a
# reverse proxy. The recommended solution is that your reverse proxy does the redirects
#
#RewriteEngine On
#RewriteRule ^/\.well-known/carddav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]
#RewriteRule ^/\.well-known/caldav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]
#ProxyErrorOverride On
<FilesMatch \.php\$>
SetHandler "proxy:unix:/run/php/php-${PHP_VERSION}-fpm.www.sock|fcgi://127.0.0.1"
</FilesMatch>
<IfModule dir_module>
DirectoryIndex index.php index.html index.htm
</IfModule>
DocumentRoot ${WEB_BASE_DIR}/htdocs
<Directory "${WEB_BASE_DIR}/htdocs">
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
</Directory>
# - X-Frame-Options
# -
# - See: https://scotthelme.co.uk/hardening-your-http-response-headers/#x-frame-options
# -
# - X-Frame-Options tells the browser whether you want to
# - allow your site to be framed or not. By preventing a
# - browser from framing your site you can defend against
# - attacks like clickjacking
# -
# - The X-Frame-Options header (RFC), or XFO header, protects your visitors
# - against clickjacking attacks. An attacker can load up an iframe on their
# - site and set your site as the source, it's quite easy:
# -
# - <iframe src="https://scotthelme.co.uk"></iframe>
# -
# - Using some crafty CSS they can hide your site in the background and create some
# - genuine looking overlays. When your visitors click on what they think is a harmless
# - link, they're actually clicking on links on your website in the background. That
# - might not seem so bad until we realise that the browser will execute those requests
# - in the context of the user, which could include them being logged in and authenticated
# - to your site!
# -
# - Troy Hunt has a great blog on 'Clickjack attack the hidden threat right in front :
# - of you':
# -
# - http://www.troyhunt.com/2013/05/clickjack-attack-hidden-threat-right-in.html
# -
# - Valid values:
# -
# - DENY meaning your site can't be framed
# -
# - SAMEORIGIN which allows you to frame your own site
# -
# - ALLOW-FROM https://example.com/ which lets you specify
# - sites that are permitted to frame your own site.
# -
# - Note:
# - For Apache 2.2 use
# - Header always set X-Frame-Options "SAMEORIGIN"
# -
Header always append X-Frame-Options "SAMEORIGIN"
# - X-Xss-Protection
# -
# - See: https://scotthelme.co.uk/hardening-your-http-response-headers/#x-xss-protection
# -
# - X-XSS-Protection sets the configuration for the cross-site
# - scripting filters built into most browsers. The best
# - configuration is "X-XSS-Protection: 1; mode=block".
# -
# - This header is used to configure the built in reflective XSS protection found
# - in Internet Explorer, Chrome and Safari (Webkit).
# -
# - Valid settings for the header are:
# -
# - 0 which disables the protection,
# -
# - 1 which enables the protection
# -
# - 1; mode=block which tells the browser to block the response
# - if it detects an attack rather than sanitising
# - the script.
# -
Header always set X-Xss-Protection "1; mode=block"
# - X-Content-Type-Options
# -
# - See: https://scotthelme.co.uk/hardening-your-http-response-headers/#x-content-type-options
# -
# - X-Content-Type-Options stops a browser from trying to MIME-sniff
# - the content type and forces it to stick with the declared
# - content-type.
# -
# - Nice and easy to configure, this header only has one valid value, nosniff.
# - It prevents Google Chrome and Internet Explorer from trying to mime-sniff
# - the content-type of a response away from the one being declared by the server.
# - It reduces exposure to drive-by downloads and the risks of user uploaded content
# - that, with clever naming, could be treated as a different content-type, like
# - an executable.
# -
# - The only valid value for this header is
# -
# - "X-Content-Type-Options: nosniff".
# -
Header always set X-Content-Type-Options "nosniff"
# - Referrer-Policy
# -
# - See: https://scotthelme.co.uk/a-new-security-header-referrer-policy/
# - https://www.w3.org/TR/referrer-policy/
# -
# - Referrer Policy is a new header that allows a site to control how
# - much information the browser includes with navigations away from
# - a document and should be set by all sites.
# -
# - The HTTP referer (originally a misspelling of referrer[1]) is an HTTP header
# - field that identifies the address of the webpage (i.e. the URI or IRI) that
# - linked to the resource being requested. By checking the referrer, the new
# - webpage can see where the request originated.
# -
# - For a complete list and explanation of values, see urls above
# -
# - Example: "no-referrer-when-downgrade"
# - The browser will not send the referrer header when navigating
# - from HTTPS to HTTP, but will always send the full URL in the
# - referrer header when navigating from HTTP to any origin. It
# - doesn't matter whether the source and destination are the same
# - site or not, only the scheme.
# -
Header always set Referrer-Policy "no-referrer"
# - Permissions-Policy
# -
# - see also:
# - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Permissions-Policy
# -
# - Browser bieten einige Features und APIs, auf die wir Entwickler zugreifen können.
# - Das beinhaltet etwa Kamera und Mikrofon des Endgeräts. Mit einer Permissions Policy
# - können wir diese Funktionen für unsere Seite aktivieren, deaktivieren oder auf eine
# - Quelle begrenzen. Wenn ihr ein Feature abschaltet, können auch keine Dritten darauf
# - zugreifen, etwa per eingebettetem <iframe>. Ihr könnt jedes Feature über eine eigene
# - Direktive individuell einrichten.
# -
# - This specification defines a mechanism that allows developers to selectively enable
# - and disable use of various browser features and APIs.
# -
#Header always set Permissions-Policy: "usb=()"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
# - Feature-Policy
# -
# - Feature-Policy is an HTTP header that can allow website owners to toggle on or off certain
# - of those web browser features and API.
# -
# - The Feature-Policy standard & header is being renamed to Permissions-Policy.
# -
Header always set Feature-Policy "microphone 'none'; camera 'none'; geolocation 'none'"
# - Set-Cookie
# -
# - The Set-Cookie HTTP response header is used to send a cookie from the server to the
# - user agent, so that the user agent can send it back to the server later. To send
# - multiple cookies, multiple Set-Cookie headers should be sent in the same response.
# -
# - You can mitigate most of the common Cross Site Scripting attack using HttpOnly
# - and Secure flag in a cookie. Without having HttpOnly and Secure, it is possible
# - to steal or manipulate web application session and cookies and its dangerous.
# -
# - Header always edit Set-Cookie (.*) "\$1;HttpOnly;Secure"
# -
# -
# - best possible cookie:
# - Header set Set-Cookie: "__Host-sess=a92fe1; path=/; Secure; HttpOnly; SameSite=Strict"
#
Header set Set-Cookie: "sess=joh3Ao4e; path=/; HttpOnly; Secure"
# - X-Permitted-Cross-Domain-Policies
# -
# - Der HTTP-Header X-Permitted-Cross-Domain-Policies schützt vor unerwünschten Einbetten
# - der eigenen Webseiteninhalte in PDF-Dokumente und Adobe-Flash-Anwendungen auf anderen
# - Webseiten.
# -
# - Der einfachste Anwendungsfall verbietet jegliches Einbetten außerhalb der eigenen Webseite:
# -
# - X-Permitted-Cross-Domain-Policies: none
# -
Header always set X-Permitted-Cross-Domain-Policies "none"
# - X-Download-Options
# -
# - The X-Download-Options HTTP header has only one option: X-Download-Options: noopen.
# -
# - This is for Internet Explorer from version 8 on to instruct the browser not to open
# - a download directly in the browser but instead to provide only the <20>Save<76> option.
# - The user has to first save it and then open it in an application
# -
Header always set X-Download-Options "noopen"
# - X-Robots-Tag
# -
# - X-Robots-Tag ist eine Art HTTP-Header, mit dem Webmaster steuern können, wie ihre Seiten
# - indiziert und von Suchmaschinen bereitgestellt werden. Dies kann nützlich sein, um
# - bestimmte Seiten aus den Suchergebnissen auszuschließen oder um anzugeben, dass eine
# - Seite auf eine bestimmte Weise indiziert werden soll.
# -
# - Der X-Robots-Tag-HTTP-Header kann verwendet werden, um eine Reihe verschiedener
# - Anweisungen anzugeben, darunter:
# -
# - noindex: Diese Direktive weist Suchmaschinen an, die Seite nicht zu indizieren.
# -
# - nofollow: Diese Direktive weist Suchmaschinen an, den Links auf der Seite nicht zu
# - folgen.
# -
# - none: Diese Anweisung ist eine Kombination aus noindex und nofollow und weist
# - Suchmaschinen an, die Seite nicht zu indizieren oder den Links auf der Seite
# - zu folgen.
# -
# - nosnippet: Diese Direktive weist Suchmaschinen an, kein Snippet oder keine
# - Beschreibung für die Seite in den Suchergebnissen anzuzeigen.
# -
# - noarchive: Diese Direktive weist Suchmaschinen an, keine zwischengespeicherte Kopie
# - der Seite zu speichern.
# -
Header always set X-Robots-Tag "noindex, noarchive, nosnippet, nofollow"
# - HTTP Strict Transport Security (HSTS)
# -
# - HSTS tells a browser that the website should only be accessed through
# - a secure connection. The HSTS header will be remembered by a standard
# compliant browser for max-age seconds.
# -
# - Remember this settings for 1/2 year
# -
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
SSLEngine on
SSLCertificateFile /var/lib/dehydrated/certs/${WEBSITE}/fullchain.pem
SSLCertificateKeyFile /var/lib/dehydrated/certs/${WEBSITE}/privkey.pem
CustomLog /var/log/apache2/ip_requests.log base_requests
CustomLog /var/log/apache2/${WEBSITE}-access.log combined
ErrorLog /var/log/apache2/${WEBSITE}-error.log
</VirtualHost>
EOF
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Symlimk Apache VHost file '${WEBSITE}.conf' --> '${WEBSITE}.conf.php-fpm'
# -
_symlink_src="${WEBSITE}.conf.php-fpm"
_symlink_dst="${apache_vhost_dir}/${WEBSITE}.conf"
echo "" >> $log_file
echo "# - Symlink '${_symlink_dst}' --> ${_symlink_src}" >> $log_file
echo "# -" >> $log_file
echononl "Symlink '${_symlink_dst}' --> ${_symlink_src}"
ln -s "$_symlink_src" "$_symlink_dst" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
error "Cant find apache2's vhost directory!"
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
elif $nginx_installed ; then
if [[ -d "$nginx_vhost_dir" ]]; then
# - Remove symlink for nginx vhost file (if exists)
# -
if [[ -h "${nginx_vhost_enabled_dir}/${WEBSITE}.conf" ]]; then
echo "" >> $log_file
echo "# - Remove existing Symlink '${nginx_vhost_enabled_dir}/${WEBSITE}.conf'" >> $log_file
echo "# -" >> $log_file
echononl "Remove existing Symlink '${nginx_vhost_enabled_dir}/${WEBSITE}.conf'" >> $log_file
echo "rm -f \"${nginx_vhost_enabled_dir}/${WEBSITE}.conf\"" >> $log_file
rm -f "${nginx_vhost_enabled_dir}/${WEBSITE}.conf" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
fi # f [[ -h "${nginx_vhost_dir}/${WEBSITE}.conf" ]]
# - Backup nginx vhost file if exists
# -
if [[ -f "${nginx_vhost_dir}/${WEBSITE}.conf" ]]; then
echo "" >> $log_file
echo "# - Backup existing file '${nginx_vhost_dir}/${WEBSITE}.conf'" >> $log_file
echo "# -" >> $log_file
echononl "Backup existing file '${nginx_vhost_dir}/${WEBSITE}.conf'" >> $log_file
echo "mv \"${nginx_vhost_dir}/${WEBSITE}.conf\" \"${nginx_vhost_dir}/${WEBSITE}.conf.$backup_date\"" >> $log_file
mv "${nginx_vhost_dir}/${WEBSITE}.conf" "${nginx_vhost_dir}/${WEBSITE}.conf.$backup_date" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
fi
echo "" >> $log_file
echo "# - Create nginx vhost entry for '$WEBSITE'" >> $log_file
echo "# -" >> $log_file
echononl "Create nginx vhost entry for '$WEBSITE'"
cat<<EOF > "${nginx_vhost_dir}/${WEBSITE}.conf" 2>> $log_file
# --- $WEBSITE
# ---
# see: https://docs.nextcloud.com/server/latest/admin_manual/installation/nginx.html
# ---
upstream php-handler {
server unix:/run/php//php-${PHP_VERSION}-fpm.www.sock;
}
server {
listen 80;
listen [::]:80;
server_name $WEBSITE;
# Enforce HTTPS
return 301 https://\$server_name\$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ${WEBSITE};
# Include location directive for Let's Encrypt ACME Challenge
#
# Needed for (automated) updating certificate
#
include snippets/letsencrypt-acme-challenge.conf;
# Use Mozilla's guidelines for SSL/TLS settings
# https://mozilla.github.io/server-side-tls/ssl-config-generator/
ssl_certificate /var/lib/dehydrated/certs/${WEBSITE}/fullchain.pem;
ssl_certificate_key /var/lib/dehydrated/certs/${WEBSITE}/privkey.pem;
# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
#
# To generate a dhparam.pem file, run in a terminal
# openssl dhparam -dsaparam -out /etc/nginx/ssl/dhparam.pem 2048
#
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# Eable session resumption to improve https performance
ssl_session_cache shared:MozSSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # omit SSLv3 because of POODLE
# omit SSLv3 because of POODLE
# omit TLSv1 TLSv1.1
ssl_protocols TLSv1.2 TLSv1.3;
# ECDHE better than DHE (faster) ECDHE & DHE GCM better than CBC (attacks on AES)
# Everything better than SHA1 (deprecated)
#
#ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!3DES';
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;
# Enable gzip but do not remove ETag headers
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
# Pagespeed is not supported by Nextcloud, so if your server is built
# with the \`ngx_pagespeed\` module, uncomment this line to disable it.
#pagespeed off;
# HTTP response headers borrowed from Nextcloud \`.htaccess\`
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;
# Path to the root of your installation
root /var/www/${WEBSITE}/htdocs;
# Specify how to handle directories -- specifying \`/index.php\$request_uri\`
# here as the fallback means that Nginx always exhibits the desired behaviour
# when a client requests a path that corresponds to a directory that exists
# on the server. In particular, if that directory contains an index.php file,
# that file is correctly served; if it doesn't, then the request is passed to
# the front-end controller. This consistent behaviour means that we don't need
# to specify custom rules for certain paths (e.g. images and other assets,
# \`/updater\`, \`/ocm-provider\`, \`/ocs-provider\`), and thus
# \`try_files \$uri \$uri/ /index.php\$request_uri\`
# always provides the desired behaviour.
index index.php index.html /index.php\$request_uri;
# Rule borrowed from \`.htaccess\` to handle Microsoft DAV clients
location = / {
if ( \$http_user_agent ~ ^DavClnt ) {
return 302 /remote.php/webdav/\$is_args\$args;
}
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# Make a regex exception for \`/.well-known\` so that clients can still
# access it despite the existence of the regex rule
# \`location ~ /(\\.|autotest|...)\` which would otherwise handle requests
# for \`/.well-known\`.
location ^~ /.well-known {
# The following 6 rules are borrowed from \`.htaccess\`
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
# Anything else is dynamically handled by Nextcloud
location ^~ /.well-known { return 301 /index.php\$uri; }
try_files \$uri \$uri/ =404;
}
# Rules borrowed from \`.htaccess\` to hide certain paths from clients
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { return 404; }
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; }
# Ensure this block, which passes PHP files to the PHP process, is above the blocks
# which handle static assets (as seen below). If this block is not declared first,
# then Nginx will encounter an infinite rewriting loop when it prepends \`/index.php\`
# to the URI, resulting in a HTTP 500 error response.
location ~ \.php(?:\$|/) {
fastcgi_split_path_info ^(.+?\.php)(/.*)\$;
set \$path_info \$fastcgi_path_info;
try_files \$fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
fastcgi_param PATH_INFO \$path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
fastcgi_param front_controller_active true; # Enable pretty urls
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ \.(?:css|js|svg|gif)\$ {
try_files \$uri /index.php\$request_uri;
expires 6M; # Cache-Control policy borrowed from \`.htaccess\`
access_log off; # Optional: Don't log access to assets
}
location ~ \.woff2?\$ {
try_files \$uri /index.php\$request_uri;
expires 7d; # Cache-Control policy borrowed from \`.htaccess\`
access_log off; # Optional: Don't log access to assets
}
# Service Discovery
#
# !! we already configured this service inside 'location ~ \.php(?:\$|/) {' !!
#
# The redirects for CalDAV or CardDAV does not work if Nextcloud is running behind a
# reverse proxy. The recommended solution is that your reverse proxy does the redirects
#
#rewrite ^/\.well-known/carddav https://\$server_name/remote.php/dav/ redirect;
#rewrite ^/\.well-known/caldav https://\$server_name/remote.php/dav/ redirect;
#
# or alternativ
#
#location /.well-known/carddav {
# return 301 \$scheme://\$host/remote.php/dav;
#}
#location /.well-known/caldav {
# return 301 \$scheme://\$host/remote.php/dav;
#}
location / {
try_files \$uri \$uri/ /index.php\$request_uri;
}
}
EOF
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Symlimk Nginx VHost file
# -
# - '${nginx_vhost_enabled_dir}/${WEBSITE}.conf' --> '${nginx_vhost_dir}/${WEBSITE}.conf'
# -
_symlink_src="${nginx_vhost_dir}/${WEBSITE}.conf"
_symlink_dst="${nginx_vhost_enabled_dir}/${WEBSITE}.conf"
echo "" >> $log_file
echo "# - Symlink '${_symlink_dst}' --> ${_symlink_src}" >> $log_file
echo "# -" >> $log_file
echononl "Symlink '${_symlink_dst}' --> ${_symlink_src}"
ln -s "$_symlink_src" "$_symlink_dst" >> $log_file 2>&1
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
error "Cant find nginx's vhost directory!"
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
fi # if $apache2_installed
# -----
# - Install/Enable some more nextcloud apps
# -----
echo ""
echo ""
echo -e "\033[37m\033[1mInstall/Enable some more nextcloud apps..\033[m"
echo ""
echo "" >> $log_file
echo "" >> $log_file
echo "# -----" >> $log_file
echo "# - Install/Enable some more nextcloud apps" >> $log_file
echo "# -----" >> $log_file
# - Install and enable nextcloud app 'calendar'
# -
_app="calendar"
echo "" >> $log_file
echo "# -" >> $log_file
echo "# - Install nextcloud app '$_app'" >> $log_file
echononl "Install nextcloud app '$_app'.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:install \"$_app\"" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:install "$_app" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echo "" >> $log_file
echo "# -" >> $log_file
echo "# - Eanable nextcloud app '$_app'" >> $log_file
echononl "Eanable nextcloud app '$_app'.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:enable \"$_app\"" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:enable "$_app" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
blank_line
# - Install and enable nextcloud app 'contacts'
# -
_app="contacts"
echo "" >> $log_file
echo "# -" >> $log_file
echo "# - Install nextcloud app '$_app'" >> $log_file
echononl "Install nextcloud app '$_app'.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:install \"$_app\"" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:install "$_app" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echo "" >> $log_file
echo "# -" >> $log_file
echo "# - Eanable nextcloud app '$_app'" >> $log_file
echononl "Eanable nextcloud app '$_app'.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:enable \"$_app\"" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:enable "$_app" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
blank_line
# - Install and enable nextcloud app 'notes'
# -
_app="notes"
echo "" >> $log_file
echo "# -" >> $log_file
echo "# - Install nextcloud app '$_app'" >> $log_file
echononl "Install nextcloud app '$_app'.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:install \"$_app\"" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:install "$_app" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echo "" >> $log_file
echo "# -" >> $log_file
echo "# - Eanable nextcloud app '$_app'" >> $log_file
echononl "Eanable nextcloud app '$_app'.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:enable \"$_app\"" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:enable "$_app" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
blank_line
# - Install and enable nextcloud app 'tasks'
# -
_app="tasks"
echo "" >> $log_file
echo "# -" >> $log_file
echo "# - Install nextcloud app '$_app'" >> $log_file
echononl "Install nextcloud app '$_app'.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:install \"$_app\"" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:install "$_app" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echo "" >> $log_file
echo "# -" >> $log_file
echo "# - Eanable nextcloud app '$_app'" >> $log_file
echononl "Eanable nextcloud app '$_app'.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:enable \"$_app\"" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:enable "$_app" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output: \"$log_file\"."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Install and enable nextcloud app 'desk'
# -
_app="deck"
echo "" >> $log_file
echo "# -" >> $log_file
echo "# - Install nextcloud app '$_app'" >> $log_file
echononl "Install nextcloud app '$_app'.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:install \"$_app\"" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:install "$_app" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echo "" >> $log_file
echo "# -" >> $log_file
echo "# - Eanable nextcloud app '$_app'" >> $log_file
echononl "Eanable nextcloud app '$_app'.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:enable \"$_app\"" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:enable "$_app" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output: \"$log_file\"."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
# - Install and enable nextcloud app 'documentserver_community'
# -
#_app="documentserver_community"
#echo "" >> $log_file
#echo "# -" >> $log_file
#echo "# - Install nextcloud app '$_app'" >> $log_file
#echononl "Install nextcloud app '$_app'.."
#
#echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:install \"$_app\"" >> $log_file
#sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:install "$_app" >> $log_file 2>&1
#
#if [[ $? -eq 0 ]]; then
# echo_ok
#else
# echo_failed
# error "For more informations see log output at '$log_file'."
#
# echononl "continue anyway [yes/no]: "
# read OK
# OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
# while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
# echononl "Wrong entry! - repeat [yes/no]: "
# read OK
# done
# [[ $OK = "yes" ]] || fatal "Interrupted ny user."
#fi
#
#echo "" >> $log_file
#echo "# -" >> $log_file
#echo "# - Eanable nextcloud app '$_app'" >> $log_file
#echononl "Eanable nextcloud app '$_app'.."
#
#echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:enable \"$_app\"" >> $log_file
#sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:enable "$_app" >> $log_file 2>&1
#
#if [[ $? -eq 0 ]]; then
# echo_ok
#else
# echo_failed
# error "For more informations see log output: \"$log_file\"."
#
# echononl "continue anyway [yes/no]: "
# read OK
# OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
# while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
# echononl "Wrong entry! - repeat [yes/no]: "
# read OK
# done
# [[ $OK = "yes" ]] || fatal "Interrupted ny user."
#fi
# - Install and enable nextcloud app 'onlyoffice'
# -
#_app="onlyoffice"
#echo "" >> $log_file
#echo "# -" >> $log_file
#echo "# - Install nextcloud app '$_app'" >> $log_file
#echononl "Install nextcloud app '$_app'.."
#
#echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:install \"$_app\"" >> $log_file
#sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:install "$_app" >> $log_file 2>&1
#
#if [[ $? -eq 0 ]]; then
# echo_ok
#else
# echo_failed
# error "For more informations see log output at '$log_file'."
#
# echononl "continue anyway [yes/no]: "
# read OK
# OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
# while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
# echononl "Wrong entry! - repeat [yes/no]: "
# read OK
# done
# [[ $OK = "yes" ]] || fatal "Interrupted ny user."
#fi
#
#echo "" >> $log_file
#echo "# -" >> $log_file
#echo "# - Eanable nextcloud app '$_app'" >> $log_file
#echononl "Eanable nextcloud app '$_app'.."
#
#echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:enable \"$_app\"" >> $log_file
#sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:enable "$_app" >> $log_file 2>&1
#
#if [[ $? -eq 0 ]]; then
# echo_ok
#else
# echo_failed
# error "For more informations see log output: \"$log_file\"."
#
# echononl "continue anyway [yes/no]: "
# read OK
# OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
# while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
# echononl "Wrong entry! - repeat [yes/no]: "
# read OK
# done
# [[ $OK = "yes" ]] || fatal "Interrupted ny user."
#fi
blank_line
if $COLABORA_SERVICE_INSTALLED ; then
# - Install and enable nextcloud app 'richdocuments'
# -
_app="richdocuments"
echo "" >> $log_file
echo "# -" >> $log_file
echo "# - Install nextcloud app '$_app'" >> $log_file
echononl "Install nextcloud app '$_app'.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:install \"$_app\"" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:install "$_app" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echo "" >> $log_file
echo "# -" >> $log_file
echo "# - Eanable nextcloud app '$_app'" >> $log_file
echononl "Eanable nextcloud app '$_app'.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:enable \"$_app\"" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:enable "$_app" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
echo "" >> $log_file
echo "# -" >> $log_file
echo "# - Configure nextcloud app '$_app'" >> $log_file
echononl "Configure nextcloud app '$_app'.."
echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" config:app:set richdocuments wopi_url --value=\"${WOPI_URL}\"" >> $log_file
sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" config:app:set richdocuments wopi_url --value="${WOPI_URL}" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
fi # if $COLABORA_SERVICE_INSTALLED
blank_line
# - Install and enable nextcloud app 'bruteforcesettings'
# -
#_app="bruteforcesettings"
#echo "" >> $log_file
#echo "# -" >> $log_file
#echo "# - Install nextcloud app '$_app'" >> $log_file
#echononl "Install nextcloud app '$_app'.."
#
#echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:install \"$_app\"" >> $log_file
#sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:install "$_app" >> $log_file 2>&1
#
#if [[ $? -eq 0 ]]; then
# echo_ok
#else
# echo_failed
# error "For more informations see log output at '$log_file'."
#
# echononl "continue anyway [yes/no]: "
# read OK
# OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
# while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
# echononl "Wrong entry! - repeat [yes/no]: "
# read OK
## done
# [[ $OK = "yes" ]] || fatal "Interrupted ny user."
##
#
#echo "" >> $log_file
#echo "# -" >> $log_file
#echo "# - Eanable nextcloud app '$_app'" >> $log_file
#echononl "Eanable nextcloud app '$_app'.."
#
#echo "sudo -u \"$HTTP_USER\" \"$php_binary\" \"${INSTALL_DIR}/occ\" app:enable \"$_app\"" >> $log_file
#sudo -u "$HTTP_USER" "$php_binary" "${INSTALL_DIR}/occ" app:enable "$_app" >> $log_file 2>&1
#
#if [[ $? -eq 0 ]]; then
# echo_ok
#else
# echo_failed
# error "For more informations see log output at '$log_file'."
#
# echononl "continue anyway [yes/no]: "
# read OK
# OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
# while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
# echononl "Wrong entry! - repeat [yes/no]: "
# read OK
# done
# [[ $OK = "yes" ]] || fatal "Interrupted ny user."
#fi
# -----
# - Doing some post-installation tasks
# -----
echo ""
echo ""
echo -e "\033[37m\033[1mDoing some post-installation tasks..\033[m"
echo ""
echo "" >> $log_file
echo "" >> $log_file
echo "# -----" >> $log_file
echo "# - Doing some post-installation tasks" >> $log_file
echo "# -----" >> $log_file
echo "" >> $log_file
echo "# - Restart PHP engine" >> $log_file
echo "# -" >> $log_file
echononl "Restart PHP engine.."
if [[ "$PHP_ENGINE" = "FPM" ]]; then
if $systemd_supported ; then
echo "systemctl restart \"php-${PHP_VERSION}-fpm\"" >> $log_file
systemctl restart "php-${PHP_VERSION}-fpm" >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
echo "/etc/init.d/php-${PHP_VERSION}-fpm restart" >> $log_file
/etc/init.d/php-${PHP_VERSION}-fpm restart >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
fi
else
echo_skipped
fi
if $apache2_installed ; then
# - Start Apache Webserver
# -
echononl "Start Apache Webserver.."
if $IS_HTTPD_RUNNING ; then
echo "" >> $log_file
echo "# - Restart Apache Webserver" >> $log_file
echo "# -" >> $log_file
if $systemd_supported ; then
echo "systemctl start apache2" >> $log_file
systemctl start apache2 >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
echo "/etc/init.d/apache2 start" >> $log_file
/etc/init.d/apache2 start >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
fi
else
echo_skipped
warn "The webserver was not running, so it will be keept down!"
fi
elif $nginx_installed ; then
# - Start Nginx Webserver
# -
echononl "Start Nginx Webserver.."
if $IS_HTTPD_RUNNING ; then
echo "" >> $log_file
echo "# - Start Nginx Webserver" >> $log_file
echo "# -" >> $log_file
if $systemd_supported ; then
echo "systemctl start nginx" >> $log_file
systemctl start nginx >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
else
echo "/etc/init.d/nginx start" >> $log_file
/etc/init.d/nginx start >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "For more informations see log output at '$log_file'."
echononl "continue anyway [yes/no]: "
read OK
OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')"
while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do
echononl "Wrong entry! - repeat [yes/no]: "
read OK
done
[[ $OK = "yes" ]] || fatal "Interrupted ny user."
fi
fi
else
echo_skipped
warn "The webserver was not running, so it will be keept down!"
fi
fi #if $apache2_installed
# - Flush and restart redis service
# -
_redis_cli_bin="$(which redis-cli)"
if [[ -z "$_redis_cli_bin" ]]; then
if [[ -x "/usr/local/bin/redis-cli" ]]; then
_redis_cli_bin="/usr/local/bin/redis-cli"
fi
fi
echononl "Flush redis cache.."
if [[ -x "$_redis_cli_bin" ]]; then
echo "" >> $log_file
echo "# - Flush redis cache" >> $log_file
echo "# -" >> $log_file
echo "$_redis_cli_bin flushall" >> $log_file
$_redis_cli_bin flushall >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
echo "" >> $log_file
echo "# - Restart redis service" >> $log_file
echo "# -" >> $log_file
echononl "Restart redis service.."
if $systemd_supported ; then
echo "systemctl restart redis-server" >> $log_file
systemctl restart redis-server >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
fi
else
echo "/etc/init.d/redis-server restart" >> $log_file
/etc/init.d/redis-server restart >> $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
fi
fi
else
echo_failed
fi
else
echo_skipped
warn "No 'redis' services found at '$(hostname -f)'!"
fi
blank_line
clean_up 0
#------------------------------------------------------------------------
## - Enable maintenance mode
## -
su -c "/usr/local/php/bin/php ${WEB_BASE_DIR}/htdocs/occ maintenance:mode --on" -s /bin/bash $HTTP_USER
## - Disable maintenance mode
## -
su -c "/usr/local/php/bin/php ${WEB_BASE_DIR}/htdocs/occ maintenance:mode --off" -s /bin/bash $HTTP_USER
## - Deactivate third party apps
## -
for _app in $THIRD_PARTY_APPS ; do
su -c"/usr/local/php/bin/php ${WEB_BASE_DIR}/htdocs/occ app:disable $_app" -s /bin/bash $HTTP_USER
done
## - Enable third party apps
## -
for _app in $THIRD_PARTY_APPS ; do
su -c"/usr/local/php/bin/php ${WEB_BASE_DIR}/htdocs/occ app:install $_app" -s /bin/bash $HTTP_USER
su -c"/usr/local/php/bin/php ${WEB_BASE_DIR}/htdocs/occ app:enable $_app" -s /bin/bash $HTTP_USER
done
#------------------------------------------------------------------------
# see: https://doc.owncloud.org/server/8.0/admin_manual/maintenance/upgrade.html
while IFS= read -r -d '' n; do
[[ ! -d "${n}/files" ]] && continue
su -c "/usr/local/php/bin/php ${WEB_BASE_DIR}/htdocs/console.php files:scan --path `basename $n`" -s /bin/bash $HTTP_USER
done < <(find $WEB_BASE_DIR/data/ -mindepth 1 -maxdepth 1 -type d -print0)
su -c "/usr/local/php/bin/php ${WEB_BASE_DIR}/htdocs/console.php files:scan --all" -s /bin/bash $HTTP_USER
su -c "/usr/local/php/bin/php ${WEB_BASE_DIR}/htdocs/occ maintenance:repair" -s /bin/bash $HTTP_USER