From 5b4b05cef82c7e4bf0990e0693eeec04c454bcbd Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 29 Oct 2018 01:55:35 +0100 Subject: [PATCH] Relaunch scripts. --- OLD/create_sympa_listdomain.sh.00 | 1423 ++++++++++ OLD/install_sympa.sh.00 | 4206 +++++++++++++++++++++++++++++ conf/install_sympa.conf.sample | 13 +- create_sympa_listdomain.sh | 350 ++- install_sympa.sh | 1963 ++++++++++---- 5 files changed, 7175 insertions(+), 780 deletions(-) create mode 100755 OLD/create_sympa_listdomain.sh.00 create mode 100755 OLD/install_sympa.sh.00 diff --git a/OLD/create_sympa_listdomain.sh.00 b/OLD/create_sympa_listdomain.sh.00 new file mode 100755 index 0000000..8beefda --- /dev/null +++ b/OLD/create_sympa_listdomain.sh.00 @@ -0,0 +1,1423 @@ +#!/usr/bin/env bash + +script_name="$(basename $(realpath $0))" +working_dir="$(dirname $(realpath $0))" + +backup_date="$(date +%Y-%m-%d-%H%M)" + + +## --- +## --- Sympa Multidomain Setup +## --- + + + +## --- +## --- Variable settings +## --- + +if [ -n "$1" ]; then + SYMPA_LIST_DOMAIN=$1 +else + SYMPA_LIST_DOMAIN= +fi + +conf_file_installation="${working_dir}/conf/install_sympa.conf" + +_VSERVER_GUEST=no + + + +## --- some functions +## --- +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$$ +} + +fatal(){ + echo "" + echo -e "[ \033[31m\033[1mError\033[m ]: $*" + echo "" + echo -e "\t\033[31m\033[1mInstalllation is canceled\033[m\033[m" + echo "" + exit 1 +} + +warn (){ + echo "" + echo -e "\t[ \033[33m\033[1mWarning\033[m ]: $*" + echo "" +} + +info (){ + echo "" + echo -e "\t[ \033[33m\033[1mInfo\033[m ]: $*" + echo "" +} + +error(){ + echo "" + echo -e "\t[ \033[31m\033[1mFehler\033[m ]: $*" + echo "" +} + +echo_ok() { + echo -e "\033[75G[ \033[32mok\033[m ]" +} +echo_failed(){ + echo -e "\033[75G[ \033[1;31mfailed\033[m ]" +} +echo_skipped() { + echo -e "\033[75G[ \033[33m\033[1mskipped\033[m ]" +} +## --- +## --- END: functions + + +## - Determin Sympa Home Directory +## - +SYMPA_HOME="$(realpath "$(echo ~sympa)")" +if [ ! -d "$SYMPA_HOME" ]; then + fatal "Cannot find Sympas Home (Installation) Directory" +fi +SYMPA_USER=`stat -c '%U' $SYMPA_HOME` +SYMPA_GROUP=`stat -c '%G' $SYMPA_HOME` + +## - Determin Sympa's PID directory +## - +if [[ -f "/etc/systemd/system/sympa.service" ]]; then + SYMPA_PID_DIR="$(dirname "$(grep -E "^\s*PIDFile" /etc/systemd/system/sympa.service | cut -d'=' -f2)")" +elif [[ -f "/lib/systemd/system/sympa.service" ]]; then + SYMPA_PID_DIR="$(dirname "$(grep -E "^\s*PIDFile" /lib/systemd/system/sympa.service | cut -d'=' -f2)")" +elif [[ -f "/etc/init.d/sympa" ]] ; then + if $(grep -E -q "\s*^sympapiddir=\"" /etc/init.d/sympa | cut -d'"' -f2) ; then + SYMPA_PID_DIR="$(grep -E "\s*^sympapiddir=" /etc/init.d/sympa | cut -d'"' -f2)" + else + SYMPA_PID_DIR="$(grep -E "\s*^sympapiddir=" /etc/init.d/sympa | cut -d'=' -f2)" + fi +fi +if [[ -z "$SYMPA_PID_DIR" ]]; then + fatal "Cannot determin variable 'SYMPA_PID_DIR'..!" +fi + +## - Determin Sympa's static directory +## - +if [[ -d "/usr/local/sympa/static_content" ]]; then + SYMPA_STATIC_DIR="/usr/local/sympa/static_content" +elif [[ -d "/var/lib/sympa/static_content" ]]; then + SYMPA_STATIC_DIR="/var/lib/sympa/static_content" +elif [[ -d "/usr/local/sympa/var/lib/sympa/static_content" ]]; then + SYMPA_STATIC_DIR="/usr/local/sympa/var/lib/sympa/static_content" +fi +if [[ -z "$SYMPA_STATIC_DIR" ]]; then + fatal "Cannot determin variable 'SYMPA_STATIC_DIR'..!" +fi + +## - Determin Sympa's cgi (script) directory +## - +if [[ -f "/usr/local/sympa/bin/wwsympa-wrapper.fcgi" ]]; then + SYMPA_CGI_DIR="/usr/local/sympa/bin" +elif [[ -f "/usr/local/sympa/lib/sympa/cgi/wwsympa-wrapper.fcgi" ]]; then + SYMPA_CGI_DIR="/usr/local/sympa/lib/sympa/cgi" +fi +if [[ -z "$SYMPA_STATIC_DIR" ]]; then + fatal "Cannot determin variable 'SYMPA_STATIC_DIR'..!" +fi + +## - Determin Sympa's systemd directory +## - +if [[ -f "/etc/systemd/system/sympa.service" ]]; then + SYMPA_SYSTEMD_DIR="/etc/systemd/system" +elif [[ -f "/lib/systemd/system/sympa.service" ]]; then + SYMPA_SYSTEMD_DIR="/lib/systemd/system" +fi + + +## - Determin the IP-Addresses +## - +#__ipv4="`ifconfig | grep -e \"^\s*inet \" | grep -v \"127.0.0.1\" | awk '{print$2}' | cut -d\":\" -f2 | sort | head -1`" +#__ipv6="`ifconfig | grep -e \"^\s*inet6 \" | awk '{print$2}' | grep -v -e \"^::1/\" | grep -v -e \"^fe80\" | cut -d\"/\" -f1 | sort | head -1`" + +_hostname="$(hostname -f)" +if [[ -n "$_hostname" ]] ; then + __ipv4="$(dig +short "$_hostname")" + __ipv6="$(dig +short "$_hostname" AAAA)" +fi + + +_debian_apache_installation=false +_base_webserver_info_needed=false +_apache_vhost_dir="" +apache_log_dir="" +apache_conf_dir="" +apache_vhost_dir="" +## - Determin VHost Configuration Directory +## - +if dpkg -l apache2 2> /dev/null | grep -e "^ii" > /dev/null 2>&1 ; then + + _debian_apache_installation=true + + if [ -d "/etc/apache2" -a -d "/etc/apache2/sites-available" ]; then + apache_vhost_dir=/etc/apache2/sites-available + apache_conf_dir=/etc/apache2 + if [ -d "/var/log/apache2" ]; then + apache_log_dir=/var/log/apache2 + else + error "Found Debian Apache Installation, but no Log Directory found!" + fatal "Something went wron with your Apache Installation" + fi + else + error "Found Debian Apache Installation, but no Configuration Directory for vhosts!" + fatal "Something went wron with your Apache Installation" + fi + +else + + ## - Determin httpd binary + ## - + _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 + ## - Determin ServerRoot Directory + ## - + apache_base_dir_found=false + _pass_apache_base_dir=false + 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 [ -z "$apache_base_dir" ];then + _base_webserver_info_needed=true + apache_base_dir_found=true + else + _pass_apache_base_dir=true + fi + + ## - Determin Apache Configuration Directory + ## - + apache_conf_dir_found=false + if [ -n "$apache_base_dir" ];then + if [ -d "${apache_base_dir}/conf" ]; then + apache_conf_dir=${apache_base_dir}/conf + apache_conf_dir_found=true + else + _base_webserver_info_needed=true + fi + else + _base_webserver_info_needed=true + fi + + ## - Determin Apache Log Directory + ## - + _apache_errorlog_dir=`$_httpd_binary -t -D DUMP_RUN_CFG | grep "Main ErrorLog:" | awk '{print$3}' | tr -d '"'` + if [ -d "`dirname $_apache_errorlog_dir`" ]; then + apache_log_dir=`dirname $_apache_errorlog_dir` + fi + + ## - Determin VHost Configuration Directory + ## - + if [ -d "${apache_conf_dir}/vhosts" ]; then + _apache_vhost_dir=${apache_conf_dir}/vhosts + fi +fi + +if $_base_webserver_info_needed ; then + fatal "Apache Webserver not found!" +fi + +_postfix_info_needed=false +if [ -f "/etc/postfix/sympa_domains" ]; then + POSTFIX_RELAY_DOMAIN_FILE=/etc/postfix/sympa_domains +else + _postfix_info_needed=true +fi +if [ -f "/etc/postfix/sympa_transport" ];then + POSTFIX_TRANSPORT_FILE=/etc/postfix/sympa_transport +else + _postfix_info_needed=true +fi +#if [ -f "/etc/postfix/sympa_recipient_canonical_maps" ];then +# POSTFIX_CANONICAL_MAPS=/etc/postfix/sympa_recipient_canonical_maps +#else +# _postfix_info_needed=true +#fi +if [ -f "/etc/postfix/sympa_virtual_aliases" ];then + POSTFIX_VIRTUAL_ALIAS_MAPS=/etc/postfix/sympa_virtual_aliases +else + _postfix_info_needed=true +fi + + +clear +echo +echo +echo -e "\033[21G\033[32mCreate new domain for Sympa mailing list manager \"`hostname -f`\"..\033[m" + +echo "" +echo "" +echo -e "\033[32m--\033[m" +echo "" +if [ -z "$SYMPA_LIST_DOMAIN" ]; then + echo "Insert the Name for new domain (i.e. lists.oopen.de)." + echo "" + echo "" + SYMPA_LIST_DOMAIN= + echononl "Name of the new domain: " + read SYMPA_LIST_DOMAIN + while [ "X$SYMPA_LIST_DOMAIN" = "X" ] ; do + echo -e "\n\t\033[33m\033[1mDomain name is madatory. retry..\033[m\n" + echononl "Name of the new domain: " + read SYMPA_LIST_DOMAIN + done +else + echo "Create Configuration for domain \"$SYMPA_LIST_DOMAIN\".." +fi + + +## - Try to find Sympa's main configuration file +## - +if [ -f "/etc/sympa/sympa.conf" ];then + _SYMPA_MAIN_CONF_FILE=/etc/sympa/sympa.conf +elif [ -f "${SYMPA_HOME}/etc/sympa.conf" ];then + _SYMPA_MAIN_CONF_FILE=${SYMPA_HOME}/etc/sympa.conf +else + _SYMPA_MAIN_CONF_FILE= +fi +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Insert Main Configuration File for Sympa Installation. " +echo "" +SYMPA_MAIN_CONF_FILE= +if [ -n "$_SYMPA_MAIN_CONF_FILE" ]; then + echononl "Sympa's main configuration file [${_SYMPA_MAIN_CONF_FILE}]: " + read SYMPA_MAIN_CONF_FILE + if [ "X$SYMPA_MAIN_CONF_FILE" = "X" ]; then + SYMPA_MAIN_CONF_FILE=$_SYMPA_MAIN_CONF_FILE + fi +else + while [ "X$SYMPA_MAIN_CONF_FILE" = "X" ]; do + echononl "Sympa's main configuration file: " + read SYMPA_MAIN_CONF_FILE + if [ -z "$SYMPA_MAIN_CONF_FILE" ]; then + echo -e "\n\t\033[1;33mDeclaration is mandatory!\033[m Try again..\n" + fi + done +fi +if [ ! -f "$SYMPA_MAIN_CONF_FILE" ]; then + fatal "Sympa's main configuration file (${SYMPA_MAIN_CONF_FILE}) not found" +fi + +## - Base List Data Directory +## - +if grep -e "^\s*home" $SYMPA_MAIN_CONF_FILE > /dev/null 2>&1 ; then + _SYMPA_LIST_DATA_DIR=`grep -e "^\s*home" $SYMPA_MAIN_CONF_FILE 2> /dev/null | awk '{print$2}'` +elif grep -e "^\s*#\s*home" $SYMPA_MAIN_CONF_FILE > /dev/null 2>&1 ; then + _SYMPA_LIST_DATA_DIR=`grep -e "^\s*#\s*home" $SYMPA_MAIN_CONF_FILE 2> /dev/null | awk '{print$2}'` +fi + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Insert Base Directory containing Lists Data Directories. " +echo "" +SYMPA_LIST_DATA_DIR= +if [ -n "$_SYMPA_LIST_DATA_DIR" ]; then + echononl "Sympa's base lists data directory [${_SYMPA_LIST_DATA_DIR}]: " + read SYMPA_LIST_DATA_DIR + if [ "X$SYMPA_LIST_DATA_DIR" = "X" ]; then + SYMPA_LIST_DATA_DIR=$_SYMPA_LIST_DATA_DIR + fi +else + while [ "X$SYMPA_LIST_DATA_DIR" = "X" ]; do + echononl "Sympa's base lists data directory: " + read SYMPA_LIST_DATA_DIR + if [ -z "$SYMPA_LIST_DATA_DIR" ]; then + echo -e "\n\t\033[1;33mDeclaration is mandatory!\033[m Try again..\n" + fi + done +fi +if [ ! -d "$SYMPA_LIST_DATA_DIR" ]; then + fatal "Base Directory for List Data (${SYMPA_LIST_DATA_DIR}) not found" +fi + + +#_main_domain=`echo $SYMPA_LIST_DOMAIN | grep -o '[^.]*\.[^.]*$'` +_SYMPA_LISTMASTER="postmaster@`echo $SYMPA_LIST_DOMAIN | grep -o '[^.]*\.[^.]*$'`" +_SYMPA_WEBINTERFACE_TITLE="Mailing Lists `echo $SYMPA_LIST_DOMAIN | grep -o '[^.]*\.[^.]*$'`" + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Insert E-Mail Address of Listmaster(s) for \"$SYMPA_LIST_DOMAIN\". " +echo "" +echo " - COMMA seperated list of email addresses" +echo "" +SYMPA_LISTMASTER= +if [ -n "$_SYMPA_LISTMASTER" ]; then + echononl "listmaster [${_SYMPA_LISTMASTER}]: " + read SYMPA_LISTMASTER + if [ "X$SYMPA_LISTMASTER" = "X" ]; then + SYMPA_LISTMASTER=$_SYMPA_LISTMASTER + fi +else + while [ "X$SYMPA_LISTMASTER" = "X" ]; do + echononl "listmaster: " + read SYMPA_LISTMASTER + if [ -z "$SYMPA_LISTMASTER" ]; then + echo -e "\n\t\033[1;33mDeclaration is mandatory!\033[m Try again..\n" + fi + done +fi + +if grep -e "^\s*listmaster" $SYMPA_MAIN_CONF_FILE > /dev/null 2>&1 ; then + _POSTMASTER_ABUSE_ADDRESS=`grep -e "^\s*listmaster" $SYMPA_MAIN_CONF_FILE 2> /dev/null | awk '{print$2}'` +elif grep -e "^\s*#\s*listmaster" $SYMPA_MAIN_CONF_FILE > /dev/null 2>&1 ; then + _POSTMASTER_ABUSE_ADDRESS=`grep -e "^\s*#\s*listmaster" $SYMPA_MAIN_CONF_FILE 2> /dev/null | awk '{print$2}'` +fi +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Insert E-Mail Address(es) to which e-mails to (postmaster|abuse)@$SYMPA_LIST_DOMAIN. " +echo "should be forwarded" +echo "" +echo " - BLANK seperated list of email addresses" +echo "" +POSTMASTER_ABUSE_ADDRESS= +if [ -n "$_POSTMASTER_ABUSE_ADDRESS" ]; then + echononl "forward adress(es) [${_POSTMASTER_ABUSE_ADDRESS}]: " + read POSTMASTER_ABUSE_ADDRESS + if [ "X$POSTMASTER_ABUSE_ADDRESS" = "X" ]; then + POSTMASTER_ABUSE_ADDRESS=$_POSTMASTER_ABUSE_ADDRESS + fi +else + while [ "X$POSTMASTER_ABUSE_ADDRESS" = "X" ]; do + echononl "forward adress(es): " + read POSTMASTER_ABUSE_ADDRESS + if [ -z "$POSTMASTER_ABUSE_ADDRESS" ]; then + echo -e "\n\t\033[1;33mDeclaration is mandatory!\033[m Try again..\n" + fi + done +fi + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Insert title for the Webinterface." +echo "" +SYMPA_WEBINTERFACE_TITLE= +if [ -n "$_SYMPA_WEBINTERFACE_TITLE" ]; then + echononl "Title for webinterface [${_SYMPA_WEBINTERFACE_TITLE}]: " + read SYMPA_WEBINTERFACE_TITLE + if [ "X$SYMPA_WEBINTERFACE_TITLE" = "X" ]; then + SYMPA_WEBINTERFACE_TITLE=$_SYMPA_WEBINTERFACE_TITLE + fi +else + while [ "X$SYMPA_WEBINTERFACE_TITLE" = "X" ]; do + echononl "Title for webinterface: " + read SYMPA_WEBINTERFACE_TITLE + if [ -z "$SYMPA_WEBINTERFACE_TITLE" ]; then + echo -e "\n\t\033[1;33mDeclaration is mandatory!\033[m Try again..\n" + fi + done +fi + +if $_postfix_info_needed ; then + echo "" + echo "" + echo -e "\033[32m-- Postfix SMTP Server related\033[m" + echo "" + echo "Insert filename includes the relay domain declarations (for sympa lists)" + echo "" + POSTFIX_RELAY_DOMAIN_FILE= + while [ "X$POSTFIX_RELAY_DOMAIN_FILE" = "X" ] ; do + echononl "Filename for relay domain declarations: " + read POSTFIX_RELAY_DOMAIN_FILE + if [ -z "$POSTFIX_RELAY_DOMAIN_FILE" ]; then + echo -e "\n\t\033[1;33mDeclaration is mandatory!\033[m Try again..\n" + elif [ ! -f "$POSTFIX_RELAY_DOMAIN_FILE" ];then + echo -e "\n\t\033[1;33mFile \"${POSTFIX_RELAY_DOMAIN_FILE}\" not found!\033[m Try again..\n" + POSTFIX_RELAY_DOMAIN_FILE="" + fi + done + + + echo "" + echo -e "\033[32m--\033[m" + echo "" + echo "Insert filename includes the (postfix) transport declarations (for sympa lists)" + echo "" + POSTFIX_TRANSPORT_FILE= + while [ "X$POSTFIX_TRANSPORT_FILE" = "X" ] ; do + echononl "Filename for relay domain declarations: " + read POSTFIX_TRANSPORT_FILE + if [ -z "$POSTFIX_TRANSPORT_FILE" ]; then + echo -e "\n\t\033[1;33mDeclaration is mandatory!\033[m Try again..\n" + elif [ ! -f "$POSTFIX_TRANSPORT_FILE" ];then + echo -e "\n\t\033[1;33mFile \"${POSTFIX_TRANSPORT_FILE}\" not found!\033[m Try again..\n" + POSTFIX_TRANSPORT_FILE="" + fi + done + + + echo "" + echo -e "\033[32m--\033[m" + echo "" + echo "Insert the aliases map file, which includes the forward address(es) for" + echo "(postmaste|abuse)@lists.domain.tld (using virtual_alias_maps)" + echo "" + POSTFIX_VIRTUAL_ALIAS_MAPS= + while [ "X$POSTFIX_VIRTUAL_ALIAS_MAPS" = "X" ] ; do + echononl "Filename for map declarations: " + read POSTFIX_VIRTUAL_ALIAS_MAPS + if [ -z "$POSTFIX_VIRTUAL_ALIAS_MAPS" ]; then + echo -e "\n\t\033[1;33mDeclaration is mandatory!\033[m Try again..\n" + elif [ ! -f "$POSTFIX_VIRTUAL_ALIAS_MAPS" ];then + echo -e "\n\t\033[1;33mFile \"${POSTFIX_VIRTUAL_ALIAS_MAPS}\" not found!\033[m Try again..\n" + POSTFIX_VIRTUAL_ALIAS_MAPS="" + fi + done + + + #echo "" + #echo -e "\033[32m--\033[m" + #echo "" + #echo "Insert filename includes the (postfix) address rewriting to support" + #echo "addresse like (postmaste|abuse)@lists.domain.tld (using canonical maps)" + #echo "" + #POSTFIX_CANONICAL_MAPS= + #while [ "X$POSTFIX_CANONICAL_MAPS" = "X" ] ; do + # echononl "Filename for map declarations: " + # read POSTFIX_CANONICAL_MAPS + # if [ -z "$POSTFIX_CANONICAL_MAPS" ]; then + # echo -e "\n\t\033[1;33mDeclaration is mandatory!\033[m Try again..\n" + # elif [ ! -f "$POSTFIX_CANONICAL_MAPS" ];then + # echo -e "\n\t\033[1;33mFile \"${POSTFIX_CANONICAL_MAPS}\" not found!\033[m Try again..\n" + # POSTFIX_CANONICAL_MAPS="" + # fi + #done + +fi + +if ! $_debian_apache_installation ; then + echo "" + echo "" + echo -e "\033[32m-- Apache Webserver related\033[m" + echo "" + echo "Insert Directory where the vhost configuration file should stay.." + echo "" + apache_vhost_dir= + while [ "X$apache_vhost_dir" = "X" ] ; do + if [ -n "$_apache_vhost_dir" ];then + echononl "VHost Base Directory [$_apache_vhost_dir]: " + read apache_vhost_dir + if [ "X$apache_vhost_dir" = "X" ]; then + apache_vhost_dir=$_apache_vhost_dir + fi + else + echononl "VHost Base Directory: " + read apache_vhost_dir + if [ ! -d "$read apache_vhost_dir" ];then + echo -e "\n\t\033[1;33mDirectory \"${apache_vhost_dir}\" not found! Try again..\033[m\n" + apache_vhost_dir="" + fi + fi + done + + if [ -z "$apache_log_dir" ]; then + + echo "" + echo "" + echo -e "\033[32m--\033[m" + echo "" + echo "Insert Directory where the log files should stay.." + echo "" + while [ "X$apache_log_dir" = "X" ] ; do + echononl "Apache Log Directory: " + read apache_log_dir + if [ -z "$apache_log_dir" ]; then + echo -e "\n\t\033[1;33mDeclaration is mandatory!\033[m Try again..\n" + elif [ ! -d "$apache_log_dir" ];then + echo -e "\n\t\033[1;33mDirectory \"${apache_log_dir}\" not found!\033[m Try again..\n" + apache_log_dir="" + fi + done + fi +fi + +echo "" +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Insert the IP-Addresses where the webserver should listen for that site." +echo "" +IPv4= +while [ "X$IPv4" = "X" ];do + if [ -z "$__ipv4" ]; then + echononl "IPv4 address: " + read IPv4 + if [ "X$IPv4" = "X" ]; then + echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n" + fi + else + echononl "IPv4 address [$__ipv4]: " + read IPv4 + if [ "X$IPv4" = "X" ]; then + IPv4=$__ipv4 + fi + fi +done +IPv6= +while [ "X$IPv6" = "X" ];do + if [ -z "$__ipv6" ]; then + echononl "IPv6 address: " + read IPv6 + if [ "X$IPv6" = "X" ]; then + echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n" + fi + else + echononl "IPv6 address [$__ipv6]: " + read IPv6 + if [ "X$IPv6" = "X" ]; then + IPv6=$__ipv6 + fi + fi +done + + +_wwsympa_url=`grep -e "^\s*wwsympa_url" $SYMPA_MAIN_CONF_FILE | awk '{print$2}'` +_wwsympa_dir="$(echo $_wwsympa_url | grep / | cut -d/ -f4-)" +SYMPA_WEB_URL=https://${SYMPA_LIST_DOMAIN}/$_wwsympa_dir + + +OK= +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Are you installing on a VServer guest system?" +echo "" +echononl "VServer Gastsystem (yes/no) [$_VSERVER_GUEST]: " +read OK +if [ "X$OK" = "X" ]; then + OK=$_VSERVER_GUEST +fi +OK=`echo "$OK" | tr '[:upper:]' '[:lower:]'` +while [ "X$OK" != "Xyes" -a "X$OK" != "Xno" ]; do + echo "" + echononl "\twrong entry! [yes/no]: " + read OK + OK=`echo "$OK" | tr '[:upper:]' '[:lower:]'` +done +if [ "$OK" = "yes" ]; then + SYSTEMD_EXISTS=false +else + if [ "X`which systemd`" = "X" ]; then + SYSTEMD_EXISTS=false + else + SYSTEMD_EXISTS=true + fi +fi + + +clear +echo "" +echo -e "\033[15G\033[32mSetup new Sympa Domain \033[37m\033[1m$SYMPA_LIST_DOMAIN\033[0;32m using the following Parameters \033[m" +echo "" +echo "Sympa Installation Directory.............: $SYMPA_HOME" +echo "Sympa main configuration file............: $SYMPA_MAIN_CONF_FILE" +echo "Sympa User...............................: $SYMPA_USER" +echo "Sympa Group..............................: $SYMPA_GROUP" +echo "" +echo "Sympa List Domain........................: $SYMPA_LIST_DOMAIN" +echo "Sympa List Data Directory................: $SYMPA_LIST_DATA_DIR" +echo "Sympa's PID Directory....................: $SYMPA_PID_DIR" +echo "Sympa's CGI Directory....................: $SYMPA_CGI_DIR" +echo "Sympa's Staic Directory..,...............: $SYMPA_STATIC_DIR" +echo "Sympa's Systemd Directory................: $SYMPA_SYSTEMD_DIR" +echo "Listmaster...............................: $SYMPA_LISTMASTER" +echo "URL of the Webinterface..................: $SYMPA_WEB_URL" +echo "Title for the Webinterface...............: $SYMPA_WEBINTERFACE_TITLE" +echo "" +echo "Postfix related:" +echo " relay domain file for sympa domains...: $POSTFIX_RELAY_DOMAIN_FILE" +echo " transport file for sympa domains......: $POSTFIX_TRANSPORT_FILE" +#echo " canonical maps (postmaster|abuse)@....: $POSTFIX_CANONICAL_MAPS" +echo " virtual maps file (postmaster|abuse)@.: $POSTFIX_VIRTUAL_ALIAS_MAPS" +echo " virtual maps forward address(es)......: $POSTMASTER_ABUSE_ADDRESS" +echo "" +echo "Apache Webserver related:" +echo " IPv4 Address (Sympa Webinterface).....: $IPv4" +echo " IPv6 Address (Sympa Webinterface).....: $IPv6" +echo "" +echo " Apache Configuration Directory........: $apache_conf_dir" +echo " Apache VHost Directory................: $apache_vhost_dir" +echo " Apache Log Directory..................: $apache_log_dir" +echo "" + +echononl "Start with that configuration? [yes/no]: " +read OK +while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "XNo" -a "X$OK" != "Xno" ] +do + echononl "wrong entry! [yes/no] :" + read OK +done +[ $OK = "Yes" -o $OK = "yes" ] || fatal "Change parameters and restart script: `basename $0`" + +echo "" +echo "" + + +_log_file=create-sympa-domain_$SYMPA_LIST_DOMAIN.log +if [ -f "$_log_file" ];then + mv $_log_file $_log_file.`date +%Y%m%d-%H%M` +fi +touch ${_logdir}/main.log + +echo "## -----------" >> $_log_file +echo "## - Setup new Sympa Domain \"$SYMPA_LIST_DOMAIN\" using the following Parameters" >> $_log_file +echo "## -----------" >> $_log_file +echo "## -" >> $_log_file +echo "## - Sympa Installation Directory.............: $SYMPA_HOME" >> $_log_file +echo "## - Sympa main configuration file............: $SYMPA_MAIN_CONF_FILE" >> $_log_file +echo "## - Sympa User...............................: $SYMPA_USER" >> $_log_file +echo "## - Sympa Group..............................: $SYMPA_GROUP" >> $_log_file +echo "## -" >> $_log_file +echo "## - Sympa List Domain........................: $SYMPA_LIST_DOMAIN" >> $_log_file +echo "## - Sympa List Data Directory................: $SYMPA_LIST_DATA_DIR" >> $_log_file +echo "## - Sympa's PID Directory....................: $SYMPA_PID_DIR" >> $_log_file +echo "## - Sympa's CGI Directory....................: $SYMPA_CGI_DIR" >> $_log_file +echo "## - Sympa's Staic Directory..,...............: $SYMPA_STATIC_DIR" >> $_log_file +echo "## - Sympa's Systemd Directory................: $SYMPA_SYSTEMD_DIR" >> $_log_file +echo "## - Listmaster...............................: $SYMPA_LISTMASTER" >> $_log_file +echo "## - URL of the Webinterface..................: $SYMPA_WEB_URL" >> $_log_file +echo "## - Title for the Webinterface...............: $SYMPA_WEBINTERFACE_TITLE" >> $_log_file +echo "## -" >> $_log_file +echo "## - Postfix related:" >> $_log_file +echo "## - relay domain file for sympa domains...: $POSTFIX_RELAY_DOMAIN_FILE" >> $_log_file +echo "## - transport file for sympa domains......: $POSTFIX_TRANSPORT_FILE" >> $_log_file +#echo "## - canonical maps (postmaster|abuse)@....: $POSTFIX_CANONICAL_MAPS" >> $_log_file +echo "## - virtual maps file (postmaster|abuse)@.: $POSTFIX_VIRTUAL_ALIAS_MAPS" >> $_log_file +echo "## - virtual maps forward address(es)......: $POSTMASTER_ABUSE_ADDRESS" >> $_log_file +echo "## -" >> $_log_file +echo "## - Apache Webserver related:" >> $_log_file +echo "## - IPv4 Address (Sympa Webinterface).....: $IPv4" >> $_log_file +echo "## - IPv6 Address (Sympa Webinterface).....: $IPv6" >> $_log_file +echo "## -" >> $_log_file +echo "## - Apache Configuration Directory........: $apache_conf_dir" >> $_log_file +echo "## - Apache VHost Directory................: $apache_vhost_dir" >> $_log_file +echo "## - Apache Log Directory..................: $apache_log_dir" >> $_log_file +echo "## -" >> $_log_file +echo "" >> $_log_file + +echo "SYMPA_HOME=$SYMPA_HOME" >> $_log_file +echo "SYMPA_MAIN_CONF_FILE=$SYMPA_MAIN_CONF_FILE" >> $_log_file +echo "SYMPA_USER=$SYMPA_USER" >> $_log_file +echo "SYMPA_GROUP=$SYMPA_GROUP" >> $_log_file +echo "" >> $_log_file +echo "SYMPA_LIST_DOMAIN=$SYMPA_LIST_DOMAIN" >> $_log_file +echo "SYMPA_LIST_DATA_DIR=$SYMPA_LIST_DATA_DIR" >> $_log_file +echo "SYMPA_PID_DIR=$SYMPA_PID_DIR" >> $_log_file +echo "SYMPA_CGI_DIR=$SYMPA_CGI_DIR" >> $_log_file +echo "SYMPA_STATIC_DIR=$SYMPA_STATIC_DIR" >> $_log_file +echo "SYMPA_SYSTEMD_DIR=$SYMPA_SYSTEMD_DIR" >> $_log_file +echo "SYMPA_LISTMASTER=$SYMPA_LISTMASTER" >> $_log_file +echo "SYMPA_WEB_URL=$SYMPA_WEB_URL" >> $_log_file +echo "SYMPA_WEBINTERFACE_TITLE=$SYMPA_WEBINTERFACE_TITLE" >> $_log_file +echo "" >> $_log_file +echo "POSTFIX_RELAY_DOMAIN_FILE=$POSTFIX_RELAY_DOMAIN_FILE" >> $_log_file +echo "POSTFIX_TRANSPORT_FILE=$POSTFIX_TRANSPORT_FILE" >> $_log_file +echo "POSTFIX_CANONICAL_MAPS=$POSTFIX_CANONICAL_MAPS" >> $_log_file +echo "POSTFIX_VIRTUAL_ALIAS_MAPS=$POSTFIX_VIRTUAL_ALIAS_MAPS" >> $_log_file +echo "POSTMASTER_ABUSE_ADDRESS=$POSTMASTER_ABUSE_ADDRESS" >> $_log_file +echo "" >> $_log_file +echo "IPv4=$IPv4" >> $_log_file +echo "IPv6=$IPv6" >> $_log_file +echo "apache_conf_dir=$apache_conf_dir" >> $_log_file +echo "apache_vhost_dir=$apache_vhost_dir" >> $_log_file +echo "apache_log_dir=$apache_log_dir" >> $_log_file + +echo "" >> $_log_file + +## - Create Configuration Directory +## - +if [ -d "${SYMPA_HOME}/etc/$SYMPA_LIST_DOMAIN" ]; then + warn "Configuration Directory ${SYMPA_HOME}/etc/$SYMPA_LIST_DOMAIN\" aready exists" + echononl "Continue anyway? [yes/no]: " + read OK + while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "XNo" -a "X$OK" != "Xno" ]; do + echononl "wrong entry! [yes/no] :" + read OK + done + [ $OK = "Yes" -o $OK = "yes" ] || fatal "Abortion by user.." + echo "" +else + echononl "\tCreate Configuration Directory for domain \"$SYMPA_LIST_DOMAIN\".." >> $_log_file + echo "" >> $_log_file + echo "## - Create Configuration Directory for domain \"$SYMPA_LIST_DOMAIN\".." >> $_log_file + echo "## -" >> $_log_file + echo "mkdir ${SYMPA_HOME}/etc/$SYMPA_LIST_DOMAIN" >> $_log_file + mkdir ${SYMPA_HOME}/etc/$SYMPA_LIST_DOMAIN >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fi +fi + +## - Set owner/group to Domains Configuration Directory +## - +echononl "\tSet owner/group for dir \"${SYMPA_HOME}/etc/${SYMPA_LIST_DOMAIN}\".." +echo "" >> $_log_file +echo "## - Set owner/group for directory \"${SYMPA_HOME}/etc/${SYMPA_LIST_DOMAIN}\".." >> $_log_file +echo "## -" >> $_log_file +echo "chown ${SYMPA_USER}:$SYMPA_GROUP ${SYMPA_HOME}/etc/$SYMPA_LIST_DOMAIN" >> $_log_file +chown ${SYMPA_USER}:$SYMPA_GROUP ${SYMPA_HOME}/etc/$SYMPA_LIST_DOMAIN >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +## - Set Permissions to Domains Configuration Directory +## - +echononl "\tSet Permissions for dir \"${SYMPA_HOME}/etc/${SYMPA_LIST_DOMAIN}\".." +echo "" >> $_log_file +echo "## - Set Permissions for directory \"${SYMPA_HOME}/etc/${SYMPA_LIST_DOMAIN}\".." >> $_log_file +echo "## -" >> $_log_file +echo "chmod 750 ${SYMPA_HOME}/etc/$SYMPA_LIST_DOMAIN" >> $_log_file +chmod 750 ${SYMPA_HOME}/etc/$SYMPA_LIST_DOMAIN >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +echo "" + +## - Create "robot.conf" +## - +if [ -f "${SYMPA_HOME}/etc/$SYMPA_LIST_DOMAIN/robot.conf" ]; then + warn "Configuration file ${SYMPA_HOME}/etc/$SYMPA_LIST_DOMAIN/robot.conf already exists" + echononl "Continue anyway? [yes/no]: " + read OK + while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "XNo" -a "X$OK" != "Xno" ]; do + echononl "wrong entry! [yes/no] :" + read OK + done + [ $OK = "Yes" -o $OK = "yes" ] || fatal "Abortion by user.." + _date=`date +%Y%m%d-%H%M` + echo "" >> $_log_file + echo "## - Backup existing configuration file" >> $_log_file + echo "## -" >> $_log_file + echo "cp -a ${SYMPA_HOME}/etc/${SYMPA_LIST_DOMAIN}/robot.conf \\" >> $_log_file + echo " ${SYMPA_HOME}/etc/${SYMPA_LIST_DOMAIN}/robot.conf.$_date" >> $_log_file + cp -a ${SYMPA_HOME}/etc/${SYMPA_LIST_DOMAIN}/robot.conf \ + ${SYMPA_HOME}/etc/${SYMPA_LIST_DOMAIN}/robot.conf.$_date + info "Old Configuration file was saved to file \"robot.$_date\"." +fi +echononl "\tCreate Configuration \"robot.conf\" for domain \"$SYMPA_LIST_DOMAIN\".." +echo "" >> $_log_file +echo "## - Create Configuration \"robot.conf\" for domain \"$SYMPA_LIST_DOMAIN\".." >> $_log_file +echo "## -" >> $_log_file +echo "cat < ${SYMPA_HOME}/etc/$SYMPA_LIST_DOMAIN/robot.conf +## This is a sample Virtual Host definition for Sympa +## Once adapted, this file should installed in vhost +## subdirectory in Sympa configuration directory. You'll +## have to create a corresponding vhost subdirectory in +## Sympa state directory. + +## Check the documentation related to virtual hosting on http://www.sympa.org + + +## This hostname will be compared with 'SERVER_NAME' ENV var in wwsympa.fcgi +## To deduce which Virtual Robot is being queried +http_host $SYMPA_LIST_DOMAIN + +## URL of the Webinterface +wwsympa_url $SYMPA_WEB_URL + +## Listmasters email addresses +listmaster $SYMPA_LISTMASTER + +## Title for the ML service +## It is displayed as a title in the web interface +title $SYMPA_WEBINTERFACE_TITLE + +create_list listmaster + +## The default action when entering the web interface +## Can be 'lists', 'home' or 'which' +default_home lists + +## lang +## Standardsprache (eine der unterstützen Sprachen) +## Dies ist die Standardsprache, die von Sympa verwendet wird +#lang en-US +lang de + +## You can define custom colors for the Virtual Robot's +## Web interface +dark_color #00aa00 +light_color #ddffdd +selected_color #0099cc +EOF" >> $_log_file +cat < ${SYMPA_HOME}/etc/$SYMPA_LIST_DOMAIN/robot.conf 2>> $_log_file +## This is a sample Virtual Host definition for Sympa +## Once adapted, this file should installed in vhost +## subdirectory in Sympa configuration directory. You'll +## have to create a corresponding vhost subdirectory in +## Sympa state directory. + +## Check the documentation related to virtual hosting on http://www.sympa.org + + +## This hostname will be compared with 'SERVER_NAME' ENV var in wwsympa.fcgi +## To deduce which Virtual Robot is being queried +http_host $SYMPA_LIST_DOMAIN + +## URL of the Webinterface +wwsympa_url $SYMPA_WEB_URL + +## Listmasters email addresses +listmaster $SYMPA_LISTMASTER + +## Title for the ML service +## It is displayed as a title in the web interface +title $SYMPA_WEBINTERFACE_TITLE + +create_list listmaster + +## The default action when entering the web interface +## Can be 'lists', 'home' or 'which' +default_home home + +## You can define custom colors for the Virtual Robot's +## Web interface +dark_color #00aa00 +light_color #ddffdd +selected_color #0099cc +EOF +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +## - Set owner/group for \"robot.conf\".. +## - +echononl "\tSet owner/group for \"robot.conf\".." +echo "" >> $_log_file +echo "## - Set owner/group for \"robot.conf\".." >> $_log_file +echo "## -" >> $_log_file +echo "chown ${SYMPA_USER}:$SYMPA_GROUP ${SYMPA_HOME}/etc/${SYMPA_LIST_DOMAIN}/robot.conf" >> $_log_file +chown ${SYMPA_USER}:$SYMPA_GROUP ${SYMPA_HOME}/etc/${SYMPA_LIST_DOMAIN}/robot.conf >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +echo "" + +## - Create Listdata Directory +## - +if [ -d "${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN" ]; then + warn "List Data Directory \"${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN\" aready exists" + echononl "Continue anyway? [yes/no]: " + read OK + while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "XNo" -a "X$OK" != "Xno" ]; do + echononl "wrong entry! [yes/no] :" + read OK + done + [ $OK = "Yes" -o $OK = "yes" ] || fatal "Abortion by user.." + echo "" +else + echononl "\tCreate List Data Directory \"${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN\".." + echo "" >> $_log_file + echo "## - Create List Data Directory \"${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN\".." >> $_log_file + echo "## -" >> $_log_file + echo "mkdir ${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN" >> $_log_file + mkdir ${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fi +fi + +## - Set owner/group to List Data Directory +## - +echononl "\tSet owner/group for dir \"${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN\".." +echo "" >> $_log_file +echo "## - Set owner/group for directory \"${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN\".." >> $_log_file +echo "## -" >> $_log_file +echo "chown ${SYMPA_USER}:$SYMPA_GROUP ${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN" >> $_log_file +chown ${SYMPA_USER}:$SYMPA_GROUP ${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +## - Set Permissions to List Data Directory +## - +echononl "\tSet Permissions for dir \"${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN\".." +echo "" >> $_log_file +echo "## - Set Permissions for directory \"${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN\".." >> $_log_file +echo "## -" >> $_log_file +echo "chmod 750 ${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN" >> $_log_file +chmod 750 ${SYMPA_LIST_DATA_DIR}/$SYMPA_LIST_DOMAIN >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +echo "" + +## - Get escaped string for new list domain +## - +echononl "\tGet escaped string for new list domain.." +echo "" >> $_log_file +echo "## - Get escaped string for new list domain" >> $_log_file +echo "## -" >> $_log_file +echo "SYMPA_LIST_DOMAIN_ESCAPED=\${SYMPA_LIST_DOMAIN//\\./\\\\.}" >> $_log_file +SYMPA_LIST_DOMAIN_ESCAPED=${SYMPA_LIST_DOMAIN//\./\\.} +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +## - Add entries for postfix transport to file $POSTFIX_TRANSPORT_FILE +## - +_tmp=$(echo $SYMPA_LIST_DOMAIN_ESCAPED | sed 's/\\/\\\\\\/g') +echononl "\tAdd entries for postfix transport ($POSTFIX_TRANSPORT_FILE).." +if grep $_tmp $POSTFIX_TRANSPORT_FILE > /dev/null 2>&1 ; then + echo_skipped + warn "Entries for \"$SYMPA_LIST_DOMAIN\" in $POSTFIX_TRANSPORT_FILE exist already." +else + echo "" >> $_log_file + echo "## - Add entries for postfix transport ($POSTFIX_TRANSPORT_FILE).." >> $_log_file + echo "## -" >> $_log_file + echo "cat <> $POSTFIX_TRANSPORT_FILE + +/^.*+owner\@${SYMPA_LIST_DOMAIN_ESCAPED}\$/ sympabounce: +/^bounce+.*\@${SYMPA_LIST_DOMAIN_ESCAPED}\$/ sympabounce: +/^.*\@${SYMPA_LIST_DOMAIN_ESCAPED}\$/ sympa: +EOF" >> $_log_file + + cat <> $POSTFIX_TRANSPORT_FILE + +/^.*+owner\@${SYMPA_LIST_DOMAIN_ESCAPED}\$/ sympabounce: +/^bounce+.*\@${SYMPA_LIST_DOMAIN_ESCAPED}\$/ sympabounce: +/^.*\@${SYMPA_LIST_DOMAIN_ESCAPED}\$/ sympa: +EOF + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fi +fi + +## - Add entries for address forwarding using virtual_alias_maps +## - +_tmp=$(echo $SYMPA_LIST_DOMAIN_ESCAPED | sed 's/\\/\\\\\\/g') +echononl "\tAdd entries for address forwarding ($POSTFIX_VIRTUAL_ALIAS_MAPS).." +if grep $_tmp $POSTFIX_VIRTUAL_ALIAS_MAPS > /dev/null 2>&1 ; then + echo_skipped + warn "Entries for \"$SYMPA_LIST_DOMAIN\" in $POSTFIX_VIRTUAL_ALIAS_MAPS exist already." +else + echo "" >> $_log_file + echo "## - Add entries for address rewriting ($POSTFIX_VIRTUAL_ALIAS_MAPS)...." >> $_log_file + echo "## -" >> $_log_file + echo "cat <> $POSTFIX_VIRTUAL_ALIAS_MAPS + +/^(postmaster|abuse)\@${SYMPA_LIST_DOMAIN_ESCAPED}\$/ $POSTMASTER_ABUSE_ADDRESS +EOF" >> $_log_file + + cat <> $POSTFIX_VIRTUAL_ALIAS_MAPS + +/^(postmaster|abuse)\@${SYMPA_LIST_DOMAIN_ESCAPED}\$/ $POSTMASTER_ABUSE_ADDRESS +EOF + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fi +fi + +### - Add entries for addressrewriting using cononical_recipient_maps +### - +#_tmp=$(echo $SYMPA_LIST_DOMAIN_ESCAPED | sed 's/\\/\\\\\\/g') +#echononl "\tAdd entries for address rewriting ($POSTFIX_CANONICAL_MAPS).." +#if grep $_tmp $POSTFIX_CANONICAL_MAPS > /dev/null 2>&1 ; then +# echo_skipped +# warn "Entries for \"$SYMPA_LIST_DOMAIN\" in $POSTFIX_CANONICAL_MAPS exist already." +#else +# echo "" >> $_log_file +# echo "## - Add entries for address rewriting ($POSTFIX_CANONICAL_MAPS)...." >> $_log_file +# echo "## -" >> $_log_file +# echo "cat <> $POSTFIX_CANONICAL_MAPS +# +#/^(postmaster|abuse)\@${SYMPA_LIST_DOMAIN_ESCAPED}\$/ $POSTMASTER_ABUSE_ADDRESS +#EOF" >> $_log_file +# +# cat <> $POSTFIX_CANONICAL_MAPS +# +#/^(postmaster|abuse)\@${SYMPA_LIST_DOMAIN_ESCAPED}\$/ $POSTMASTER_ABUSE_ADDRESS +#EOF +# if [ "$?" = "0" ]; then +# echo_ok +# else +# echo_failed +# fi +#fi + + +## - Add entries for postfix relay domains to file $POSTFIX_RELAY_DOMAIN_FILE +## - +echononl "\tAdd entries for postfix relay domains ($POSTFIX_RELAY_DOMAIN_FILE).." +if grep $SYMPA_LIST_DOMAIN $POSTFIX_RELAY_DOMAIN_FILE > /dev/null 2>&1 ; then + echo_skipped + warn "Entries for \"$SYMPA_LIST_DOMAIN\" in $POSTFIX_RELAY_DOMAIN_FILE exist already." +else + echo "" >> $_log_file + echo "## - Add entries for postfix transport ($POSTFIX_RELAY_DOMAIN_FILE).." >> $_log_file + echo "## -" >> $_log_file + echo "cat <> $POSTFIX_RELAY_DOMAIN_FILE +$SYMPA_LIST_DOMAIN XXXX +EOF" >> $_log_file + + cat <> $POSTFIX_RELAY_DOMAIN_FILE +$SYMPA_LIST_DOMAIN XXXX +EOF + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fi + + echononl "\tUpdate db file ${POSTFIX_RELAY_DOMAIN_FILE}.db.." + echo "" >> $_log_file + echo "## - Update db file ${POSTFIX_RELAY_DOMAIN_FILE}.db.." >> $_log_file + echo "## -" >> $_log_file + echo "postmap btree:${POSTFIX_RELAY_DOMAIN_FILE}" >> $_log_file + postmap btree:${POSTFIX_RELAY_DOMAIN_FILE} >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fi + +fi + +echo "" + +echononl "\tReload Postfix Configuration.." +echo "" >> $_log_file +echo "## - Reload Postfix Configuration.." >> $_log_file +echo "## -" >> $_log_file +echo "/etc/init.d/postfix reload" >> $_log_file +/etc/init.d/postfix reload >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +echo "" + +## - Backup existing VHost Configuration +## - +if [[ -f "$apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf" ]] ; then + echononl "\tBackup VHost Configuration for '$SYMPA_LIST_DOMAIN'.." + echo "" >> $_log_file + echo "## - Backup VHost Configuration for '$SYMPA_LIST_DOMAIN'.." >> $_log_file + echo "## -" >> $_log_file + echo "mv \"$apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf\" \"$apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf.$backup_date\"" >> $_log_file + mv "$apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf" "$apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf.$backup_date" + if [[ $? = 0 ]]; then + echo_ok + else + echo_failed + fi +fi + +## - Add VHost Configuration to Apache Webserver +## - +_apache_vhost_added=false +echononl "\tAdd VHost Configuration for Apache Webserver.." +echo "" >> $_log_file +echo "## - Add VHost Configuration for Apache Webserver...." >> $_log_file +echo "## -" >> $_log_file +echo "cat < $apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf +# - $SYMPA_LIST_DOMAIN -# + + + + ServerAdmin admin@oopen.de + + ServerName $SYMPA_LIST_DOMAIN + + RewriteEngine on + RewriteCond %{HTTPS} !=on + RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] + + CustomLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-access.log combined + ErrorLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-error.log + + + + + + ServerAdmin admin@oopen.de + + ServerName $SYMPA_LIST_DOMAIN + + RewriteEngine on + RewriteRule ^/\\\$ /$_wwsympa_dir/ [R] +" >> $_log_file +if [[ -f "${SYMPA_SYSTEMD_DIR}/wwsympa.service" ]]; then + echo " + + SetHandler \"proxy:unix:${SYMPA_PID_DIR}/wwsympa.socket|fcgi://\" + + + + Require all granted + + + Alias /static-sympa ${SYMPA_STATIC_DIR} +" >> $_log_file +else + echo " + + AllowOverride none + Require all granted + + + + AllowOverride none + Require all granted + + + Alias /static-sympa ${SYMPA_STATIC_DIR} + ScriptAlias /$_wwsympa_dir ${SYMPA_CGI_DIR}/wwsympa-wrapper.fcgi + + + SetHandler fcgid-script + +" >> $_log_file +fi + +echo " + SSLEngine on + + ## - 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 add Strict-Transport-Security \"max-age=15768000\" + Header always set Strict-Transport-Security \"max-age=31536000; includeSubDomains\" + + ## - don't support weak ciphers + SSLHonorCipherOrder On + SSLCompression Off + SSLProtocol ALL -SSLv2 -SSLv3 + + SSLCertificateFile ${apache_conf_dir}/server-bundle.crt + SSLCertificateKeyFile ${apache_conf_dir}/server.key + + CustomLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-access.log combined + ErrorLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-error.log + + +EOF" >> $_log_file + +cat < $apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf +# - $SYMPA_LIST_DOMAIN -# + + + + ServerAdmin admin@oopen.de + + ServerName $SYMPA_LIST_DOMAIN + + RewriteEngine on + RewriteCond %{HTTPS} !=on + RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] + + CustomLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-access.log combined + ErrorLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-error.log + + + + + + ServerAdmin admin@oopen.de + + ServerName $SYMPA_LIST_DOMAIN + + RewriteEngine on + RewriteRule ^/\$ /$_wwsympa_dir/ [R] + +EOF + +if [[ -f "${SYMPA_SYSTEMD_DIR}/wwsympa.service" ]]; then + + cat <> $apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf + + + SetHandler "proxy:unix:${SYMPA_PID_DIR}/wwsympa.socket|fcgi://" + + + + Require all granted + + + Alias /static-sympa ${SYMPA_STATIC_DIR} +EOF +else + cat <> $apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf + + + AllowOverride none + Require all granted + + + + AllowOverride none + Require all granted + + + Alias /static-sympa ${SYMPA_STATIC_DIR} + ScriptAlias /$_wwsympa_dir ${SYMPA_CGI_DIR}/wwsympa-wrapper.fcgi + + + SetHandler fcgid-script + +EOF +fi + +cat <> $apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf + + SSLEngine on + + ## - 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 add Strict-Transport-Security "max-age=15768000" + Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" + + ## - don't support weak ciphers + SSLHonorCipherOrder On + SSLCompression Off + SSLProtocol ALL -SSLv2 -SSLv3 + + SSLCertificateFile ${apache_conf_dir}/server-bundle.crt + SSLCertificateKeyFile ${apache_conf_dir}/server.key + + CustomLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-access.log combined + ErrorLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-error.log + + +EOF +if [ "$?" = "0" ]; then + echo_ok + apache_vhost_added=true +else + echo_failed +fi + +if $apache_vhost_added ; then + _apache_configtest=false + echononl "\tCheck Apache Configuration" + echo "" >> $_log_file + echo "## - Check Apache Configuration" >> $_log_file + echo "## -" >> $_log_file + echo "apachectl configtest" >> $_log_file + apachectl configtest >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + _apache_configtest=true + else + echo_failed + fi + + echononl "\tGraceful Restart Apache Webserver.." + if $_apache_configtest ; then + echo "" >> $_log_file + echo "## - Graceful Restart Apache Webserver.." >> $_log_file + echo "## -" >> $_log_file + echo "apachectl graceful" >> $_log_file + apachectl graceful >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + _apache_configtest=true + else + echo_failed + fi + else + echo_skipped + fi +fi + +echo "" +echononl "\tRestart Sympa Mailing List Manager.." +echo "" >> $_log_file +echo "## - Check Apache Configuration" >> $_log_file +echo "## -" >> $_log_file +if $SYSTEMD_EXISTS ; then + echo "systemctl restart sympa" >> $_log_file + systemctl restart sympa >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + _apache_configtest=true + else + echo_failed + fi +else + echo "/etc/init.d/sympa restart" >> $_log_file + /etc/init.d/sympa restart >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + _apache_configtest=true + else + echo_failed + fi +fi + + + +echo "" +exit 0 diff --git a/OLD/install_sympa.sh.00 b/OLD/install_sympa.sh.00 new file mode 100755 index 0000000..6ead9b3 --- /dev/null +++ b/OLD/install_sympa.sh.00 @@ -0,0 +1,4206 @@ +#!/usr/bin/env bash + +working_dir="$(dirname $(realpath $0))" +script_name="$(basename $(realpath $0))" + +conf_file="${working_dir}/conf/${script_name%%.*}.conf" + +_src_base_dir="$working_dir" +#conf_file="${_src_base_dir}/conf/install_sympa.conf" + +backup_date="$(date +%Y-%m-%d-%H%M)" + +err_log="$(mktemp)" + +_required_debian_packages=" + libauthcas-perl + libclass-singleton-perl + libdatetime-timezone-perl + libdatetime-format-mail-perl + libdbd-csv-perl + libdbd-odbc-perl + libdbd-mysql-perl + libdbd-odbc-perl + libdbd-sybase-perl + libdbd-pg-perl + libdbd-sqlite3-perl + libfile-nfslock-perl + libutf8-all-perl + libmime-base64-perl + libmime-charset-perl + libcrypt-openssl-x509-perl + libcrypt-smime-perl + libdata-password-perl + libproc-processtable-perl + libdbi-perl + libdbi-test-perl + libarchive-zip-perl + libmailtools-perl + libmsgcat-perl + libmime-tools-perl + libio-stringy-perl + libnet-ldap-perl + libcgi-fast-perl + libintl-perl + libmime-charset-perl + libmime-encwords-perl + libtemplate-perl + libxml-libxml-perl + perl-modules + libcgi-pm-perl + libhtml-stripscripts-parser-perl + libhtml-tree-perl + libhtml-format-perl + mhonarc + libregexp-common-perl + ca-certificates + lsb-base + libdbd-mysql-perl + libfcgi-perl + libfile-copy-recursive-perl + libnet-netmask-perl + libterm-progressbar-perl + libmime-lite-html-perl + libunicode-linebreak-perl + libio-socket-ssl-perl + libsoap-lite-perl + libmail-sendmail-perl + libmail-dkim-perl + cpanminus + spawn-fcgi + " + +_needed_cpan_modules=" + CPAN + Archive::Zip + CGI + Class::Singleton + DBD::mysql + DBI + DateTime::Format::Mail + DateTime::TimeZone + Digest::MD5 + Encode + File::Copy::Recursive + File::NFSLock + File::Path + HTML::FormatText + HTML::StripScripts::Parser + HTML::TreeBuilder + IO::File + IO::Scalar + LWP::UserAgent + List::Util::XS + Locale::Messages + MHonArc::UTF8 + MIME::Base64 + MIME::Charset + MIME::EncWords + MIME::Lite::HTML + MIME::Tools + Mail::Address + Net::CIDR + Sys::Syslog + Template + Term::ProgressBar + Text::LineFold + Time::HiRes + URI::Escape + XML::LibXML + AuthCAS + CGI::Fast + Clone + Crypt::CipherSaber + Crypt::OpenSSL::X509 + Crypt::SMIME + DBD::CSV + DBD::ODBC + DBD::Pg + DBD::SQLite + DBD::Sybase + Data::Password + Encode::Locale + FCGI + IO::Socket::SSL + Mail::DKIM::Verifier + Net::DNS + Net::LDAP + Net::SMTP + SOAP::Lite + " + + + +## --- some functions +## --- +clean_up() { + + # Perform program exit housekeeping + rm -f "$err_log" + exit $1 +} + +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$$ +} + +fatal(){ + echo "" + echo -e "\t[ \033[31m\033[1mError\033[m ]: $*" + echo "" + echo -e "\t\033[31m\033[1mInstalllation is canceled\033[m\033[m" + echo "" + clean_up 1 +} + +warn (){ + echo "" + echo -e "\t[ \033[33m\033[1mWarning\033[m ]: $*" + echo "" +} + +info (){ + echo "" + echo -e "\t[ \033[33m\033[1mInfo\033[m ]: $*" + echo "" +} + +ok (){ + echo "" + echo -e "\t[ \033[36m\033[1mOk\033[m ]: $*" + echo "" +} + +error(){ + echo "" + echo -e "\t[ \033[31m\033[1mFehler\033[m ]: $*" + echo "" +} + +echo_ok() { + echo -e "\033[75G[ \033[32mok\033[m ]" +} +echo_failed(){ + echo -e "\033[75G[ \033[1;31mfailed\033[m ]" +} +echo_skipped() { + echo -e "\033[75G[ \033[33m\033[1mskipped\033[m ]" +} +## --- +## --- END: functions + +trap clean_up SIGHUP SIGINT SIGTERM + +# - Support systemd ? +# - +_systemd="$(which systemd)" +_systemctl="$(which systemctl)" +if [[ -z "$_systemd" ]] && [[ -z "$_systemctl" ]]; then + SYSTEMD_SUPPORTED=false +else + SYSTEMD_SUPPORTED=true +fi + +## --- +## --- Variable Settings +## --- + +SYMPA_BASE_PATH="/usr/local/sympa" + +SYMPA_MANPATH="${SYMPA_BASE_PATH}/share/man" + +ENABLE_FHS=no +if [[ "$ENABLE_FHS" = "no" ]]; then + SYMPA_STATIC_DIR="/usr/local/sympa/static_content" + SYMPA_PID_DIR="/usr/local/sympa" + SYMPA_BIN_DIR="/usr/local/sympa/bin" + SYMPA_CGI_DIR="$SYMPA_BIN_DIR" + SYMPA_LIBEXEC_DIR="$SYMPA_BIN_DIR" +else + SYMPA_STATIC_DIR="/usr/local/sympa/var/lib/sympa/static_content" + SYMPA_PID_DIR="/usr/local/sympa/var/run/sympa" + SYMPA_BIN_DIR="/usr/local/sympa/sbin" + SYMPA_CGI_DIR="/usr/local/sympa/lib/sympa/cgi" + SYMPA_LIBEXEC_DIR="/usr/local/sympa/libexec" +fi + + +DEFAULT_SYMPA_USER="sympa" + +DEFAULT_SYMPA_MAIN_CONF_DIR="/etc/sympa" +DEFAULT_SYMPA_LIST_DATA_BASE_PATH="/data/sympa" + +DEFAULT_START_AT_BOOTTIME="yes" + +DEFAULT_SYMPA_DB_TYPE="mysql" +DEFAULT_SYMPA_DB_HOST="localhost" +DEFAULT_SYMPA_DB_NAME="sympa" +DEFAULT_SYMPA_DB_USER="sympa" + +DEFAULT_SYMPA_SYSTEMD_DIR="/etc/systemd/system" + +# - DEFAULT_SYMPA_DB_PORT will be determined later + +DEFAULT_VSERVER_GUEST="no" + + +echo +echononl "\tInclude Configuration file.." +if [[ ! -f $conf_file ]]; then + echo_failed + fatal "Missing configuration file '$conf_file'" +else + source $conf_file + echo_ok +fi + +if [[ -z "$SYMPA_DOMAIN" ]]; then + fatal "Missing value for the sympa domain (SYMPA_DOMAIN)" +else + DEFAULT_SYMPA_DOMAIN="$SYMPA_DOMAIN" +fi + +DEFAULT_SYMPA_WEB_URL="https://$SYMPA_DOMAIN/wws" + +[[ -n "$SYMPA_USER" ]] && DEFAULT_SYMPA_USER="$SYMPA_USER" +[[ -n "$SYMPA_MAIN_CONF_DIR" ]] && DEFAULT_SYMPA_MAIN_CONF_DIR="$SYMPA_MAIN_CONF_DIR" +[[ -n "$SYMPA_LISTMASTER" ]] && DEFAULT_SYMPA_LISTMASTER="$SYMPA_LISTMASTER" +[[ -n "$SYMPA_LIST_DATA_BASE_PATH" ]] && DEFAULT_SYMPA_LIST_DATA_BASE_PATH="$SYMPA_LIST_DATA_BASE_PATH" +[[ -n "$START_AT_BOOTTIME" ]] && DEFAULT_START_AT_BOOTTIME="$START_AT_BOOTTIME" +[[ -n "$SYMPA_DB_NAME" ]] && DEFAULT_SYMPA_DB_NAME="$SYMPA_DB_NAME" +[[ -n "$SYMPA_DB_PORT" ]] && DEFAULT_SYMPA_DB_PORT="$SYMPA_DB_PORT" +[[ -n "$SYMPA_DB_USER" ]] && DEFAULT_SYMPA_DB_USER="$SYMPA_DB_USER" +[[ -n "$VSERVER_GUEST" ]] && DEFAULT_VSERVER_GUEST="$VSERVER_GUEST" +[[ -n "$SYMPA_DB_PASSWD" ]] && DEFAULT_SYMPA_DB_PASSWD="$SYMPA_DB_PASSWD" + +# - +[[ -n "$SYMPA_SYSTEMD_DIR" ]] && DEFAULT_SYMPA_SYSTEMD_DIR="$SYMPA_SYSTEMD_DIR" + + +if [[ -n "$SYMPA_LISTMASTER" ]] ; then + DEFAULT_SYMPA_LISTMASTER="$SYMPA_LISTMASTER" +else + DEFAULT_SYMPA_LISTMASTER="postmaster@$SYMPA_DOMAIN" +fi + +if [[ -z "$MYSQL_CREDENTIALS" ]] ; then + if [ -f "/usr/local/mysql/sys-maint.cnf" ]; then + mysql_credential_args="--defaults-file=/usr/local/mysql/sys-maint.cnf" + elif [ -f "/etc/mysql/debian.cnf" ]; then + mysql_credential_args="--defaults-file=/etc/mysql/debian.cnf" + fi +else + mysql_credential_args="$MYSQL_CREDENTIALS" +fi + + +APACHE_INIT_SCRIPT="" +APACHE_SERVICE_FILE="" + +if $SYSTEMD_SUPPORTED ; then + # - Is Service exclusive controlled by systemd + # - + if systemctl -t service list-unit-files \ + | grep -e "^apache2" \ + | grep -q -E "(enabled|disabled|generated)" 2> /devnull ; then + + APACHE_SERVICE_FILE=$(systemctl -t service list-unit-files \ + | grep -e "^apache2" \ + | awk '{print$1}') + fi +fi + +if [[ -z "$APACHE_SERVICE_FILE" ]] ; then + if [ -x "$(realpath /etc/init.d/apache2)" ]; then + APACHE_INIT_SCRIPT="/etc/init.d/apache2" + elif [ -x "$(realpath /etc/init.d/apachectl)" ]; then + APACHE_INIT_SCRIPT="/etc/init.d/apachectl" + fi +fi + +if [[ -z "$APACHE_INIT_SCRIPT" ]] && [[ -z $APACHE_SERVICE_FILE ]]; then + fatal 'Neither an init-script nor a service file for apache2 found!' +fi + + +## - Determin the IP-Addresses +## - +#__ipv4="`ifconfig | grep -e \"^\s*inet\" | grep -v \"127.0.0.1\" | awk '{print$2}' | cut -d\":\" -f2 | sort | head -1`" +#__ipv6="`ifconfig | grep -e \"^\s*inet6\" | awk '{print$2}' | grep -v -e \"^::1/\" | grep -v -e \"^fe80\" | cut -d\"/\" -f1 | sort | head -1`" + +_hostname="$(hostname -f)" +if [[ -n "$_hostname" ]] ; then + __ipv4="$(dig +short "$_hostname")" + __ipv6="$(dig +short "$_hostname" AAAA)" +fi + + +_debian_apache_installation=false +_base_webserver_info_needed=false +_apache_vhost_dir="" +apache_log_dir="" +apache_conf_dir="" +apache_vhost_dir="" +## - Determin VHost Configuration Directory +## - +if dpkg -l apache2 2> /dev/null | grep -e "^ii" > /dev/null 2>&1 ; then + + _debian_apache_installation=true + + if [ -d "/etc/apache2" -a -d "/etc/apache2/sites-available" ]; then + apache_vhost_dir=/etc/apache2/sites-available + apache_conf_dir=/etc/apache2 + if [ -d "/var/log/apache2" ]; then + apache_log_dir=/var/log/apache2 + else + error "Found Debian Apache Installation, but no Log Directory found!" + fatal "Something went wron with your Apache Installation" + fi + else + error "Found Debian Apache Installation, but no Configuration Directory for vhosts!" + fatal "Something went wron with your Apache Installation" + fi + +else + + ## - Determin httpd binary + ## - + _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 + + ## - Determin websever user + ## - + web_user="`$_httpd_binary -t -D DUMP_RUN_CFG | grep -i -e "^User" | awk '{print$2}' | cut -d\"=\" -f2 | tr -d '"'`" + web_group="`$_httpd_binary -t -D DUMP_RUN_CFG | grep -i -e "^Group" | awk '{print$2}' | cut -d\"=\" -f2 | tr -d '"'`" + if [ -z "$web_user" -o -z "$web_group" ]; then + HTTPD_USER=www-data + else + HTTPD_USER=$web_user + HTTPD_GROUP=$web_group + fi + + ## - Determin ServerRoot Directory + ## - + apache_base_dir_found=false + _pass_apache_base_dir=false + 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 [ -z "$apache_base_dir" ];then + _base_webserver_info_needed=true + apache_base_dir_found=true + else + _pass_apache_base_dir=true + fi + + ## - Determin Apache Configuration Directory + ## - + apache_conf_dir_found=false + if [ -n "$apache_base_dir" ];then + if [ -d "${apache_base_dir}/conf" ]; then + apache_conf_dir=${apache_base_dir}/conf + apache_conf_dir_found=true + else + _base_webserver_info_needed=true + fi + else + _base_webserver_info_needed=true + fi + + ## - Determin Apache Log Directory + ## - + _apache_errorlog_dir=`$_httpd_binary -t -D DUMP_RUN_CFG | grep "Main ErrorLog:" | awk '{print$3}' | tr -d '"'` + if [ -d "`dirname $_apache_errorlog_dir`" ]; then + apache_log_dir=`dirname $_apache_errorlog_dir` + fi + + ## - Determin VHost Configuration Directory + ## - + if [ -d "${apache_conf_dir}/vhosts" ]; then + _apache_vhost_dir=${apache_conf_dir}/vhosts + fi +fi + +if $_base_webserver_info_needed ; then + fatal "Apache Webserver not found!" +fi + +clear +echo +echo -e "\033[21G\033[32mInstallation script for Sympa mailing list server \033[m" +echo +echo +echo + + +DISTRIBUTION= +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Which (linux) distribution is installed?" +echo "" +echo "[1] Debian" +echo "[2] andere" +echo "" +echononl "Eingabe: " + +while [ "$DISTRIBUTION" != "Debian" -a "$DISTRIBUTION" != "other" ];do + read OPTION + case $OPTION in + 1) DISTRIBUTION="Debian" + ;; + 2) DISTRIBUTION="other" + ;; + *) echo "" + echo -e "\tFalsche Eingabe ! [ 1 = Debian ; 2 = andere ]" + echo "" + echononl "Eingabe:" + ;; + esac +done +if [ "$DISTRIBUTION" == "other" ]; then + info "Distributions other than Debian are not supported by that script." + echo -e "\n\t \033[31m\033[1mInstallation is canceled\033[m\033[m .." + echo "" + clean_up 2 +elif [ "$DISTRIBUTION" == "Debian" ]; then + SYMPA_INIT_DIR=/etc/init.d +else + SYMPA_INIT_DIR=/etc/rc.d/init.d +fi + +_UPDATE_SYMPA="" +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Are you going to update an existing Installation?" +echo "" +echo "[1] New initial Installation" +echo "[2] Update existing Installation" +echo "" +echononl "Eingabe: " + + +while [ "$_UPDATE_SYMPA" != "update" -a "$_UPDATE_SYMPA" != "new" ];do + read OPTION + case $OPTION in + 1) _UPDATE_SYMPA="new" + ;; + 2) _UPDATE_SYMPA="update" + ;; + *) echo "" + echo -e "\tFalsche Eingabe ! [ 1 = Neuinstallation ; 2 = Update ]" + echo "" + echononl "Eingabe:" + ;; + esac +done +if [ "$_UPDATE_SYMPA" = "update" ];then + UPDATE_SYMPA=true +else + UPDATE_SYMPA=false +fi + + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Insert version number for Sympa mailing list server." +echo "" +echo "" +SYMPA_VERSION= +while [ "X$SYMPA_VERSION" = "X" ]; do + echononl "Sympa version : " + read SYMPA_VERSION + if [ "X$SYMPA_VERSION" = "X" ]; then + echo -e "\n\t\033[33m\033[1mA version number is required!\033[m\n" + fi +done + +SYMPA_MAIN_VERSION=`echo $SYMPA_VERSION | cut -d '.' -f1,2` +SYMPA_MAJOR_VERSION=`echo $SYMPA_VERSION | cut -d '.' -f1` +SYMPA_MINOR_VERSION=`echo $SYMPA_VERSION | cut -d '.' -f2` +SYMPA_PATCH_LEVEL=`echo $SYMPA_VERSION | cut -d '.' -f3` + +SYMPA_INSTALL_DIR="${SYMPA_BASE_PATH}-$SYMPA_VERSION" + + + +_builddir=${_src_base_dir}/sympa-$SYMPA_VERSION +_logdir=${_src_base_dir}/log_sympa-$SYMPA_VERSION +if $UPDATE_SYMPA ; then + _log_file=${_logdir}/sympa_update.log +else + _log_file=${_logdir}/sympa_install.log +fi + + +if ! $UPDATE_SYMPA ; then + + SYMPA_SUPPORT_MULTIDOMAINS=true + echo "" + echo "--" + echo "" + echo "Should Sympa support multidomains?" + echo "" + OK="" + echononl "Support Multidomains? (yes/no) [yes]: " + read OK + if [ "X$OK" = "X" ]; then + OK=yes + fi + while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "XNo" -a "X$OK" != "Xno" ]; do + echo "" + echononl "\twrong entry! [yes/no]: " + read OK + done + [ $OK = "Yes" -o $OK = "yes" ] || SYMPA_SUPPORT_MULTIDOMAINS=false + + + POSTFIX_CONF_DIR= + POSTFIX_CONF_FILES_FOUND=false + if [ "$DISTRIBUTION" = "Debian" ]; then + if dpkg -l postfix | grep -q -e "^ii" 2> /dev/null ; then + if [ -f "/etc/postfix/main.cf" -a -f "/etc/postfix/master.cf" ]; then + POSTFIX_CONF_DIR=/etc/postfix + POSTFIX_CONF_FILES_FOUND=true + fi + fi + fi + + if ! $POSTFIX_CONF_FILES_FOUND ; then + info "Only Postfix is suported by this installation script." + echo "" + echo "--" + echo "" + echo "Specify Directory includes postfix files \"main.cf\" and \"master.cf\"." + echo "" + echo " Type \"^C\" to abort if postfix isn't installed on this system." + while [ "X$POSTFIX_CONF_DIR" = "X" ]; do + echo "" + echononl "Postfix Config Directory: " + read POSTFIX_CONF_DIR + if [ "X$POSTFIX_CONF_DIR" = "X" ]; then + echo "" + echo -e "\t\033[33mDeclaration is mandatory!\033[m" + else + if [ ! -f "${POSTFIX_CONF_DIR}/main.cf" -a ! -f "${POSTFIX_CONF_DIR}/master.cf" ]; then + echo "" + echo -e "\t\033[33mPostfix confuguration not found at that location!\033[m retry.." + POSTFIX_CONF_DIR="" + fi + fi + done + fi + + + echo "" + echo "--" + echo "" + echo "Specify Sympa's user and group." + echo "" + SYMPA_USER= + while [ "X$SYMPA_USER" = "X" ] + do + echononl "Sympa user [${DEFAULT_SYMPA_USER}]: " + read SYMPA_USER + if [ "X$SYMPA_USER" = "X" ]; then + SYMPA_USER=$DEFAULT_SYMPA_USER + fi + done + SYMPA_GROUP= + while [ "X$SYMPA_GROUP" = "X" ] + do + echononl "Sympa group [$SYMPA_USER]: " + read SYMPA_GROUP + if [ "X$SYMPA_GROUP" = "X" ]; then + SYMPA_GROUP=$SYMPA_USER + fi + done +fi + +if $UPDATE_SYMPA ; then + if [ ! -f "${SYMPA_BASE_PATH}/bin/sympa.pl" ] && [ ! -f "${SYMPA_BASE_PATH}/sbin/sympa.pl" ]; then + fatal "You are in update mode, but i can't find existing installation at $SYMPA_BASE_PATH" + fi + SYMPA_USER=`stat -c "%U" $SYMPA_BASE_PATH` + SYMPA_GROUP=`stat -c "%G" $SYMPA_BASE_PATH` +fi + + +if $UPDATE_SYMPA ; then + + SYMPA_OLD_VERSION="" + _sympa_perlscript="$(which sympa.pl)" + if [[ -n "$_sympa_perlscript" ]]; then + SYMPA_OLD_VERSION="$($_sympa_perlscript --version 2> /dev/null | cut -d' ' -f2)" + fi + + if [[ -z "$SYMPA_OLD_VERSION" ]]; then + SYMPA_OLD_VERSION=`egrep -v '^s*$|^#' /usr/local/sympa/etc/data_structure.version 2> /dev/null | head -1` + fi + + if [ -n "$SYMPA_OLD_VERSION" -a "$SYMPA_OLD_VERSION" == "$SYMPA_VERSION" ]; then + warn "You are in update mode, but the old version ($SYMPA_OLD_VERSION) is the same as the new one ($SYMPA_VERSION)!" + echononl "Type uppercase \"yes\" to proceed with upgrading: " + + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi +fi + +echo "" +echo "--" +echo "" +echo "Specify directory of Sympa main configuration file (sympa.conf)." +echo "" +SYMPA_MAIN_CONF_DIR= +echononl "Sympa main configuration directory [${DEFAULT_SYMPA_MAIN_CONF_DIR}]: " +read SYMPA_MAIN_CONF_DIR +if [ "X$SYMPA_MAIN_CONF_DIR" = "X" ]; then + SYMPA_MAIN_CONF_DIR=$DEFAULT_SYMPA_MAIN_CONF_DIR +fi + +if $UPDATE_SYMPA ; then + if [ ! -f "${SYMPA_MAIN_CONF_DIR}/sympa.conf" ]; then + fatal "You are in update mode, but i can't find existing main configuration at $SYMPA_MAIN_CONF_DIR" + fi +fi + +SYMPA_LIST_DATA_DIR= +if $UPDATE_SYMPA ; then + SYMPA_LIST_DATA_DIR=`grep -e "^home" ${SYMPA_MAIN_CONF_DIR}/sympa.conf | awk '{print$2}'` + if [ ! -d "$SYMPA_LIST_DATA_DIR" ]; then + fatal "You are in update mode, but i can't find existing list data dir at $SYMPA_LIST_DATA_DIR" + fi + SYMPA_LIST_DATA_BASE_PATH="$(dirname "$SYMPA_LIST_DATA_DIR")" +else + echo "" + echo "--" + echo "" + echo "Specify Base Path containing Sympa's list data directory." + echo "" + SYMPA_LIST_DATA_BASE_PATH= + echononl "Sympa's list data directory [${DEFAULT_SYMPA_LIST_DATA_BASE_PATH}]: " + read SYMPA_LIST_DATA_BASE_PATH + if [ "X$SYMPA_LIST_DATA_BASE_PATH" = "X" ]; then + SYMPA_LIST_DATA_BASE_PATH=$DEFAULT_SYMPA_LIST_DATA_BASE_PATH + fi +fi + +SYMPA_LIST_DATA_DIR="${SYMPA_LIST_DATA_BASE_PATH}-${SYMPA_VERSION}/list_data" + +if $SYSTEMD_SUPPORTED ; then + echo "" + echo "--" + echo "" + echo "Specify directory where Systemd unit files should be installed." + echo "" + SYMPA_SYSTEMD_DIR= + echononl "Sympa Systemd directory [${DEFAULT_SYMPA_SYSTEMD_DIR}]: " + read SYMPA_SYSTEMD_DIR + if [ "X$SYMPA_SYSTEMD_DIR" = "X" ]; then + SYMPA_SYSTEMD_DIR=$DEFAULT_SYMPA_SYSTEMD_DIR + fi +fi + + +## - Apache webserver related +## - + +if ! $UPDATE_SYMPA ; then + if ! $_debian_apache_installation ; then + echo "" + echo "" + echo -e "\033[32m-- Apache Webserver related\033[m" + echo "" + echo "Insert Directory where the vhost configuration file should stay.." + echo "" + apache_vhost_dir= + while [ "X$apache_vhost_dir" = "X" ] ; do + if [ -n "$_apache_vhost_dir" ];then + echononl "VHost Base Directory [$_apache_vhost_dir]: " + read apache_vhost_dir + if [ "X$apache_vhost_dir" = "X" ]; then + apache_vhost_dir=$_apache_vhost_dir + fi + else + echononl "VHost Base Directory: " + read apache_vhost_dir + if [ ! -d "$read apache_vhost_dir" ];then + echo -e "\n\t\033[1;33mDirectory \"${apache_vhost_dir}\" not found! Try again..\033[m\n" + apache_vhost_dir="" + fi + fi + done + + if [ -z "$apache_log_dir" ]; then + + echo "" + echo "" + echo -e "\033[32m--\033[m" + echo "" + echo "Insert Directory where the log files should stay.." + echo "" + while [ "X$apache_log_dir" = "X" ] ; do + echononl "Apache Log Directory: " + read apache_log_dir + if [ -z "$apache_log_dir" ]; then + echo -e "\n\t\033[1;33mDeclaration is mandatory!\033[m Try again..\n" + elif [ ! -d "$apache_log_dir" ];then + echo -e "\n\t\033[1;33mDirectory \"${apache_log_dir}\" not found!\033[m Try again..\n" + apache_log_dir="" + fi + done + fi + fi + + echo "" + echo "" + echo -e "\033[32m--\033[m" + echo "" + echo "Insert the IP-Addresses where the webserver should listen for that site." + echo "" + IPv4= + while [ "X$IPv4" = "X" ];do + if [ -z "$__ipv4" ]; then + echononl "IPv4 address: " + read IPv4 + if [ "X$IPv4" = "X" ]; then + echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n" + fi + else + echononl "IPv4 address [$__ipv4]: " + read IPv4 + if [ "X$IPv4" = "X" ]; then + IPv4=$__ipv4 + fi + fi + done + IPv6= + while [ "X$IPv6" = "X" ];do + if [ -z "$__ipv6" ]; then + echononl "IPv6 address: " + read IPv6 + if [ "X$IPv6" = "X" ]; then + echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n" + fi + else + echononl "IPv6 address [$__ipv6]: " + read IPv6 + if [ "X$IPv6" = "X" ]; then + IPv6=$__ipv6 + fi + fi + done +fi + + + + +SYMPA_ALIAS_FILE= +if $UPDATE_SYMPA ; then + if [ -f "/etc/postfix/sympa_aliases" ]; then + SYMPA_ALIAS_FILE=/etc/postfix/sympa_aliases + else + echo "--" + echo "" + echo "Set aliases file." + echo "" + echononl "Sympa aliases file: " + read SYMPA_ALIAS_FILE + while [ "X$SYMPA_ALIAS_FILE" = "X" ]; do + echo "" + echo -e "\tInput is required!" + echo "" + echononl "Sympa aliases file: " + read SYMPA_ALIAS_FILE + done + fi + if [ ! -f "$SYMPA_ALIAS_FILE" ]; then + fatal "You are in update mode, but i cannot find aliases file $SYMPA_ALIAS_FILE." + fi +else + echo "--" + echo "" + echo "Set aliases file." + echo "" + if [ -d "/etc/postfix" ]; then + _SYMPA_ALIAS_FILE=/etc/postfix/sympa_aliases + echononl "Sympa aliases file [$_SYMPA_ALIAS_FILE]: " + read SYMPA_ALIAS_FILE + if [ "X$SYMPA_ALIAS_FILE" == "X" ]; then + SYMPA_ALIAS_FILE=$_SYMPA_ALIAS_FILE + fi + else + echononl "Sympa aliases file: " + read SYMPA_ALIAS_FILE + while [ "X$SYMPA_ALIAS_FILE" = "X" ]; do + echo "" + echo -e "\tFalsche Eingabe ! [ 1 = Debian ; 2 = andere ]" + echo "" + echononl "Sympa aliases file: " + read SYMPA_ALIAS_FILE + done + fi + +fi + + +if ! $UPDATE_SYMPA ; then + + echo "" + echo "" + echo -e "\033[32m--\033[m" + echo -e "\033[32m--\033[m Some parameters for server configuration" + echo -e "\033[32m--\033[m" + echo "" + echo "" + echo "Default domain for the mailing lists" + echo "" + SYMPA_DOMAIN= + echononl "domain [${DEFAULT_SYMPA_DOMAIN}]: " + read SYMPA_DOMAIN + if [ "X$SYMPA_DOMAIN" = "X" ]; then + SYMPA_DOMAIN=$DEFAULT_SYMPA_DOMAIN + fi + + echo "" + echo "" + echo "Listmaster" + echo " - Comma seperated list of email addresses" + echo "" + SYMPA_LISTMASTER= + echononl "listmaster [${DEFAULT_SYMPA_LISTMASTER}]: " + read SYMPA_LISTMASTER + if [ "X$SYMPA_LISTMASTER" = "X" ]; then + SYMPA_LISTMASTER=$DEFAULT_SYMPA_LISTMASTER + fi + + echo "" + echo "" + echo "URL for the Sympa web interface" + echo "" + SYMPA_WEB_URL= + echononl "wwsympa_url [${DEFAULT_SYMPA_WEB_URL}]: " + read SYMPA_WEB_URL + if [ "X$SYMPA_WEB_URL" = "X" ]; then + SYMPA_WEB_URL=$DEFAULT_SYMPA_WEB_URL + fi + + echo "" + echo "-- Database related Parameters" + echo "" + echo "Database management system" + echo "" + echo "[1] MySQL" + echo "[2] SQLite" + echo "[3] Postgres" + echo "[4] ORACLE" + echo "[5] Sybase" + echo "" + SYMPA_DB_TYPE="" + echononl "Eingabe: " + while [ "$SYMPA_DB_TYPE" != "mysql" \ + -a "$SYMPA_DB_TYPE" != "SQLite" \ + -a "$SYMPA_DB_TYPE" != "Pg" \ + -a "$SYMPA_DB_TYPE" != "Oracle" \ + -a "$SYMPA_DB_TYPE" != "Sybase" ]; do + read OPTION + case $OPTION in + 1) SYMPA_DB_TYPE="mysql" + ;; + 2) SYMPA_DB_TYPE="SQLite" + ;; + 3) SYMPA_DB_TYPE="Pg" + ;; + 4) SYMPA_DB_TYPE="Oracle" + ;; + 5) SYMPA_DB_TYPE="Sybase" + ;; + *) echo "" + echo -e "\tFalsche Eingabe ! [ 1 = MySQL | 2 = SQLite | 3 = Postgres | 4 = Oracle | 5 = Sybase ]" + echo "" + echononl "Eingabe:" + ;; + esac + done + + echo "" + echo "" + echo "Name of the database containing user information." + echo "" + echo "If you are using SQLite, then this parameter is the DB file name." + echo "" + SYMPA_DB_NAME= + while [ "X$SYMPA_DB_NAME" = "X" ]; do + echononl "db_name [$DEFAULT_SYMPA_DB_NAME]: " + read SYMPA_DB_NAME + if [ "X$SYMPA_DB_NAME" = "X" ]; then + #echo "" + #echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n" + #continue + SYMPA_DB_NAME="$DEFAULT_SYMPA_DB_NAME" + fi + done + + echo "" + echo "" + echo "Database host name." + echo "" + SYMPA_DB_HOST= + echononl "db_host [$DEFAULT_SYMPA_DB_HOST]: " + read SYMPA_DB_HOST + if [ "X$SYMPA_DB_HOST" == "X" ]; then + SYMPA_DB_HOST=$DEFAULT_SYMPA_DB_HOST + fi + + #if [ "$SYMPA_DB_HOST" = "localhost" ]; then + # SYMPA_DB_HOST=127.0.0.1 + #fi + + if [[ -z "$SYMPA_DB_PORT" ]]; then + if [[ "$SYMPA_DB_TYPE" = "mysql" ]]; then + DEFAULT_SYMPA_DB_PORT=3306 + elif [[ "$SYMPA_DB_TYPE" = "Pg" ]]; then + DEFAULT_SYMPA_DB_PORT=5432 + elif [[ "$SYMPA_DB_TYPE" = "Sybase" ]]; then + DEFAULT_SYMPA_DB_PORT=2638 + elif [[ "$SYMPA_DB_TYPE" = "Oracle" ]]; then + DEFAULT_SYMPA_DB_PORT=1575 + fi + fi + + if [ "$SYMPA_DB_TYPE" != "SQLite" ]; then + echo "" + echo "" + echo "Database port." + echo "" + SYMPA_DB_PORT= + echononl "db_port [$DEFAULT_SYMPA_DB_PORT]: " + read SYMPA_DB_PORT + if [ "X$SYMPA_DB_PORT" == "X" ]; then + SYMPA_DB_PORT=$DEFAULT_SYMPA_DB_PORT + fi + fi + + echo "" + echo "" + echo "Database user." + echo "" + SYMPA_DB_USER= + while [ "X$SYMPA_DB_USER" = "X" ]; do + echononl "db_user [$DEFAULT_SYMPA_DB_USER]: " + read SYMPA_DB_USER + if [ "X$SYMPA_DB_USER" = "X" ]; then + #echo "" + #echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n" + #continue + SYMPA_DB_USER="$DEFAULT_SYMPA_DB_USER" + fi + done + + echo "" + echo "" + echo "Password for database user $SYMPA_DB_USER." + echo "" + SYMPA_DB_PASSWD= + if [[ -n "$DEFAULT_SYMPA_DB_PASSWD" ]]; then + echononl "db_passwd [$DEFAULT_SYMPA_DB_PASSWD]: " + read SYMPA_DB_PASSWD + if [[ "X$SYMPA_DB_PASSWD" ]] ; then + SYMPA_DB_PASSWD="$DEFAULT_SYMPA_DB_PASSWD" + fi + else + while [ "X$SYMPA_DB_PASSWD" = "X" ]; do + echononl "db_passwd: " + read SYMPA_DB_PASSWD + if [ "X$SYMPA_DB_PASSWD" = "X" ]; then + echo "" + echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n" + continue + fi + done + fi + + +else + SYMPA_DOMAIN=`grep -e "^domain" ${SYMPA_MAIN_CONF_DIR}/sympa.conf | awk '{print$2}'` + SYMPA_LISTMASTER=`grep -e "^listmaster" ${SYMPA_MAIN_CONF_DIR}/sympa.conf | awk '{print$2}'` + SYMPA_WEB_URL=`grep -e "^wwsympa_url" ${SYMPA_MAIN_CONF_DIR}/sympa.conf | awk '{print$2}'` + SYMPA_DB_TYPE=`grep -e "^db_type" ${SYMPA_MAIN_CONF_DIR}/sympa.conf | awk '{print$2}'` + SYMPA_DB_NAME=`grep -e "^db_name" ${SYMPA_MAIN_CONF_DIR}/sympa.conf | awk '{print$2}'` + SYMPA_DB_HOST=`grep -e "^db_host" ${SYMPA_MAIN_CONF_DIR}/sympa.conf | awk '{print$2}'` + SYMPA_DB_PORT=`grep -e "^db_port" ${SYMPA_MAIN_CONF_DIR}/sympa.conf | awk '{print$2}'` + SYMPA_DB_USER=`grep -e "^db_user" ${SYMPA_MAIN_CONF_DIR}/sympa.conf | awk '{print$2}'` + SYMPA_DB_PASSWD=`grep -e "^db_passwd" ${SYMPA_MAIN_CONF_DIR}/sympa.conf | awk '{print$2}'` +fi + +_wwsympa_dir="$(echo $SYMPA_WEB_URL | grep / | cut -d/ -f4-)" + +if [[ "$SYMPA_DB_TYPE" = "mysql" ]]; then + if $UPDATE_SYMPA ; then + mysql -h $SYMPA_DB_HOST -u $SYMPA_DB_USER -p"$SYMPA_DB_PASSWD" $SYMPA_DB_NAME -N -s -e \ + "SHOW DATABASES LIKE '$SYMPA_DB_NAME'" > /dev/null 2>&1 + if [[ $? -ne 0 ]]; then + fatal "Cannot connect to database '$SYMPA_DB_NAME' with given credentials" + fi + else + if [[ -z "$mysql_credential_args" ]]; then + fatal "No root access to MySQL database given (See Parameter MYSQL_CREDENTIALS)!" + else + if echo "$(mysql $mysql_credential_args -N -s -e "SHOW DATABASES";)" | grep -q "$SYMPA_DB_NAME" ; then + + mysql -h $SYMPA_DB_HOST -u $SYMPA_DB_USER -p"$SYMPA_DB_PASSWD" $SYMPA_DB_NAME -N -s -e \ + "SHOW DATABASES LIKE '$SYMPA_DB_NAME'" > /dev/null 2>&1 + if [[ $? -ne 0 ]]; then + fatal "Database '$SYMPA_DB_NAME'exists, but is not accessable by the given credentials for user '$SYMPA_DB_USER'!" + fi + + else + mysql $mysql_credential_args -N -s -e \ + "CREATE DATABASE IF NOT EXISTS $SYMPA_DB_NAME CHARACTER SET utf8 COLLATE utf8_general_ci" + if [[ $? -ne 0 ]]; then + fatal "Cannot create Database \"$SYMPA_DB_NAME\"" + fi + mysql $mysql_credential_args -N -s -e \ + "GRANT ALL ON ${SYMPA_DB_NAME}.* TO '${SYMPA_DB_USER}'@'localhost' IDENTIFIED BY '${SYMPA_DB_PASSWD}'" + if [[ $? -ne 0 ]]; then + fatal "Cannot set credentials to db-user \"$SYMPA_DB_USER\" on Database \"$SYMPA_DB_NAME\"!" + fi + mysql $mysql_credential_args -N -s -e \ + "GRANT ALL ON ${SYMPA_DB_NAME}.* TO '${SYMPA_DB_USER}'@'`hostname -f`' IDENTIFIED BY '${SYMPA_DB_PASSWD}'" + if [[ $? -ne 0 ]]; then + fatal "Cannot set credentials to db-user \"$SYMPA_DB_USER\" on Database \"$SYMPA_DB_NAME\"!" + fi + mysql $mysql_credential_args -N -s -e \ + "USE mysql; UPDATE user SET Super_priv = 'Y' WHERE User = '$SYMPA_DB_USER'" + if [[ $? -ne 0 ]]; then + fatal "Cannot set \"Super_priv\" to user \"$SYMPA_DB_USER\"!" + fi + mysql $mysql_credential_args -N -s -e "FLUSH PRIVILEGES" + if [[ $? -ne 0 ]]; then + fatal "\"FLUSH PRIVILEGES\" failed!" + fi + mysql -h $SYMPA_DB_HOST -u $SYMPA_DB_USER -p"$SYMPA_DB_PASSWD" $SYMPA_DB_NAME -N -s -e "show tables" > /dev/null 2>&1 + if [[ $? -ne 0 ]]; then + fatal "Creation of Database \"$SYMPA_DB_NAME\" or setting credentials to db-user \"$SYMPA_DB_USER\" failed!" + fi + echo "$SYMPA_DB_NAME $SYMPA_DB_USER $SYMPA_DB_PASSWD" > /root/databases.txt.$SYMPA_DB_NAME + ok "Creation of Database \"$SYMPA_DB_NAME\" was successfully." + fi + + fi + fi +elif [[ "$SYMPA_DB_TYPE" = "Pg" ]] || [[ "$SYMPA_DB_TYPE" = "Oracle" ]] || [[ "$SYMPA_DB_TYPE" = "Sybase" ]]; then + if $UPDATE_SYMPA ; then + warn "Databasetype is not fully supported by this script.\n\n\t Take care, database '$SYMPA_DB_NAME' is accessible." + else + warn "Databasetype is not fully supported by this script.\n\n\t Take care, an empty database '$SYMPA_DB_NAME' exists and is accessible" + fi +fi + + +echo "" +echo "--" +echo "" +__START_AT_BOOTTIME= +echononl "Start at boot time (yes/no) [${DEFAULT_START_AT_BOOTTIME}]: " +read __START_AT_BOOTTIME +if [ "X$__START_AT_BOOTTIME" = "X" ]; then + __START_AT_BOOTTIME=$DEFAULT_START_AT_BOOTTIME +fi +__START_AT_BOOTTIME=`echo $__START_AT_BOOTTIME | tr '[:upper:]' '[:lower:]'` +if [ "$__START_AT_BOOTTIME" = "yes" ] ; then + START_AT_BOOTTIME=true +else + START_AT_BOOTTIME=false +fi + + +if $UPDATE_SYMPA ; then + SYMPA_UID=`grep -e "^$SYMPA_USER" /etc/passwd | cut -d":" -f3` + SYMPA_GID=`grep -e "^$SYMPA_USER" /etc/passwd | cut -d":" -f4` +else + declare -i _start_gid=1000 + found=false + while ! $found ; do + if cat /etc/group | cut -d ":" -f3 | grep -w "$_start_gid" > /dev/null ; then + let _start_gid++ + else + found=true + fi + done + SYMPA_GID=$_start_gid + + + declare -i _start_uid=1000 + found=false + while ! $found ; do + if cat /etc/passwd | cut -d ":" -f3 | grep -w "$_start_uid" > /dev/null ; then + let _start_uid++ + else + found=true + fi + done + SYMPA_UID=$_start_uid +fi + + +OK= +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Are you installing on a VServer guest system?" +echo "" +echononl "VServer Gastsystem (yes/no) [$DEFAULT_VSERVER_GUEST]: " +read OK +if [ "X$OK" = "X" ]; then + OK=$DEFAULT_VSERVER_GUEST +fi +OK=`echo "$OK" | tr '[:upper:]' '[:lower:]'` +while [ "X$OK" != "Xyes" -a "X$OK" != "Xno" ]; do + echo "" + echononl "\twrong entry! [yes/no]: " + read OK + OK=`echo "$OK" | tr '[:upper:]' '[:lower:]'` +done +if [ "$OK" = "yes" ]; then + SYSTEMD_SUPPORTED=false +fi + +if $UPDATE_SYMPA ;then + _new=false; + _update=true +else + _new=true; + _update=false +fi + +clear +echo "" +if $UPDATE_SYMPA ; then + echo -e "\033[21G\033[32mStart Sympa Update with the following Parameters \033[m" + echo "" + echo -e "-- \033[33m\033[1mUpdate (Replace an existing installation)\033[m --" +else + echo -e "\033[21G\033[32mStart Sympa Installation with the following Parameters \033[m" + echo "" + echo -e "-- \033[33m\033[1mNew (initial) installation\033[m --" +fi +echo "" +echo "Sympa version...................: $SYMPA_VERSION" +echo " First (initial) Install......: $_new" +echo " Update ......................: $_update" +echo "" +if ! $UPDATE_SYMPA ; then + echo "Sympa support for multidomains..: $SYMPA_SUPPORT_MULTIDOMAINS" +fi +echo "" +echo "Sympa user......................: $SYMPA_USER (id: ${SYMPA_UID})" +echo "Sympa group.....................: $SYMPA_GROUP (id: ${SYMPA_GID})" +echo "" +echo "Installation directory..........: $SYMPA_INSTALL_DIR" +echo "Sympa's bin directory...........: $SYMPA_BIN_DIR" +echo "Sympa's pid directory...........: $SYMPA_PID_DIR" +echo "Sympa's cgi directory...........: $SYMPA_CGI_DIR" +echo "Sympa's libexec directory.......: $SYMPA_LIBEXEC_DIR" +echo "Sympa's static directory........: $SYMPA_STATIC_DIR" +echo "Sympa's manpages directory......: $SYMPA_MANPATH" +echo "Sympa's main conf directory.....: $SYMPA_MAIN_CONF_DIR" +echo "Sympa's Data directory..........: $SYMPA_LIST_DATA_DIR" +echo "Sympa's aliases file............: $SYMPA_ALIAS_FILE" +if ! $UPDATE_SYMPA ; then + echo "" + echo "(default) domain................: $SYMPA_DOMAIN" + echo "Listmaster......................: $SYMPA_LISTMASTER" + echo "URL for web interface...........: $SYMPA_WEB_URL" + echo "SctiptAlias Directory...........: $_wwsympa_dir" + echo "" + echo "Database management system......: $SYMPA_DB_TYPE" + echo "Database host...................: $SYMPA_DB_HOST" + echo "Database port...................: $SYMPA_DB_PORT" + echo "Database name...................: $SYMPA_DB_NAME" + echo "Database user...................: $SYMPA_DB_USER" + echo "Database password...............: $SYMPA_DB_PASSWD" + echo "" +fi +echo "Start at boot time..............: $START_AT_BOOTTIME" +echo "" +echo "Directory for init scripts......: $SYMPA_INIT_DIR" +echo "" +echo "Use systemd.....................: $SYSTEMD_SUPPORTED" +if $SYSTEMD_SUPPORTED ; then + echo "Directory Systemd unit files....: $SYMPA_SYSTEMD_DIR" +fi +if ! $UPDATE_SYMPA ; then + echo "" + echo "Apache VHost directory..........: $apache_vhost_dir" + echo "Apache Log Directory............: $apache_log_dir" + echo "IPv4 Address....................: $IPv4" + echo "IPv6 Address....................: $IPv6" + echo "" + echo "Postfix Configuration Directory.: $POSTFIX_CONF_DIR" +fi +if $UPDATE_SYMPA ; then + echo "" + echo -e "-- \033[34m\033[1mSome determined defines of the installed Sympa System\033[m --" + echo "" + echo " (default) domain..................: $SYMPA_DOMAIN" + echo " Listmaster........................: $SYMPA_LISTMASTER" + echo " URL for web interface.............: $SYMPA_WEB_URL" + echo " SctiptAlias Directory.............: $_wwsympa_dir" + echo "" + echo " Database management system........: $SYMPA_DB_TYPE" + echo " Database host.....................: $SYMPA_DB_HOST" + echo " Database port.....................: $SYMPA_DB_PORT" + echo " Database name.....................: $SYMPA_DB_NAME" + echo " Database user.....................: $SYMPA_DB_USER" + echo " Database password.................: $SYMPA_DB_PASSWD" + echo "" +fi +echo "" + +echononl "Start with that configuration? [yes/no]: " +read OK +while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "XNo" -a "X$OK" != "Xno" ] +do + echononl "wrong entry! [yes/no] :" + read OK +done +[ $OK = "Yes" -o $OK = "yes" ] || fatal "Change parameters and restart script: `basename $0`" + +echo "" +echo "" + +echononl "\tCreate base source directory" +if [ ! -d "$_src_base_dir" ]; then + mkdir -p $_src_base_dir + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot create base source directory" + fi +else + echo_skipped +fi + + +if [ -d "$_logdir" ];then + echononl "\tBackup existing log directory \"`basename ${_logdir}`\" .. .." + mv $_logdir $_logdir.$backup_date + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot move log directory \"${_logdir}\"!" + fi +fi +echononl "\tCreate log directory \"`basename ${_logdir}`\".." +mkdir -p $_logdir > /dev/null 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal "Cannot create log directory \"${_logdir}\"!" +fi + +touch $_log_file +echo "## -----------" >> $_log_file +if $UPDATE_SYMPA ; then + echo "## - Start of Sympa Update with the following Parameters" >> $_log_file +else + echo "## - Start of Sympa Installation with the following Parameters" >> $_log_file +fi +echo "## -----------" >> $_log_file +echo "## -" >> $_log_file +echo "## - Sympa version.....................: $SYMPA_VERSION" >> $_log_file +echo "## - First (initial) Install........: $_new" >> $_log_file +echo "## - Update ........................: $_update" >> $_log_file +echo "" +if ! $UPDATE_SYMPA ; then + echo "## - Sympa support for multidomains....: $SYMPA_SUPPORT_MULTIDOMAINS" >> $_log_file +fi +echo "## -" >> $_log_file +echo "## - Sympa user........................: $SYMPA_USER" >> $_log_file +echo "## - Sympa group.......................: $SYMPA_GROUP" >> $_log_file +echo "## -" >> $_log_file +echo "## - Installation directory............: $SYMPA_INSTALL_DIR" >> $_log_file +echo "## - Sympa's bin directory.............: $SYMPA_BIN_DIR" >> $_log_file +echo "## - Sympa's pid directory.............: $SYMPA_PID_DIR" >> $_log_file +echo "## - Sympa's cgi directory.............: $SYMPA_CGI_DIR" >> $_log_file +echo "## - Sympa's libexec directory.........: $SYMPA_LIBEXEC_DIR" >> $_log_file +echo "## - Sympa's static directory..........: $SYMPA_STATIC_DIR" >> $_log_file +echo "## - Sympa's manpages directory........: $SYMPA_MANPATH" >> $_log_file +echo "## - Sympa's main conf directory.......: $SYMPA_MAIN_CONF_DIR" >> $_log_file +echo "## - Sympa's Data directory...........: $SYMPA_LIST_DATA_DIR" >> $_log_file +echo "## - Sympa's aliases file..............: $SYMPA_ALIAS_FILE" >> $_log_file +echo "## -" >> $_log_file +if ! $UPDATE_SYMPA ; then + echo "## -" >> $_log_file + echo "## - (default) domain..................: $SYMPA_DOMAIN" >> $_log_file + echo "## - Listmaster........................: $SYMPA_LISTMASTER" >> $_log_file + echo "## - URL for web interface.............: $SYMPA_WEB_URL" >> $_log_file + echo "## - SctiptAlias Directory.............: $_wwsympa_dir" >> $_log_file + echo "## -" >> $_log_file + echo "## - Database management system........: $SYMPA_DB_TYPE" >> $_log_file + echo "## - Database host.....................: $SYMPA_DB_HOST" >> $_log_file + echo "## - Database port.....................: $SYMPA_DB_PORT" >> $_log_file + echo "## - Database name.....................: $SYMPA_DB_NAME" >> $_log_file + echo "## - Database user.....................: $SYMPA_DB_USER" >> $_log_file + echo "## - Database password.................: $SYMPA_DB_PASSWD" >> $_log_file +fi +echo "## -" >> $_log_file +echo "## - Start at boot time................: $START_AT_BOOTTIME" >> $_log_file +echo "## - Directory for init scripts........: $SYMPA_INIT_DIR" >> $_log_file +echo "## -" >> $_log_file +echo "## - Use systemd.......................: $SYSTEMD_SUPPORTED" >> $_log_file +if $SYSTEMD_SUPPORTED ; then + echo "## - Directory Systemd unit files......: $SYMPA_SYSTEMD_DIR" >> $_log_file +fi +echo "## -" >> $_log_file +if ! $UPDATE_SYMPA ; then + echo "## - Apache VHost directory............: $apache_vhost_dir" >> $_log_file + echo "## - Apache Log Directory..............: $apache_log_dir" >> $_log_file + echo "## - IPv4 Address......................: $IPv4" >> $_log_file + echo "## - IPv6 Address......................: $IPv6" >> $_log_file + echo "## -" >> $_log_file + echo "## - Postfix Configuration Directory...: $POSTFIX_CONF_DIR" >> $_log_file +fi +if $UPDATE_SYMPA ; then + echo "## --- Some determined defines of the installed Sympa System" >> $_log_file + echo "## -" >> $_log_file + echo "## - (default) domain...............: $SYMPA_DOMAIN" >> $_log_file + echo "## - Listmaster.....................: $SYMPA_LISTMASTER" >> $_log_file + echo "## - URL for web interface..........: $SYMPA_WEB_URL" >> $_log_file + echo "## - SctiptAlias Directory..........: $_wwsympa_dir" >> $_log_file + echo "## -" >> $_log_file + echo "## - Database management system.....: $SYMPA_DB_TYPE" >> $_log_file + echo "## - Database host..................: $SYMPA_DB_HOST" >> $_log_file + echo "## - Database port..................: $SYMPA_DB_PORT" >> $_log_file + echo "## - Database name..................: $SYMPA_DB_NAME" >> $_log_file + echo "## - Database user..................: $SYMPA_DB_USER" >> $_log_file + echo "## - Database password..............: $SYMPA_DB_PASSWD" >> $_log_file + echo "## -" >> $_log_file +fi +echo "## -" >> $_log_file +echo "" >> $_log_file + +echo "SYMPA_VERSION=$SYMPA_VERSION" >> $_log_file +echo "" >> $_log_file +echo "UPDATE_SYMPA=$UPDATE_SYMPA" >> $_log_file +echo "" >> $_log_file +if ! $UPDATE_SYMPA ; then + echo "SYMPA_SUPPORT_MULTIDOMAINS=$SYMPA_SUPPORT_MULTIDOMAINS" >> $_log_file +fi +echo "SYMPA_USER=$SYMPA_USER" >> $_log_file +echo "SYMPA_GROUP=$SYMPA_GROUP" >> $_log_file +echo "" >> $_log_file +echo "ENABLE_FHS=$ENABLE_FHS" >> $_log_file +echo "" >> $_log_file +echo "SYMPA_INSTALL_DIR=$SYMPA_INSTALL_DIR" >> $_log_file +echo "SYMPA_MAIN_CONF_DIR=$SYMPA_MAIN_CONF_DIR" >> $_log_file +echo "SYMPA_BIN_DIR=$SYMPA_BIN_DIR" >> $_log_file +echo "SYMPA_PID_DIR=$SYMPA_PID_DIR" >> $_log_file +echo "SYMPA_CGI_DIR=$SYMPA_CGI_DIR" >> $_log_file +echo "SYMPA_LIBEXEC_DIR=$SYMPA_LIBEXEC_DIR" >> $_log_file +echo "SYMPA_STATIC_DIR=$SYMPA_STATIC_DIR" >> $_log_file +echo "SYMPA_MANPATH=$SYMPA_MANPATH" >> $_log_file +echo "SYMPA_LIST_DATA_DIR=$SYMPA_LIST_DATA_DIR" >> $_log_file +echo "SYMPA_ALIAS_FILE=$SYMPA_ALIAS_FILE" >> $_log_file +echo "" >> $_log_file +echo "SYMPA_DOMAIN=$SYMPA_DOMAIN" >> $_log_file +echo "SYMPA_LISTMASTER=$SYMPA_LISTMASTER" >> $_log_file +echo "SYMPA_WEB_URL=$SYMPA_WEB_URL" >> $_log_file +echo "_wwsympa_dir=$_wwsympa_dir" >> $_log_file +echo "" >> $_log_file +echo "SYMPA_DB_TYPE=$SYMPA_DB_TYPE" >> $_log_file +echo "SYMPA_DB_HOST=$SYMPA_DB_HOST" >> $_log_file +echo "SYMPA_DB_PORT=$SYMPA_DB_PORT" >> $_log_file +echo "SYMPA_DB_NAME=$SYMPA_DB_NAME" >> $_log_file +echo "SYMPA_DB_USER=$SYMPA_DB_USER" >> $_log_file +echo "SYMPA_DB_PASSWD=$SYMPA_DB_PASSWD" >> $_log_file +echo "START_AT_BOOTTIME=$START_AT_BOOTTIME" >> $_log_file +echo "SYMPA_INIT_DIR=$SYMPA_INIT_DIR" >> $_log_file +if $SYSTEMD_SUPPORTED ; then + echo "SYMPA_SYSTEMD_DIR=$SYMPA_SYSTEMD_DIR" >> $_log_file +fi +echo "" >> $_log_file +if ! $UPDATE_SYMPA ; then + echo "apache_vhost_dir=$apache_vhost_dir" >> $_log_file + echo "apache_log_dir=$apache_log_dir" >> $_log_file + echo "IPv4=$IPv4" >> $_log_file + echo "IPv6=$IPv6" >> $_log_file +fi +echo "" >> $_log_file +if ! $UPDATE_SYMPA ; then + echo "POSTFIX_CONF_DIR=$POSTFIX_CONF_DIR" >> $_log_file +fi +echo "" >> $_log_file +echo "SYSTEMD_SUPPORTED=$SYSTEMD_SUPPORTED" >> $_log_file + +echo "" >> $_log_file +echo "_src_base_dir=$_src_base_dir" >> $_log_file +echo "_builddir=$_builddir" >> $_log_file +echo "_logdir=$_logdir" >> $_log_file + +echo "" + +if ! $UPDATE_SYMPA ; then + + ## - In case of a new fresh installation sympa main configuration file should + ## - not exists. But if so, backup existing configuration file + ## - + if [ -s "${SYMPA_MAIN_CONF_DIR}/sympa.conf" ]; then + warn "File \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\" is not empty, but this is an initial installation!" + echo "" >> $_log_file + echo "## - Backup configuration file '${SYMPA_MAIN_CONF_DIR}/sympa.conf now'.." >> $_log_file + echo "## -" >> $_log_file + echo "mv ${SYMPA_MAIN_CONF_DIR}/sympa.conf ${SYMPA_MAIN_CONF_DIR}/sympa.conf.$backup_date" >> $_log_file + echononl "\tBackup configuration file '${SYMPA_MAIN_CONF_DIR}/sympa.conf now'.." + mv "${SYMPA_MAIN_CONF_DIR}/sympa.conf" "${SYMPA_MAIN_CONF_DIR}/sympa.conf.$backup_date" + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Backup configuration file '${SYMPA_MAIN_CONF_DIR}/sympa.conf now' failed! \n + See '$_log_file' for further informations." + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + fi + + if [[ -f "${SYMPA_MAIN_CONF_DIR}/sympa.conf.bin" ]] ; then + echo "" >> $_log_file + echo "## - Remove file '${SYMPA_MAIN_CONF_DIR}/sympa.conf.bin'.." >> $_log_file + echo "## -" >> $_log_file + echo "rm ${SYMPA_MAIN_CONF_DIR}/sympa.conf.bin" >> $_log_file + echononl "\tRemove file '${SYMPA_MAIN_CONF_DIR}/sympa.conf.bin'.." + rm ${SYMPA_MAIN_CONF_DIR}/sympa.conf.bin + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Removing file '${SYMPA_MAIN_CONF_DIR}/sympa.conf.bin' failed! \n + See '$_log_file' for further informations." + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + fi + + ## - Also the database should be empty (created above). If not, backup the database + ## - and then empty it + ## - + if echo "$(mysql $mysql_credential_args -N -s -e "SHOW DATABASES";)" | grep -q "$SYMPA_DB_NAME" ; then + _tables=$(mysql $mysql_credential_args $SYMPA_DB_NAME -N -s -e 'SHOW TABLES' 2>/dev/null) + + if [[ -n "$_tables" ]]; then + warn "Database \"$SYMPA_DB_NAME\" exists AND contains tables, but this is an initial installation!" + + echo "" >> $_log_file + echo "## - Backup database non empty database '$SYMPA_DB_NAME'.." >> $_log_file + echo "## -" >> $_log_file + echo "mysqldump $mysql_credential_args --opt $SYMPA_DB_NAME > ${_src_base_dir}/${SYMPA_DB_NAME}-${backup_date}.sql" >> $_log_file + echononl "\tBackup database non empty database '$SYMPA_DB_NAME'.." + mysqldump $mysql_credential_args --opt $SYMPA_DB_NAME > ${_src_base_dir}/${SYMPA_DB_NAME}-${backup_date}.sql 2> $err_log + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + fatal "$(cat $err_log)" + fi + + + echo "" >> $_log_file + echo "## - Cleaning up (empty) database '$SYMPA_DB_NAME'.." >> $_log_file + echo "## -" >> $_log_file + cat <> $_log_file +for _table in $_tables ; do +mysql $mysql_credential_args $SYMPA_DB_NAME -N -s -e \"DROP TABLE \$_table\" 2> /dev/null +done +EOF + echononl "\tCleaning up (empty) database '$SYMPA_DB_NAME'.." + _failed=false + for _table in $_tables ; do + mysql $mysql_credential_args $SYMPA_DB_NAME -N -s -e "DROP TABLE $_table" 2> /dev/null + if [ "$?" != "0" ]; then + _failed=true + fi + done + if $_failed ; then + echo_failed + fatal "Cleaning up (empty)database \"$SYMPA_DB_NAME\" failed!" + else + echo_ok + fi + + fi + + fi + +fi + + + +## - Download Sympa sources.. +## - +echo "" >> $_log_file +echo "## - Change into base source directory \"$_src_base_dir\" .." >> $_log_file +echo "## -" >> $_log_file +echo "cd $_src_base_dir" >> $_log_file +cd $_src_base_dir >> $_log_file 2>&1 || fatal "Changing Directory (cd) to \"${_src_base_dir}\" failed!" + +echononl "\tGet source sympa-${SYMPA_VERSION}.tar.gz .." + +if [ ! -f sympa-${SYMPA_VERSION}.tar.gz ]; then + echo "" >> $_log_file + echo "## - Get source sympa-${SYMPA_VERSION}.tar.gz .." >> $_log_file + echo "## -" >> $_log_file + echo "wget https://github.com/sympa-community/sympa/releases/download/${SYMPA_VERSION}/sympa-${SYMPA_VERSION}.tar.gz" >> $_log_file + wget https://github.com/sympa-community/sympa/releases/download/${SYMPA_VERSION}/sympa-${SYMPA_VERSION}.tar.gz >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Download of \"sympa-${SYMPA_VERSION}.tar.gz\" failed! \n + See '$_log_file' for further informations." + fi +else + echo_skipped +fi + +echo "" + +if ! $UPDATE_SYMPA ; then + + echononl "\tAdding Group \"$SYMPA_GROUP\".." + if ! grep $SYMPA_GROUP /etc/group > /dev/null ; then + echo "" >> $_log_file + echo "## - Adding Group \"$SYMPA_GROUP\".." >> $_log_file + echo "## -" >> $_log_file + echo "addgroup --gid $SYMPA_GID $SYMPA_GROUP" >> $_log_file + addgroup --gid $SYMPA_GID $SYMPA_GROUP >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Adding group '$SYMPA_GROUP' failed! \n + See '$_log_file' for further informations." + fi + else + echo_skipped + fi + + echononl "\tAdding User \"$SYMPA_USER\".." + if ! grep $SYMPA_USER /etc/passwd > /dev/null ; then + echo "" >> $_log_file + echo "## - Adding User \"$SYMPA_USER\".." >> $_log_file + echo "## -" >> $_log_file + echo "adduser --uid $SYMPA_UID --gid $SYMPA_GID --home $SYMPA_BASE_PATH --disabled-password \\" >> $_log_file + echo " --gecos \"Sympa mailing list manager\" $SYMPA_USER" >> $_log_file + adduser --uid $SYMPA_UID --gid $SYMPA_GID --home $SYMPA_BASE_PATH --disabled-password \ + --gecos "Sympa mailing list manager" $SYMPA_USER >> $_log_file + + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Adding user '$SYMPA_USER' failed! \n + See '$_log_file' for further informations." + fi + else + echo_skipped + fi + + echo "" + + ## - Sympa alias file + ## - + if [ -n "$SYMPA_ALIAS_FILE" ]; then + _dir=`dirname $SYMPA_ALIAS_FILE` + _create_dir=true + echononl "\tCreate directory \"$_dir\".." + echo "" >> $_log_file + echo "## - Create directory \"$_dir\" (contains sympa alias file).." >> $_log_file + echo "## -" >> $_log_file + if [ ! -d "$_dir" ]; then + echo "mkdir -p $_dir" $_log_file + mkdir -p $_dir >> $_log_file + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Creation of dir \"$_dir\" failed! \n + See '$_log_file' for further informations." + _create_dir=false + fi + else + echo_skipped + echo "## - \"$_dir\" alredy exists" >> $_log_file + echo "## -" >> $_log_file + fi + echononl "\tCreate alias file \"$SYMPA_ALIAS_FILE\".." + echo "" >> $_log_file + echo "## - Create alias file \"$SYMPA_ALIAS_FILE\".." >> $_log_file + echo "## -" >> $_log_file + if [ ! -f "$SYMPA_ALIAS_FILE" ]; then + echo "touch $SYMPA_ALIAS_FILE" >> $_log_file + touch $SYMPA_ALIAS_FILE >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Creation of alias file \"$SYMPA_ALIAS_FILE\" failed! \n + See '$_log_file' for further informations." + fi + else + echo_skipped + echo "## - Alias file \"$SYMPA_ALIAS_FILE\" alredy exists" >> $_log_file + echo "## -" >> $_log_file + fi + fi + echononl "\tChange group for \"$SYMPA_ALIAS_FILE\".." + echo "" >> $_log_file + echo "## - Change group for \"$SYMPA_ALIAS_FILE\".." >> $_log_file + echo "## -" >> $_log_file + echo "chgrp $SYMPA_GROUP $SYMPA_ALIAS_FILE" >> $_log_file + chgrp $SYMPA_GROUP $SYMPA_ALIAS_FILE >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot set ownerchip ($SYMPA_USER:$SYMPA_GROUP) to \"$SYMPA_ALIAS_FILE\"! \n + See '$_log_file' for further informations." + fi + echononl "\tSet permissions on \"$SYMPA_ALIAS_FILE\".." + echo "" >> $_log_file + echo "## - Set permissions on \"$SYMPA_ALIAS_FILE\".." >> $_log_file + echo "## -" >> $_log_file + echo "chmod 664 $SYMPA_ALIAS_FILE" >> $_log_file + chmod 664 $SYMPA_ALIAS_FILE >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot set ownerchip ($SYMPA_USER:$SYMPA_GROUP) to \"$SYMPA_ALIAS_FILE\"! \n + See '$_log_file' for further informations." + fi + + + ## - Install reqired debian packages + ## - + + declare -a required_debian_packages_arr + for _debian_pkg in $_required_debian_packages ; do + required_debian_packages_arr+=("$_debian_pkg") + done + > ${_logdir}/debian-install.log + + echo "" + echo -e "\tInstalling required debian packages .." + + for _debian_pkg in ${required_debian_packages_arr[@]} ; do + + echononl "\t 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 Package \"$_debian_pkg\" .." >> $_log_file + echo "## -" >> $_log_file + echo "## - See ${_logdir}/debian-install.log for details" >> $_log_file + echo "## -" >> $_log_file + echo "apt-get install -q -y $_debian_pkg >> ${_logdir}/debian-install.log 2>&1" >> $_log_file + + echo "" >> ${_logdir}/debian-install.log + echo "## - Install $_debian_pkg" >> ${_logdir}/debian-install.log + + apt-get install -q -y $_debian_pkg >> ${_logdir}/debian-install.log 2>&1 + if [ "$?" = 0 ]; then + echo_ok + else + echo_failed + fatal "Installing debian package \"$_debian_pkg\" failed! \n + See '${_logdir}/debian-install.log' for further informations." + fi + else + echo_skipped + fi + + done + + ## - Install required/optional perl modules + ## - + + declare -a cpan_modules_arr + for _module in $_needed_cpan_modules ; do + cpan_modules_arr+=("$_module") + done + > ${_logdir}/cp_modul-install.log + + echo "" + echo -e "\tInstalling cpan modules .." + + for _cpan_module in ${cpan_modules_arr[@]} ; do + + echononl "\t Installing $_cpan_module .." + cpanm -q --skip-installed $_module > "${_logdir}/cp_modul-install.log" 2>&1 + if [[ "$?" -ne 0 ]] ; then + echo_failed + error "$(cat "${_logdir}/cp_modul-install.log")" + else + echo_ok + fi + + done + + info "After Installation finished, check presens of required perl modules" + + ## - Generate some locales + ## + echononl "\tConfigure locales used by the system (/etc/locale.gen)" + echo "" >> $_log_file + echo "## - Configure locales used by the system (/etc/locale.gen) ..." >> $_log_file + echo "## -" >> $_log_file + cat <> $_log_file +cat < /etc/locale.gen +bg_BG CP1251 +cs_CZ ISO-8859-2 +de_DE.UTF-8 UTF-8 +de_DE ISO-8859-1 +el_GR ISO-8859-7 +en_US.UTF-8 UTF-8 +en_US ISO-8859-1 +es_ES ISO-8859-1 +et_EE ISO-8859-1 +eu_ES ISO-8859-1 +fi_FI ISO-8859-1 +fr_FR ISO-8859-1 +hu_HU ISO-8859-2 +it_IT ISO-8859-1 +ja_JP.EUC-JP EUC-JP +nb_NO ISO-8859-1 +nl_NL ISO-8859-1 +oc_FR ISO-8859-1 +pl_PL ISO-8859-2 +pt_BR ISO-8859-1 +pt_PT ISO-8859-1 +ro_RO ISO-8859-2 +ru_RU ISO-8859-5 +sv_SE ISO-8859-1 +tr_TR ISO-8859-9 +zh_TW BIG5 +zh_CN GB2312 +END +EOF + cat < /etc/locale.gen +bg_BG CP1251 +cs_CZ ISO-8859-2 +de_DE.UTF-8 UTF-8 +de_DE ISO-8859-1 +el_GR ISO-8859-7 +en_US.UTF-8 UTF-8 +en_US ISO-8859-1 +es_ES ISO-8859-1 +et_EE ISO-8859-1 +eu_ES ISO-8859-1 +fi_FI ISO-8859-1 +fr_FR ISO-8859-1 +hu_HU ISO-8859-2 +it_IT ISO-8859-1 +ja_JP.EUC-JP EUC-JP +nb_NO ISO-8859-1 +nl_NL ISO-8859-1 +oc_FR ISO-8859-1 +pl_PL ISO-8859-2 +pt_BR ISO-8859-1 +pt_PT ISO-8859-1 +ro_RO ISO-8859-2 +ru_RU ISO-8859-5 +sv_SE ISO-8859-1 +tr_TR ISO-8859-9 +zh_TW BIG5 +zh_CN GB2312 +EOF + if [ "$?" = 0 ]; then + echo_ok + else + echo_failed + error "Setting locales definition in file \"/etc/locale.gen\" failed!" + fi + + + echononl "\tGenerating locales from /etc/locale.gen" + echo "" >> $_log_file + echo "## - Generating locales from /etc/locale.gen .." >> $_log_file + echo "## -" >> $_log_file + echo "locale-gen" >> $_log_file + locale-gen >> $_log_file 2>&1 + if [ "$?" = 0 ]; then + echo_ok + else + echo_failed + error "Generating locales from \"/etc/locale.gen\" failed! \n + See '${_logdir}/debian-install.log' for further informations." + fi + + echononl "\tAdd Environment Variable \"PERL5LIB\" to /etc/profile .." + if ! grep PERL5LIB /etc/profile > /dev/null 2>&1 ; then + echo "" >> $_log_file + echo "## - Add Environment Variable \"PERL5LIB\" to /etc/profile .." >> $_log_file + echo "## -" >> $_log_file + echo "echo \"export PERL5LIB=/usr/share/mhonarc\" >> /etc/profile" >> $_log_file + echo "export PERL5LIB=/usr/share/mhonarc" >> /etc/profile 2>> $_log_file + if [ "$?" = 0 ]; then + echo_ok + else + echo_failed + error "Adding Environment Variable \"PERL5LIB\" to /etc/profile failed! \n + See '${_logdir}/debian-install.log' for further informations." + fi + else + echo_skipped + fi + + ## - Make PERL5LIB also present in that shell + ## - + export PERL5LIB=/usr/share/mhonarc + +else + + # Stop apache webservice + ## + HTTPD=`realpath $(which httpd) 2>/dev/null` + if [ -z "$HTTPD" ]; then + if [ -x "/usr/local/apache2/bin/httpd" ]; then + HTTPD=`realpath "/usr/local/apache2/bin/httpd"` + else + HTTPD=`realpath $(which apache2) 2>/dev/null` + if [ -z "$HTTPD" ]; then + fatal 'Command \"httpd\"/\"apache2\" not found!' + fi + fi + fi + + echononl "\tStopping Apache Webserver .." + _PID=`ps aux | grep "$HTTPD " | grep -e "^root" | grep -v grep | awk '{print$2}'` + if [ -n "$_PID" ];then + if [[ -n "$APACHE_SERVICE_FILE" ]] ; then + echo "systemctl stop $APACHE_SERVICE_FILE" >> $_log_file + systemctl stop $APACHE_SERVICE_FILE >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Stopping Apache Webserver (systemd service) failed! \n + See '${_log_file}' for further informations." + fi + else + echo "$APACHE_INIT_SCRIPT stop" >> $_log_file + $APACHE_INIT_SCRIPT stop >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Stopping Apache Webserver (SysV Initscript) failed! \n + See '${_log_file}' for further informations." + fi + fi + else + echo_skipped + fi + + sleep 2 + _PIDS=`ps aux | grep "$HTTPD " |grep -v grep | awk '{print$2}'` + + if [ -n "$_PIDS" ]; then + warn "Found running webserver processes. Going to kill them.." + for _pid in $_PIDS ; do + kill -9 $_pid > /dev/null 2>&1 + done + fi + + ## - Stop Sympa list manager + ## - + echononl "\tStopping Sympa mailing list manager .." + if ps -e f | grep -E "${SYMPA_BASE_PATH}/s?bin/sympa" 2>/dev/null | grep -v grep > /dev/null 2>&1 ; then + echo "" >> $_log_file + echo "## - Stopping Sympa mailing list manager .." >> $_log_file + echo "## -" >> $_log_file + if $SYSTEMD_SUPPORTED ; then + echo "systemctl stop sympa" >> $_log_file + systemctl stop sympa >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Stopping Sympa mailing list manager (systemd service) failed! \n + See '${_log_file}' for further informations." + fi + else + echo "${SYMPA_INIT_DIR}/sympa stop" >> $_log_file + ${SYMPA_INIT_DIR}/sympa stop >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Stopping Sympa mailing list manager (SysV Initscript) failed! \n + See '${_log_file}' for further informations." + fi + fi + else + echo_skipped + fi + + sleep 5 + _PIDS=`ps -e f | grep -E "${SYMPA_BASE_PATH}/s?bin/" 2>/dev/null | grep -v grep | awk '{print$1}'` + + if [ -n "$_PIDS" ]; then + warn "Found running sympa processes. Going to kill them.." + for _pid in $_PIDS ; do + kill -9 $_pid > /dev/null 2>&1 + done + fi + + + CURRENT_INSTALL_DIR="$(realpath "$SYMPA_BASE_PATH")" + + if [[ "$CURRENT_INSTALL_DIR" = "$SYMPA_BASE_PATH" ]]; then + echo "\tMove current Installation ($CURRENT_INSTALL_DIR) to directory" + echononl "\t '${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}' .." + echo "## - Move current Installation ($CURRENT_INSTALL_DIR) to directory" >> $_log_file + echo "## - '${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}'.." >> $_log_file + echo "## -" >> $_log_file + echo "mv \"$CURRENT_INSTALL_DIR\" \"${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}'\"" >> $_log_file + mv "$CURRENT_INSTALL_DIR" "${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}'" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot move directory \"$CURRENT_INSTALL_DIR\" to \"${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}'\"! \n + See '${_log_file}' for further informations." + + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + fi + + + if [[ "$SYMPA_OLD_VERSION" = "$SYMPA_VERSION" ]]; then + echononl "\tBackup current Installation ($CURRENT_INSTALL_DIR).." + echo "## - Backup current Installation ($CURRENT_INSTALL_DIR).." >> $_log_file + echo "## -" >> $_log_file + echo "cp -a \"${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}\" \"${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}.$backup_date\"" >> $_log_file + cp -a "${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}" "${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}.$backup_date" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Backup current Installation \"$CURRENT_INSTALL_DIR\"! \n + See '${_log_file}' for further informations." + + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + fi + + # - Copy old Installation directory into tne new one + # - + echo "\tCopy (hardlink) ${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}' to directory" + echononl "\t '$SYMPA_INSTALL_DIR'.." + echo "## - Copy (hardlink) ${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}' to directory" >> $_log_file + echo "## - '$SYMPA_INSTALL_DIR'.." >> $_log_file + echo "## -" >> $_log_file + echo "cp -al \"${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}\" \"$SYMPA_INSTALL_DIR\"" >> $_log_file + cp -al "${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}" "$SYMPA_INSTALL_DIR" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot move directory \"$CURRENT_INSTALL_DIR\" to \"${SYMPA_BASE_PATH}-${SYMPA_OLD_VERSION}'\"! \n + See '${_log_file}' for further informations." + + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + + + #CURRENT_DATA_DIR="$(realpath "$LIST_DATA_BASE_PATH")" + + echononl "\tBackup existing list directory ($SYMPA_LIST_DATA_DIR) .." + echo "" >> $_log_file + echo "## - Backup existing list directory ($SYMPA_LIST_DATA_DIR) .." >> $_log_file + echo "## -" >> $_log_file + echo "cp -a $SYMPA_LIST_DATA_DIR ${SYMPA_LIST_DATA_DIR}.$backup_date" >> $_log_file + cp -a $SYMPA_LIST_DATA_DIR ${SYMPA_LIST_DATA_DIR}.$backup_date >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot Backup existing lists data directory \"$SYMPA_LIST_DATA_DIR\"! \n + See '${_log_file}' for further informations." + + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + + if [ "$SYMPA_DB_TYPE" == "mysql" ]; then + echononl "\tDump Database \"$SYMPA_DB_NAME\" .." + echo "" >> $_log_file + echo "## - Dump Database \"$SYMPA_DB_NAME\" .." >> $_log_file + echo "## -" >> $_log_file + echo "mysqldump -h $SYMPA_DB_HOST -u $SYMPA_DB_USER -p$SYMPA_DB_PASSWD --opt $SYMPA_DB_NAME > $(dirname ${SYMPA_BASE_PATH})/${SYMPA_DB_NAME}.${SYMPA_OLD_VERSION}.${backup_date}.sql" >> $_log_file + mysqldump -h $SYMPA_DB_HOST -u $SYMPA_DB_USER -p$SYMPA_DB_PASSWD --opt $SYMPA_DB_NAME > $(dirname ${SYMPA_BASE_PATH})/${SYMPA_DB_NAME}.${SYMPA_OLD_VERSION}.${backup_date}.sql 2>> $_log_file + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot Backup existing database \"$SYMPA_DB_NAME\"! \n + See '${_log_file}' for further informations." + + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + else + warn "No Backup for database type "$SYMPA_DB_TYPE" implemented." + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + + echononl "\tBackup existing init script .." + echo "" >> $_log_file + echo "## - Backup existing init script .." >> $_log_file + echo "## -" >> $_log_file + echo "cp -a ${SYMPA_INIT_DIR}/sympa ${SYMPA_INIT_DIR}/sympa.$backup_date" >> $_log_file + cp -a ${SYMPA_INIT_DIR}/sympa ${SYMPA_INIT_DIR}/sympa.$backup_date >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot Backup existing init script \"${SYMPA_INIT_DIR}/sympa\"! \n + See '${_log_file}' for further informations." + + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + + echononl"\tDisable init script.." + if [[ -f "${SYMPA_INIT_DIR}/sympa" ]]; then + echo "" >> $_log_file + echo "## - Disable init script '${SYMPA_INIT_DIR}/sympa'.." >> $_log_file + echo "## -" >> $_log_file + echo "update-rc.d -f sympa remove" >> $_log_file + update-rc.d -f sympa remove >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot disable init script \"${SYMPA_INIT_DIR}/sympa\"! \n + See '${_log_file}' for further informations." + + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + else + echo_skipped + fi + + echononl"\tRemove init script if exists" + if [[ -f "${SYMPA_INIT_DIR}/sympa" ]]; then + echo "" >> $_log_file + echo "## - Remove init script '${SYMPA_INIT_DIR}/sympa'.." >> $_log_file + echo "## -" >> $_log_file + echo "rm ${SYMPA_INIT_DIR}/sympa" >> $_log_file + rm "${SYMPA_INIT_DIR}/sympa" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot remove init script \"${SYMPA_INIT_DIR}/sympa\"! \n + See '${_log_file}' for further informations." + + fi + else + echo_skipped + fi + + _service_files="sympa.service wwsympa.service" + for _service_file in $_service_files ; do + echononl "\tDisable unit file '$_service_file'.." + if [[ -f "${SYMPA_SYSTEMD_DIR}/$_service_file" ]]; then + echo "## - Disable unit file '$_service_file'.." >> $_log_file + echo "## -" >> $_log_file + echo "systemctl disable $_service_file" >> $_log_file + systemctl disable $_service_file >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot disable unit file '$_service_file'! \n + See '${_log_file}' for further informations." + + echononl"\tRemove unit file '$_service_file'.." + echo "## - Remove unit file '$_service_file'.." >> $_log_file + echo "## -" >> $_log_file + echo "rm ${SYMPA_SYSTEMD_DIR}/$_service_file" >> $_log_file + rm ${SYMPA_SYSTEMD_DIR}/$_service_file >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot remove unit file \"${SYMPA_INIT_DIR}/$_service_file\"! \n + See '${_log_file}' for further informations." + + fi + fi + else + echo_skipped + fi + + done + + if ls ${SYMPA_SYSTEMD_DIR}/sympa-*.services > /dev/null 2>&1 ; then + echononl "\tRemove services files 'sympa-*.services'.." + echo "## - Remove unit files 'sympa-*.services'" + echo "## -" >> $_log_file + echo "rm ${SYMPA_SYSTEMD_DIR}/sympa-*.services" >> $_log_file + rm ${SYMPA_SYSTEMD_DIR}/sympa-*.services >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot remove services files 'sympa-*.services'! \n + See '${_log_file}' for further informations." + + fi + fi + +fi + + +echo +echo -e "\t---" +echo -e "\t--- Installation of Sympa mailing list server (${SYMPA_VERSION})" +echo -e "\t---" +echo"" + +echo "" >> $_log_file +echo -e "## ---" >> $_log_file +echo -e "## --- Installation of Sympa mailing list server (${SYMPA_VERSION})" >> $_log_file +echo -e "## ---" >> $_log_file +echo"" >> $_log_file + + +echononl "\tMove (backup) existing source directory ..." +if [ -d "$_builddir" ];then + echo "" >> $_log_file + echo "## - Move (backup) existing source directory ..." >> $_log_file + echo "## -" >> $_log_file + echo "mv $_builddir $_builddir.$backup_date" >> $_log_file + mv $_builddir $_builddir.$backup_date >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot move (backup) source directory \"${_builddir}\"! \n + See '${_log_file}' for further informations." + fi +else + echo_skipped +fi + +## - Unpack source archive +## - +echo "" >> $_log_file +echo "## - Change into base source directory \"$_src_base_dir\" .." >> $_log_file +echo "## -" >> $_log_file +echo "cd $_src_base_dir" >> $_log_file +cd $_src_base_dir + +echo "" >> $_log_file +echo "## - Unpack sympa-${SYMPA_VERSION}.tar.gz .." >> $_log_file +echo "## -" >> $_log_file +echo "gzip -dc sympa-${SYMPA_VERSION}.tar.gz | tar xf -" >> $_log_file +echononl "\tUnpack sympa-${SYMPA_VERSION}.tar.gz .." +gzip -dc sympa-${SYMPA_VERSION}.tar.gz | tar xf - >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal "Cannot unpack archive 'sympa-${SYMPA_VERSION}.tar.gz'! \n + See '${_log_file}' for further informations." +fi + + +## - Configure sympa +## - +echo "" >> $_log_file +echo "## - Change into sympa source directory \"$_builddir\" .." >> $_log_file +echo "## -" >> $_log_file +echo "cd $_builddir" >> $_log_file +cd $_builddir >> $_log_file 2>&1 || fatal "Changing Directory (cd) to \"${_builddir}\" failed!" + +echo "" >> $_log_file +echo "## - Configure sympa-${SYMPA_VERSION} .." >> $_log_file +echo "## -" >> $_log_file +echo "## - See ${_logdir}/sympa-configure.log for more details" >> $_log_file +echo "## -" >> $_log_file +echononl "\tConfiguring sympa-${SYMPA_VERSION} .." + +config_params=" + --enable-fhs=$ENABLE_FHS + --prefix=$SYMPA_INSTALL_DIR" + +if $SYSTEMD_SUPPORTED ; then + config_params="$config_params + --without-initdir + --with-unitsdir=$SYMPA_SYSTEMD_DIR" +else + config_params="$config_params + --with-initdir=$SYMPA_INIT_DIR" +fi +config_params="$config_params + --with-confdir=$SYMPA_MAIN_CONF_DIR + --with-expldir=$SYMPA_LIST_DATA_DIR + --with-aliases_file=$SYMPA_ALIAS_FILE + --with-user=$SYMPA_USER + --with-group=$SYMPA_GROUP" + + +cat << EOF >> $_log_file +LDFLAGS="-s" \\ +./configure $config_params > ${_logdir}/sympa-configure.log 2>&1 +EOF + +LDFLAGS="-s" \ +./configure $config_params > ${_logdir}/sympa-configure.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal "Configuring sympa-${SYMPA_VERSION} failed! \n + See '${_logdir}/sympa-configure.log' for further informations." +fi + + +echo "" >> $_log_file +echo "## - Compiling sympa-${SYMPA_VERSION} .." >> $_log_file +echo "## -" >> $_log_file +echo "## - See ${_logdir}/sympa-make.log for more details" >> $_log_file +echo "## -" >> $_log_file +echo "make > ${_logdir}/sympa-make.log 2>&1" >> $_log_file +echononl "\tCompiling sympa-${SYMPA_VERSION} .." +make > ${_logdir}/sympa-make.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal "Compiling sympa-${SYMPA_VERSION} failed! \n + See '${_logdir}/sympa-make.log' for further informations." +fi + +## - Notice! +## - +## - In case of a new fresh installation, this directory should not exists. +## - +if ! $UPDATE_SYMPA ; then + echononl "\tBackup existing installation directory.." + if [[ -d "$SYMPA_BASE_PATH" ]];then + echo "" >> $_log_file + echo "## - Backup existing installation directory.." >> $_log_file + echo "## -" >> $_log_file + echo "mv $SYMPA_BASE_PATH ${SYMPA_BASE_PATH}.$backup_date" >> $_log_file + mv $"SYMPA_BASE_PATH" "${SYMPA_BASE_PATH}.$backup_date" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot move (backup) existing install directory \"${_builddir}\"! \n + See '${_log_file}' for further informations." + fi + else + echo_skipped + fi +fi + +if $UPDATE_SYMPA ; then + + _successfully=true + info "Sorry, but you have to install files in an seperate terminal.\n\t After finished, continue with this script." + echo -e "\tType:" + echo -e "\t cd $_builddir" + echo -e "\t make install " + echo "" + echononl "Was the installation sucessfully? [yes/no]: " + read OK + while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "XNo" -a "X$OK" != "Xno" ] + do + echononl "wrong entry! [yes/no] :" + read OK + done + [ $OK = "Yes" -o $OK = "yes" ] || _successfully=false + echo "" + + if ! $_successfully ; then + echononl "\tInstall previous sympa init script" + echo_skipped + echononl "\tReorganize Database.." + echo_skipped + echononl "\tRestore Sympa's Installation Directory" + echo_skipped + echononl "\tRestore Sympa's List Data Directory" + echo_skipped + warn "Moving back to previous installation not yet implemented!" + fatal "Exiting: Installation was not successfully!" + fi + + echononl "\tPerform DB changes an updates of the the configuration files.." + echo "" >> $_log_file + echo "## - Perform DB changes an updates of the the configuration files if required." >> $_log_file + echo "## -" >> $_log_file + echo "${SYMPA_BIN_DIR}/sympa.pl --upgrade" >> $_log_file + ${SYMPA_BIN_DIR}/sympa.pl --upgrade >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "\"${SYMPA_BIN_DIR}/sympa.pl --upgrade\" failed! \n + See '${_log_file}' for further informations." + + 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 + + if $SYSTEMD_SUPPORTED ; then + echononl "\tReload systemd configuration.." + echo "" >> $_log_file + echo "## - Reload systemd configuration.." >> $_log_file + echo "## -" >> $_log_file + echo "systemctl daemon-reload" >> $_log_file + systemctl daemon-reload >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Reloading systemd configuration failed! \n + See '${_log_file}' for further informations." + fi + fi + +else + echo "" >> $_log_file + echo "## - Install Sympa mailing list server (v ${SYMPA_VERSION}) .." >> $_log_file + echo "## -" >> $_log_file + echo "## - See ${_logdir}/sympa-make_install.log for more details" >> $_log_file + echo "## -" >> $_log_file + echo "make install > ${_logdir}/sympa-make_install.log 2>&1" >> $_log_file + echononl "\tInstall Sympa mailing list server.." + make install > ${_logdir}/sympa-make_install.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Installing Sympa mailing list server (v ${SYMPA_VERSION}) failed! \n + See '${_logdir}/sympa-make_install.log' for further informations." + 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 + + +echo "" >> $_log_file +echo "## - Install (or upgrade) required and recommended dependent modules.." >> $_log_file +echo "## -" >> $_log_file +echo "cd ${_builddir}" >> $_log_file +echo "cpanm --installdeps --with-recommends ." >> $_log_file +echononl "\tIinstall (or upgrade) required and recommended dependent modules.." +cd ${_builddir} >> $_log_file 2>&1 +cpanm --installdeps --with-recommends . >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error "Installation of required and recommended dependent modules failed! \n + See '$_log_file' for further informations." + echononl "\tcontinue 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" + echo "" +fi + + +if [[ -f "${_builddir}/src/etc/script/wwsympa.service" ]]; then + + # - Copy wwsympa.service systemd unit file to SYMPA_SYSTEMD_DIR + # - + echo "" >> $_log_file + echo "## - Copy 'wwsympa.service' to '${SYMPA_SYSTEMD_DIR}'.." >> $_log_file + echo "## -" >> $_log_file + echo "cp \"${_builddir}/src/etc/script/wwsympa.service\" \"${SYMPA_SYSTEMD_DIR}\"" >> $_log_file + echononl "\tCopy 'wwsympa.service' to '${SYMPA_SYSTEMD_DIR}'.." + cp "${_builddir}/src/etc/script/wwsympa.service" "${SYMPA_SYSTEMD_DIR}" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Copying 'wwsympa.service' to '${SYMPA_SYSTEMD_DIR}' failed! \n + See '$_log_file' for further informations." + 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 + + # - Adjust unit file wwsympa.service + # - + _failed=false + echononl "\tAdjust unit file 'wwsympa.service'.." + echo "## - Adjust unit file 'wwsympa.service'.." >> $_log_file + echo "## -" >> $_log_file + echo "perl -i -n -p -e \"s/^(.*)\\\"FCGI_OPTS=.*$/\\1\\\"FCGI_OPTS=-M 0600 -U $HTTPD_USER\\\"/\" ${SYMPA_SYSTEMD_DIR}/wwsympa.service" >> $_log_file + perl -i -n -p -e "s/^(.*)\"FCGI_OPTS=.*$/\1\"FCGI_OPTS=-M 0600 -U $HTTPD_USER\"/" ${SYMPA_SYSTEMD_DIR}/wwsympa.service >> $_log_file 2>&1 + if [[ "$?" != 0 ]]; then + _failed=true + fi + echo "perl -i -n -p -e \"s/sympa-${SYMPA_VERSION}/sympa/\" ${SYMPA_SYSTEMD_DIR}/wwsympa.service" >> $_log_file + perl -i -n -p -e "s/sympa-${SYMPA_VERSION}/sympa/g" ${SYMPA_SYSTEMD_DIR}/wwsympa.service >> $_log_file 2>&1 + if [[ "$?" != 0 ]]; then + _failed=true + fi + if ! $_failed ; then + echo_ok + else + echo_failed + error "Adjusting '${SYMPA_SYSTEMD_DIR}/wwsympa.service' failed! \n + See '$_log_file' for further informations." + 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 + +# - Adjust unit files sympa*.service +# - +echononl "\tAdjust unit files 'sympa*.service'.." +echo "## - Adjust unit file 'sympa*.service'.." >> $_log_file +echo "## -" >> $_log_file +echo "perl -i -n -p -e \"s/sympa-${SYMPA_VERSION}/sympa/\" ${SYMPA_SYSTEMD_DIR}/sympa*.service" >> $_log_file +perl -i -n -p -e "s/sympa-${SYMPA_VERSION}/sympa/g" ${SYMPA_SYSTEMD_DIR}/sympa*.service >> $_log_file 2>&1 +if [[ $? = 0 ]] ; then + echo_ok +else + echo_failed + error "Adjusting unit files '${SYMPA_SYSTEMD_DIR}/sympa*.service' failed! \n + See '$_log_file' for further informations." + 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 + + +# - systemd: reload daemon +# - +echo "" >> $_log_file +echo "## - Reload systemd.." >> $_log_file +echo "## -" >> $_log_file +echo "systemctl daemon-reload" >> $_log_file +echononl "\tReload systemd.." +systemctl daemon-reload >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error "Reloading systemd failed! \n + See '$_log_file' for further informations." + 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 + + +# - Create Symlink $SYMPA_BASE_PATH --> $SYMPA_INSTALL_DIR +# - +echononl "\tRemove existing symlink '$SYMPA_BASE_PATH'.." +if [[ -h "$SYMPA_BASE_PATH" ]] ; then + echo "" >> $_log_file + echo "## - Remove existing symlink '$SYMPA_BASE_PATH'.." >> $_log_file + echo "## -" >> $_log_file + echo "rm $SYMPA_BASE_PATH" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Removing symlink '$SYMPA_BASE_PATH' failed! \n + See '$_log_file' for further informations." + 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 +else + echo_skipped +fi + +echononl "\tCreate Symlink $SYMPA_BASE_PATH --> $SYMPA_INSTALL_DIR" +echo "" >> $_log_file +echo "## - Create Symlink $SYMPA_BASE_PATH --> $SYMPA_INSTALL_DIR.." >> $_log_file +echo "## -" >> $_log_file +echo "ln -s \"$(basename $SYMPA_INSTALL_DIR)\" \"$SYMPA_BASE_PATH\"" >> $_log_file +ln -s "$(basename $SYMPA_INSTALL_DIR)" "$SYMPA_BASE_PATH" >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error "Removing symlink '$SYMPA_BASE_PATH' failed! \n + See '$_log_file' for further informations." + 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 + + + +echo "" +echo -e "\t---" +echo -e "\t--- Configure Sympa mailing list manager (base configuration)" +echo -e "\t---" +echo"" + +echo "" >> $_log_file +echo -e "## ---" >> $_log_file +echo -e "## --- Configure Sympa mailing list manager (base configuration)" >> $_log_file +echo -e "## ---" >> $_log_file +echo"" >> $_log_file + +if $UPDATE_SYMPA ; then + info "Configuration will be omitted. \"sympa.conf\" is taken over from existing installation." + + + #echo -e "\t[ \033[33m\033[1mImportant\033[m ]: For changes which are not compartible with previous versions," + #echo " see file \"${_builddir}/NEWS\"." + #echo " See \"${_builddir}/ChangeLog\" for the full changes log." + + echo "" >> $_log_file + + echo "# --- Configuration will be omitted. \"sympa.conf\" is taken over from existing installation." >> $_log_file + echo "# ---" >> $_log_file + echo "# --- For changes which are not compartible with previous versions," >> $_log_file + echo "# --- see file \"${_builddir}/NEWS\"." >> $_log_file + echo "# ---" >> $_log_file + echo "# --- See \"${_builddir}/ChangeLog\" for the full changes log." >> $_log_file + +else + + _key=domain + _val=$SYMPA_DOMAIN + echo "" >> $_log_file + echo "## - Set \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echo "" >> $_log_file + echononl "\tSet \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "perl -i.ORIG -n -p -e \"s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#\" ${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file + perl -i.ORIG -n -p -e "s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#" ${SYMPA_MAIN_CONF_DIR}/sympa.conf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot set \"$_key\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + ## - Replace "@" with "\@" + ## - + echo "SYMPA_LISTMASTER=\`echo \${SYMPA_LISTMASTER//\\@/\\\\\@}\`" >> $_log_file + SYMPA_LISTMASTER=`echo ${SYMPA_LISTMASTER//\@/\\\@}` + + _key=listmaster + _val=$SYMPA_LISTMASTER + echo "" >> $_log_file + echo "## - Set \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echononl "\tSet \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "perl -i -n -p -e \"s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#\" ${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file + perl -i -n -p -e "s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#" ${SYMPA_MAIN_CONF_DIR}/sympa.conf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot set \"$_key\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + _key=wwsympa_url + _val="$SYMPA_WEB_URL" + echo "" >> $_log_file + echo "## - Set \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echononl "\tSet \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "perl -i -n -p -e \"s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#\" ${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file + perl -i -n -p -e "s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#" ${SYMPA_MAIN_CONF_DIR}/sympa.conf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot set \"$_key\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + _key=home + _val="$SYMPA_LIST_DATA_DIR" + echo "" >> $_log_file + echo "## - Set \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echononl "\tSet \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "perl -i -n -p -e \"s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#\" ${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file + perl -i -n -p -e "s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#" ${SYMPA_MAIN_CONF_DIR}/sympa.conf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot set \"$_key\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + _key=db_type + _val="$SYMPA_DB_TYPE" + echo "" >> $_log_file + echo "## - Set \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echononl "\tSet \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "perl -i -n -p -e \"s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#\" ${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file + perl -i -n -p -e "s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#" ${SYMPA_MAIN_CONF_DIR}/sympa.conf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot set \"$_key\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + _key=db_name + _val="$SYMPA_DB_NAME" + echo "" >> $_log_file + echo "## - Set \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echononl "\tSet \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "perl -i -n -p -e \"s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#\" ${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file + perl -i -n -p -e "s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#" ${SYMPA_MAIN_CONF_DIR}/sympa.conf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot set \"$_key\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + _key=db_host + _val="$SYMPA_DB_HOST" + echo "" >> $_log_file + echo "## - Set \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echononl "\tSet \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "perl -i -n -p -e \"s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#\" ${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file + perl -i -n -p -e "s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#" ${SYMPA_MAIN_CONF_DIR}/sympa.conf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot set \"$_key\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + _key=db_port + _val="$SYMPA_DB_PORT" + echo "" >> $_log_file + echo "## - Set \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echononl "\tSet \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "perl -i -n -p -e \"s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#\" ${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file + perl -i -n -p -e "s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#" ${SYMPA_MAIN_CONF_DIR}/sympa.conf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot set \"$_key\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + _key=db_user + _val="$SYMPA_DB_USER" + echo "" >> $_log_file + echo "## - Set \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echononl "\tSet \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "perl -i -n -p -e \"s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#\" ${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file + perl -i -n -p -e "s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#" ${SYMPA_MAIN_CONF_DIR}/sympa.conf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot set \"$_key\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + _key=db_passwd + _val="$SYMPA_DB_PASSWD" + echo "" >> $_log_file + echo "## - Set \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echononl "\tSet \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "perl -i -n -p -e \"s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#\" ${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file + perl -i -n -p -e "s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#" ${SYMPA_MAIN_CONF_DIR}/sympa.conf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot set \"$_key\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + _key=use_fast_cgi + _val=1 + echo "" >> $_log_file + echo "## - Set \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echononl "\tSet \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "perl -i -n -p -e \"s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#\" ${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file + perl -i -n -p -e "s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#" ${SYMPA_MAIN_CONF_DIR}/sympa.conf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot set \"$_key\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + _key=lang + _val="de" + echo "" >> $_log_file + echo "## - Set \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echononl "\tSet \"$_key\" in file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "perl -i -n -p -e \"s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#\" ${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file + perl -i -n -p -e "s#^(\s*\#\s*${_key}.*)#\1\n$_key\t$_val#" ${SYMPA_MAIN_CONF_DIR}/sympa.conf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Cannot set \"$_key\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + echo "" >> $_log_file + echo "## - Add \"merge_feature\" to file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echononl "\tAdd \"merge_feature\" to file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "cat << EOF > ${SYMPA_MAIN_CONF_DIR}/sympa.conf + +## merge_feature +## Customizing messages. If set to 'on', allows the subscribers to send messages with custom users +## attributes. It also allows the use of sympa variables in message templates, i.e. in message.footer +merge_feature on +EOF" >> $_log_file + cat << EOF >> ${SYMPA_MAIN_CONF_DIR}/sympa.conf 2>> $_log_file + +## merge_feature +## Customizing messages. If set to 'on', allows the subscribers to send messages with custom users +## attributes. It also allows the use of sympa variables in message templates, i.e. in message.footer +merge_feature on +EOF + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot set \"merge_feature\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + echo "" >> $_log_file + echo "## - Add \"password_hash bcrypt\" to file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." >> $_log_file + echo "## -" >> $_log_file + echononl "\tAdd \"password_hash bcrypt\" to file ${SYMPA_MAIN_CONF_DIR}/sympa.conf .." + echo "cat << EOF > ${SYMPA_MAIN_CONF_DIR}/sympa.conf + +### password_hash +### +### Information of users are stored in database table user_table. This parameter specifies a +### method to generate password hash. Currently these values are possible: +### md5 Uses MD5 digest algorithm. +### bcrypt Uses bcrypt hash function. +password_hash bcrypt +EOF" >> $_log_file + cat << EOF >> ${SYMPA_MAIN_CONF_DIR}/sympa.conf 2>> $_log_file + +### password_hash +### +### Information of users are stored in database table user_table. This parameter specifies a +### method to generate password hash. Currently these values are possible: +### md5 Uses MD5 digest algorithm. +### bcrypt Uses bcrypt hash function. +password_hash bcrypt +EOF + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot set \"password_hash bcrypt\" in file \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"! \n + See '${_log_file}' for further informations." + fi + + ## - Set owner/group for \"sympa.conf\".. + ## - + echononl "\tSet owner/group for \"sympa.conf\".." + echo "" >> $_log_file + echo "## - Set owner/group for \"sympa.conf\".." >> $_log_file + echo "## -" >> $_log_file + echo "chown ${SYMPA_USER}:$SYMPA_GROUP ${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file + chown ${SYMPA_USER}:$SYMPA_GROUP ${SYMPA_MAIN_CONF_DIR}/sympa.conf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fi + +fi + +echo +echo -e "\t---" +echo -e "\t--- Some after installation tasks" +echo -e "\t---" +echo"" + +echo "" >> $_log_file +echo -e "## ---" >> $_log_file +echo -e "## --- Some after installation tasks" >> $_log_file +echo -e "## ---" >> $_log_file +echo"" >> $_log_file + +## - Priovide LSB - Add Block for run-time dependencies on Sympa +## - +_backup_sympa_initscript=`mktemp` +_failed=false + + +if [[ -f "${SYMPA_INIT_DIR}/sympa" ]] ; then + echo "" >> $_log_file + echo "## - Priovide LSB - Add Block for run-time dependencies to /etc/init.d/sympa .." >> $_log_file + echo "## -" >> $_log_file + + echononl "\tAdd Block for run-time dependencies to ${SYMPA_INIT_DIR}/sympa .." + echo "cp ${SYMPA_INIT_DIR}/sympa $_backup_sympa_initscript" >> $_log_file + cp ${SYMPA_INIT_DIR}/sympa $_backup_sympa_initscript >> $_log_file 2>&1 + if [ "$?" != "0" ]; then + _failed=true + fi + echo "cat << EOF > ${SYMPA_INIT_DIR}/sympa +#!/bin/sh + +### BEGIN INIT INFO +# Provides: sympa +# Required-Start: \\\$remote_fs \\\$syslog +# Required-Stop: \\\$remote_fs \\\$syslog +# Should-Start: mysql postgresql +# Should-Stop: mysql postgresql +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Short-Description: start and stop the SYMPA mailing list manager +# Description: SYMPA is a mailing list manager +### END INIT INFO + +export PERL5LIB=/usr/share/mhonarc + +EOF" >> $_log_file + cat << EOF > ${SYMPA_INIT_DIR}/sympa 2>> $_log_file +#!/bin/sh + +### BEGIN INIT INFO +# Provides: sympa +# Required-Start: \$remote_fs \$syslog +# Required-Stop: \$remote_fs \$syslog +# Should-Start: mysql postgresql +# Should-Stop: mysql postgresql +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Short-Description: start and stop the SYMPA mailing list manager +# Description: SYMPA is a mailing list manager +### END INIT INFO + +export PERL5LIB=/usr/share/mhonarc + +EOF + if [ "$?" != "0" ]; then + _failed=true + fi + + echo "tail -n +2 "$_backup_sympa_initscript" >> /etc/init.d/sympa" >> $_log_file + tail -n +2 "$_backup_sympa_initscript" >> /etc/init.d/sympa 2>> $_log_file + if [ "$?" != "0" ]; then + _failed=true + fi + + echo "rm $_backup_sympa_initscript" >> $_log_file + rm $_backup_sympa_initscript >> $_log_file 2>&1 + if [ "$?" != "0" ]; then + _failed=true + fi + if $_failed ; then + echo_failed + error "Adding Block for run-time dependencies to /etc/init.d/sympa failed! \n + See '${_log_file}' for further informations." + else + echo_ok + fi +fi # if [[ -f "${SYMPA_INIT_DIR}/sympa" ]] + +if $START_AT_BOOTTIME ; then + + # - Normaly, this should be already done - its duplicated code + # - + if `ls /etc/rc2.d/ | grep sympa > /dev/null 2>&1` ; then + echononl "\tRemove init script links" + echo "" >> $_log_file + echo "## - Remove init script links" >> $_log_file + echo "## -" >> $_log_file + echo "update-rc.d -f sympa remove" >> $_log_file + + update-rc.d -f sympa remove >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + warn "Removing existing init script links failed! \n + See '${_log_file}' for further informations." + fi + fi + + ## - Make Sympa mailing list manager start at boottime + ## - + if $SYSTEMD_SUPPORTED ; then + + # - Sympa service + # - + echo "" >> $_log_file + echo "## - Eanbles sympa.service" >> $_log_file + echo "## -" >> $_log_file + echononl "\tEanbles sympa.service" + echo "systemctl enable sympa.service" >> $_log_file + systemctl enable sympa.service >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Create file /etc/systemd/system/sympa.service failed! \n + See '${_log_file}' for further informations." + fi + + # - Sympa Webservice + # - + echononl "\tEanble wwsympa.service" + if [[ -f "${SYMPA_SYSTEMD_DIR}/wwsympa.service" ]]; then + echo "" >> $_log_file + echo "## - Eanble wwsympa.service" >> $_log_file + echo "## -" >> $_log_file + echo "systemctl enable wwsympa.service" >> $_log_file + systemctl enable wwsympa.service >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Enabling wwsympa.service failed! \n + See '${_log_file}' for further informations." + fi + else + echo_skipped + warn "Service wwsympa.service NOT available" + fi + + else + echononl "\tMake Sympa mailing list manager at boottime" + echo "" >> $_log_file + echo "## - Make Sympa mailing list manager at boottime" >> $_log_file + echo "## -" >> $_log_file + echo "update-rc.d sympa defaults" >> $_log_file + update-rc.d sympa defaults >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Making sympa start at boottime failed! \n + See '${_log_file}' for further informations." + fi + fi # if $SYSTEMD_SUPPORTED +fi # if START_AT_BOOTTIME + + +## - special for debian. set manpath entries +## - +if [ -f /etc/manpath.config ];then + echononl "\tSet manpath entries in /etc/manpath.config" + if ! grep $SYMPA_MANPATH /etc/manpath.config > /dev/null 2<&1 ; then + + echo "" >> $_log_file + echo "## - Set manpath entries in /etc/manpath.config" >> $_log_file + echo "## -" >> $_log_file + + echo "echo >> /etc/manpath.config" >> $_log_file + echo "echo \"MANDATORY_MANPATH $SYMPA_MANPATH /var/cache/man\" >> /etc/manpath.config" >> $_log_file + echo "echo \"MANPATH_MAP $SYMPA_BIN_DIR $SYMPA_MANPATH\" >> /etc/manpath.config" >> $_log_file + echo "echo \"MANDB_MAP $SYMPA_MANPATH /var/cache/man\" >> /etc/manpath.config" >> $_log_file + + echo >> /etc/manpath.config + echo "MANDATORY_MANPATH $SYMPA_MANPATH /var/cache/man" >> /etc/manpath.config + echo "MANPATH_MAP $SYMPA_BIN_DIR $SYMPA_MANPATH" >> /etc/manpath.config + echo "MANDB_MAP $SYMPA_MANPATH /var/cache/man" >> /etc/manpath.config + echo_ok + else + echo_skipped + fi +elif [ -f /etc/man.conf];then + echononl "\tSet manpath entries in /etc/man.conf" + if ! grep $SYMPA_MANPATH /etc/man.conf > /dev/null 2<&1 ; then + + echo "" >> $_log_file + echo "## - Set manpath entries in /etc/man.conf" >> $_log_file + echo "## -" >> $_log_file + + echo >> /etc/man.conf + echo "MANPATH $SYMPA_MANPATH /var/cache/man" >> /etc/man.conf + echo "MANPATH_MAP $SYMPA_BIN_DIR /opt/apache2/man" >> /etc/man.conf + echo_ok + else + echo_skipped + fi +fi + +## - Add $SYMPA_BIN_DIR to the systems PATH variable +## - +_checkdir="$SYMPA_BIN_DIR" +if [ -f /etc/profile ]; then + echononl "\tAdd $_checkdir to the systems PATH variable.." + if ! grep -e "$_checkdir" /etc/profile > /dev/null 2<&1 ; then + + echo "" >> $_log_file + echo "## - Add $_checkdir to the systems PATH variable.." >> $_log_file + echo "## -" >> $_log_file + + echo "perl -i -n -p -e \"s#^([ ]*export[ ]*PATH.*$)#check_dir=$_checkdir\nif [ -d \\\"\\\\\$check_dir\\\" ];then\n PATH=\\\\\${check_dir}:\\\\\$PATH\nfi\n\n\1#\" /etc/profile > /dev/null 2<&1" >> $_log_file + + perl -i -n -p -e "s#^([ ]*export[ ]*PATH.*$)#check_dir=$_checkdir\nif [ -d \"\\\$check_dir\" ];then\n PATH=\\\${check_dir}:\\\$PATH\nfi\n\n\1#" /etc/profile >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + warn "Adding $_checkdir to the systems PATH variable failed! \n + See '${_log_file}' for further informations." + fi + else + echo_skipped + fi +fi + + +echo +echo -e "\t---" +echo -e "\t--- Configure Apache Webserver" +echo -e "\t---" +echo"" + +echo "" >> $_log_file +echo -e "## ---" >> $_log_file +echo -e "## --- Configure Apache Webserver" >> $_log_file +echo -e "## ---" >> $_log_file +echo"" >> $_log_file + + +## - Backup existing VHost Configuration +## - +echononl "\tBackup existing VHost Configuration.." +if [[ -f "$apache_vhost_dir/${SYMPA_DOMAIN}.conf" ]]; then + echo "" >> $_log_file + echo "## - Backup existing VHost Configuration...." >> $_log_file + echo "## -" >> $_log_file + echo "mv \"$apache_vhost_dir/${SYMPA_DOMAIN}.conf\" \"$apache_vhost_dir/${SYMPA_DOMAIN}.conf.$backup_date\"" >> $_log_file + mv "$apache_vhost_dir/${SYMPA_DOMAIN}.conf" "$apache_vhost_dir/${SYMPA_DOMAIN}.conf.$backup_date" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Backing up VHost Configuration failed! \n + See '${_log_file}' for further informations." + fi +else + echo_skipped +fi + +## - Add VHost Configuration to Apache Webserver +## - +apache_vhost_added=false +echononl "\tAdd VHost Configuration for Apache Webserver.." +echo "" >> $_log_file +echo "## - Add VHost Configuration for Apache Webserver.." >> $_log_file +echo "## -" >> $_log_file +echo "cat < $apache_vhost_dir/${SYMPA_DOMAIN}.conf +# - $SYMPA_DOMAIN -# + + + + ServerAdmin admin@oopen.de + + ServerName $SYMPA_DOMAIN + + RewriteEngine on + RewriteCond %{HTTPS} !=on + RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] + + CustomLog ${apache_log_dir}/${SYMPA_DOMAIN}-access.log combined + ErrorLog ${apache_log_dir}/${SYMPA_DOMAIN}-error.log + + + + + + ServerAdmin admin@oopen.de + + ServerName $SYMPA_DOMAIN + + RewriteEngine on + RewriteRule ^/\\\$ /$_wwsympa_dir/ [R] +" >> $_log_file +if [[ -f "${SYMPA_SYSTEMD_DIR}/wwsympa.service" ]]; then + echo " + + SetHandler \"proxy:unix:${SYMPA_PID_DIR}/wwsympa.socket|fcgi://\" + + + + Require all granted + + + Alias /static-sympa ${SYMPA_STATIC_DIR} +" >> $_log_file +else + echo " + + AllowOverride none + Require all granted + + + + AllowOverride none + Require all granted + + + Alias /static-sympa ${SYMPA_STATIC_DIR} + ScriptAlias /$_wwsympa_dir ${SYMPA_CGI_DIR}/wwsympa-wrapper.fcgi + + + SetHandler fcgid-script + +" >> $_log_file +fi + +echo " + SSLEngine on + + ## - 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 add Strict-Transport-Security \"max-age=15768000\" + Header always set Strict-Transport-Security \"max-age=31536000; includeSubDomains\" + + ## - don't support weak ciphers + SSLHonorCipherOrder On + SSLCompression Off + SSLProtocol ALL -SSLv2 -SSLv3 + + SLCertificateFile ${apache_conf_dir}/server-bundle.crt + SSLCertificateKeyFile ${apache_conf_dir}/server.key + + CustomLog ${apache_log_dir}/${SYMPA_DOMAIN}-access.log combined + ErrorLog ${apache_log_dir}/${SYMPA_DOMAIN}-error.log + + +EOF" >> $_log_file + +cat < $apache_vhost_dir/${SYMPA_DOMAIN}.conf +# - $SYMPA_DOMAIN -# + + + + ServerAdmin admin@oopen.de + + ServerName $SYMPA_DOMAIN + + RewriteEngine on + RewriteCond %{HTTPS} !=on + RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] + + CustomLog ${apache_log_dir}/${SYMPA_DOMAIN}-access.log combined + ErrorLog ${apache_log_dir}/${SYMPA_DOMAIN}-error.log + + + + + + ServerAdmin admin@oopen.de + + ServerName $SYMPA_DOMAIN + + RewriteEngine on + RewriteRule ^/\$ /$_wwsympa_dir/ [R] +EOF + +if [[ -f "${SYMPA_SYSTEMD_DIR}/wwsympa.service" ]]; then + + cat <> $apache_vhost_dir/${SYMPA_DOMAIN}.conf + + + SetHandler "proxy:unix:${SYMPA_PID_DIR}/wwsympa.socket|fcgi://" + + + + Require all granted + + + Alias /static-sympa ${SYMPA_STATIC_DIR} +EOF +else + cat <> $apache_vhost_dir/${SYMPA_DOMAIN}.conf + + + AllowOverride none + Require all granted + + + + AllowOverride none + Require all granted + + + Alias /static-sympa ${SYMPA_STATIC_DIR} + ScriptAlias /$_wwsympa_dir ${SYMPA_CGI_DIR}/wwsympa-wrapper.fcgi + + + SetHandler fcgid-script + +EOF +fi + +cat <> $apache_vhost_dir/${SYMPA_DOMAIN}.conf + + SSLEngine on + + ## - 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 add Strict-Transport-Security "max-age=15768000" + Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" + + ## - don't support weak ciphers + SSLHonorCipherOrder On + SSLCompression Off + SSLProtocol ALL -SSLv2 -SSLv3 + + SSLCertificateFile ${apache_conf_dir}/server-bundle.crt + SSLCertificateKeyFile ${apache_conf_dir}/server.key + + CustomLog ${apache_log_dir}/${SYMPA_DOMAIN}-access.log combined + ErrorLog ${apache_log_dir}/${SYMPA_DOMAIN}-error.log + + +EOF +if [ "$?" = "0" ]; then + echo_ok + apache_vhost_added=true +else + echo_failed +fi + +if $apache_vhost_added ; then + _apache_configtest=false + echononl "\tCheck Apache Configuration" + echo "" >> $_log_file + echo "## - Check Apache Configuration" >> $_log_file + echo "## -" >> $_log_file + echo "apachectl configtest" >> $_log_file + apachectl configtest >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + _apache_configtest=true + else + echo_failed + error "Checking Apache Configuration was not successfully! \n + See '${_log_file}' for further informations." + fi + + echononl "\tGraceful Restart Apache Webserver.." + if $_apache_configtest ; then + echo "" >> $_log_file + echo "## - Graceful Restart Apache Webserver.." >> $_log_file + echo "## -" >> $_log_file + echo "apachectl graceful" >> $_log_file + apachectl graceful >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + _apache_configtest=true + else + echo_failed + error "Graceful Restart of Apache Webserver failed! \n + See '${_log_file}' for further informations." + fi + else + echo_skipped + fi +fi + +echo +echo -e "\t---" +echo -e "\t--- Configure Postfix for Sympa Support" +echo -e "\t---" +echo"" + +echo "" >> $_log_file +echo -e "## ---" >> $_log_file +echo -e "## --- Configure Postfix for Sympa Support" >> $_log_file +echo -e "## ---" >> $_log_file +echo"" >> $_log_file + +if $UPDATE_SYMPA ; then + info "Configuration will be omitted. No mailserver configuration needed in update mode." + + echo "" >> $_log_file + + echo "# --- Configuration will be omitted. Noimailserver configuration needed in update mode." >> $_log_file + echo "# ---" >> $_log_file + +else + + ## - Configure Postfix + ## - + if $SYMPA_SUPPORT_MULTIDOMAINS ; then + + info "Configure Postfix for Sympa Multidomain Support" + + ## - Relay Domains + ## - + _file_name=sympa_domains + _parameter_name=relay_domains + echononl "\tCreate (empty) file \"$_file_name\".." + echo "" >> $_log_file + echo "## - Add (empty) file \"$_file_name\" to conf directory \"$POSTFIX_CONF_DIR\".." >> $_log_file + echo "## -" >> $_log_file + if [ -f "${POSTFIX_CONF_DIR}/$_file_name" ];then + echo_skipped + echo "## - File \"$_file_name\" already exists" >> $_log_file + echo "## -" >> $_log_file + else + echo "touch ${POSTFIX_CONF_DIR}/$_file_name" >> $_log_file + touch ${POSTFIX_CONF_DIR}/$_file_name >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Craeting file \"${POSTFIX_CONF_DIR}/$_file_name\" failed! \n + See '${_log_file}' for further informations." + fi + fi + + echononl "\tCreate concerning db-file \"${POSTFIX_CONF_DIR}/${_file_name}.db\".." + echo "" >> $_log_file + echo "## - Create concerning db-file \"${POSTFIX_CONF_DIR}/${_file_name}.db\".." >> $_log_file + echo "## -" >> $_log_file + echo "postmap btree:${POSTFIX_CONF_DIR}/$_file_name" >> $_log_file + postmap btree:${POSTFIX_CONF_DIR}/$_file_name >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "\"postmap btree:${POSTFIX_CONF_DIR}/$_file_name\" failed! \n + See '${_log_file}' for further informations." + fi + + echononl "\tConfigure postfix parameter ${_parameter_name}.." + echo "" >> $_log_file + echo "## - Add entry for \"$_file_name\" to postfix parameter ${_parameter_name}.." >> $_log_file + echo "## -" >> $_log_file + if grep -e "${POSTFIX_CONF_DIR}/$_file_name" ${POSTFIX_CONF_DIR}/main.cf 2>> $_log_file \ + | grep -q -v -e"^#" 2>> $_log_file ; then + echo_skipped + echo "## - Postfix parameter \"$_parameter_name\" is already configured." >> $_log_file + echo "## -" >> $_log_file + info "Postfix parameter \"$_parameter_name\" is already configured." + else + if grep -q -e "^$_parameter_name" ${POSTFIX_CONF_DIR}/main.cf 2>> /dev/null ; then + echo "perl -i.bak.sympa-install -n -p -e \"s#(^${_parameter_name}.*)#\1\n btree:${POSTFIX_CONF_DIR}/${_file_name}#\" \\" >> $_log_file + echo " ${POSTFIX_CONF_DIR}/main.cf">> $_log_file + perl -i.bak.sympa-install -n -p -e "s#(^${_parameter_name}.*)#\1\n btree:${POSTFIX_CONF_DIR}/${_file_name}#" \ + ${POSTFIX_CONF_DIR}/main.cf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Configure postfix main.cf for ${_file_name} failed! \n + See '${_log_file}' for further informations." + fi + else + cat <> ${POSTFIX_CONF_DIR}/main.cf + +# --- +# Added for Sympa Mailing Lists (suports multidomain) +# --- +$_parameter_name = + btree:${POSTFIX_CONF_DIR}/$_file_name +EOF + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Configure postfix main.cf for ${_file_name} failed!" + msg_postfix="$msg_postfix\t \033[37m\033[1m$_parameter_name =\n" + msg_postfix="$msg_postfix\t btree:${POSTFIX_CONF_DIR}/$_file_name\033[m\n\n" + echo "## - Add to ${POSTFIX_CONF_DIR}/main.cf:" >> $_log_file + echo "## -" >> $_log_file + echo "## - $_parameter_name =" >> $_log_file + echo "## - btree:${POSTFIX_CONF_DIR}/$_file_name" >> $_log_file + echo "## -" >> $_log_file + fi + + #echo_skipped + #warn "Parameter \"$_parameter_name\" was not found in postfix configuration file \"main.cf\"." + ##echo -e "\t Configure $_parameter_name manually. Add to ${POSTFIX_CONF_DIR}/main.cf:\n" + #msg_postfix="$msg_postfix\t \033[37m\033[1m$_parameter_name =\n" + #msg_postfix="$msg_postfix\t btree:${POSTFIX_CONF_DIR}/$_file_name\033[m\n\n" + #echo "## - Add to ${POSTFIX_CONF_DIR}/main.cf:" >> $_log_file + #echo "## -" >> $_log_file + #echo "## - $_parameter_name =" >> $_log_file + #echo "## - btree:${POSTFIX_CONF_DIR}/$_file_name" >> $_log_file + #echo "## -" >> $_log_file + fi + fi + + echo "" + + ## - Forward addresses (postmaster|abuse)@sympa-domain.tld) using virtual_alias_maps + ## - + _file_name=sympa_virtual_aliases + _parameter_name=virtual_alias_maps + echononl "\tCreate file \"$_file_name\".." + echo "" >> $_log_file + echo "## - Add (empty) file \"$_file_name\" to conf directory \"$POSTFIX_CONF_DIR\".." >> $_log_file + echo "## -" >> $_log_file + if [ -f ${POSTFIX_CONF_DIR}/$_file_name ];then + echo_skipped + echo "## - \"$_file_name\" already exists" >> $_log_file + echo "## -" >> $_log_file + else + #echo "touch ${POSTFIX_CONF_DIR}/$_file_name" >> $_log_file + #touch ${POSTFIX_CONF_DIR}/$_file_name >> $_log_file 2>&1 + echo "echo \"/^(.*)-owner\\\\@(.*)\$/ \$1+owner@\$2\"" >> $_log_file + echo "/^(.*)-owner\\@(.*)\$/ \$1+owner@\$2" > ${POSTFIX_CONF_DIR}/$_file_name + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Craeting file \"${POSTFIX_CONF_DIR}/$_file_name\" failed!" + fi + fi + + echononl "\tConfigure postfix parameter ${_parameter_name}.." + echo "" >> $_log_file + echo "## - Add entry for \"$_file_name\" to postfix parameter ${_parameter_name}.." >> $_log_file + echo "## -" >> $_log_file + if grep -e "${POSTFIX_CONF_DIR}/$_file_name" ${POSTFIX_CONF_DIR}/main.cf 2>> $_log_file \ + | grep -q -v -e"^#" 2>> $_log_file ; then + echo_skipped + info "Postfix parameter \"$_parameter_name\" is already configured." + echo "## - Postfix parameter \"$_parameter_name\" is already configured ." >> $_log_file + echo "## -" >> $_log_file + else + if grep -q -e "^$_parameter_name" ${POSTFIX_CONF_DIR}/main.cf 2>> /dev/null ; then + echo "perl -i -n -p -e \"s#(^${_parameter_name}.*$)#\1\n regexp:${POSTFIX_CONF_DIR}/$_file_name#\" \\" >> $_log_file + echo " ${POSTFIX_CONF_DIR}/main.cf" >> $_log_file + perl -i -n -p -e "s#(^${_parameter_name}.*)#\1\n regexp:${POSTFIX_CONF_DIR}/$_file_name#" \ + ${POSTFIX_CONF_DIR}/main.cf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Configure postfix $_parameter_name for $_file_name failed! \n + See '${_log_file}' for further informations." + fi + else + if grep -q -e "^relay_domains" ${POSTFIX_CONF_DIR}/main.cf 2>> /dev/null ; then + echo "perl -i -n -p -e \"s#(^relay_domains.*)#$_parameter_name = \n regexp:${POSTFIX_CONF_DIR}/$_file_name\n\n\1#\" \\">> $_log_file 2>&1 + echo " ${POSTFIX_CONF_DIR}/main.cf" >> $_log_file + perl -i -n -p -e "s#(^relay_domains.*)#$_parameter_name = \n regexp:${POSTFIX_CONF_DIR}/$_file_name\n\n\1#" \ + ${POSTFIX_CONF_DIR}/main.cf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Configure postfix $_parameter_name for $_file_name failed! \n + See '${_log_file}' for further informations." + fi + else + echo_skipped + warn "Parameter \"$_parameter_name\" was not found in postfix configuration file \"main.cf\"." + #echo -e "\t Configure $_parameter_name manually. Add to ${POSTFIX_CONF_DIR}/main.cf:\n" + msg_postfix="$msg_postfix\t \033[37m\033[1m$_parameter_name =\n" + msg_postfix="$msg_postfix\t regexp:${POSTFIX_CONF_DIR}/$_file_name\033[m\n\n" + echo "## - Add to ${POSTFIX_CONF_DIR}/main.cf:" >> $_log_file + echo "## -" >> $_log_file + echo "## - $_parameter_name =" >> $_log_file + echo "## - regexp:${POSTFIX_CONF_DIR}/$_file_name" >> $_log_file + echo "## -" >> $_log_file + fi + fi + fi + + + echo "" + + ## - Backup file /etc/postfix/master.cf + ## - + echononl "\tBackup '/etc/postfix/master.cf'.." + echo "" >> $_log_file + echo "## - Backup '/etc/postfix/master.cf'.." >> $_log_file + echo "## -" >> $_log_file + echo "cp -a /etc/postfix/master.cf /etc/postfix/master.cf.bak.sympa-install" >> $_log_file + cp -a /etc/postfix/master.cf /etc/postfix/master.cf.bak.sympa-install >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Backing up file '/etc/postfix/master.cf' failed! \n + See '${_log_file}' for further informations." + fi + + ## - Add transport for Sympa Domains to /etc/postfix/master.cf + ## - + echononl "\tAdd transport declaration for sympa domains to file master.cf" + if grep -q -e "^sympa\ " ${POSTFIX_CONF_DIR}/master.cf 2>> /dev/null ; then + echo_skipped + else + echo "" >> $_log_file + echo "## - Add transport declaration for sympa domains to file master.cf" >> $_log_file + echo "## -" >> $_log_file + echo "cat <> ${POSTFIX_CONF_DIR}/master.cf + +sympa unix - n n - - pipe + flags=FR user=sympa argv=${SYMPA_LIBEXEC_DIR}/queue \\\${recipient} +sympabounce unix - n n - - pipe + flags=FR user=sympa argv=${SYMPA_LIBEXEC_DIR}/bouncequeue \\\${user} +EOF" >> $_log_file + + cat <> ${POSTFIX_CONF_DIR}/master.cf + +sympa unix - n n - - pipe + flags=FR user=sympa argv=${SYMPA_LIBEXEC_DIR}/queue \${recipient} +sympabounce unix - n n - - pipe + flags=FR user=sympa argv=${SYMPA_LIBEXEC_DIR}/bouncequeue \${user} + +EOF + + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Adding transport declaration for sympa domains to \"${POSTFIX_CONF_DIR}/master.cf\" failed!" + fi + fi + + _parameter_name=sympa_destination_recipient_limit + _parameter_val=1 + echononl "\tConfigure postfix (specific) parameter ${_parameter_name}.." + echo "" >> $_log_file + echo "## - Add postfix parameter \"${_parameter_name} = ${_parameter_val}\".." >> $_log_file + echo "## -" >> $_log_file + if grep -e "${_parameter_name}" ${POSTFIX_CONF_DIR}/main.cf 2>> $_log_file \ + | grep -q -v -e"^#" 2>> $_log_file ; then + echo_skipped + info "Postfix parameter \"$_parameter_name\" is already configured." + echo "## - Postfix parameter \"$_parameter_name\" is already configured." >> $_log_file + echo "## -" >> $_log_file + else + if grep -q -e "^relay_domains" ${POSTFIX_CONF_DIR}/main.cf 2>> /dev/null ; then + echo "perl -i -n -p -e \"s#(^relay_domains.*)#$_parameter_name = ${_parameter_val}\n\n\1#\" \\" >> $_log_file 2>&1 + echo " ${POSTFIX_CONF_DIR}/main.cf" >> $_log_file + perl -i -n -p -e "s#(^relay_domains.*)#$_parameter_name = ${_parameter_val}\n\n\1#" \ + ${POSTFIX_CONF_DIR}/main.cf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Configure postfix $_parameter_name for $_file_name failed! \n + See '${_log_file}' for further informations." + fi + else + echo_skipped + warn "Parameter \"$_parameter_name\" was not found in postfix configuration file \"main.cf\"." + #echo -e "\t Configure $_parameter_name manually. Add to ${POSTFIX_CONF_DIR}/main.cf:\n" + msg_postfix="$msg_postfix\t \033[37m\033[1m${_parameter_name} = ${_parameter_val}\033[m\n" + echo "## - Add to ${POSTFIX_CONF_DIR}/main.cf:" >> $_log_file + echo "## -" >> $_log_file + echo "## - $_parameter_name = $_parameter_val" >> $_log_file + echo "## -" >> $_log_file + fi + fi + + _parameter_name=sympabounce_destination_recipient_limit + _parameter_val=1 + echononl "\tConfigure postfix (specific) parameter ${_parameter_name}.." + echo "" >> $_log_file + echo "## - Add postfix parameter \"${_parameter_name} = ${_parameter_val}\".." >> $_log_file + echo "## -" >> $_log_file + if grep -e "${_parameter_name}" ${POSTFIX_CONF_DIR}/main.cf 2>> $_log_file \ + | grep -q -v -e"^#" 2>> $_log_file ; then + echo_skipped + info "Postfix parameter \"$_parameter_name\" is already configured." + echo "## - Postfix parameter \"$_parameter_name\" is already configured." >> $_log_file + echo "## -" >> $_log_file + else + if grep -q -e "^relay_domains" ${POSTFIX_CONF_DIR}/main.cf 2>> /dev/null ; then + echo "perl -i -n -p -e \"s#(^relay_domains.*)#$_parameter_name = ${_parameter_val}\n\n\1#\" \\" >> $_log_file 2>&1 + echo " ${POSTFIX_CONF_DIR}/main.cf" >> $_log_file + perl -i -n -p -e "s#(^relay_domains.*)#$_parameter_name = ${_parameter_val}\n\n\1#" \ + ${POSTFIX_CONF_DIR}/main.cf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Configure postfix $_parameter_name for $_file_name failed! \n + See '${_log_file}' for further informations." + fi + else + echo_skipped + warn "Parameter \"$_parameter_name\" was not found in postfix configuration file \"main.cf\"." + #echo -e "\t Configure $_parameter_name manually. Add to ${POSTFIX_CONF_DIR}/main.cf:\n" + msg_postfix="$msg_postfix\t \033[37m\033[1m${_parameter_name} = ${_parameter_val}\033[m\n" + echo "## - Add to ${POSTFIX_CONF_DIR}/main.cf:" >> $_log_file + echo "## -" >> $_log_file + echo "## - $_parameter_name = $_parameter_val" >> $_log_file + echo "## -" >> $_log_file + fi + fi + + + ## - Configure Parameter "transport_maps" for Sympa domains + ## - + _file_name=sympa_transport + _parameter_name=transport_maps + echononl "\tCreate (empty) file \"$_file_name\".." + if [ -f ${POSTFIX_CONF_DIR}/$_file_name ];then + echo_skipped + else + echo "" >> $_log_file + echo "## - Add (empty) file \"$_file_name\" to conf directory \"$POSTFIX_CONF_DIR\".." >> $_log_file + echo "## -" >> $_log_file + echo "touch ${POSTFIX_CONF_DIR}/$_file_name" >> $_log_file + touch ${POSTFIX_CONF_DIR}/$_file_name >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Craeting file \"${POSTFIX_CONF_DIR}/$_file_name\" failed! \n + See '${_log_file}' for further informations." + fi + fi + + echononl "\tConfigure postfix parameter ${_parameter_name}.." + echo "" >> $_log_file + echo "## - Add entry for \"$_file_name\" to postfix parameter ${_parameter_name}.." >> $_log_file + echo "## -" >> $_log_file + if grep -e "${POSTFIX_CONF_DIR}/$_file_name" ${POSTFIX_CONF_DIR}/main.cf 2>> $_log_file \ + | grep -q -v -e"^#" 2>> $_log_file ; then + echo_skipped + info "Postfix parameter \"$_parameter_name\" is already configured." + echo "## - Postfix parameter \"$_parameter_name\" is already configured." >> $_log_file + echo "## -" >> $_log_file + else + if grep -q -e "^$_parameter_name" ${POSTFIX_CONF_DIR}/main.cf 2>> /dev/null ; then + echo "perl -i -n -p -e \"s#(^${_parameter_name}.*$)#\1\n regexp:${POSTFIX_CONF_DIR}/$_file_name#\" \\" >> $_log_file + echo " ${POSTFIX_CONF_DIR}/main.cf" >> $_log_file + perl -i -n -p -e "s#(^${_parameter_name}.*)#\1\n regexp:${POSTFIX_CONF_DIR}/$_file_name#" \ + ${POSTFIX_CONF_DIR}/main.cf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Configure postfix $_parameter_name for $_file_name failed! \n + See '${_log_file}' for further informations." + fi + else + if grep -q -e "^relay_domains" ${POSTFIX_CONF_DIR}/main.cf 2>> /dev/null ; then + echo "perl -i -n -p -e \"s#(^relay_domains.*)#$_parameter_name = \n regexp:${POSTFIX_CONF_DIR}/$_file_name\n\n\1#\" \\" >> $_log_file 2>&1 + echo " ${POSTFIX_CONF_DIR}/main.cf" >> $_log_file + perl -i -n -p -e "s#(^relay_domains.*)#$_parameter_name = \n regexp:${POSTFIX_CONF_DIR}/$_file_name\n\n\1#" \ + ${POSTFIX_CONF_DIR}/main.cf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Configure postfix $_parameter_name for $_file_name failed! \n + See '${_log_file}' for further informations." + fi + else + echo_skipped + warn "Parameter \"$_parameter_name\" was not found in postfix configuration file \"main.cf\"." + #echo -e "\t Configure $_parameter_name manually. Add to ${POSTFIX_CONF_DIR}/main.cf:\n" + msg_postfix="$msg_postfix\t \033[37m\033[1m$_parameter_name =\n" + msg_postfix="$msg_postfix\t regexp:${POSTFIX_CONF_DIR}/$_file_name\033[m\n" + echo "## - Add to ${POSTFIX_CONF_DIR}/main.cf:" >> $_log_file + echo "## -" >> $_log_file + echo "## - $_parameter_name =" >> $_log_file + echo "## - regexp:${POSTFIX_CONF_DIR}/$_file_name" >> $_log_file + echo "## -" >> $_log_file + fi + fi + fi + + else # if $SYMPA_SUPPORT_MULTIDOMAINS + + info "Configure Postfix for Sympa Single Domain Support" + + ## - Sympa Alias File + ## - + _file_name=`basename $SYMPA_ALIAS_FILE` + _parameter_name=alias_maps + echononl "\tCreate (empty) file \"$_file_name\".." + echo "" >> $_log_file + echo "## - Add (empty) file \"$_file_name\" to conf directory \"$POSTFIX_CONF_DIR\".." >> $_log_file + echo "## -" >> $_log_file + if [ -f "${POSTFIX_CONF_DIR}/$_file_name" ];then + echo_skipped + echo "## - File \"$_file_name\" already exists" >> $_log_file + echo "## -" >> $_log_file + else + echo "touch ${POSTFIX_CONF_DIR}/$_file_name" >> $_log_file + touch ${POSTFIX_CONF_DIR}/$_file_name >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Craeting file \"${POSTFIX_CONF_DIR}/$_file_name\" failed! \n + See '${_log_file}' for further informations." + fi + fi + + echononl "\tCreate concerning db-file \"${POSTFIX_CONF_DIR}/${_file_name}.db\".." + echo "" >> $_log_file + echo "## - Create concerning db-file \"${POSTFIX_CONF_DIR}/${_file_name}.db\".." >> $_log_file + echo "## -" >> $_log_file + echo "postmap btree:${POSTFIX_CONF_DIR}/$_file_name" >> $_log_file + postmap btree:${POSTFIX_CONF_DIR}/$_file_name >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "\"postmap btree:${POSTFIX_CONF_DIR}/$_file_name\" failed!" + fi + + echononl "\tConfigure postfix parameter ${_parameter_name}.." + echo "" >> $_log_file + echo "## - Add entry for \"$_file_name\" to postfix parameter ${_parameter_name}.." >> $_log_file + echo "## -" >> $_log_file + if grep -e "${POSTFIX_CONF_DIR}/$_file_name" ${POSTFIX_CONF_DIR}/main.cf 2>> $_log_file \ + | grep -q -v -e"^#" 2>> $_log_file ; then + echo_skipped + echo "## - Postfix parameter \"$_parameter_name\" is already configured." >> $_log_file + echo "## -" >> $_log_file + info "Postfix parameter \"$_parameter_name\" is already configured." + else + if grep -q -e "^$_parameter_name" ${POSTFIX_CONF_DIR}/main.cf 2>> /dev/null ; then + echo "perl -i.bak -n -p -e \"s#(^${_parameter_name}.*)#\1\n btree:${POSTFIX_CONF_DIR}/${_file_name}#\" \\" >> $_log_file + echo " ${POSTFIX_CONF_DIR}/main.cf">> $_log_file + perl -i.bak -n -p -e "s#(^${_parameter_name}.*)#\1\n btree:${POSTFIX_CONF_DIR}/${_file_name}#" \ + ${POSTFIX_CONF_DIR}/main.cf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Configure postfix main.cf for ${filename} failed! \n + See '${_log_file}' for further informations." + fi + else + cat <> ${POSTFIX_CONF_DIR}/main.cf + +# --- +# Added for Sympa Mailing Lists +# --- +${_parameter_name} = + btree:${POSTFIX_CONF_DIR}/$_file_name +EOF + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Configure postfix main.cf for ${_file_name} failed!" + msg_postfix="$msg_postfix\t \033[37m\033[1m$_parameter_name =\n" + msg_postfix="$msg_postfix\t btree:${POSTFIX_CONF_DIR}/$_file_name\033[m\n\n" + echo "## - Add to ${POSTFIX_CONF_DIR}/main.cf:" >> $_log_file + echo "## -" >> $_log_file + echo "## - $_parameter_name =" >> $_log_file + echo "## - btree:${POSTFIX_CONF_DIR}/$_file_name" >> $_log_file + echo "## -" >> $_log_file + fi + + fi + fi + + _parameter_name=alias_database + echononl "\tConfigure postfix parameter ${_parameter_name}.." + echo "" >> $_log_file + echo "## - Add entry for \"$_file_name\" to postfix parameter ${_parameter_name}.." >> $_log_file + echo "## -" >> $_log_file + #if grep -e "${POSTFIX_CONF_DIR}/$_file_name" ${POSTFIX_CONF_DIR}/main.cf 2>> $_log_file \ + # | grep -q -v -e"^#" 2>> $_log_file ; then + # echo_skipped + # echo "## - Postfix parameter \"$_parameter_name\" is already configured." >> $_log_file + # echo "## -" >> $_log_file + # info "Postfix parameter \"$_parameter_name\" is already configured." + #else + if grep -q -e "^$_parameter_name" ${POSTFIX_CONF_DIR}/main.cf 2>> /dev/null ; then + echo "perl -i.bak -n -p -e \"s#(^${_parameter_name}.*)#\1\n btree:${POSTFIX_CONF_DIR}/${_file_name}#\" \\" >> $_log_file + echo " ${POSTFIX_CONF_DIR}/main.cf">> $_log_file + perl -i.bak -n -p -e "s#(^${_parameter_name}.*)#\1\n btree:${POSTFIX_CONF_DIR}/${_file_name}#" \ + ${POSTFIX_CONF_DIR}/main.cf >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Configure postfix main.cf for ${filename} failed! \n + See '${_log_file}' for further informations." + fi + else + cat <> ${POSTFIX_CONF_DIR}/main.cf + +# --- +# Added for Sympa Mailing Lists +# --- +${_parameter_name} = + btree:${POSTFIX_CONF_DIR}/$_file_name +EOF + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Configure postfix main.cf for ${_file_name} failed!" + msg_postfix="$msg_postfix\t \033[37m\033[1m$_parameter_name =\n" + msg_postfix="$msg_postfix\t btree:${POSTFIX_CONF_DIR}/$_file_name\033[m\n\n" + echo "## - Add to ${POSTFIX_CONF_DIR}/main.cf:" >> $_log_file + echo "## -" >> $_log_file + echo "## - $_parameter_name =" >> $_log_file + echo "## - btree:${POSTFIX_CONF_DIR}/$_file_name" >> $_log_file + echo "## -" >> $_log_file + fi + + fi + #fi + + fi + + + ## - Reload postfix configuration + ## - + echononl "\tReload Postfix.." + echo "" >> $_log_file + echo "## - Reload Postfix.." >> $_log_file + echo "## -" >> $_log_file + if $SYSTEMD_SUPPORTED ; then + echo "systemctl reload postfix" >> $_log_file + systemctl reload postfix >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Reloading Postfix SMTP-Server failed! \n + See '${_log_file}' for further informations." + fi + else + echo "/etc/init.d/postfix reload" >> $_log_file + /etc/init.d/postfix reload >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Reloading Postfix SMTP-Server failed! \n + See '${_log_file}' for further informations." + fi + fi +fi + + +## - Start Sympa mailing list manager +## - + +echo "" +echo -e "\t---" +echo -e "\t--- Starting Sympa mailing list manager .." +echo -e "\t---" +echo"" + +echo "" >> $_log_file +echo "" >> $_log_file +echo "## ---" >> $_log_file +echo "## --- Starting Sympa mailing list manager .." >> $_log_file +echo "## ---" >> $_log_file +echo "" >> $_log_file +if $SYSTEMD_SUPPORTED ; then + + echononl "\tReload systemd configuration" + echo "systemctl daemon-reload" >> $_log_file + systemctl daemon-reload >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Reloading systemd configuration failed! \n + See '${_log_file}' for further informations." + fi + + if $UPDATE_SYMPA ; then + echononl "\tRestarting Sympa mailing list manager .." + echo "" >> $_log_file + echo "systemctl restart sympa" >> $_log_file + systemctl restart sympa.service.service >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Restarting Sympa mailing list manager failed! \n + See '${_log_file}' for further informations." + fi + + echononl "\tRestarting Sympa Webservice .." + if [[ -f "${SYMPA_SYSTEMD_DIR}/wwsympa.service" ]]; then + echo "" >> $_log_file + echo "systemctl restart wwsympa.service" >> $_log_file + systemctl restart wwsympa.service >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Restarting Sympa Webservice failed! \n + See '${_log_file}' for further informations." + fi + else + echo_skipped + fi + else + echononl "\tStarting Sympa mailing list manager .." + echo "" >> $_log_file + echo "systemctl start sympa.service" >> $_log_file + systemctl start sympa.service >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Starting Sympa mailing list manager failed! \n + See '${_log_file}' for further informations." + fi + + echononl "\tStarting Sympa Webservice .." + if [[ -f "${SYMPA_SYSTEMD_DIR}/wwsympa.service" ]]; then + echo "" >> $_log_file + echo "systemctl start wwsympa.service" >> $_log_file + systemctl restart wwsympa.service >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Starting Sympa Webservice failed! \n + See '${_log_file}' for further informations." + fi + else + echo_skipped + fi + fi + +else + if $UPDATE_SYMPA ; then + echononl "\tRestarting Sympa mailing list manager .." + echo "" >> $_log_file + echo "${SYMPA_INIT_DIR}/sympa restart" >> $_log_file + ${SYMPA_INIT_DIR}/sympa restart >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Restarting Sympa mailing list manager failed!" + fi + else + echononl "\tStarting Sympa mailing list manager .." + echo "" >> $_log_file + echo "${SYMPA_INIT_DIR}/sympa start" >> $_log_file + ${SYMPA_INIT_DIR}/sympa start >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Starting Sympa mailing list manager failed! \n + See '${_log_file}' for further informations." + fi + fi +fi + +if $UPDATE_SYMPA ; then + + echononl "\tStart Apache Webserver" + echo "" >> $_log_file + echo "## - Start Apache Webserver.." >> $_log_file + echo "## -" >> $_log_file + if [[ -n "$APACHE_SERVICE_FILE" ]] ; then + echo "systemctl start $APACHE_SERVICE_FILE" >> $_log_file + systemctl start $APACHE_SERVICE_FILE >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + _apache_configtest=true + else + echo_failed + error "Starting Apache Webserver failed! \n + See '${_log_file}' for further informations." + fi + + else + echo "$APACHE_INIT_SCRIPT start" >> $_log_file + $APACHE_INIT_SCRIPT start >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Starting Apache Webserver failed! \n + See '${_log_file}' for further informations." + fi + fi +fi + + + +echo "" +echo "" +echo -e "\t[ \033[33m\033[1mImportant\033[m ]: Take care, that all needed perl modules are installed!" +echo " You can check this by running \"$SYMPA_BIN_DIR/sympa_wizard.pl --check\"." +echo " Running this script allows you, to install missing modules." + +if $UPDATE_SYMPA ; then + echo "" + echo -e "\t[ \033[33m\033[1mImportant\033[m ]: For changes which are not compartible with previous versions," + echo " see file \"${_builddir}/NEWS\"." + echo " See \"${_builddir}/ChangeLog\" for the full changes log." + echo "" +fi +if [ -n "$msg_postfix" ]; then + echo "" + echo -e "\t[ \033[33m\033[1mImportant\033[m ]: To support multidomains, you have to add the following entries" + echo " to postfix configuration \"${POSTFIX_CONF_DIR}/main.cf\":" + echo "" + echo -e "$msg_postfix" +fi + +echo "" +clean_up 0 diff --git a/conf/install_sympa.conf.sample b/conf/install_sympa.conf.sample index b78a09e..6621294 100644 --- a/conf/install_sympa.conf.sample +++ b/conf/install_sympa.conf.sample @@ -29,13 +29,16 @@ #SYMPA_MAIN_CONF_DIR="/etc/sympa" -# - SYMPA_LIST_DATA_DIR +# - SYMPA_LIST_DATA_ROOT_DIR # - -# - Data directory for sympa lists +# - Root Path containing Sympa's list data directories # - -# - defaults to: "/data/sympa/list_data" +# - Note: +# - the real list data directory becomes: ${SYMPA_LIST_DATA_ROOT_DIR}/sympa-$SYMPA_VERSION/list_data # - -#SYMPA_LIST_DATA_DIR=/data/sympa/list_data +# - Defaults to: "/data" +# - +#SYMPA_LIST_DATA_ROOT_DIR="/data" # - SYMPA_DOMAIN @@ -43,7 +46,7 @@ # - Note: if sympa will be configured to support multidomains # - this (SYMPA_DOMAIN) should not contain list definitions # - -SYMPA_DOMAIN="" +#SYMPA_DOMAIN="" # - START_AT_BOOTTIME diff --git a/create_sympa_listdomain.sh b/create_sympa_listdomain.sh index 1f83b23..8beefda 100755 --- a/create_sympa_listdomain.sh +++ b/create_sympa_listdomain.sh @@ -1,14 +1,29 @@ #!/usr/bin/env bash -# + +script_name="$(basename $(realpath $0))" +working_dir="$(dirname $(realpath $0))" + +backup_date="$(date +%Y-%m-%d-%H%M)" + + ## --- ## --- Sympa Multidomain Setup ## --- + + + +## --- +## --- Variable settings +## --- + if [ -n "$1" ]; then SYMPA_LIST_DOMAIN=$1 else SYMPA_LIST_DOMAIN= fi +conf_file_installation="${working_dir}/conf/install_sympa.conf" + _VSERVER_GUEST=no @@ -67,18 +82,73 @@ echo_skipped() { ## - Determin Sympa Home Directory ## - -SYMPA_HOME=`echo ~sympa` +SYMPA_HOME="$(realpath "$(echo ~sympa)")" if [ ! -d "$SYMPA_HOME" ]; then fatal "Cannot find Sympas Home (Installation) Directory" fi SYMPA_USER=`stat -c '%U' $SYMPA_HOME` SYMPA_GROUP=`stat -c '%G' $SYMPA_HOME` +## - Determin Sympa's PID directory +## - +if [[ -f "/etc/systemd/system/sympa.service" ]]; then + SYMPA_PID_DIR="$(dirname "$(grep -E "^\s*PIDFile" /etc/systemd/system/sympa.service | cut -d'=' -f2)")" +elif [[ -f "/lib/systemd/system/sympa.service" ]]; then + SYMPA_PID_DIR="$(dirname "$(grep -E "^\s*PIDFile" /lib/systemd/system/sympa.service | cut -d'=' -f2)")" +elif [[ -f "/etc/init.d/sympa" ]] ; then + if $(grep -E -q "\s*^sympapiddir=\"" /etc/init.d/sympa | cut -d'"' -f2) ; then + SYMPA_PID_DIR="$(grep -E "\s*^sympapiddir=" /etc/init.d/sympa | cut -d'"' -f2)" + else + SYMPA_PID_DIR="$(grep -E "\s*^sympapiddir=" /etc/init.d/sympa | cut -d'=' -f2)" + fi +fi +if [[ -z "$SYMPA_PID_DIR" ]]; then + fatal "Cannot determin variable 'SYMPA_PID_DIR'..!" +fi + +## - Determin Sympa's static directory +## - +if [[ -d "/usr/local/sympa/static_content" ]]; then + SYMPA_STATIC_DIR="/usr/local/sympa/static_content" +elif [[ -d "/var/lib/sympa/static_content" ]]; then + SYMPA_STATIC_DIR="/var/lib/sympa/static_content" +elif [[ -d "/usr/local/sympa/var/lib/sympa/static_content" ]]; then + SYMPA_STATIC_DIR="/usr/local/sympa/var/lib/sympa/static_content" +fi +if [[ -z "$SYMPA_STATIC_DIR" ]]; then + fatal "Cannot determin variable 'SYMPA_STATIC_DIR'..!" +fi + +## - Determin Sympa's cgi (script) directory +## - +if [[ -f "/usr/local/sympa/bin/wwsympa-wrapper.fcgi" ]]; then + SYMPA_CGI_DIR="/usr/local/sympa/bin" +elif [[ -f "/usr/local/sympa/lib/sympa/cgi/wwsympa-wrapper.fcgi" ]]; then + SYMPA_CGI_DIR="/usr/local/sympa/lib/sympa/cgi" +fi +if [[ -z "$SYMPA_STATIC_DIR" ]]; then + fatal "Cannot determin variable 'SYMPA_STATIC_DIR'..!" +fi + +## - Determin Sympa's systemd directory +## - +if [[ -f "/etc/systemd/system/sympa.service" ]]; then + SYMPA_SYSTEMD_DIR="/etc/systemd/system" +elif [[ -f "/lib/systemd/system/sympa.service" ]]; then + SYMPA_SYSTEMD_DIR="/lib/systemd/system" +fi + ## - Determin the IP-Addresses ## - -__ipv4="`ifconfig | grep -e \"^\s*inet Adresse\" | grep -v \"127.0.0.1\" | awk '{print$2}' | cut -d\":\" -f2 | sort | head -1`" -__ipv6="`ifconfig | grep -e \"^\s*inet6-Adresse\" | awk '{print$2}' | grep -v -e \"^::1/\" | grep -v -e \"^fe80\" | cut -d\"/\" -f1 | sort | head -1`" +#__ipv4="`ifconfig | grep -e \"^\s*inet \" | grep -v \"127.0.0.1\" | awk '{print$2}' | cut -d\":\" -f2 | sort | head -1`" +#__ipv6="`ifconfig | grep -e \"^\s*inet6 \" | awk '{print$2}' | grep -v -e \"^::1/\" | grep -v -e \"^fe80\" | cut -d\"/\" -f1 | sort | head -1`" + +_hostname="$(hostname -f)" +if [[ -n "$_hostname" ]] ; then + __ipv4="$(dig +short "$_hostname")" + __ipv6="$(dig +short "$_hostname" AAAA)" +fi _debian_apache_installation=false @@ -580,12 +650,16 @@ echo "Sympa Group..............................: $SYMPA_GROUP" echo "" echo "Sympa List Domain........................: $SYMPA_LIST_DOMAIN" echo "Sympa List Data Directory................: $SYMPA_LIST_DATA_DIR" +echo "Sympa's PID Directory....................: $SYMPA_PID_DIR" +echo "Sympa's CGI Directory....................: $SYMPA_CGI_DIR" +echo "Sympa's Staic Directory..,...............: $SYMPA_STATIC_DIR" +echo "Sympa's Systemd Directory................: $SYMPA_SYSTEMD_DIR" echo "Listmaster...............................: $SYMPA_LISTMASTER" echo "URL of the Webinterface..................: $SYMPA_WEB_URL" echo "Title for the Webinterface...............: $SYMPA_WEBINTERFACE_TITLE" echo "" echo "Postfix related:" -echo " relay domain file for sympa domains..: $POSTFIX_RELAY_DOMAIN_FILE" +echo " relay domain file for sympa domains...: $POSTFIX_RELAY_DOMAIN_FILE" echo " transport file for sympa domains......: $POSTFIX_TRANSPORT_FILE" #echo " canonical maps (postmaster|abuse)@....: $POSTFIX_CANONICAL_MAPS" echo " virtual maps file (postmaster|abuse)@.: $POSTFIX_VIRTUAL_ALIAS_MAPS" @@ -630,6 +704,10 @@ echo "## - Sympa Group..............................: $SYMPA_GROUP" >> $_log_fil echo "## -" >> $_log_file echo "## - Sympa List Domain........................: $SYMPA_LIST_DOMAIN" >> $_log_file echo "## - Sympa List Data Directory................: $SYMPA_LIST_DATA_DIR" >> $_log_file +echo "## - Sympa's PID Directory....................: $SYMPA_PID_DIR" >> $_log_file +echo "## - Sympa's CGI Directory....................: $SYMPA_CGI_DIR" >> $_log_file +echo "## - Sympa's Staic Directory..,...............: $SYMPA_STATIC_DIR" >> $_log_file +echo "## - Sympa's Systemd Directory................: $SYMPA_SYSTEMD_DIR" >> $_log_file echo "## - Listmaster...............................: $SYMPA_LISTMASTER" >> $_log_file echo "## - URL of the Webinterface..................: $SYMPA_WEB_URL" >> $_log_file echo "## - Title for the Webinterface...............: $SYMPA_WEBINTERFACE_TITLE" >> $_log_file @@ -658,6 +736,10 @@ echo "SYMPA_GROUP=$SYMPA_GROUP" >> $_log_file echo "" >> $_log_file echo "SYMPA_LIST_DOMAIN=$SYMPA_LIST_DOMAIN" >> $_log_file echo "SYMPA_LIST_DATA_DIR=$SYMPA_LIST_DATA_DIR" >> $_log_file +echo "SYMPA_PID_DIR=$SYMPA_PID_DIR" >> $_log_file +echo "SYMPA_CGI_DIR=$SYMPA_CGI_DIR" >> $_log_file +echo "SYMPA_STATIC_DIR=$SYMPA_STATIC_DIR" >> $_log_file +echo "SYMPA_SYSTEMD_DIR=$SYMPA_SYSTEMD_DIR" >> $_log_file echo "SYMPA_LISTMASTER=$SYMPA_LISTMASTER" >> $_log_file echo "SYMPA_WEB_URL=$SYMPA_WEB_URL" >> $_log_file echo "SYMPA_WEBINTERFACE_TITLE=$SYMPA_WEBINTERFACE_TITLE" >> $_log_file @@ -1066,22 +1148,33 @@ fi echo "" -_apache_vhost_added=false +## - Backup existing VHost Configuration +## - +if [[ -f "$apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf" ]] ; then + echononl "\tBackup VHost Configuration for '$SYMPA_LIST_DOMAIN'.." + echo "" >> $_log_file + echo "## - Backup VHost Configuration for '$SYMPA_LIST_DOMAIN'.." >> $_log_file + echo "## -" >> $_log_file + echo "mv \"$apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf\" \"$apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf.$backup_date\"" >> $_log_file + mv "$apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf" "$apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf.$backup_date" + if [[ $? = 0 ]]; then + echo_ok + else + echo_failed + fi +fi + ## - Add VHost Configuration to Apache Webserver ## - +_apache_vhost_added=false echononl "\tAdd VHost Configuration for Apache Webserver.." -if grep -r $SYMPA_LIST_DOMAIN $apache_vhost_dir/* 2>/dev/null |\ - grep -q -i -E "(ServerAlias| ServerName)" 2> /dev/null ; then - echo_skipped - warn "Apache VHost Configuration for \"$SYMPA_LIST_DOMAIN\" already exists." -else - echo "" >> $_log_file - echo "## - Add VHost Configuration for Apache Webserver...." >> $_log_file - echo "## -" >> $_log_file - echo "cat < $apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf +echo "" >> $_log_file +echo "## - Add VHost Configuration for Apache Webserver...." >> $_log_file +echo "## -" >> $_log_file +echo "cat < $apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf # - $SYMPA_LIST_DOMAIN -# - + ServerAdmin admin@oopen.de @@ -1096,7 +1189,7 @@ else - + ServerAdmin admin@oopen.de @@ -1104,96 +1197,41 @@ else RewriteEngine on RewriteRule ^/\\\$ /$_wwsympa_dir/ [R] - - - AllowOverride none - Require all granted - - - - AllowOverride none - Require all granted - - - Alias /static-sympa ${SYMPA_HOME}/static_content - ScriptAlias /wws ${SYMPA_HOME}/bin/wwsympa-wrapper.fcgi - - - SetHandler fcgid-script +" >> $_log_file +if [[ -f "${SYMPA_SYSTEMD_DIR}/wwsympa.service" ]]; then + echo " + + SetHandler \"proxy:unix:${SYMPA_PID_DIR}/wwsympa.socket|fcgi://\" - SSLEngine on - - ## - 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 add Strict-Transport-Security \"max-age=15768000\" - Header always set Strict-Transport-Security \"max-age=31536000; includeSubDomains\" - - ## - don't support weak ciphers - SSLHonorCipherOrder On - SSLCompression Off - SSLProtocol ALL -SSLv2 -SSLv3 - - SSLCertificateFile ${apache_conf_dir}/server-bundle.crt - SSLCertificateKeyFile ${apache_conf_dir}/server.key - - CustomLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-access.log combined - ErrorLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-error.log - - - - -## --- -## --- IPv6 -## --- - - - - ServerAdmin admin@oopen.de - - ServerName $SYMPA_LIST_DOMAIN - - RewriteEngine on - RewriteCond %{HTTPS} !=on - RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] - - CustomLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-access.log combined - ErrorLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-error.log - - - - - - ServerAdmin admin@oopen.de - - ServerName $SYMPA_LIST_DOMAIN - - RewriteEngine on - RewriteRule ^/\\\$ /$_wwsympa_dir/ [R] - - - AllowOverride none + Require all granted - - - - AllowOverride none - Require all granted - - - Alias /static-sympa ${SYMPA_HOME}/static_content - ScriptAlias /wws ${SYMPA_HOME}/bin/wwsympa-wrapper.fcgi - - - SetHandler fcgid-script + Alias /static-sympa ${SYMPA_STATIC_DIR} +" >> $_log_file +else + echo " + + AllowOverride none + Require all granted + + + + AllowOverride none + Require all granted + + + Alias /static-sympa ${SYMPA_STATIC_DIR} + ScriptAlias /$_wwsympa_dir ${SYMPA_CGI_DIR}/wwsympa-wrapper.fcgi + + + SetHandler fcgid-script + +" >> $_log_file +fi + +echo " SSLEngine on ## - HTTP Strict Transport Security (HSTS) @@ -1221,10 +1259,10 @@ else EOF" >> $_log_file - cat < $apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf +cat < $apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf # - $SYMPA_LIST_DOMAIN -# - + ServerAdmin admin@oopen.de @@ -1239,7 +1277,7 @@ EOF" >> $_log_file - + ServerAdmin admin@oopen.de @@ -1248,94 +1286,45 @@ EOF" >> $_log_file RewriteEngine on RewriteRule ^/\$ /$_wwsympa_dir/ [R] - - AllowOverride none - Require all granted - +EOF - - AllowOverride none - Require all granted - +if [[ -f "${SYMPA_SYSTEMD_DIR}/wwsympa.service" ]]; then - Alias /static-sympa ${SYMPA_HOME}/static_content - ScriptAlias /wws ${SYMPA_HOME}/bin/wwsympa-wrapper.fcgi + cat <> $apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf - - SetHandler fcgid-script + + SetHandler "proxy:unix:${SYMPA_PID_DIR}/wwsympa.socket|fcgi://" - SSLEngine on + + Require all granted + - ## - 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 add Strict-Transport-Security "max-age=15768000" - Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" + Alias /static-sympa ${SYMPA_STATIC_DIR} +EOF +else + cat <> $apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf - ## - don't support weak ciphers - SSLHonorCipherOrder On - SSLCompression Off - SSLProtocol ALL -SSLv2 -SSLv3 - - SSLCertificateFile ${apache_conf_dir}/server-bundle.crt - SSLCertificateKeyFile ${apache_conf_dir}/server.key - - CustomLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-access.log combined - ErrorLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-error.log - - - - -## --- -## --- IPv6 -## --- - - - - ServerAdmin admin@oopen.de - - ServerName $SYMPA_LIST_DOMAIN - - RewriteEngine on - RewriteCond %{HTTPS} !=on - RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] - - CustomLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-access.log combined - ErrorLog ${apache_log_dir}/${SYMPA_LIST_DOMAIN}-error.log - - - - - - ServerAdmin admin@oopen.de - - ServerName $SYMPA_LIST_DOMAIN - - RewriteEngine on - RewriteRule ^/\$ /$_wwsympa_dir/ [R] - - + AllowOverride none Require all granted - + AllowOverride none Require all granted - Alias /static-sympa ${SYMPA_HOME}/static_content - ScriptAlias /wws ${SYMPA_HOME}/bin/wwsympa-wrapper.fcgi + Alias /static-sympa ${SYMPA_STATIC_DIR} + ScriptAlias /$_wwsympa_dir ${SYMPA_CGI_DIR}/wwsympa-wrapper.fcgi - + SetHandler fcgid-script +EOF +fi + +cat <> $apache_vhost_dir/${SYMPA_LIST_DOMAIN}.conf SSLEngine on @@ -1363,12 +1352,11 @@ EOF" >> $_log_file EOF - if [ "$?" = "0" ]; then - echo_ok - apache_vhost_added=true - else - echo_failed - fi +if [ "$?" = "0" ]; then + echo_ok + apache_vhost_added=true +else + echo_failed fi if $apache_vhost_added ; then diff --git a/install_sympa.sh b/install_sympa.sh index 45f6d6e..78f6566 100755 --- a/install_sympa.sh +++ b/install_sympa.sh @@ -1,7 +1,12 @@ #!/usr/bin/env bash -_src_base_dir=/usr/local/src/sympa -conf_file="${_src_base_dir}/conf/install_sympa.conf" +working_dir="$(dirname $(realpath $0))" +script_name="$(basename $(realpath $0))" + +conf_file="${working_dir}/conf/${script_name%%.*}.conf" + +_src_base_dir="$working_dir" +#conf_file="${_src_base_dir}/conf/install_sympa.conf" backup_date="$(date +%Y-%m-%d-%H%M)" @@ -23,7 +28,6 @@ _required_debian_packages=" libutf8-all-perl libmime-base64-perl libmime-charset-perl - libcrypt-ciphersaber-perl libcrypt-openssl-x509-perl libcrypt-smime-perl libdata-password-perl @@ -60,10 +64,10 @@ _required_debian_packages=" libunicode-linebreak-perl libio-socket-ssl-perl libsoap-lite-perl - libcrypt-ciphersaber-perl libmail-sendmail-perl libmail-dkim-perl cpanminus + spawn-fcgi " _needed_cpan_modules=" @@ -124,10 +128,6 @@ _needed_cpan_modules=" Net::SMTP SOAP::Lite " -#_required_debian_packages=" -# libcgi-pm-perl -# libdbd-mysql-perl -# mhonarc" @@ -192,6 +192,9 @@ echo_failed(){ echo_skipped() { echo -e "\033[75G[ \033[33m\033[1mskipped\033[m ]" } +echo_wait(){ + echo -en "\033[75G[ \033[5m\033[1mwait\033[m ]" +} ## --- ## --- END: functions @@ -207,12 +210,36 @@ else SYSTEMD_SUPPORTED=true fi +## --- +## --- Variable Settings +## --- + +_CRONTAB_BAKUP_FILE=/tmp/crontab_root.sympa-install + +SYMPA_BASE_PATH="/usr/local/sympa" + +SYMPA_MANPATH="${SYMPA_BASE_PATH}/share/man" + +ENABLE_FHS=no +if [[ "$ENABLE_FHS" = "no" ]]; then + SYMPA_STATIC_DIR="/usr/local/sympa/static_content" + SYMPA_PID_DIR="/usr/local/sympa" + SYMPA_BIN_DIR="/usr/local/sympa/bin" + SYMPA_CGI_DIR="$SYMPA_BIN_DIR" + SYMPA_LIBEXEC_DIR="$SYMPA_BIN_DIR" +else + SYMPA_STATIC_DIR="/usr/local/sympa/var/lib/sympa/static_content" + SYMPA_PID_DIR="/usr/local/sympa/var/run/sympa" + SYMPA_BIN_DIR="/usr/local/sympa/sbin" + SYMPA_CGI_DIR="/usr/local/sympa/lib/sympa/cgi" + SYMPA_LIBEXEC_DIR="/usr/local/sympa/libexec" +fi + -DEFAULT_PREFIX="/usr/local/sympa" DEFAULT_SYMPA_USER="sympa" DEFAULT_SYMPA_MAIN_CONF_DIR="/etc/sympa" -DEFAULT_SYMPA_LIST_DATA_DIR="/data/sympa/list_data" +DEFAULT_SYMPA_LIST_DATA_ROOT_DIR="/data" DEFAULT_START_AT_BOOTTIME="yes" @@ -221,8 +248,9 @@ DEFAULT_SYMPA_DB_HOST="localhost" DEFAULT_SYMPA_DB_NAME="sympa" DEFAULT_SYMPA_DB_USER="sympa" -# - DEFAULT_SYMPA_DB_PORT will be determined later +DEFAULT_SYMPA_SYSTEMD_DIR="/etc/systemd/system" +# - DEFAULT_SYMPA_DB_PORT will be determined later DEFAULT_VSERVER_GUEST="no" @@ -245,11 +273,10 @@ fi DEFAULT_SYMPA_WEB_URL="https://$SYMPA_DOMAIN/wws" -[[ -n "$PREFIX" ]] && DEFAULT_PREFIX="$PREFIX" [[ -n "$SYMPA_USER" ]] && DEFAULT_SYMPA_USER="$SYMPA_USER" [[ -n "$SYMPA_MAIN_CONF_DIR" ]] && DEFAULT_SYMPA_MAIN_CONF_DIR="$SYMPA_MAIN_CONF_DIR" [[ -n "$SYMPA_LISTMASTER" ]] && DEFAULT_SYMPA_LISTMASTER="$SYMPA_LISTMASTER" -[[ -n "$SYMPA_LIST_DATA_DIR" ]] && DEFAULT_SYMPA_LIST_DATA_DIR="$SYMPA_LIST_DATA_DIR" +[[ -n "$SYMPA_LIST_DATA_ROOT_DIR" ]] && DEFAULT_SYMPA_LIST_DATA_ROOT_DIR="$SYMPA_LIST_DATA_ROOT_DIR" [[ -n "$START_AT_BOOTTIME" ]] && DEFAULT_START_AT_BOOTTIME="$START_AT_BOOTTIME" [[ -n "$SYMPA_DB_NAME" ]] && DEFAULT_SYMPA_DB_NAME="$SYMPA_DB_NAME" [[ -n "$SYMPA_DB_PORT" ]] && DEFAULT_SYMPA_DB_PORT="$SYMPA_DB_PORT" @@ -257,6 +284,9 @@ DEFAULT_SYMPA_WEB_URL="https://$SYMPA_DOMAIN/wws" [[ -n "$VSERVER_GUEST" ]] && DEFAULT_VSERVER_GUEST="$VSERVER_GUEST" [[ -n "$SYMPA_DB_PASSWD" ]] && DEFAULT_SYMPA_DB_PASSWD="$SYMPA_DB_PASSWD" +# - +[[ -n "$SYMPA_SYSTEMD_DIR" ]] && DEFAULT_SYMPA_SYSTEMD_DIR="$SYMPA_SYSTEMD_DIR" + if [[ -n "$SYMPA_LISTMASTER" ]] ; then DEFAULT_SYMPA_LISTMASTER="$SYMPA_LISTMASTER" @@ -306,8 +336,14 @@ fi ## - Determin the IP-Addresses ## - -__ipv4="`ifconfig | grep -e \"^\s*inet Adresse\" | grep -v \"127.0.0.1\" | awk '{print$2}' | cut -d\":\" -f2 | sort | head -1`" -__ipv6="`ifconfig | grep -e \"^\s*inet6-Adresse\" | awk '{print$2}' | grep -v -e \"^::1/\" | grep -v -e \"^fe80\" | cut -d\"/\" -f1 | sort | head -1`" +#__ipv4="`ifconfig | grep -e \"^\s*inet\" | grep -v \"127.0.0.1\" | awk '{print$2}' | cut -d\":\" -f2 | sort | head -1`" +#__ipv6="`ifconfig | grep -e \"^\s*inet6\" | awk '{print$2}' | grep -v -e \"^::1/\" | grep -v -e \"^fe80\" | cut -d\"/\" -f1 | sort | head -1`" + +_hostname="$(hostname -f)" +if [[ -n "$_hostname" ]] ; then + __ipv4="$(dig +short "$_hostname")" + __ipv6="$(dig +short "$_hostname" AAAA)" +fi _debian_apache_installation=false @@ -350,6 +386,18 @@ else fi fi fi + + ## - Determin websever user + ## - + web_user="`$_httpd_binary -t -D DUMP_RUN_CFG | grep -i -e "^User" | awk '{print$2}' | cut -d\"=\" -f2 | tr -d '"'`" + web_group="`$_httpd_binary -t -D DUMP_RUN_CFG | grep -i -e "^Group" | awk '{print$2}' | cut -d\"=\" -f2 | tr -d '"'`" + if [ -z "$web_user" -o -z "$web_group" ]; then + HTTPD_USER=www-data + else + HTTPD_USER=$web_user + HTTPD_GROUP=$web_group + fi + ## - Determin ServerRoot Directory ## - apache_base_dir_found=false @@ -497,6 +545,38 @@ while [ "X$SYMPA_VERSION" = "X" ]; do fi done +SYMPA_MAIN_VERSION=`echo $SYMPA_VERSION | cut -d '.' -f1,2` +SYMPA_MAJOR_VERSION=`echo $SYMPA_VERSION | cut -d '.' -f1` +SYMPA_MINOR_VERSION=`echo $SYMPA_VERSION | cut -d '.' -f2` +SYMPA_PATCH_LEVEL=`echo $SYMPA_VERSION | cut -d '.' -f3` + +SYMPA_INSTALL_DIR="${SYMPA_BASE_PATH}-$SYMPA_VERSION" + +## - Determin old (current) installation directory +## - +if $UPDATE_SYMPA ; then + if [[ -h "$SYMPA_BASE_PATH" ]]; then + CURRENT_INSTALL_DIR="$(realpath "$SYMPA_BASE_PATH")" + CURRENT_INSTALL_SYMLINK="$SYMPA_BASE_PATH" + elif [[ -d "$SYMPA_BASE_PATH" ]]; then + CURRENT_INSTALL_DIR="$SYMPA_BASE_PATH" + elif [[ -h "/usr/local/sympa" ]]; then + CURRENT_INSTALL_DIR="$(realpath "/usr/local/sympa")" + CURRENT_INSTALL_SYMLINK="/usr/local/sympa" + elif [[ -d "/usr/local/sympa" ]]; then + CURRENT_INSTALL_DIR="/usr/local/sympa" + elif [[ -h "/opt/sympa" ]]; then + CURRENT_INSTALL_DIR="$(realpath "/opt/sympa")" + CURRENT_INSTALL_SYMLINK="/opt/sympa" + elif [[ -d "/opt/sympa" ]]; then + CURRENT_INSTALL_DIR="/opt/sympa" + else + fatal "No current installtion of Sympa found! " + fi +fi + + + _builddir=${_src_base_dir}/sympa-$SYMPA_VERSION _logdir=${_src_base_dir}/log_sympa-$SYMPA_VERSION if $UPDATE_SYMPA ; then @@ -590,31 +670,33 @@ if ! $UPDATE_SYMPA ; then done fi -echo "" -echo "--" -echo "" -echo "Specify Sympa's installation directory." -echo "" -PREFIX= -echononl "Sympa installation directory [${DEFAULT_PREFIX}]: " -read PREFIX -if [ "X$PREFIX" = "X" ]; then - PREFIX=$DEFAULT_PREFIX -fi -SYMPA_MANPATH=${PREFIX}/share/man -SYMPA_BIN_DIR=${PREFIX}/bin - if $UPDATE_SYMPA ; then - if [ ! -f "${PREFIX}/bin/sympa.pl" ]; then - fatal "You are in update mode, but i can't find existing installation at $PREFIX" + if [ ! -f "${SYMPA_BASE_PATH}/bin/sympa.pl" ] && [ ! -f "${SYMPA_BASE_PATH}/sbin/sympa.pl" ]; then + fatal "You are in update mode, but i can't find existing installation at $SYMPA_BASE_PATH" fi - SYMPA_USER=`stat -c "%U" $PREFIX` - SYMPA_GROUP=`stat -c "%G" $PREFIX` + + SYMPA_HOME="$(realpath "$(echo ~sympa)")" + if [ ! -d "$SYMPA_HOME" ]; then + fatal "Cannot find Sympas Home (Installation) Directory" + fi + SYMPA_USER=`stat -c '%U' $SYMPA_HOME` + SYMPA_GROUP=`stat -c '%G' $SYMPA_HOME` + fi -SYMPA_OLD_VERSION="" + if $UPDATE_SYMPA ; then - SYMPA_OLD_VERSION=`egrep -v '^s*$|^#' ${PREFIX}/etc/data_structure.version 2> /dev/null | head -1` + + SYMPA_OLD_VERSION="" + _sympa_perlscript="$(which sympa.pl)" + if [[ -n "$_sympa_perlscript" ]]; then + SYMPA_OLD_VERSION="$($_sympa_perlscript --version 2> /dev/null | cut -d' ' -f2)" + fi + + if [[ -z "$SYMPA_OLD_VERSION" ]]; then + SYMPA_OLD_VERSION=`egrep -v '^s*$|^#' /usr/local/sympa/etc/data_structure.version 2> /dev/null | head -1` + fi + if [ -n "$SYMPA_OLD_VERSION" -a "$SYMPA_OLD_VERSION" == "$SYMPA_VERSION" ]; then warn "You are in update mode, but the old version ($SYMPA_OLD_VERSION) is the same as the new one ($SYMPA_VERSION)!" echononl "Type uppercase \"yes\" to proceed with upgrading: " @@ -640,60 +722,55 @@ if $UPDATE_SYMPA ; then if [ ! -f "${SYMPA_MAIN_CONF_DIR}/sympa.conf" ]; then fatal "You are in update mode, but i can't find existing main configuration at $SYMPA_MAIN_CONF_DIR" fi -else - if [ -s "${SYMPA_MAIN_CONF_DIR}/sympa.conf" ]; then - warn "File \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\" is not empty, but this is an initial installation!" - _empty_conf_file="" - echononl "Backup and then delete ${SYMPA_MAIN_CONF_DIR}/sympa.conf now? (yes/no) [yes]: " - read _empty_conf_file - if [ "X$_empty_conf_file" = "X" ]; then - _empty_conf_file=yes - fi - while [ "X$_empty_conf_file" != "Xyes" -a "X$_empty_conf_file" != "XYes" -a "X$_empty_conf_file" != "XNo" -a "X$_empty_conf_file" != "Xno" ]; do - echo "" - echononl "\twrong entry! [yes/no]: " - read OK - done - _empty_conf_file=`echo "$_empty_conf_file" | tr '[:upper:]' '[:lower:]'` - if [ "$_empty_conf_file" = "yes" ]; then - mv ${SYMPA_MAIN_CONF_DIR}/sympa.conf ${SYMPA_MAIN_CONF_DIR}/sympa.conf.$backup_date - ok "Saved ${SYMPA_MAIN_CONF_DIR}/sympa.conf to ${SYMPA_MAIN_CONF_DIR}/sympa.conf.$backup_date" - fi - fi fi SYMPA_LIST_DATA_DIR= if $UPDATE_SYMPA ; then - SYMPA_LIST_DATA_DIR=`grep -e "^home" ${SYMPA_MAIN_CONF_DIR}/sympa.conf | awk '{print$2}'` - if [ ! -d "$SYMPA_LIST_DATA_DIR" ]; then - echo "" - echo "--" - echo "" - echo "Specify Sympa's list data directory." - echo "" - SYMPA_LIST_DATA_DIR= - echononl "Sympa's list data directory [${DEFAULT_SYMPA_LIST_DATA_DIR}]: " - read SYMPA_LIST_DATA_DIR - if [ "X$SYMPA_LIST_DATA_DIR" = "X" ]; then - SYMPA_LIST_DATA_DIR=$DEFAULT_SYMPA_LIST_DATA_DIR - fi + CURRENT_SYMPA_LIST_DATA_DIR="$(realpath "$(grep -e "^home" ${SYMPA_MAIN_CONF_DIR}/sympa.conf | awk '{print$2}')")" + if [ ! -d "$CURRENT_SYMPA_LIST_DATA_DIR" ]; then + fatal "You are in update mode, but i can't find existing list data dir at $CURRENT_SYMPA_LIST_DATA_DIR" fi + CURRENT_SYMPA_LIST_DATA_BASE_PATH="$(dirname "$CURRENT_SYMPA_LIST_DATA_DIR")" + CURRENT_SYMPA_LIST_DATA_ROOT_DIR="$(dirname "$CURRENT_SYMPA_LIST_DATA_BASE_PATH")" + if [[ -h "${CURRENT_SYMPA_LIST_DATA_ROOT_DIR}/sympa" ]]; then + CURRENT_SYMPA_LIST_DATA_SYMLINK="${CURRENT_SYMPA_LIST_DATA_ROOT_DIR}/sympa" + fi + + SYMPA_LIST_DATA_DIR="${CURRENT_SYMPA_LIST_DATA_ROOT_DIR}/sympa-${SYMPA_VERSION}/list_data" + SYMPA_LIST_DATA_BASE_PATH="$(dirname "$SYMPA_LIST_DATA_DIR")" + SYMPA_LIST_DATA_ROOT_DIR="$(dirname "$SYMPA_LIST_DATA_BASE_PATH")" + SYMPA_LIST_DATA_SYMLINK="${CURRENT_SYMPA_LIST_DATA_ROOT_DIR}/sympa" + else echo "" echo "--" echo "" - echo "Specify Sympa's list data directory." + echo "Specify root directory containing Sympa's list data directories." echo "" - SYMPA_LIST_DATA_DIR= - echononl "Sympa's list data directory [${DEFAULT_SYMPA_LIST_DATA_DIR}]: " - read SYMPA_LIST_DATA_DIR - if [ "X$SYMPA_LIST_DATA_DIR" = "X" ]; then - SYMPA_LIST_DATA_DIR=$DEFAULT_SYMPA_LIST_DATA_DIR + SYMPA_LIST_DATA_ROOT_DIR= + echononl "Sympa's list data directory [${DEFAULT_SYMPA_LIST_DATA_ROOT_DIR}]: " + read SYMPA_LIST_DATA_ROOT_DIR + if [ "X$SYMPA_LIST_DATA_ROOT_DIR" = "X" ]; then + SYMPA_LIST_DATA_ROOT_DIR=$DEFAULT_SYMPA_LIST_DATA_ROOT_DIR fi + + SYMPA_LIST_DATA_DIR="${SYMPA_LIST_DATA_ROOT_DIR}/sympa-${SYMPA_VERSION}/list_data" + SYMPA_LIST_DATA_BASE_PATH="$(dirname "$SYMPA_LIST_DATA_DIR")" + SYMPA_LIST_DATA_SYMLINK="${SYMPA_LIST_DATA_ROOT_DIR}/sympa" fi -if $UPDATE_SYMPA ; then - if [ ! -d "$SYMPA_LIST_DATA_DIR" ]; then - fatal "You are in update mode, but i can't find existing list data dir at $SYMPA_LIST_DATA_DIR" + + +if $SYSTEMD_SUPPORTED ; then + echo "" + echo "--" + echo "" + echo "Specify directory where Systemd unit files should be installed." + echo "" + SYMPA_SYSTEMD_DIR= + echononl "Sympa Systemd directory [${DEFAULT_SYMPA_SYSTEMD_DIR}]: " + read SYMPA_SYSTEMD_DIR + if [ "X$SYMPA_SYSTEMD_DIR" = "X" ]; then + SYMPA_SYSTEMD_DIR=$DEFAULT_SYMPA_SYSTEMD_DIR fi fi @@ -1036,7 +1113,7 @@ if [[ "$SYMPA_DB_TYPE" = "mysql" ]]; then mysql -h $SYMPA_DB_HOST -u $SYMPA_DB_USER -p"$SYMPA_DB_PASSWD" $SYMPA_DB_NAME -N -s -e \ "SHOW DATABASES LIKE '$SYMPA_DB_NAME'" > /dev/null 2>&1 if [[ $? -ne 0 ]]; then - fatal "Cannot connect to database witg given credentials" + fatal "Cannot connect to database '$SYMPA_DB_NAME' with given credentials" fi else if [[ -z "$mysql_credential_args" ]]; then @@ -1048,52 +1125,6 @@ if [[ "$SYMPA_DB_TYPE" = "mysql" ]]; then "SHOW DATABASES LIKE '$SYMPA_DB_NAME'" > /dev/null 2>&1 if [[ $? -ne 0 ]]; then fatal "Database '$SYMPA_DB_NAME'exists, but is not accessable by the given credentials for user '$SYMPA_DB_USER'!" - else - _tables=$(mysql $mysql_credential_args $SYMPA_DB_NAME -N -s -e 'SHOW TABLES' 2>/dev/null) - - if [[ -n "$_tables" ]]; then - warn "Database \"$SYMPA_DB_NAME\" exists AND contains tables, but this is an initial installation!" - _empty_db="" - echononl "Empty database \"$SYMPA_DB_NAME\" now? (yes/no) [yes]: " - read _empty_db - if [ "X$_empty_db" = "X" ]; then - _empty_db=yes - fi - while [ "X$_empty_db" != "Xyes" -a "X$_empty_db" != "XYes" -a "X$_empty_db" != "XNo" -a "X$_empty_db" != "Xno" ]; do - echo "" - echononl "\twrong entry! [yes/no]: " - read OK - done - _empty_db=`echo "$_empty_db" | tr '[:upper:]' '[:lower:]'` - if [[ "$_empty_db" = "yes" ]]; then - - echo "" - echononl "\tBackup database '$SYMPA_DB_NAME'.." - mysqldump $mysql_credential_args --opt $SYMPA_DB_NAME > ${_src_base_dir}/${SYMPA_DB_NAME}-${backup_date}.sql 2> $err_log - if [[ $? -eq 0 ]]; then - echo_ok - else - echo_failed - fatal "$(cat $err_log)" - fi - - _failed=false - for _table in $_tables ; do - mysql $mysql_credential_args $SYMPA_DB_NAME -N -s -e "DROP TABLE $_table" 2> /dev/null - if [ "$?" != "0" ]; then - _failed=true - fi - done - if $_failed ; then - error "Cleaning up database \"$SYMPA_DB_NAME\" failed!" - else - ok "Cleaning up database \"$SYMPA_DB_NAME\" was successful." - fi - else - fatal "Clean up database '$SYMPA_DB_NAME' or use another one." - fi - fi - fi else @@ -1140,22 +1171,20 @@ elif [[ "$SYMPA_DB_TYPE" = "Pg" ]] || [[ "$SYMPA_DB_TYPE" = "Oracle" ]] || [[ "$ fi -if ! $UPDATE_SYMPA ; then - echo "" - echo "--" - echo "" - __START_AT_BOOTTIME= - echononl "Start at boot time (yes/no) [${DEFAULT_START_AT_BOOTTIME}]: " - read __START_AT_BOOTTIME - if [ "X$__START_AT_BOOTTIME" = "X" ]; then - __START_AT_BOOTTIME=$DEFAULT_START_AT_BOOTTIME - fi - __START_AT_BOOTTIME=`echo $__START_AT_BOOTTIME | tr '[:upper:]' '[:lower:]'` - if [ "$__START_AT_BOOTTIME" = "yes" ] ; then - START_AT_BOOTTIME=true - else - START_AT_BOOTTIME=false - fi +echo "" +echo "--" +echo "" +__START_AT_BOOTTIME= +echononl "Start at boot time (yes/no) [${DEFAULT_START_AT_BOOTTIME}]: " +read __START_AT_BOOTTIME +if [ "X$__START_AT_BOOTTIME" = "X" ]; then + __START_AT_BOOTTIME=$DEFAULT_START_AT_BOOTTIME +fi +__START_AT_BOOTTIME=`echo $__START_AT_BOOTTIME | tr '[:upper:]' '[:lower:]'` +if [ "$__START_AT_BOOTTIME" = "yes" ] ; then + START_AT_BOOTTIME=true +else + START_AT_BOOTTIME=false fi @@ -1188,8 +1217,6 @@ else fi -## - Is this a system with "systemd" ? -## - OK= echo "" echo -e "\033[32m--\033[m" @@ -1231,23 +1258,48 @@ else echo "" echo -e "-- \033[33m\033[1mNew (initial) installation\033[m --" fi +if $UPDATE_SYMPA ; then + echo "" + echo "Old (current) sympa version.....: $SYMPA_OLD_VERSION" + echo " Current Installation dir.....: $CURRENT_INSTALL_DIR" + if [[ -z "$CURRENT_INSTALL_SYMLINK" ]]; then + echo " Current Install dir symlink..: - not in use -" + else + echo " Current Install dir symlink..: $CURRENT_INSTALL_SYMLINK" + fi + echo " Current Data base directory..: $CURRENT_SYMPA_LIST_DATA_BASE_PATH" + if [[ -z "$CURRENT_SYMPA_LIST_DATA_SYMLINK" ]]; then + echo " Current Data dir symlink.....: - not in use -" + else + echo " Current Data dir symlink.....: $CURRENT_SYMPA_LIST_DATA_SYMLINK" + fi + echo "" +fi echo "" -echo "Sympa version...................: $SYMPA_VERSION" +echo -e "\033[1mSympa new version\033[m...............: \033[1m$SYMPA_VERSION\033[m" echo " First (initial) Install......: $_new" echo " Update ......................: $_update" echo "" if ! $UPDATE_SYMPA ; then echo "Sympa support for multidomains..: $SYMPA_SUPPORT_MULTIDOMAINS" fi -echo "" echo "Sympa user......................: $SYMPA_USER (id: ${SYMPA_UID})" echo "Sympa group.....................: $SYMPA_GROUP (id: ${SYMPA_GID})" echo "" -echo "Installation directory..........: $PREFIX" +echo "Installation directory..........: $SYMPA_INSTALL_DIR" echo "Sympa's bin directory...........: $SYMPA_BIN_DIR" +echo "Sympa's pid directory...........: $SYMPA_PID_DIR" +echo "Sympa's cgi directory...........: $SYMPA_CGI_DIR" +echo "Sympa's libexec directory.......: $SYMPA_LIBEXEC_DIR" +echo "Sympa's static directory........: $SYMPA_STATIC_DIR" echo "Sympa's manpages directory......: $SYMPA_MANPATH" echo "Sympa's main conf directory.....: $SYMPA_MAIN_CONF_DIR" +echo "" echo "Sympa's Data directory..........: $SYMPA_LIST_DATA_DIR" +echo "Sympa's Data base path..........: $SYMPA_LIST_DATA_BASE_PATH" +echo "Sympa's Data root dirctory......: $SYMPA_LIST_DATA_ROOT_DIR" +echo "Sympa's Data directory symlink..: $SYMPA_LIST_DATA_SYMLINK" +echo "" echo "Sympa's aliases file............: $SYMPA_ALIAS_FILE" if ! $UPDATE_SYMPA ; then echo "" @@ -1263,11 +1315,15 @@ if ! $UPDATE_SYMPA ; then echo "Database user...................: $SYMPA_DB_USER" echo "Database password...............: $SYMPA_DB_PASSWD" echo "" - echo "Start at boot time..............: $START_AT_BOOTTIME" fi +echo "Start at boot time..............: $START_AT_BOOTTIME" +echo "" echo "Directory for init scripts......: $SYMPA_INIT_DIR" echo "" echo "Use systemd.....................: $SYSTEMD_SUPPORTED" +if $SYSTEMD_SUPPORTED ; then + echo "Directory Systemd unit files....: $SYMPA_SYSTEMD_DIR" +fi if ! $UPDATE_SYMPA ; then echo "" echo "Apache VHost directory..........: $apache_vhost_dir" @@ -1349,6 +1405,24 @@ else echo "## - Start of Sympa Installation with the following Parameters" >> $_log_file fi echo "## -----------" >> $_log_file +if $UPDATE_SYMPA ; then + echo "## -" >> $_log_file + echo "## - Old (current) sympa version.......: $SYMPA_OLD_VERSION" >> $_log_file + echo "## - Current Installation dir.......: $CURRENT_INSTALL_DIR" >> $_log_file + if [[ -z "$CURRENT_INSTALL_SYMLINK" ]]; then + echo "## - Current Install dir symlink....: - not in use -" >> $_log_file + else + echo "## - Current Install dir symlink....: $CURRENT_INSTALL_SYMLINK" >> $_log_file + fi + echo "## - Current Data base directory.......: $CURRENT_SYMPA_LIST_DATA_BASE_PATH" >> $_log_file + if [[ -z "$CURRENT_SYMPA_LIST_DATA_SYMLINK" ]]; then + echo "## - Current Data dir symlink.....: - not in use -" >> $_log_file + else + echo "## - Current Data dir symlink.....: $CURRENT_SYMPA_LIST_DATA_SYMLINK" >> $_log_file + fi + echo "## -" >> $_log_file +fi + echo "## -" >> $_log_file echo "## - Sympa version.....................: $SYMPA_VERSION" >> $_log_file echo "## - First (initial) Install........: $_new" >> $_log_file @@ -1361,11 +1435,20 @@ echo "## -" >> $_log_file echo "## - Sympa user........................: $SYMPA_USER" >> $_log_file echo "## - Sympa group.......................: $SYMPA_GROUP" >> $_log_file echo "## -" >> $_log_file -echo "## - Installation directory............: $PREFIX" >> $_log_file +echo "## - Installation directory............: $SYMPA_INSTALL_DIR" >> $_log_file echo "## - Sympa's bin directory.............: $SYMPA_BIN_DIR" >> $_log_file +echo "## - Sympa's pid directory.............: $SYMPA_PID_DIR" >> $_log_file +echo "## - Sympa's cgi directory.............: $SYMPA_CGI_DIR" >> $_log_file +echo "## - Sympa's libexec directory.........: $SYMPA_LIBEXEC_DIR" >> $_log_file +echo "## - Sympa's static directory..........: $SYMPA_STATIC_DIR" >> $_log_file echo "## - Sympa's manpages directory........: $SYMPA_MANPATH" >> $_log_file echo "## - Sympa's main conf directory.......: $SYMPA_MAIN_CONF_DIR" >> $_log_file -echo "## - Sympa's Data directory...........: $SYMPA_LIST_DATA_DIR" >> $_log_file +echo "## -" >> $_log_file +echo "## - Sympa's Data directory............: $SYMPA_LIST_DATA_DIR" >> $_log_file +echo "## - Sympa's Data base path............: $SYMPA_LIST_DATA_BASE_PATH" >> $_log_file +echo "## - Sympa's Data root dirctory........: $SYMPA_LIST_DATA_ROOT_DIR" >> $_log_file +echo "## - Sympa's Data directory symlink....: $SYMPA_LIST_DATA_SYMLINK" >> $_log_file +echo "## -" >> $_log_file echo "## - Sympa's aliases file..............: $SYMPA_ALIAS_FILE" >> $_log_file echo "## -" >> $_log_file if ! $UPDATE_SYMPA ; then @@ -1382,13 +1465,14 @@ if ! $UPDATE_SYMPA ; then echo "## - Database user.....................: $SYMPA_DB_USER" >> $_log_file echo "## - Database password.................: $SYMPA_DB_PASSWD" >> $_log_file fi -if ! $UPDATE_SYMPA ; then - echo "## -" >> $_log_file - echo "## - Start at boot time................: $START_AT_BOOTTIME" >> $_log_file -fi +echo "## -" >> $_log_file +echo "## - Start at boot time................: $START_AT_BOOTTIME" >> $_log_file echo "## - Directory for init scripts........: $SYMPA_INIT_DIR" >> $_log_file echo "## -" >> $_log_file echo "## - Use systemd.......................: $SYSTEMD_SUPPORTED" >> $_log_file +if $SYSTEMD_SUPPORTED ; then + echo "## - Directory Systemd unit files......: $SYMPA_SYSTEMD_DIR" >> $_log_file +fi echo "## -" >> $_log_file if ! $UPDATE_SYMPA ; then echo "## - Apache VHost directory............: $apache_vhost_dir" >> $_log_file @@ -1416,8 +1500,15 @@ if $UPDATE_SYMPA ; then fi echo "## -" >> $_log_file echo "" >> $_log_file -echo "" >> $_log_file - +if $UPDATE_SYMPA ; then + echo "SYMPA_OLD_VERSION=$SYMPA_OLD_VERSION" >> $_log_file + echo "CURRENT_INSTALL_DIR=$CURRENT_INSTALL_DIR" >> $_log_file + echo "CURRENT_INSTALL_SYMLINK=$CURRENT_INSTALL_SYMLINK" >> $_log_file + echo "CURRENT_SYMPA_LIST_DATA_DIR=$CURRENT_SYMPA_LIST_DATA_DIR" >> $_log_file + echo "CURRENT_SYMPA_LIST_DATA_BASE_PATH=$CURRENT_SYMPA_LIST_DATA_BASE_PATH" >> $_log_file + echo "CURRENT_SYMPA_LIST_DATA_ROOT_DIR=$CURRENT_SYMPA_LIST_DATA_ROOT_DIR" >> $_log_file + echo "CURRENT_SYMPA_LIST_DATA_SYMLINK=$CURRENT_SYMPA_LIST_DATA_SYMLINK" >> $_log_file +fi echo "SYMPA_VERSION=$SYMPA_VERSION" >> $_log_file echo "" >> $_log_file echo "UPDATE_SYMPA=$UPDATE_SYMPA" >> $_log_file @@ -1428,11 +1519,22 @@ fi echo "SYMPA_USER=$SYMPA_USER" >> $_log_file echo "SYMPA_GROUP=$SYMPA_GROUP" >> $_log_file echo "" >> $_log_file -echo "PREFIX=$PREFIX" >> $_log_file +echo "ENABLE_FHS=$ENABLE_FHS" >> $_log_file +echo "" >> $_log_file +echo "SYMPA_INSTALL_DIR=$SYMPA_INSTALL_DIR" >> $_log_file echo "SYMPA_MAIN_CONF_DIR=$SYMPA_MAIN_CONF_DIR" >> $_log_file echo "SYMPA_BIN_DIR=$SYMPA_BIN_DIR" >> $_log_file +echo "SYMPA_PID_DIR=$SYMPA_PID_DIR" >> $_log_file +echo "SYMPA_CGI_DIR=$SYMPA_CGI_DIR" >> $_log_file +echo "SYMPA_LIBEXEC_DIR=$SYMPA_LIBEXEC_DIR" >> $_log_file +echo "SYMPA_STATIC_DIR=$SYMPA_STATIC_DIR" >> $_log_file echo "SYMPA_MANPATH=$SYMPA_MANPATH" >> $_log_file +echo "" >> $_log_file echo "SYMPA_LIST_DATA_DIR=$SYMPA_LIST_DATA_DIR" >> $_log_file +echo "SYMPA_LIST_DATA_BASE_PATH=$SYMPA_LIST_DATA_BASE_PATH" >> $_log_file +echo "SYMPA_LIST_DATA_ROOT_DIR=$SYMPA_LIST_DATA_ROOT_DIR" >> $_log_file +echo "SYMPA_LIST_DATA_SYMLINK=$SYMPA_LIST_DATA_SYMLINK" >> $_log_file +echo "" >> $_log_file echo "SYMPA_ALIAS_FILE=$SYMPA_ALIAS_FILE" >> $_log_file echo "" >> $_log_file echo "SYMPA_DOMAIN=$SYMPA_DOMAIN" >> $_log_file @@ -1446,10 +1548,11 @@ echo "SYMPA_DB_PORT=$SYMPA_DB_PORT" >> $_log_file echo "SYMPA_DB_NAME=$SYMPA_DB_NAME" >> $_log_file echo "SYMPA_DB_USER=$SYMPA_DB_USER" >> $_log_file echo "SYMPA_DB_PASSWD=$SYMPA_DB_PASSWD" >> $_log_file -if ! $UPDATE_SYMPA ; then - echo "START_AT_BOOTTIME=$START_AT_BOOTTIME" >> $_log_file -fi +echo "START_AT_BOOTTIME=$START_AT_BOOTTIME" >> $_log_file echo "SYMPA_INIT_DIR=$SYMPA_INIT_DIR" >> $_log_file +if $SYSTEMD_SUPPORTED ; then + echo "SYMPA_SYSTEMD_DIR=$SYMPA_SYSTEMD_DIR" >> $_log_file +fi echo "" >> $_log_file if ! $UPDATE_SYMPA ; then echo "apache_vhost_dir=$apache_vhost_dir" >> $_log_file @@ -1471,6 +1574,107 @@ echo "_logdir=$_logdir" >> $_log_file echo "" +if ! $UPDATE_SYMPA ; then + + ## - In case of a new fresh installation sympa main configuration file should + ## - not exists. But if so, backup existing configuration file + ## - + if [ -s "${SYMPA_MAIN_CONF_DIR}/sympa.conf" ]; then + warn "File \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\" is not empty, but this is an initial installation!" + echo "" >> $_log_file + echo "## - Backup configuration file '${SYMPA_MAIN_CONF_DIR}/sympa.conf now'.." >> $_log_file + echo "## -" >> $_log_file + echo "mv ${SYMPA_MAIN_CONF_DIR}/sympa.conf ${SYMPA_MAIN_CONF_DIR}/sympa.conf.$backup_date" >> $_log_file + echononl "\tBackup configuration file '${SYMPA_MAIN_CONF_DIR}/sympa.conf now'.." + mv "${SYMPA_MAIN_CONF_DIR}/sympa.conf" "${SYMPA_MAIN_CONF_DIR}/sympa.conf.$backup_date" + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Backup configuration file '${SYMPA_MAIN_CONF_DIR}/sympa.conf now' failed! \n + See '$_log_file' for further informations." + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + fi + + if [[ -f "${SYMPA_MAIN_CONF_DIR}/sympa.conf.bin" ]] ; then + echo "" >> $_log_file + echo "## - Remove file '${SYMPA_MAIN_CONF_DIR}/sympa.conf.bin'.." >> $_log_file + echo "## -" >> $_log_file + echo "rm ${SYMPA_MAIN_CONF_DIR}/sympa.conf.bin" >> $_log_file + echononl "\tRemove file '${SYMPA_MAIN_CONF_DIR}/sympa.conf.bin'.." + rm ${SYMPA_MAIN_CONF_DIR}/sympa.conf.bin + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Removing file '${SYMPA_MAIN_CONF_DIR}/sympa.conf.bin' failed! \n + See '$_log_file' for further informations." + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + fi + + ## - Also the database should be empty (created above). If not, backup the database + ## - and then empty it + ## - + if echo "$(mysql $mysql_credential_args -N -s -e "SHOW DATABASES";)" | grep -q "$SYMPA_DB_NAME" ; then + _tables=$(mysql $mysql_credential_args $SYMPA_DB_NAME -N -s -e 'SHOW TABLES' 2>/dev/null) + + if [[ -n "$_tables" ]]; then + warn "Database \"$SYMPA_DB_NAME\" exists AND contains tables, but this is an initial installation!" + + echo "" >> $_log_file + echo "## - Backup database non empty database '$SYMPA_DB_NAME'.." >> $_log_file + echo "## -" >> $_log_file + echo "mysqldump $mysql_credential_args --opt $SYMPA_DB_NAME > ${_src_base_dir}/${SYMPA_DB_NAME}-${backup_date}.sql" >> $_log_file + echononl "\tBackup database non empty database '$SYMPA_DB_NAME'.." + mysqldump $mysql_credential_args --opt $SYMPA_DB_NAME > ${_src_base_dir}/${SYMPA_DB_NAME}-${backup_date}.sql 2> $err_log + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + fatal "$(cat $err_log)" + fi + + + echo "" >> $_log_file + echo "## - Cleaning up (empty) database '$SYMPA_DB_NAME'.." >> $_log_file + echo "## -" >> $_log_file + cat <> $_log_file +for _table in $_tables ; do +mysql $mysql_credential_args $SYMPA_DB_NAME -N -s -e \"DROP TABLE \$_table\" 2> /dev/null +done +EOF + echononl "\tCleaning up (empty) database '$SYMPA_DB_NAME'.." + _failed=false + for _table in $_tables ; do + mysql $mysql_credential_args $SYMPA_DB_NAME -N -s -e "DROP TABLE $_table" 2> /dev/null + if [ "$?" != "0" ]; then + _failed=true + fi + done + if $_failed ; then + echo_failed + fatal "Cleaning up (empty)database \"$SYMPA_DB_NAME\" failed!" + else + echo_ok + fi + + fi + + fi + +fi + + + +## - Download Sympa sources.. ## - echo "" >> $_log_file echo "## - Change into base source directory \"$_src_base_dir\" .." >> $_log_file @@ -1524,15 +1728,11 @@ if ! $UPDATE_SYMPA ; then echo "" >> $_log_file echo "## - Adding User \"$SYMPA_USER\".." >> $_log_file echo "## -" >> $_log_file - echo "adduser --uid $SYMPA_UID --gid $SYMPA_GID --home $PREFIX --disabled-password \\" >> $_log_file + echo "adduser --uid $SYMPA_UID --gid $SYMPA_GID --home $SYMPA_BASE_PATH --disabled-password \\" >> $_log_file echo " --gecos \"Sympa mailing list manager\" $SYMPA_USER" >> $_log_file - adduser --uid $SYMPA_UID --gid $SYMPA_GID --home $PREFIX --disabled-password \ + adduser --uid $SYMPA_UID --gid $SYMPA_GID --home $SYMPA_BASE_PATH --disabled-password \ --gecos "Sympa mailing list manager" $SYMPA_USER >> $_log_file - #echo "adduser --system --home /usr/local/sympa --no-create-home --shell /bin/sh \\" >> $_log_file - #echo " --gid $SYMPA_GID --uid $SYMPA_UID --gecos \"Sympa mailing list manager\" $SYMPA_USER" >> $_log_file - #adduser --system --home /usr/local/sympa --no-create-home --shell /bin/sh \ - # --gid $SYMPA_GID --uid $SYMPA_UID --gecos "Sympa mailing list manager" $SYMPA_USER > $_log_file 2>&1 if [ "$?" = "0" ]; then echo_ok else @@ -1659,7 +1859,7 @@ if ! $UPDATE_SYMPA ; then done - ## - Install reqired/optional perl modules + ## - Install required/optional perl modules ## - declare -a cpan_modules_arr @@ -1798,8 +1998,46 @@ EOF else - # Stop apache webservice - ## + + ## - Disable crontab for user root + ## - + _crontab_found=false + echononl "\tBackup crontab (user root)" + echo "" >> $_log_file + echo "## - Backup crontab (user root)" >> $_log_file + echo "## - " >> $_log_file + echo "crontab -u root -l > $_CRONTAB_BAKUP_FILE" >> $_log_file + crontab -u root -l >> $_CRONTAB_BAKUP_FILE 2>> $_log_file + if [ "$?" = "0" ]; then + echo_ok + _crontab_found=true + else + if [[ ! -s "$_CRONTAB_BAKUP_FILE" ]] ; then + echo_skipped + warn "No crontab for user 'root'found." + else + echo_failed + error "Backup crontab failed" + fi + fi + + if $_crontab_found ; then + echononl "\tDisable crontab for user root" + echo "" >> $_log_file + echo "## - Disable crontab for user root" >> $_log_file + echo "## -" >> $_log_file + echo "crontab -r -u root" >> $_log_file + crontab -r -u root >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fi + fi + + + ## - Stop apache webservice + ## - HTTPD=`realpath $(which httpd) 2>/dev/null` if [ -z "$HTTPD" ]; then if [ -x "/usr/local/apache2/bin/httpd" ]; then @@ -1815,6 +2053,9 @@ else echononl "\tStopping Apache Webserver .." _PID=`ps aux | grep "$HTTPD " | grep -e "^root" | grep -v grep | awk '{print$2}'` if [ -n "$_PID" ];then + echo "" >> $_log_file + echo "## - Stopping Apache Webserver .." >> $_log_file + echo "## -" >> $_log_file if [[ -n "$APACHE_SERVICE_FILE" ]] ; then echo "systemctl stop $APACHE_SERVICE_FILE" >> $_log_file systemctl stop $APACHE_SERVICE_FILE >> $_log_file 2>&1 @@ -1853,7 +2094,7 @@ else ## - Stop Sympa list manager ## - echononl "\tStopping Sympa mailing list manager .." - if ps -e f | grep ${Prefix}/bin/sympa 2>/dev/null | grep -v grep > /dev/null 2>&1 ; then + if ps -e f | grep -E "${SYMPA_BASE_PATH}/s?bin/sympa" 2>/dev/null | grep -v grep > /dev/null 2>&1 ; then echo "" >> $_log_file echo "## - Stopping Sympa mailing list manager .." >> $_log_file echo "## -" >> $_log_file @@ -1883,7 +2124,7 @@ else fi sleep 5 - _PIDS=`ps -e f | grep ${PREFIX}/bin/ 2>/dev/null | grep -v grep | awk '{print$1}'` + _PIDS=`ps -e f | grep -E "${SYMPA_BASE_PATH}/s?bin/" 2>/dev/null | grep -v grep | awk '{print$1}'` if [ -n "$_PIDS" ]; then warn "Found running sympa processes. Going to kill them.." @@ -1892,51 +2133,185 @@ else done fi - echononl "\tBackup existing installation directory ($PREFIX) .." - echo "" >> $_log_file - echo "## - Backup existing installation directory ($PREFIX) .." >> $_log_file - echo "## -" >> $_log_file - echo "cp -a $PREFIX ${PREFIX}.${SYMPA_OLD_VERSION}.BAK.$backup_date" >> $_log_file - cp -a $PREFIX ${PREFIX}.${SYMPA_OLD_VERSION}.$backup_date >> $_log_file 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - error "Cannot Backup existing installation directory \"$PREFIX\"! \n - See '${_log_file}' for further informations." - _proceed="" - echononl "Type uppercase \"yes\" to proceed anyway: " - read _proceed - [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + ## --- + ## --- Handle Sympa's Installation Directory + ## --- + + if [[ "$CURRENT_INSTALL_DIR" = "$SYMPA_BASE_PATH" ]]; then + echo -e "\tMove current Installation ($CURRENT_INSTALL_DIR) to directory" + echononl "\t '${CURRENT_INSTALL_DIR}-${SYMPA_OLD_VERSION}' .." + echo "## - Move current Installation ($CURRENT_INSTALL_DIR) to directory" >> $_log_file + echo "## - '${CURRENT_INSTALL_DIR}-${SYMPA_OLD_VERSION}'.." >> $_log_file + echo "## -" >> $_log_file + echo "mv \"$CURRENT_INSTALL_DIR\" \"${CURRENT_INSTALL_DIR}-${SYMPA_OLD_VERSION}'\"" >> $_log_file + mv "$CURRENT_INSTALL_DIR" "${CURRENT_INSTALL_DIR}-${SYMPA_OLD_VERSION}" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot move directory \"$CURRENT_INSTALL_DIR\" to \"${CURRENT_INSTALL_DIR}-${SYMPA_OLD_VERSION}\"! \n + See '${_log_file}' for further informations." + + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + CURRENT_INSTALL_DIR="${CURRENT_INSTALL_DIR}-${SYMPA_OLD_VERSION}" + fi + + + if [[ "$SYMPA_OLD_VERSION" = "$SYMPA_VERSION" ]]; then + echononl "\tBackup current Installation ($CURRENT_INSTALL_DIR).." + echo "## - Backup current Installation ($CURRENT_INSTALL_DIR).." >> $_log_file + echo "## -" >> $_log_file + echo "cp -a \"${CURRENT_INSTALL_DIR}\" \"${CURRENT_INSTALL_DIR}.$backup_date\"" >> $_log_file + cp -a "${CURRENT_INSTALL_DIR}" "${CURRENT_INSTALL_DIR}.$backup_date" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Backup current Installation \"$CURRENT_INSTALL_DIR\"! \n + See '${_log_file}' for further informations." + + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + fi + + # - Copy (hardlink) old Installation directory into tne new one + # - + echo -e "\tCopy (hardlink) '${CURRENT_INSTALL_DIR}' to directory" + echononl "\t '$SYMPA_INSTALL_DIR'.." + if [[ "$SYMPA_INSTALL_DIR" = "$SYMPA_INSTALL_DIR" ]]; then + echo_skipped + else + echo "## - Copy (hardlink) '${CURRENT_INSTALL_DIR}' to directory" >> $_log_file + echo "## - '$SYMPA_INSTALL_DIR'.." >> $_log_file + echo "## -" >> $_log_file + echo "cp -al \"${CURRENT_INSTALL_DIR}\" \"$SYMPA_INSTALL_DIR\"" >> $_log_file + cp -al "${CURRENT_INSTALL_DIR}" "$SYMPA_INSTALL_DIR" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot copy (hardlink) \"$CURRENT_INSTALL_DIR\" to \"${SYMPA_INSTALL_DIR}'\"! \n + See '${_log_file}' for further informations." + + echo "" + echononl "\tType \"yes\" to proceed 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 + echo "" + fi fi - echononl "\tBackup existing list directory ($SYMPA_LIST_DATA_DIR) .." - echo "" >> $_log_file - echo "## - Backup existing list directory ($SYMPA_LIST_DATA_DIR) .." >> $_log_file - echo "## -" >> $_log_file - echo "cp -a $SYMPA_LIST_DATA_DIR ${SYMPA_LIST_DATA_DIR}.$backup_date" >> $_log_file - cp -a $SYMPA_LIST_DATA_DIR ${SYMPA_LIST_DATA_DIR}.$backup_date >> $_log_file 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - error "Cannot Backup existing lists data directory \"$PREFIX\"! \n - See '${_log_file}' for further informations." + echo "" - _proceed="" - echononl "Type uppercase \"yes\" to proceed anyway: " - read _proceed - [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + + ## --- + ## --- Handle Sympa's List Data Directory + ## --- + + if [[ "$CURRENT_SYMPA_LIST_DATA_BASE_PATH" = "$SYMPA_LIST_DATA_SYMLINK" ]]; then + echo -e "\tMove current data base directory ($CURRENT_SYMPA_LIST_DATA_BASE_PATH) to directory" + echononl "\t '${CURRENT_SYMPA_LIST_DATA_BASE_PATH}-${SYMPA_OLD_VERSION}' .." + echo "## - Move current data base directory ($CURRENT_SYMPA_LIST_DATA_BASE_PATH) to directory" >> $_log_file + echo "## - '${CURRENT_SYMPA_LIST_DATA_BASE_PATH}-${SYMPA_OLD_VERSION}'.." >> $_log_file + echo "## -" >> $_log_file + echo "mv \"$CURRENT_SYMPA_LIST_DATA_BASE_PATH\" \"${CURRENT_SYMPA_LIST_DATA_BASE_PATH}-${SYMPA_OLD_VERSION}'\"" >> $_log_file + mv "$CURRENT_SYMPA_LIST_DATA_BASE_PATH" "${CURRENT_SYMPA_LIST_DATA_BASE_PATH}-${SYMPA_OLD_VERSION}" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot move data base directory \"$CURRENT_SYMPA_LIST_DATA_BASE_PATH\" to \"${CURRENT_SYMPA_LIST_DATA_BASE_PATH}-${SYMPA_OLD_VERSION}\"! \n + See '${_log_file}' for further informations." + + _proceed="" + echononl "\tType uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + echo "" + fi + CURRENT_SYMPA_LIST_DATA_BASE_PATH="${CURRENT_SYMPA_LIST_DATA_BASE_PATH}-${SYMPA_OLD_VERSION}" fi + if [[ "$SYMPA_OLD_VERSION" = "$SYMPA_VERSION" ]]; then + echononl "\tBackup current data base directory ($CURRENT_SYMPA_LIST_DATA_BASE_PATH).." + echo "## - Backup current data base directory ($CURRENT_SYMPA_LIST_DATA_BASE_PATH).." >> $_log_file + echo "## -" >> $_log_file + echo "cp -a \"${CURRENT_SYMPA_LIST_DATA_BASE_PATH}\" \"${CURRENT_SYMPA_LIST_DATA_BASE_PATH}.$backup_date\"" >> $_log_file + cp -a "${CURRENT_SYMPA_LIST_DATA_BASE_PATH}" "${CURRENT_SYMPA_LIST_DATA_BASE_PATH}.$backup_date" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Backup current data base directory \"$CURRENT_SYMPA_LIST_DATA_BASE_PATH\"! \n + See '${_log_file}' for further informations." + + _proceed="" + echononl "\tType uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + echo "" + fi + fi + + # - Copy (hardlink) old Data directory into tne new one + # - + echo -e "\tCopy (hardlink) '${CURRENT_SYMPA_LIST_DATA_BASE_PATH}' to directory" + echononl "\t '$SYMPA_LIST_DATA_BASE_PATH'.." + if [[ "${CURRENT_SYMPA_LIST_DATA_BASE_PATH}" = "$SYMPA_LIST_DATA_BASE_PATH" ]]; then + echo_skipped + else + echo "## - Copy (hardlink) '${CURRENT_SYMPA_LIST_DATA_BASE_PATH}' to directory" >> $_log_file + echo "## - '$SYMPA_LIST_DATA_BASE_PATH'.." >> $_log_file + echo "## -" >> $_log_file + echo "cp -al \"${CURRENT_SYMPA_LIST_DATA_BASE_PATH}\" \"$SYMPA_LIST_DATA_BASE_PATH\"" >> $_log_file + cp -al "${CURRENT_SYMPA_LIST_DATA_BASE_PATH}" "$SYMPA_LIST_DATA_BASE_PATH" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot copy (hardlink) \"$CURRENT_SYMPA_LIST_DATA_BASE_PATH\" to \"${SYMPA_LIST_DATA_BASE_PATH}'\"! \n + See '${_log_file}' for further informations." + + echo "" + echononl "\tType \"yes\" to proceed 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 + echo "" + fi + fi + + echo "" + + + ## --- + ## --- Handle Sympa's Database + ## --- + + # - Backup Sympa's database + # - if [ "$SYMPA_DB_TYPE" == "mysql" ]; then echononl "\tDump Database \"$SYMPA_DB_NAME\" .." echo "" >> $_log_file echo "## - Dump Database \"$SYMPA_DB_NAME\" .." >> $_log_file echo "## -" >> $_log_file - echo "mysqldump -h $SYMPA_DB_HOST -u $SYMPA_DB_USER -p$SYMPA_DB_PASSWD --opt $SYMPA_DB_NAME > $(dirname ${PREFIX})/${SYMPA_DB_NAME}.${SYMPA_OLD_VERSION}.${backup_date}.sql" >> $_log_file - mysqldump -h $SYMPA_DB_HOST -u $SYMPA_DB_USER -p$SYMPA_DB_PASSWD --opt $SYMPA_DB_NAME > $(dirname ${PREFIX})/${SYMPA_DB_NAME}.${SYMPA_OLD_VERSION}.${backup_date}.sql 2>> $_log_file + echo "mysqldump -h $SYMPA_DB_HOST -u $SYMPA_DB_USER -p$SYMPA_DB_PASSWD --opt $SYMPA_DB_NAME > $(dirname ${SYMPA_BASE_PATH})/${SYMPA_DB_NAME}.${SYMPA_OLD_VERSION}.${backup_date}.sql" >> $_log_file + mysqldump -h $SYMPA_DB_HOST -u $SYMPA_DB_USER -p$SYMPA_DB_PASSWD --opt $SYMPA_DB_NAME > $(dirname ${SYMPA_BASE_PATH})/${SYMPA_DB_NAME}.${SYMPA_OLD_VERSION}.${backup_date}.sql 2>> $_log_file if [ "$?" = "0" ]; then echo_ok else @@ -1957,23 +2332,147 @@ else [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." fi - echononl "\tBackup existing init script .." - echo "" >> $_log_file - echo "## - Backup existing init script .." >> $_log_file - echo "## -" >> $_log_file - echo "cp -a ${SYMPA_INIT_DIR}/sympa ${SYMPA_INIT_DIR}/sympa.$backup_date" >> $_log_file - cp -a ${SYMPA_INIT_DIR}/sympa ${SYMPA_INIT_DIR}/sympa.$backup_date >> $_log_file 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - error "Cannot Backup existing init script \"${SYMPA_INIT_DIR}/sympa\"! \n - See '${_log_file}' for further informations." + echo "" - _proceed="" - echononl "Type uppercase \"yes\" to proceed anyway: " - read _proceed - [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + + ## --- + ## --- Handle Sympa's SysV init script + ## --- + + # - Backup init script if exists + # - + echononl "\tBackup existing init script .." + if [[ -f "${SYMPA_INIT_DIR}/sympa" ]]; then + echo "" >> $_log_file + echo "## - Backup existing init script .." >> $_log_file + echo "## -" >> $_log_file + echo "cp -a ${SYMPA_INIT_DIR}/sympa ${SYMPA_INIT_DIR}/sympa.$backup_date" >> $_log_file + cp -a ${SYMPA_INIT_DIR}/sympa ${SYMPA_INIT_DIR}/sympa.$backup_date >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot Backup existing init script \"${SYMPA_INIT_DIR}/sympa\"! \n + See '${_log_file}' for further informations." + + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + else + echo_skipped + fi + + # - Disable init script + # - + echononl "\tDisable init script.." + if [[ -f "${SYMPA_INIT_DIR}/sympa" ]]; then + echo "" >> $_log_file + echo "## - Disable init script '${SYMPA_INIT_DIR}/sympa'.." >> $_log_file + echo "## -" >> $_log_file + echo "update-rc.d -f sympa remove" >> $_log_file + update-rc.d -f sympa remove >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot disable init script \"${SYMPA_INIT_DIR}/sympa\"! \n + See '${_log_file}' for further informations." + + _proceed="" + echononl "Type uppercase \"yes\" to proceed anyway: " + read _proceed + [[ "$_proceed" == "YES" ]] || fatal "Exiting by user request.." + fi + else + echo_skipped + fi + + # - Delete existing init script + # - + echononl "\tRemove init script if exists" + if [[ -f "${SYMPA_INIT_DIR}/sympa" ]]; then + echo "" >> $_log_file + echo "## - Remove init script '${SYMPA_INIT_DIR}/sympa'.." >> $_log_file + echo "## -" >> $_log_file + echo "rm ${SYMPA_INIT_DIR}/sympa" >> $_log_file + rm "${SYMPA_INIT_DIR}/sympa" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot remove init script \"${SYMPA_INIT_DIR}/sympa\"! \n + See '${_log_file}' for further informations." + + fi + else + echo_skipped + fi + + echo "" + + + ## --- + ## --- Handle Sympa's Systemd unit files + ## --- + + # - Disable Services + # - + _service_files="sympa.service wwsympa.service" + for _service_file in $_service_files ; do + echononl "\tDisable unit file '$_service_file'.." + if [[ -f "${SYMPA_SYSTEMD_DIR}/$_service_file" ]]; then + echo "" >> $_log_file + echo "## - Disable unit file '$_service_file'.." >> $_log_file + echo "## -" >> $_log_file + echo "systemctl disable $_service_file" >> $_log_file + systemctl disable $_service_file >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + + echononl "\tRemove unit file '$_service_file'.." + echo "" >> $_log_file + echo "## - Remove unit file '$_service_file'.." >> $_log_file + echo "## -" >> $_log_file + echo "rm ${SYMPA_SYSTEMD_DIR}/$_service_file" >> $_log_file + rm ${SYMPA_SYSTEMD_DIR}/$_service_file >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot remove unit file \"${SYMPA_INIT_DIR}/$_service_file\"! \n + See '${_log_file}' for further informations." + + fi + else + echo_failed + error "Cannot disable unit file '$_service_file'! \n + See '${_log_file}' for further informations." + fi + else + echo_skipped + fi + + done + + # - Delete Systemd unit files + # - + if ls ${SYMPA_SYSTEMD_DIR}/sympa-*.service > /dev/null 2>&1 ; then + echononl "\tRemove services files 'sympa-*.services'.." + echo "" >> $_log_file + echo "## - Remove unit files 'sympa-*.services'" >> $_log_file + echo "## -" >> $_log_file + echo "rm ${SYMPA_SYSTEMD_DIR}/sympa-*.service" >> $_log_file + rm ${SYMPA_SYSTEMD_DIR}/sympa-*.service >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Cannot remove services files 'sympa-*.service'! \n + See '${_log_file}' for further informations." + + fi fi fi @@ -2048,14 +2547,26 @@ echo "## - See ${_logdir}/sympa-configure.log for more details" >> $_log_file echo "## -" >> $_log_file echononl "\tConfiguring sympa-${SYMPA_VERSION} .." -config_params=" --prefix=$PREFIX - --with-initdir=$SYMPA_INIT_DIR +config_params=" + --enable-fhs=$ENABLE_FHS + --prefix=$SYMPA_INSTALL_DIR" + +if $SYSTEMD_SUPPORTED ; then + config_params="$config_params + --without-initdir + --with-unitsdir=$SYMPA_SYSTEMD_DIR" +else + config_params="$config_params + --with-initdir=$SYMPA_INIT_DIR" +fi +config_params="$config_params --with-confdir=$SYMPA_MAIN_CONF_DIR --with-expldir=$SYMPA_LIST_DATA_DIR --with-aliases_file=$SYMPA_ALIAS_FILE --with-user=$SYMPA_USER --with-group=$SYMPA_GROUP" + cat << EOF >> $_log_file LDFLAGS="-s" \\ ./configure $config_params > ${_logdir}/sympa-configure.log 2>&1 @@ -2090,17 +2601,16 @@ fi ## - Notice! ## - -## - In case of Updating an existent installation, we have already backuped the -## - installatio directory. +## - In case of a new fresh installation, this directory should not exists. ## - if ! $UPDATE_SYMPA ; then echononl "\tBackup existing installation directory.." - if [ -d "$PREFIX" ];then + if [[ -d "$SYMPA_BASE_PATH" ]];then echo "" >> $_log_file echo "## - Backup existing installation directory.." >> $_log_file echo "## -" >> $_log_file - echo "mv $PREFIX $PREFIX.$backup_date" >> $_log_file - mv $PREFIX $PREFIX.$backup_date >> $_log_file 2>&1 + echo "mv $SYMPA_BASE_PATH ${SYMPA_BASE_PATH}.$backup_date" >> $_log_file + mv $"SYMPA_BASE_PATH" "${SYMPA_BASE_PATH}.$backup_date" >> $_log_file 2>&1 if [ "$?" = "0" ]; then echo_ok else @@ -2113,37 +2623,328 @@ if ! $UPDATE_SYMPA ; then fi fi -if $UPDATE_SYMPA ; then +#if $UPDATE_SYMPA ; then +# +# _successfully=true +# info "Sorry, but you have to install files in an seperate terminal.\n\t After finished, continue with this script." +# echo -e "\tType:" +# echo -e "\t cd $_builddir" +# echo -e "\t make install " +# echo "" +# echononl "Was the installation sucessfully? [yes/no]: " +# read OK +# while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "XNo" -a "X$OK" != "Xno" ] +# do +# echononl "wrong entry! [yes/no] :" +# read OK +# done +# [ $OK = "Yes" -o $OK = "yes" ] || _successfully=false +# echo "" +# +# if ! $_successfully ; then +# echononl "\tInstall previous sympa init script" +# echo_skipped +# echononl "\tReorganize Database.." +# echo_skipped +# echononl "\tRestore Sympa's Installation Directory" +# echo_skipped +# echononl "\tRestore Sympa's List Data Directory" +# echo_skipped +# warn "Moving back to previous installation not yet implemented!" +# fatal "Exiting: Installation was not successfully!" +# fi +# +# if $SYSTEMD_SUPPORTED ; then +# echononl "\tReload systemd configuration.." +# echo "" >> $_log_file +# echo "## - Reload systemd configuration.." >> $_log_file +# echo "## -" >> $_log_file +# echo "systemctl daemon-reload" >> $_log_file +# systemctl daemon-reload >> $_log_file 2>&1 +# if [ "$?" = "0" ]; then +# echo_ok +# else +# echo_failed +# error "Reloading systemd configuration failed! \n +# See '${_log_file}' for further informations." +# fi +# fi +# +#else + echo "" >> $_log_file + echo "## - Install Sympa mailing list server (v ${SYMPA_VERSION}) .." >> $_log_file + echo "## -" >> $_log_file + echo "## - See ${_logdir}/sympa-make_install.log for more details" >> $_log_file + echo "## -" >> $_log_file + echo "make install > ${_logdir}/sympa-make_install.log 2>&1" >> $_log_file + echononl "\tInstall Sympa mailing list server.." + make install > ${_logdir}/sympa-make_install.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Installing Sympa mailing list server (v ${SYMPA_VERSION}) failed! \n + See '${_logdir}/sympa-make_install.log' for further informations." + echo "" + 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 + echo "" + fi +#fi - _successfully=true - info "Sorry, but you have to install files in an seperate terminal.\n\t After finished, continue with this script." - echo -e "\tType:" - echo -e "\t cd $_builddir" - echo -e "\t make install " - echo "" - echononl "Was the installation sucessfully? [yes/no]: " + +echo "" >> $_log_file +echo "## - Install (or upgrade) required and recommended dependent modules.." >> $_log_file +echo "## -" >> $_log_file +echo "cd ${_builddir}" >> $_log_file +echo "cpanm --installdeps --with-recommends ." >> $_log_file +echononl "\tIinstall (or upgrade) required and recommended dependent modules.." +cd ${_builddir} >> $_log_file 2>&1 +cpanm --installdeps --with-recommends . >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error "Installation of required and recommended dependent modules failed! \n + See '$_log_file' for further informations." + echononl "\tcontinue anyway [yes/no]: " read OK - while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "XNo" -a "X$OK" != "Xno" ] - do - echononl "wrong entry! [yes/no] :" + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/no]: " read OK done - [ $OK = "Yes" -o $OK = "yes" ] || _successfully=false - echo "" + [[ $OK = "yes" ]] || fatal "Abbruch durch User" + echo "" +fi + + +if [[ -f "${_builddir}/src/etc/script/wwsympa.service" ]]; then + + # - Copy wwsympa.service systemd unit file to SYMPA_SYSTEMD_DIR + # - + echo "" >> $_log_file + echo "## - Copy 'wwsympa.service' to '${SYMPA_SYSTEMD_DIR}'.." >> $_log_file + echo "## -" >> $_log_file + echo "cp \"${_builddir}/src/etc/script/wwsympa.service\" \"${SYMPA_SYSTEMD_DIR}\"" >> $_log_file + echononl "\tCopy 'wwsympa.service' to '${SYMPA_SYSTEMD_DIR}'.." + cp "${_builddir}/src/etc/script/wwsympa.service" "${SYMPA_SYSTEMD_DIR}" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Copying 'wwsympa.service' to '${SYMPA_SYSTEMD_DIR}' failed! \n + See '$_log_file' for further informations." + 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" - if ! $_successfully ; then - echononl "\tInstall previous sympa init script" - echo_skipped - echononl "\tReorganize Database.." - echo_skipped - echononl "\tRestore Sympa's Installation Directory" - echo_skipped - echononl "\tRestore Sympa's List Data Directory" - echo_skipped - warn "Moving back to previous installation not yet implemented!" - fatal "Exiting: Installation was not successfully!" fi + # - Adjust unit file wwsympa.service + # - + _failed=false + echononl "\tAdjust unit file 'wwsympa.service'.." + echo "## - Adjust unit file 'wwsympa.service'.." >> $_log_file + echo "## -" >> $_log_file + echo "perl -i -n -p -e \"s/^(.*)\\\"FCGI_OPTS=.*$/\\1\\\"FCGI_OPTS=-M 0600 -U $HTTPD_USER\\\"/\" ${SYMPA_SYSTEMD_DIR}/wwsympa.service" >> $_log_file + perl -i -n -p -e "s/^(.*)\"FCGI_OPTS=.*$/\1\"FCGI_OPTS=-M 0600 -U $HTTPD_USER\"/" ${SYMPA_SYSTEMD_DIR}/wwsympa.service >> $_log_file 2>&1 + if [[ "$?" != 0 ]]; then + _failed=true + fi + echo "perl -i -n -p -e \"s/sympa-${SYMPA_VERSION}/sympa/\" ${SYMPA_SYSTEMD_DIR}/wwsympa.service" >> $_log_file + perl -i -n -p -e "s/sympa-${SYMPA_VERSION}/sympa/g" ${SYMPA_SYSTEMD_DIR}/wwsympa.service >> $_log_file 2>&1 + if [[ "$?" != 0 ]]; then + _failed=true + fi + if ! $_failed ; then + echo_ok + else + echo_failed + error "Adjusting '${SYMPA_SYSTEMD_DIR}/wwsympa.service' failed! \n + See '$_log_file' for further informations." + 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 + +# - Adjust unit files sympa*.service +# - +echononl "\tAdjust unit files 'sympa*.service'.." +echo "## - Adjust unit file 'sympa*.service'.." >> $_log_file +echo "## -" >> $_log_file +echo "perl -i -n -p -e \"s/sympa-${SYMPA_VERSION}/sympa/\" ${SYMPA_SYSTEMD_DIR}/sympa*.service" >> $_log_file +perl -i -n -p -e "s/sympa-${SYMPA_VERSION}/sympa/g" ${SYMPA_SYSTEMD_DIR}/sympa*.service >> $_log_file 2>&1 +if [[ $? = 0 ]] ; then + echo_ok +else + echo_failed + error "Adjusting unit files '${SYMPA_SYSTEMD_DIR}/sympa*.service' failed! \n + See '$_log_file' for further informations." + 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 + + +# - systemd: reload daemon +# - +echo "" >> $_log_file +echo "## - Reload systemd.." >> $_log_file +echo "## -" >> $_log_file +echo "systemctl daemon-reload" >> $_log_file +echononl "\tReload systemd.." +systemctl daemon-reload >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error "Reloading systemd failed! \n + See '$_log_file' for further informations." + 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 + + +# - Create Symlink $SYMPA_BASE_PATH --> $SYMPA_INSTALL_DIR +# - +echononl "\tRemove existing symlink '$SYMPA_BASE_PATH'.." +if [[ -h "$SYMPA_BASE_PATH" ]] ; then + echo "" >> $_log_file + echo "## - Remove existing symlink '$SYMPA_BASE_PATH'.." >> $_log_file + echo "## -" >> $_log_file + echo "rm \"$SYMPA_BASE_PATH\"" >> $_log_file + rm "$SYMPA_BASE_PATH" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Removing symlink '$SYMPA_BASE_PATH' failed! \n + See '$_log_file' for further informations." + 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" + echo "" + fi +else + echo_skipped +fi + +echononl "\tCreate Symlink $SYMPA_BASE_PATH --> $SYMPA_INSTALL_DIR" +echo "" >> $_log_file +echo "## - Create Symlink $SYMPA_BASE_PATH --> $SYMPA_INSTALL_DIR.." >> $_log_file +echo "## -" >> $_log_file +echo "ln -s \"$(basename $SYMPA_INSTALL_DIR)\" \"$SYMPA_BASE_PATH\"" >> $_log_file +ln -s "$(basename $SYMPA_INSTALL_DIR)" "$SYMPA_BASE_PATH" >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error "Creating symlink '$SYMPA_BASE_PATH' failed! \n + See '$_log_file' for further informations." + 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 + + +# - Create Symlink $SYMPA_LIST_DATA_SYMLINK --> $SYMPA_LIST_DATA_BASE_PATH +# - +echononl "\tRemove existing symlink '$SYMPA_LIST_DATA_SYMLINK'.." +if [[ -h "$SYMPA_LIST_DATA_SYMLINK" ]] ; then + echo "" >> $_log_file + echo "## - Remove existing symlink '$SYMPA_LIST_DATA_SYMLINK'.." >> $_log_file + echo "## -" >> $_log_file + echo "rm \"$SYMPA_LIST_DATA_SYMLINK\"" >> $_log_file + rm "$SYMPA_LIST_DATA_SYMLINK" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Removing symlink '$SYMPA_LIST_DATA_SYMLINK' failed! \n + See '$_log_file' for further informations." + echononl "\tcontinue 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" + echo "" + fi +else + echo_skipped +fi + +echononl "\tCreate Symlink $SYMPA_LIST_DATA_SYMLINK --> $SYMPA_LIST_DATA_BASE_PATH" +echo "" >> $_log_file +echo "## - Create Symlink $SYMPA_LIST_DATA_SYMLINK --> $SYMPA_LIST_DATA_BASE_PATH.." >> $_log_file +echo "## -" >> $_log_file +echo "ln -s \"$(basename $SYMPA_LIST_DATA_BASE_PATH)\" \"$SYMPA_LIST_DATA_SYMLINK\"" >> $_log_file +ln -s "$(basename $SYMPA_LIST_DATA_BASE_PATH)" "$SYMPA_LIST_DATA_SYMLINK" >> $_log_file 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error "Creating symlink '$SYMPA_LIST_DATA_SYMLINK' failed! \n + See '$_log_file' for further informations." + 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 + +# - Update also Databse if in update mode +# - +if $UPDATE_SYMPA ; then + echononl "\tPerform DB changes an updates of the the configuration files.." echo "" >> $_log_file echo "## - Perform DB changes an updates of the the configuration files if required." >> $_log_file @@ -2167,41 +2968,9 @@ if $UPDATE_SYMPA ; then [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi - - if $SYSTEMD_SUPPORTED ; then - echononl "\tReload systemd configuration.." - echo "" >> $_log_file - echo "## - Reload systemd configuration.." >> $_log_file - echo "## -" >> $_log_file - echo "systemctl daemon-reload" >> $_log_file - systemctl daemon-reload >> $_log_file 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - error "Reloading systemd configuration failed! \n - See '${_log_file}' for further informations." - fi - fi - -else - echo "" >> $_log_file - echo "## - Install Sympa mailing list server (v ${SYMPA_VERSION}) .." >> $_log_file - echo "## -" >> $_log_file - echo "## - See ${_logdir}/sympa-make_install.log for more details" >> $_log_file - echo "## -" >> $_log_file - echo "make install > ${_logdir}/sympa-make_install.log 2>&1" >> $_log_file - echononl "\tInstall Sympa mailing list server.." - make install > ${_logdir}/sympa-make_install.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - fatal "Installing Sympa mailing list server (v ${SYMPA_VERSION}) failed! \n - See '${_logdir}/sympa-make_install.log' for further informations." - fi fi + echo "" echo -e "\t---" echo -e "\t--- Configure Sympa mailing list manager (base configuration)" @@ -2505,6 +3274,31 @@ EOF fi +## - Replace 'sympa-${SYMPA_VERSION}' with 'sympa'.. +## - +echononl "\t${SYMPA_MAIN_CONF_DIR}/sympa.conf: Repace 'sympa-${SYMPA_VERSION}' with 'sympa'.." +echo "" >> $_log_file +echo "## - Replace 'sympa-${SYMPA_VERSION}' with 'sympa'.." >> $_log_file +echo "## -" >> $_log_file +echo "perl -i -n -p -e \"s/sympa-${SYMPA_VERSION}/sympa/g\" \"${SYMPA_MAIN_CONF_DIR}/sympa.conf\"" >> $_log_file +perl -i -n -p -e "s/sympa-${SYMPA_VERSION}/sympa/g" "${SYMPA_MAIN_CONF_DIR}/sympa.conf" >> $_log_file 2>&1 +if [[ $? = 0 ]]; then + echo_ok +else + echo_failed + error "Adjusting file '${SYMPA_MAIN_CONF_DIR}/sympa.conf'. \n + See '$_log_file' for further informations." + echononl "\tcontinue 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" + echo "" +fi + echo echo -e "\t---" echo -e "\t--- Some after installation tasks" @@ -2522,17 +3316,19 @@ echo"" >> $_log_file _backup_sympa_initscript=`mktemp` _failed=false -echo "" >> $_log_file -echo "## - Priovide LSB - Add Block for run-time dependencies to /etc/init.d/sympa .." >> $_log_file -echo "## -" >> $_log_file -echononl "\tAdd Block for run-time dependencies to /etc/init.d/sympa .." -echo "cp /etc/init.d/sympa $_backup_sympa_initscript" >> $_log_file -cp /etc/init.d/sympa $_backup_sympa_initscript >> $_log_file 2>&1 -if [ "$?" != "0" ]; then - _failed=true -fi -echo "cat << EOF > /etc/init.d/sympa +if [[ -f "${SYMPA_INIT_DIR}/sympa" ]] ; then + echo "" >> $_log_file + echo "## - Priovide LSB - Add Block for run-time dependencies to /etc/init.d/sympa .." >> $_log_file + echo "## -" >> $_log_file + + echononl "\tAdd Block for run-time dependencies to ${SYMPA_INIT_DIR}/sympa .." + echo "cp ${SYMPA_INIT_DIR}/sympa $_backup_sympa_initscript" >> $_log_file + cp ${SYMPA_INIT_DIR}/sympa $_backup_sympa_initscript >> $_log_file 2>&1 + if [ "$?" != "0" ]; then + _failed=true + fi + echo "cat << EOF > ${SYMPA_INIT_DIR}/sympa #!/bin/sh ### BEGIN INIT INFO @@ -2550,7 +3346,7 @@ echo "cat << EOF > /etc/init.d/sympa export PERL5LIB=/usr/share/mhonarc EOF" >> $_log_file -cat << EOF > /etc/init.d/sympa 2>> $_log_file + cat << EOF > ${SYMPA_INIT_DIR}/sympa 2>> $_log_file #!/bin/sh ### BEGIN INIT INFO @@ -2568,83 +3364,108 @@ cat << EOF > /etc/init.d/sympa 2>> $_log_file export PERL5LIB=/usr/share/mhonarc EOF -if [ "$?" != "0" ]; then - _failed=true -fi + if [ "$?" != "0" ]; then + _failed=true + fi -echo "tail -n +2 "$_backup_sympa_initscript" >> /etc/init.d/sympa" >> $_log_file -tail -n +2 "$_backup_sympa_initscript" >> /etc/init.d/sympa 2>> $_log_file -if [ "$?" != "0" ]; then - _failed=true -fi + echo "tail -n +2 "$_backup_sympa_initscript" >> /etc/init.d/sympa" >> $_log_file + tail -n +2 "$_backup_sympa_initscript" >> /etc/init.d/sympa 2>> $_log_file + if [ "$?" != "0" ]; then + _failed=true + fi -echo "rm $_backup_sympa_initscript" >> $_log_file -rm $_backup_sympa_initscript >> $_log_file 2>&1 -if [ "$?" != "0" ]; then - _failed=true -fi -if $_failed ; then - echo_failed - error "Adding Block for run-time dependencies to /etc/init.d/sympa failed! \n - See '${_log_file}' for further informations." -else - echo_ok -fi + echo "rm $_backup_sympa_initscript" >> $_log_file + rm $_backup_sympa_initscript >> $_log_file 2>&1 + if [ "$?" != "0" ]; then + _failed=true + fi + if $_failed ; then + echo_failed + error "Adding Block for run-time dependencies to /etc/init.d/sympa failed! \n + See '${_log_file}' for further informations." + else + echo_ok + fi +fi # if [[ -f "${SYMPA_INIT_DIR}/sympa" ]] -if ! $UPDATE_SYMPA ; then - if $START_AT_BOOTTIME ; then +if $START_AT_BOOTTIME ; then - if `ls /etc/rc2.d/ | grep sympa > /dev/null 2>&1` ; then - echononl "\tRemove init script links" - echo "" >> $_log_file - echo "## - Remove init script links" >> $_log_file - echo "## -" >> $_log_file - echo "update-rc.d -f sympa remove" >> $_log_file + # - Normaly, this should be already done - its duplicated code + # - + if `ls /etc/rc2.d/ | grep sympa > /dev/null 2>&1` ; then + echononl "\tRemove init script links" + echo "" >> $_log_file + echo "## - Remove init script links" >> $_log_file + echo "## -" >> $_log_file + echo "update-rc.d -f sympa remove" >> $_log_file - update-rc.d -f sympa remove >> $_log_file 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - warn "Removing existing init script links failed! \n - See '${_log_file}' for further informations." - fi + update-rc.d -f sympa remove >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + warn "Removing existing init script links failed! \n + See '${_log_file}' for further informations." + fi + fi + + ## - Make Sympa mailing list manager start at boottime + ## - + if $SYSTEMD_SUPPORTED ; then + + # - Sympa service + # - + echo "" >> $_log_file + echo "## - Eanbles sympa.service" >> $_log_file + echo "## -" >> $_log_file + echononl "\tEanbles sympa.service" + echo "systemctl enable sympa.service" >> $_log_file + systemctl enable sympa.service >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Create file /etc/systemd/system/sympa.service failed! \n + See '${_log_file}' for further informations." fi - ## - Make Sympa mailing list manager start at boottime - ## - - if $SYSTEMD_SUPPORTED ; then - + # - Sympa Webservice + # - + echononl "\tEanble wwsympa.service" + if [[ -f "${SYMPA_SYSTEMD_DIR}/wwsympa.service" ]]; then echo "" >> $_log_file - echo "## - Eanbles sympa.service" >> $_log_file + echo "## - Eanble wwsympa.service" >> $_log_file echo "## -" >> $_log_file - echononl "\tEanbles sympa.service" - echo "systemctl enable sympa" >> $_log_file - systemctl enable sympa >> $_log_file 2>&1 + echo "systemctl enable wwsympa.service" >> $_log_file + systemctl enable wwsympa.service >> $_log_file 2>&1 if [ "$?" = "0" ]; then echo_ok else echo_failed - error "Create file /etc/systemd/system/sympa.service failed! \n - See '${_log_file}' for further informations." + error "Enabling wwsympa.service failed! \n + See '${_log_file}' for further informations." fi else - echononl "\tMake Sympa mailing list manager at boottime" - echo "" >> $_log_file - echo "## - Make Sympa mailing list manager at boottime" >> $_log_file - echo "## -" >> $_log_file - echo "update-rc.d sympa defaults" >> $_log_file - update-rc.d sympa defaults >> $_log_file 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - error "Making sympa start at boottime failed! \n - See '${_log_file}' for further informations." - fi - fi # if $SYSTEMD_SUPPORTED - fi # if START_AT_BOOTTIME -fi # if $UPDATE_SYMPA + echo_skipped + warn "Service wwsympa.service NOT available" + fi + + else + echononl "\tMake Sympa mailing list manager at boottime" + echo "" >> $_log_file + echo "## - Make Sympa mailing list manager at boottime" >> $_log_file + echo "## -" >> $_log_file + echo "update-rc.d sympa defaults" >> $_log_file + update-rc.d sympa defaults >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Making sympa start at boottime failed! \n + See '${_log_file}' for further informations." + fi + fi # if $SYSTEMD_SUPPORTED +fi # if START_AT_BOOTTIME ## - special for debian. set manpath entries @@ -2687,9 +3508,9 @@ elif [ -f /etc/man.conf];then fi fi -## - Add ${PREFIX}/bin to the systems PATH variable +## - Add $SYMPA_BIN_DIR to the systems PATH variable ## - -_checkdir="${PREFIX}/bin" +_checkdir="$SYMPA_BIN_DIR" if [ -f /etc/profile ]; then echononl "\tAdd $_checkdir to the systems PATH variable.." if ! grep -e "$_checkdir" /etc/profile > /dev/null 2<&1 ; then @@ -2726,32 +3547,38 @@ echo -e "## --- Configure Apache Webserver" >> $_log_file echo -e "## ---" >> $_log_file echo"" >> $_log_file -if $UPDATE_SYMPA ; then - info "Configuration will be omitted. No webserver configuration needed in update mode." +## - Backup existing VHost Configuration +## - +echononl "\tBackup existing VHost Configuration.." +if [[ -f "$apache_vhost_dir/${SYMPA_DOMAIN}.conf" ]]; then echo "" >> $_log_file - - echo "# --- Configuration will be omitted. No webserver configuration needed in update mode." >> $_log_file - echo "# ---" >> $_log_file - -else - - _apache_vhost_added=false - ## - Add VHost Configuration to Apache Webserver - ## - - echononl "\tAdd VHost Configuration for Apache Webserver.." - if grep -r $SYMPA_DOMAIN $apache_vhost_dir/* 2>/dev/null |\ - grep -q -i -E "(ServerAlias| ServerName)" 2> /dev/null ; then - echo_skipped - warn "Apache VHost Configuration for \"$SYMPA_DOMAIN\" already exists." + echo "## - Backup existing VHost Configuration...." >> $_log_file + echo "## -" >> $_log_file + echo "mv \"$apache_vhost_dir/${SYMPA_DOMAIN}.conf\" \"$apache_vhost_dir/${SYMPA_DOMAIN}.conf.$backup_date\"" >> $_log_file + mv "$apache_vhost_dir/${SYMPA_DOMAIN}.conf" "$apache_vhost_dir/${SYMPA_DOMAIN}.conf.$backup_date" >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok else - echo "" >> $_log_file - echo "## - Add VHost Configuration for Apache Webserver...." >> $_log_file - echo "## -" >> $_log_file - echo "cat < $apache_vhost_dir/${SYMPA_DOMAIN}.conf + echo_failed + error "Backing up VHost Configuration failed! \n + See '${_log_file}' for further informations." + fi +else + echo_skipped +fi + +## - Add VHost Configuration to Apache Webserver +## - +apache_vhost_added=false +echononl "\tAdd VHost Configuration for Apache Webserver.." +echo "" >> $_log_file +echo "## - Add VHost Configuration for Apache Webserver.." >> $_log_file +echo "## -" >> $_log_file +echo "cat < $apache_vhost_dir/${SYMPA_DOMAIN}.conf # - $SYMPA_DOMAIN -# - + ServerAdmin admin@oopen.de @@ -2766,7 +3593,7 @@ else - + ServerAdmin admin@oopen.de @@ -2774,24 +3601,41 @@ else RewriteEngine on RewriteRule ^/\\\$ /$_wwsympa_dir/ [R] - - - AllowOverride none - Require all granted - - - - AllowOverride none - Require all granted - - - Alias /static-sympa ${PREFIX}/static_content - ScriptAlias /wws ${PREFIX}/bin/wwsympa-wrapper.fcgi - - - SetHandler fcgid-script +" >> $_log_file +if [[ -f "${SYMPA_SYSTEMD_DIR}/wwsympa.service" ]]; then + echo " + + SetHandler \"proxy:unix:${SYMPA_PID_DIR}/wwsympa.socket|fcgi://\" + + Require all granted + + + Alias /static-sympa ${SYMPA_STATIC_DIR} +" >> $_log_file +else + echo " + + AllowOverride none + Require all granted + + + + AllowOverride none + Require all granted + + + Alias /static-sympa ${SYMPA_STATIC_DIR} + ScriptAlias /$_wwsympa_dir ${SYMPA_CGI_DIR}/wwsympa-wrapper.fcgi + + + SetHandler fcgid-script + +" >> $_log_file +fi + +echo " SSLEngine on ## - HTTP Strict Transport Security (HSTS) @@ -2810,79 +3654,7 @@ else SSLCompression Off SSLProtocol ALL -SSLv2 -SSLv3 - SSLCertificateFile ${apache_conf_dir}/server-bundle.crt - SSLCertificateKeyFile ${apache_conf_dir}/server.key - - CustomLog ${apache_log_dir}/${SYMPA_DOMAIN}-access.log combined - ErrorLog ${apache_log_dir}/${SYMPA_DOMAIN}-error.log - - - - -## --- -## --- IPv6 -## --- - - - - ServerAdmin admin@oopen.de - - ServerName $SYMPA_DOMAIN - - RewriteEngine on - RewriteCond %{HTTPS} !=on - RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] - - CustomLog ${apache_log_dir}/${SYMPA_DOMAIN}-access.log combined - ErrorLog ${apache_log_dir}/${SYMPA_DOMAIN}-error.log - - - - - - ServerAdmin admin@oopen.de - - ServerName $SYMPA_DOMAIN - - RewriteEngine on - RewriteRule ^/\\\$ /$_wwsympa_dir/ [R] - - - AllowOverride none - Require all granted - - - - AllowOverride none - Require all granted - - - Alias /static-sympa ${PREFIX}/static_content - ScriptAlias /wws ${PREFIX}/bin/wwsympa-wrapper.fcgi - - - SetHandler fcgid-script - - - SSLEngine on - - ## - 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 add Strict-Transport-Security \"max-age=15768000\" - Header always set Strict-Transport-Security \"max-age=31536000; includeSubDomains\" - - ## - don't support weak ciphers - SSLHonorCipherOrder On - SSLCompression Off - SSLProtocol ALL -SSLv2 -SSLv3 - - SSLCertificateFile ${apache_conf_dir}/server-bundle.crt + SLCertificateFile ${apache_conf_dir}/server-bundle.crt SSLCertificateKeyFile ${apache_conf_dir}/server.key CustomLog ${apache_log_dir}/${SYMPA_DOMAIN}-access.log combined @@ -2891,10 +3663,10 @@ else EOF" >> $_log_file - cat < $apache_vhost_dir/${SYMPA_DOMAIN}.conf +cat < $apache_vhost_dir/${SYMPA_DOMAIN}.conf # - $SYMPA_DOMAIN -# - + ServerAdmin admin@oopen.de @@ -2909,7 +3681,7 @@ EOF" >> $_log_file - + ServerAdmin admin@oopen.de @@ -2917,95 +3689,45 @@ EOF" >> $_log_file RewriteEngine on RewriteRule ^/\$ /$_wwsympa_dir/ [R] +EOF - - AllowOverride none - Require all granted - +if [[ -f "${SYMPA_SYSTEMD_DIR}/wwsympa.service" ]]; then - - AllowOverride none - Require all granted - + cat <> $apache_vhost_dir/${SYMPA_DOMAIN}.conf - Alias /static-sympa ${PREFIX}/static_content - ScriptAlias /wws ${PREFIX}/bin/wwsympa-wrapper.fcgi - - - SetHandler fcgid-script + + SetHandler "proxy:unix:${SYMPA_PID_DIR}/wwsympa.socket|fcgi://" - SSLEngine on + + Require all granted + - ## - 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 add Strict-Transport-Security "max-age=15768000" - Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" + Alias /static-sympa ${SYMPA_STATIC_DIR} +EOF +else + cat <> $apache_vhost_dir/${SYMPA_DOMAIN}.conf - ## - don't support weak ciphers - SSLHonorCipherOrder On - SSLCompression Off - SSLProtocol ALL -SSLv2 -SSLv3 - - SSLCertificateFile ${apache_conf_dir}/server-bundle.crt - SSLCertificateKeyFile ${apache_conf_dir}/server.key - - CustomLog ${apache_log_dir}/${SYMPA_DOMAIN}-access.log combined - ErrorLog ${apache_log_dir}/${SYMPA_DOMAIN}-error.log - - - - -## --- -## --- IPv6 -## --- - - - - ServerAdmin admin@oopen.de - - ServerName $SYMPA_DOMAIN - - RewriteEngine on - RewriteCond %{HTTPS} !=on - RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] - - CustomLog ${apache_log_dir}/${SYMPA_DOMAIN}-access.log combined - ErrorLog ${apache_log_dir}/${SYMPA_DOMAIN}-error.log - - - - - - ServerAdmin admin@oopen.de - - ServerName $SYMPA_DOMAIN - - RewriteEngine on - RewriteRule ^/\$ /$_wwsympa_dir/ [R] - - + AllowOverride none Require all granted - + AllowOverride none Require all granted - Alias /static-sympa ${PREFIX}/static_content - ScriptAlias /wws ${PREFIX}/bin/wwsympa-wrapper.fcgi + Alias /static-sympa ${SYMPA_STATIC_DIR} + ScriptAlias /$_wwsympa_dir ${SYMPA_CGI_DIR}/wwsympa-wrapper.fcgi - + SetHandler fcgid-script +EOF +fi + +cat <> $apache_vhost_dir/${SYMPA_DOMAIN}.conf SSLEngine on @@ -3033,31 +3755,31 @@ EOF" >> $_log_file EOF - if [ "$?" = "0" ]; then - echo_ok - apache_vhost_added=true - else - echo_failed - fi +if [ "$?" = "0" ]; then + echo_ok + apache_vhost_added=true +else + echo_failed +fi + +if $apache_vhost_added ; then + _apache_configtest=false + echononl "\tCheck Apache Configuration" + echo "" >> $_log_file + echo "## - Check Apache Configuration" >> $_log_file + echo "## -" >> $_log_file + echo "apachectl configtest" >> $_log_file + apachectl configtest >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + _apache_configtest=true + else + echo_failed + error "Checking Apache Configuration was not successfully! \n + See '${_log_file}' for further informations." fi - if $apache_vhost_added ; then - _apache_configtest=false - echononl "\tCheck Apache Configuration" - echo "" >> $_log_file - echo "## - Check Apache Configuration" >> $_log_file - echo "## -" >> $_log_file - echo "apachectl configtest" >> $_log_file - apachectl configtest >> $_log_file 2>&1 - if [ "$?" = "0" ]; then - echo_ok - _apache_configtest=true - else - echo_failed - error "Checking Apache Configuration was not successfully! \n - See '${_log_file}' for further informations." - fi - + if ! $UPDATE_SYMPA ; then echononl "\tGraceful Restart Apache Webserver.." if $_apache_configtest ; then echo "" >> $_log_file @@ -3067,11 +3789,10 @@ EOF apachectl graceful >> $_log_file 2>&1 if [ "$?" = "0" ]; then echo_ok - _apache_configtest=true else echo_failed error "Graceful Restart of Apache Webserver failed! \n - See '${_log_file}' for further informations." + See '${_log_file}' for further informations." fi else echo_skipped @@ -3157,9 +3878,9 @@ else info "Postfix parameter \"$_parameter_name\" is already configured." else if grep -q -e "^$_parameter_name" ${POSTFIX_CONF_DIR}/main.cf 2>> /dev/null ; then - echo "perl -i.bak -n -p -e \"s#(^${_parameter_name}.*)#\1\n btree:${POSTFIX_CONF_DIR}/${_file_name}#\" \\" >> $_log_file + echo "perl -i.bak.sympa-install -n -p -e \"s#(^${_parameter_name}.*)#\1\n btree:${POSTFIX_CONF_DIR}/${_file_name}#\" \\" >> $_log_file echo " ${POSTFIX_CONF_DIR}/main.cf">> $_log_file - perl -i.bak -n -p -e "s#(^${_parameter_name}.*)#\1\n btree:${POSTFIX_CONF_DIR}/${_file_name}#" \ + perl -i.bak.sympa-install -n -p -e "s#(^${_parameter_name}.*)#\1\n btree:${POSTFIX_CONF_DIR}/${_file_name}#" \ ${POSTFIX_CONF_DIR}/main.cf >> $_log_file 2>&1 if [ "$?" = "0" ]; then echo_ok @@ -3285,6 +4006,22 @@ EOF echo "" + ## - Backup file /etc/postfix/master.cf + ## - + echononl "\tBackup '/etc/postfix/master.cf'.." + echo "" >> $_log_file + echo "## - Backup '/etc/postfix/master.cf'.." >> $_log_file + echo "## -" >> $_log_file + echo "cp -a /etc/postfix/master.cf /etc/postfix/master.cf.bak.sympa-install" >> $_log_file + cp -a /etc/postfix/master.cf /etc/postfix/master.cf.bak.sympa-install >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Backing up file '/etc/postfix/master.cf' failed! \n + See '${_log_file}' for further informations." + fi + ## - Add transport for Sympa Domains to /etc/postfix/master.cf ## - echononl "\tAdd transport declaration for sympa domains to file master.cf" @@ -3297,17 +4034,17 @@ EOF echo "cat <> ${POSTFIX_CONF_DIR}/master.cf sympa unix - n n - - pipe - flags=FR user=sympa argv=${PREFIX}/bin/queue \\\${recipient} + flags=FR user=sympa argv=${SYMPA_LIBEXEC_DIR}/queue \\\${recipient} sympabounce unix - n n - - pipe - flags=FR user=sympa argv=${PREFIX}/bin/bouncequeue \\\${user} + flags=FR user=sympa argv=${SYMPA_LIBEXEC_DIR}/bouncequeue \\\${user} EOF" >> $_log_file cat <> ${POSTFIX_CONF_DIR}/master.cf sympa unix - n n - - pipe - flags=FR user=sympa argv=${PREFIX}/bin/queue \${recipient} + flags=FR user=sympa argv=${SYMPA_LIBEXEC_DIR}/queue \${recipient} sympabounce unix - n n - - pipe - flags=FR user=sympa argv=${PREFIX}/bin/bouncequeue \${user} + flags=FR user=sympa argv=${SYMPA_LIBEXEC_DIR}/bouncequeue \${user} EOF @@ -3466,7 +4203,8 @@ EOF fi fi fi - else + + else # if $SYMPA_SUPPORT_MULTIDOMAINS info "Configure Postfix for Sympa Single Domain Support" @@ -3667,30 +4405,37 @@ if $SYSTEMD_SUPPORTED ; then See '${_log_file}' for further informations." fi - if $UPDATE_SYMPA ; then - echononl "\tRestarting Sympa mailing list manager .." + echononl "\tStarting Sympa mailing list manager .." + echo "" >> $_log_file + echo "systemctl start sympa" >> $_log_file + systemctl start sympa.service >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Starting Sympa mailing list manager failed! \n + See '${_log_file}' for further informations." + fi + + echononl "\tSleeping for 12 seconds.." + echo_wait + sleep 12 + echo_ok + + echononl "\tStarting Sympa Webservice .." + if [[ -f "${SYMPA_SYSTEMD_DIR}/wwsympa.service" ]]; then echo "" >> $_log_file - echo "systemctl restart sympa" >> $_log_file - systemctl restart sympa >> $_log_file 2>&1 + echo "systemctl start wwsympa.service" >> $_log_file + systemctl start wwsympa.service >> $_log_file 2>&1 if [ "$?" = "0" ]; then echo_ok else echo_failed - error "Restarting Sympa mailing list manager failed! \n - See '${_log_file}' for further informations." + error "Starting Sympa Webservice failed! \n + See '${_log_file}' for further informations." fi else - echononl "\tStarting Sympa mailing list manager .." - echo "" >> $_log_file - echo "systemctl start sympa" >> $_log_file - systemctl start sympa >> $_log_file 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - error "Starting Sympa mailing list manager failed! \n - See '${_log_file}' for further informations." - fi + echo_skipped fi else @@ -3729,9 +4474,8 @@ if $UPDATE_SYMPA ; then if [[ -n "$APACHE_SERVICE_FILE" ]] ; then echo "systemctl start $APACHE_SERVICE_FILE" >> $_log_file systemctl start $APACHE_SERVICE_FILE >> $_log_file 2>&1 - if [ "$?" = "0" ]; then + if [[ $? = 0 ]]; then echo_ok - _apache_configtest=true else echo_failed error "Starting Apache Webserver failed! \n @@ -3749,6 +4493,37 @@ if $UPDATE_SYMPA ; then See '${_log_file}' for further informations." fi fi + + + echo "" + echononl "\tReenable crontab for user root .." + if $_crontab_found ; then + echo "" >> $_log_file + echo "Reenable crontab for user root" >> $_log_file + echo "## -" >> $_log_file + echo "crontab -u root $_CRONTAB_BAKUP_FILE" >> $_log_file + crontab -u root $_CRONTAB_BAKUP_FILE >> $_log_file 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fi + + echononl "\tRemove crontab backup file .." + echo "" >> $_log_file + echo "## - Remove crontab backup file" >> $_log_file + echo "## -" >> $_log_file + echo "rm $_CRONTAB_BAKUP_FILE" >> $_log_file + rm -f $_CRONTAB_BAKUP_FILE + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fi + else + echo_skipped + fi + fi