From 4e0732aaa59fec83115a041bdb1dfb47e0c1acfc Mon Sep 17 00:00:00 2001 From: Christoph Kuchenbuch Date: Mon, 16 Oct 2017 20:53:32 +0200 Subject: [PATCH] Reorganise database handling. Add seperate configuration file. --- .gitignore | 1 + conf/install_sympa.conf.sample | 136 +++++++++ install_sympa.sh | 524 ++++++++++++++++++--------------- 3 files changed, 423 insertions(+), 238 deletions(-) create mode 100644 conf/install_sympa.conf.sample diff --git a/.gitignore b/.gitignore index e2f2fd2..25a73af 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /BAK/* /log_* +/conf/*.conf /sympa* /whitelist* *.log diff --git a/conf/install_sympa.conf.sample b/conf/install_sympa.conf.sample new file mode 100644 index 0000000..4b910c7 --- /dev/null +++ b/conf/install_sympa.conf.sample @@ -0,0 +1,136 @@ +# --------------------------------------- +# - Configuration for sympa install script +# ---------------------------------------- + + +# - PREFIX +# - +# - Sympa Installation directory +# - +# - Defaults to: "/usr/local/sympa" +# - +#PREFIX="/usr/local/sympa" + +# - SYMPA_USER +# - +# - User under which Sympa services are running +# - +# - Defaults to: "sympa" +# - +#SYMPA_USER="sympa" + + +# - SYMPA_MAIN_CONF_DIR +# - +# - Sympas main configuration directory +# - +# - Defaults to: "/etc/sympa" +# - +#SYMPA_MAIN_CONF_DIR="/etc/sympa" + + +# - SYMPA_LIST_DATA_DIR +# - +# - Data directory for sympa lists +# - +# - defaults to: "/data/sympa/list_data" +# - +#SYMPA_LIST_DATA_DIR=/data/sympa/list_data + + +# - SYMPA_DOMAIN +# - +# - Note: if sympa will be configured to support multidomains +# - this (SYMPA_DOMAIN) should not contain list definitions +# - +# - +SYMPA_DOMAIN="sympa.oopen.de" + + +# - START_AT_BOOTTIME +# - +# - Defaults to: "yes" +# - +#START_AT_BOOTTIME="yes" + + +# - SYMPA_LISTMASTER +# - +# - +# - Defaults to "postmaster@$SYMPA_DOMAIN" +# - +#SYMPA_LISTMASTER="postmaster@$SYMPA_DOMAIN" + + + +# - SYMPA_DB_TYPE +# - +# - Database type of sympas database +# - +# - If database is SQLite, then this parameter is not in use. +# - +# - Possible values are 'mysql' (MySQL) or 'Pg' (PostgeSQL), 'Sybase', 'Oracle' +# - +# - Defaults to: SYMPA_DB_TYPE="mysql" +# - +#SYMPA_DB_TYPE="mysql" + +# - SYMPA_DB_HOST +# - +# - Defaults to: SYMPA_DB_HOST="127.0.0.1" +# - +#SYMPA_DB_HOST="127.0.0.1" + +# - SYMPA_DB_PORT +# - +# - Defaults to: +# - 3306 - if SYMPA_DB_TYPE=mysql +# - 5432 - if SYMPA_DB_TYPE=Pg +# - 2638 - if SYMPA_DB_TYPE=Sybase +# - 1575 - if SYMPA_DB_TYPE=Oracle +# - +# - +#SYMPA_DB_PORT="3306" + +# - SYMPA_DB_NAME +# - +# - Defaults to: SYMPA_DB_NAME="sympa" +# - +#SYMPA_DB_NAME="sympa" + +# - SYMPA_DB_USER +# - +# - Defaults to: SYMPA_DB_USER="sympa" +# - +#SYMPA_DB_USER="sympa" + +# - SYMPA_DB_PASSWD +# - +# - Password for Sympa's database. +# - +SYMPA_DB_PASSWD="nw7FMhzRJPjcTHvm" + +# - mysql_credential_args (root access to MySQL Database) +# - +# - Example +# - mysql_credential_args="--login-path=local" +# - mysql_credential_args="--defaults-file=/etc/mysql/debian.cnf" (Debian default) +# - mysql_credential_args="--defaults-file=/usr/local/mysql/sys-maint.cnf" +# - +# - Defaults to: +# - '/etc/mysql/debian.cnf' if MySQL is installed from debian package system +# - '/usr/local/mysql/sys-maint.cnf' otherwise +# - +MYSQL_CREDENTIALS="--login-path=local" + + + +# - VSERVER_GUEST +# - +# - Is this a Linux Vserver guest system? +# - +# - Possible values: yes/no +# - +# - Defaults to 'VSERVER_GUEST=no' +# - +#VSERVER_GUEST=no diff --git a/install_sympa.sh b/install_sympa.sh index f0c4ff2..cb6777c 100755 --- a/install_sympa.sh +++ b/install_sympa.sh @@ -1,30 +1,11 @@ #!/usr/bin/env bash -## - Pre-defined Parameters -## - -_VSERVER_GUEST=no +_src_base_dir=/usr/local/src/sympa +conf_file="${_src_base_dir}/conf/install_sympa.conf" -#_SYMPA_VERSION=6.2.16 +backup_date="$(date +%Y-%m-%d-%H%M)" -_SYMPA_USER=sympa - -#_PREFIX=/home/sympa -_PREFIX=/usr/local/sympa - -_SYMPA_LIST_DATA_DIR=/data/sympa/list_data -_SYMPA_MAIN_CONF_DIR=/etc/sympa - -_START_AT_BOOTTIME=yes -_SYMLINK_INSTALL_DIR=no - -_SYMPA_DOMAIN=sympa.oopen.de -_SYMPA_LISTMASTER=support@oopen.de -_SYMPA_DB_TYPE=mysql -_SYMPA_DB_HOST=127.0.0.1 -## - -## - End: pre-defined Parameters - -_srcdir=/usr/local/src/sympa +err_log="$(mktemp)" _required_debian_packages=" libauthcas-perl @@ -91,6 +72,13 @@ _required_debian_packages=" ## --- 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 @@ -107,7 +95,7 @@ fatal(){ echo "" echo -e "\t\033[31m\033[1mInstalllation is canceled\033[m\033[m" echo "" - exit 1 + clean_up 1 } warn (){ @@ -146,6 +134,83 @@ echo_skipped() { ## --- ## --- END: functions +trap clean_up SIGHUP SIGINT SIGTERM + +# - Support systemd ? +# - +if [[ "X$(which systemd)" = "X" ]]; then + SYSTEMD_EXISTS=false +else + SYSTEMD_EXISTS=true +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_START_AT_BOOTTIME="yes" + +DEFAULT_SYMPA_DB_TYPE="mysql" +DEFAULT_SYMPA_DB_HOST="127.0.0.1" +DEFAULT_SYMPA_DB_NAME="sympa" +DEFAULT_SYMPA_DB_USER="sympa" + +# - 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 "$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 "$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" + + +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="" if [ -x "/etc/init.d/apache2" ]; then @@ -156,6 +221,7 @@ else fatal 'Cannot find init-script for Apache web server!' 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`" @@ -294,7 +360,7 @@ 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 "" - exit 2 + clean_up 2 elif [ "$DISTRIBUTION" == "Debian" ]; then SYMPA_INIT_DIR=/etc/init.d else @@ -349,8 +415,8 @@ while [ "X$SYMPA_VERSION" = "X" ]; do fi done -_builddir=${_srcdir}/sympa-$SYMPA_VERSION -_logdir=${_srcdir}/log_sympa-$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 @@ -425,10 +491,10 @@ if ! $UPDATE_SYMPA ; then SYMPA_USER= while [ "X$SYMPA_USER" = "X" ] do - echononl "Sympa user [${_SYMPA_USER}]: " + echononl "Sympa user [${DEFAULT_SYMPA_USER}]: " read SYMPA_USER if [ "X$SYMPA_USER" = "X" ]; then - SYMPA_USER=$_SYMPA_USER + SYMPA_USER=$DEFAULT_SYMPA_USER fi done SYMPA_GROUP= @@ -448,10 +514,10 @@ echo "" echo "Specify Sympa's installation directory." echo "" PREFIX= -echononl "Sympa installation directory [${_PREFIX}]: " +echononl "Sympa installation directory [${DEFAULT_PREFIX}]: " read PREFIX if [ "X$PREFIX" = "X" ]; then - PREFIX=$_PREFIX + PREFIX=$DEFAULT_PREFIX fi SYMPA_MANPATH=${PREFIX}/share/man SYMPA_BIN_DIR=${PREFIX}/bin @@ -481,11 +547,11 @@ echo "--" echo "" echo "Specify directory of Sympa main configuration file (sympa.conf)." echo "" -SYMPA_MAIN_CONF_DIR=$_SYMPA_MAIN_CONF_DIR -echononl "Sympa main configuration directory [${_SYMPA_MAIN_CONF_DIR}]: " +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=$_SYMPA_MAIN_CONF_DIR + SYMPA_MAIN_CONF_DIR=$DEFAULT_SYMPA_MAIN_CONF_DIR fi if $UPDATE_SYMPA ; then @@ -508,8 +574,8 @@ else 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.`date +%Y%m%d-%H%M` - ok "Saved ${SYMPA_MAIN_CONF_DIR}/sympa.conf to ${SYMPA_MAIN_CONF_DIR}/sympa.conf.`date +%Y%m%d-%H%M`" + 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 @@ -523,11 +589,11 @@ if $UPDATE_SYMPA ; then echo "" echo "Specify Sympa's list data directory." echo "" - SYMPA_LIST_DATA_DIR=$_SYMPA_LIST_DATA_DIR - echononl "Sympa's list data directory [${_SYMPA_LIST_DATA_DIR}]: " + 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=$_SYMPA_LIST_DATA_DIR + SYMPA_LIST_DATA_DIR=$DEFAULT_SYMPA_LIST_DATA_DIR fi fi else @@ -536,11 +602,11 @@ else echo "" echo "Specify Sympa's list data directory." echo "" - SYMPA_LIST_DATA_DIR=$_SYMPA_LIST_DATA_DIR - echononl "Sympa's list data directory [${_SYMPA_LIST_DATA_DIR}]: " + 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=$_SYMPA_LIST_DATA_DIR + SYMPA_LIST_DATA_DIR=$DEFAULT_SYMPA_LIST_DATA_DIR fi fi if $UPDATE_SYMPA ; then @@ -692,7 +758,6 @@ else fi - if ! $UPDATE_SYMPA ; then echo "" @@ -705,10 +770,10 @@ if ! $UPDATE_SYMPA ; then echo "Default domain for the mailing lists" echo "" SYMPA_DOMAIN= - echononl "domain [${_SYMPA_DOMAIN}]: " + echononl "domain [${DEFAULT_SYMPA_DOMAIN}]: " read SYMPA_DOMAIN if [ "X$SYMPA_DOMAIN" = "X" ]; then - SYMPA_DOMAIN=$_SYMPA_DOMAIN + SYMPA_DOMAIN=$DEFAULT_SYMPA_DOMAIN fi echo "" @@ -717,10 +782,10 @@ if ! $UPDATE_SYMPA ; then echo " - Comma seperated list of email addresses" echo "" SYMPA_LISTMASTER= - echononl "listmaster [${_SYMPA_LISTMASTER}]: " + echononl "listmaster [${DEFAULT_SYMPA_LISTMASTER}]: " read SYMPA_LISTMASTER if [ "X$SYMPA_LISTMASTER" = "X" ]; then - SYMPA_LISTMASTER=$_SYMPA_LISTMASTER + SYMPA_LISTMASTER=$DEFAULT_SYMPA_LISTMASTER fi echo "" @@ -728,11 +793,10 @@ if ! $UPDATE_SYMPA ; then echo "URL for the Sympa web interface" echo "" SYMPA_WEB_URL= - _SYMPA_WEB_URL="https://$SYMPA_DOMAIN/wws" - echononl "wwsympa_url [${_SYMPA_WEB_URL}]: " + echononl "wwsympa_url [${DEFAULT_SYMPA_WEB_URL}]: " read SYMPA_WEB_URL if [ "X$SYMPA_WEB_URL" = "X" ]; then - SYMPA_WEB_URL=$_SYMPA_WEB_URL + SYMPA_WEB_URL=$DEFAULT_SYMPA_WEB_URL fi echo "" @@ -781,12 +845,13 @@ if ! $UPDATE_SYMPA ; then echo "" SYMPA_DB_NAME= while [ "X$SYMPA_DB_NAME" = "X" ]; do - echononl "db_name: " + 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 + #echo "" + #echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n" + #continue + SYMPA_DB_NAME="$DEFAULT_SYMPA_DB_NAME" fi done @@ -795,34 +860,38 @@ if ! $UPDATE_SYMPA ; then echo "Database host name." echo "" SYMPA_DB_HOST= - echononl "db_host [$_SYMPA_DB_HOST]: " + echononl "db_host [$DEFAULT_SYMPA_DB_HOST]: " read SYMPA_DB_HOST if [ "X$SYMPA_DB_HOST" == "X" ]; then - SYMPA_DB_HOST=$_SYMPA_DB_HOST + SYMPA_DB_HOST=$DEFAULT_SYMPA_DB_HOST fi - if [ "$SYMPA_DB_HOST" == "localhost" ]; then + if [ "$SYMPA_DB_HOST" = "localhost" ]; then SYMPA_DB_HOST=127.0.0.1 fi - if [ "$SYMPA_DB_TYPE" == "mysql" ]; then - _SYMPA_DB_PORT=3306 - elif [ "$SYMPA_DB_TYPE" == "Pg" ]; then - _SYMPA_DB_PORT=5432 - elif [ "$SYMPA_DB_TYPE" == "Sybase" ]; then - _SYMPA_DB_PORT=2638 - elif [ "$SYMPA_DB_TYPE" == "Oracle" ]; then - _SYMPA_DB_PORT=1575 + + 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 [$_SYMPA_DB_PORT]: " + echononl "db_port [$DEFAULT_SYMPA_DB_PORT]: " read SYMPA_DB_PORT if [ "X$SYMPA_DB_PORT" == "X" ]; then - SYMPA_DB_PORT=$_SYMPA_DB_PORT + SYMPA_DB_PORT=$DEFAULT_SYMPA_DB_PORT fi fi @@ -832,29 +901,38 @@ if ! $UPDATE_SYMPA ; then echo "" SYMPA_DB_USER= while [ "X$SYMPA_DB_USER" = "X" ]; do - echononl "db_user: " + 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 + #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." + echo "Password for database user $SYMPA_DB_USER." echo "" SYMPA_DB_PASSWD= - while [ "X$SYMPA_DB_PASSWD" = "X" ]; do - echononl "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" = "X" ]; then - echo "" - echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n" - continue + if [[ "X$SYMPA_DB_PASSWD" ]] ; then + SYMPA_DB_PASSWD="$DEFAULT_SYMPA_DB_PASSWD" fi - done + 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 @@ -871,101 +949,124 @@ fi _wwsympa_dir="$(echo $SYMPA_WEB_URL | grep / | cut -d/ -f4-)" - -## - Test if NySQL connection is available -## - -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" > /dev/null 2>&1 - if [ "$?" != "0" ]; then - if $UPDATE_SYMPA ; then +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 witg given credentials" - else - warn "Cannot connect to database. Try to create a new one with the given credentials" - 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" - else - fatal "Cannot create new database \"$SYMPA_DB_NAME\"" - fi - mysql $mysql_credential_args -N -s -e \ - "CREATE DATABASE IF NOT EXISTS $SYMPA_DB_NAME CHARACTER SET utf8 COLLATE utf8_general_ci" - if [ "$?" != "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 [ "$?" != "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 [ "$?" != "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 [ "$?" != "0" ]; then - fatal "Cannot set \"Super_priv\" to user \"$SYMPA_DB_USER\"!" - fi - mysql $mysql_credential_args -N -s -e "FLUSH PRIVILEGES" - if [ "$?" != "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 [ "$?" != "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 else - if ! $UPDATE_SYMPA ; then - _tables=$(mysql -u$SYMPA_DB_USER -p$SYMPA_DB_PASSWD $SYMPA_DB_NAME -N -s -e \ - 'SHOW TABLES' 2>/dev/null) - if [ -n "$_tables" ]; then - warn "Database \"$SYMPA_DB_NAME\" 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 - _failed=false - for _table in $_tables ; do - mysql -u$SYMPA_DB_USER -p$SYMPA_DB_PASSWD $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 - fi - fi + 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'!" + 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 + 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 + if ! $UPDATE_SYMPA ; then echo "" echo "--" echo "" __START_AT_BOOTTIME= - echononl "Start at boot time (yes/no) [${_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=$_START_AT_BOOTTIME + __START_AT_BOOTTIME=$DEFAULT_START_AT_BOOTTIME fi __START_AT_BOOTTIME=`echo $__START_AT_BOOTTIME | tr '[:upper:]' '[:lower:]'` if [ "$__START_AT_BOOTTIME" = "yes" ] ; then @@ -975,21 +1076,6 @@ if ! $UPDATE_SYMPA ; then fi fi -#echo "" -#echo "--" -#echo "" -#__SYMLINK_INSTALL_DIR= -#echononl "Set sysmlink for installation directory (yes/no) [${_SYMLINK_INSTALL_DIR}]: " -#read __SYMLINK_INSTALL_DIR -#if [ "X$__SYMLINK_INSTALL_DIR" = "X" ]; then -# __SYMLINK_INSTALL_DIR=$_SYMLINK_INSTALL_DIR -#fi -#__SYMLINK_INSTALL_DIR=`echo $__SYMLINK_INSTALL_DIR | tr '[:upper:]' '[:lower:]'` -#if [ "$__SYMLINK_INSTALL_DIR" = "yes" ] ; then -# SYMLINK_INSTALL_DIR=true -#else -# SYMLINK_INSTALL_DIR=false -#fi if $UPDATE_SYMPA ; then SYMPA_UID=`grep -e "^$SYMPA_USER" /etc/passwd | cut -d":" -f3` @@ -1028,10 +1114,10 @@ echo -e "\033[32m--\033[m" echo "" echo "Are you installing on a VServer guest system?" echo "" -echononl "VServer Gastsystem (yes/no) [$_VSERVER_GUEST]: " +echononl "VServer Gastsystem (yes/no) [$DEFAULT_VSERVER_GUEST]: " read OK if [ "X$OK" = "X" ]; then - OK=$_VSERVER_GUEST + OK=$DEFAULT_VSERVER_GUEST fi OK=`echo "$OK" | tr '[:upper:]' '[:lower:]'` while [ "X$OK" != "Xyes" -a "X$OK" != "Xno" ]; do @@ -1042,12 +1128,6 @@ while [ "X$OK" != "Xyes" -a "X$OK" != "Xno" ]; do done if [ "$OK" = "yes" ]; then SYSTEMD_EXISTS=false -else - if [ "X`which systemd`" = "X" ]; then - SYSTEMD_EXISTS=false - else - SYSTEMD_EXISTS=true - fi fi if $UPDATE_SYMPA ;then @@ -1147,8 +1227,8 @@ echo "" echo "" echononl "\tCreate base source directory" -if [ ! -d "$_srcdir" ]; then - mkdir -p $_srcdir +if [ ! -d "$_src_base_dir" ]; then + mkdir -p $_src_base_dir if [ "$?" = "0" ]; then echo_ok else @@ -1162,7 +1242,7 @@ fi if [ -d "$_logdir" ];then echononl "\tBackup existing log directory \"`basename ${_logdir}`\" .. .." - mv $_logdir $_logdir.`date +%Y%m%d-%H%M` + mv $_logdir $_logdir.$backup_date if [ "$?" = "0" ]; then echo_ok else @@ -1303,7 +1383,7 @@ echo "" >> $_log_file echo "SYSTEMD_EXISTS=$SYSTEMD_EXISTS" >> $_log_file echo "" >> $_log_file -echo "_srcdir=$_srcdir" >> $_log_file +echo "_src_base_dir=$_src_base_dir" >> $_log_file echo "_builddir=$_builddir" >> $_log_file echo "_logdir=$_logdir" >> $_log_file @@ -1311,10 +1391,10 @@ echo "" ## - echo "" >> $_log_file -echo "## - Change into base source directory \"$_srcdir\" .." >> $_log_file +echo "## - Change into base source directory \"$_src_base_dir\" .." >> $_log_file echo "## -" >> $_log_file -echo "cd $_srcdir" >> $_log_file -cd $_srcdir >> $_log_file 2>&1 || fatal "Changing Directory (cd) to \"${_srcdir}\" failed!" +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 .." @@ -1687,13 +1767,12 @@ else done fi - _date=`date +%Y%m%d-%H%M` 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.$_date" >> $_log_file - cp -a $PREFIX ${PREFIX}.${SYMPA_OLD_VERSION}.$_date >> $_log_file 2>&1 + 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 @@ -1710,8 +1789,8 @@ else 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}.$_date" >> $_log_file - cp -a $SYMPA_LIST_DATA_DIR ${SYMPA_LIST_DATA_DIR}.$_date >> $_log_file 2>&1 + 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 @@ -1729,9 +1808,9 @@ else 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 > ${PREFIX}.${SYMPA_OLD_VERSION}.BAK.${_date}/${SYMPA_DB_NAME}-${_date}.sql" >> $_log_file - #mysqldump -h $SYMPA_DB_HOST -u $SYMPA_DB_USER -p$SYMPA_DB_PASSWD --opt $SYMPA_DB_NAME > ${PREFIX}.${SYMPA_OLD_VERSION}.BAK.${_date}/${SYMPA_DB_NAME}-${_date}.sql 2>> $_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}.${_date}.sql 2>> $_log_file + echo "mysqldump -h $SYMPA_DB_HOST -u $SYMPA_DB_USER -p$SYMPA_DB_PASSWD --opt $SYMPA_DB_NAME > ${PREFIX}.${SYMPA_OLD_VERSION}.BAK.${backup_date}/${SYMPA_DB_NAME}-${_date}.sql" >> $_log_file + #mysqldump -h $SYMPA_DB_HOST -u $SYMPA_DB_USER -p$SYMPA_DB_PASSWD --opt $SYMPA_DB_NAME > ${PREFIX}.${SYMPA_OLD_VERSION}.BAK.${_date}/${SYMPA_DB_NAME}-${backup_date}.sql 2>> $_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 if [ "$?" = "0" ]; then echo_ok else @@ -1755,8 +1834,8 @@ else echo "" >> $_log_file echo "## - Backup existing init script .." >> $_log_file echo "## -" >> $_log_file - echo "cp -a ${SYMPA_INIT_DIR}/sympa ${SYMPA_INIT_DIR}/sympa.$_date" >> $_log_file - cp -a ${SYMPA_INIT_DIR}/sympa ${SYMPA_INIT_DIR}/sympa.$_date >> $_log_file 2>&1 + 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 @@ -1790,8 +1869,8 @@ if [ -d "$_builddir" ];then echo "" >> $_log_file echo "## - Move (backup) existing source directory ..." >> $_log_file echo "## -" >> $_log_file - echo "mv $_builddir $_builddir.`date +%Y%m%d-%H%M`" >> $_log_file - mv $_builddir $_builddir.`date +%Y%m%d-%H%M` >> $_log_file 2>&1 + echo "mv $_builddir $_builddir.$backup_date" >> $_log_file + mv $_builddir $_builddir.$backup_date >> $_log_file 2>&1 if [ "$?" = "0" ]; then echo_ok else @@ -1805,10 +1884,10 @@ fi ## - Unpack source archive ## - echo "" >> $_log_file -echo "## - Change into base source directory \"$_srcdir\" .." >> $_log_file +echo "## - Change into base source directory \"$_src_base_dir\" .." >> $_log_file echo "## -" >> $_log_file -echo "cd $_srcdir" >> $_log_file -cd $_srcdir +echo "cd $_src_base_dir" >> $_log_file +cd $_src_base_dir echo "" >> $_log_file echo "## - Unpack sympa-${SYMPA_VERSION}.tar.gz .." >> $_log_file @@ -1888,8 +1967,8 @@ if ! $UPDATE_SYMPA ; then echo "" >> $_log_file echo "## - Backup existing installation directory.." >> $_log_file echo "## -" >> $_log_file - echo "mv $PREFIX $PREFIX.`date +%Y%m%d-%H%M`" >> $_log_file - mv $PREFIX $PREFIX.`date +%Y%m%d-%H%M` >> $_log_file 2>&1 + echo "mv $PREFIX $PREFIX.$backup_date" >> $_log_file + mv $PREFIX $PREFIX.$backup_date >> $_log_file 2>&1 if [ "$?" = "0" ]; then echo_ok else @@ -1977,37 +2056,6 @@ else fi fi -#if $SYMLINK_INSTALL_DIR ; then -# -# if [ -h "/usr/local/sympa" ]; then -# echo "" >> $_log_file -# echo "## - Remove existing symlink /usr/local/sympa .." >> $_log_file -# echo "## -" >> $_log_file -# echo "rm /usr/local/sympa" >> $_log_file -# echononl "\tRemove existing symlink /usr/local/sympa .." -# rm /usr/local/sympa >> $_log_file 2>&1 -# if [ "$?" = "0" ]; then -# echo_ok -# else -# echo_failed -# warn "Remove existing symlink /usr/local/sympa failed!" -# fi -# fi -# -# echo "" >> $_log_file -# echo "## - Set Symlink /usr/local/sympa .." >> $_log_file -# echo "## - ln -s `basename $PREFIX` /usr/local/sympa" >> $_log_file -# echo "" >> $_log_file -# echononl "\tSet Symlink /usr/local/sympa .." -# ln -s `basename $PREFIX` /usr/local/sympa >> $_log_file 2>&1 -# if [ "$?" = "0" ]; then -# echo_ok -# else -# echo_failed -# warn "Setting symlink /usr/local/sympa failed" -# fi -#fi - echo "" echo -e "\t---" echo -e "\t--- Configure Sympa mailing list manager (base configuration)" @@ -3502,4 +3550,4 @@ if [ -n "$msg_postfix" ]; then fi echo "" -exit +clean_up 0