From a792c623bdd370aa26163155b2702c7d20140a58 Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 2 Aug 2024 17:47:06 +0200 Subject: [PATCH] Change determination of MySQL credentials. --- install_postfixadmin.sh | 126 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 115 insertions(+), 11 deletions(-) diff --git a/install_postfixadmin.sh b/install_postfixadmin.sh index 40c9480..7b34a59 100755 --- a/install_postfixadmin.sh +++ b/install_postfixadmin.sh @@ -126,6 +126,61 @@ detect_os_1 () { } +detect_mysql_version () { + + _MYSQLD_VERSION="$(mysqld -V 2>/dev/null)" + + if [[ -z "$_MYSQLD_VERSION" ]]; then + fatal "No installed MySQL server or distribution found!" + elif [[ -d "/usr/local/mysql" ]] && [[ "$(basename "$(realpath "/usr/local/mysql")")" =~ percona- ]]; then + MYSQL_CUR_DISTRIBUTION="Percona" + elif [[ "$_MYSQLD_VERSION" =~ MariaDB ]]; then + MYSQL_CUR_DISTRIBUTION="MariaDB" + elif [[ "$_MYSQLD_VERSION" =~ MySQL ]]; then + MYSQL_CUR_DISTRIBUTION="MySQL" + elif [[ -d "/usr/local/mysql" ]] && [[ "$(basename "$(realpath "/usr/local/mysql")")" =~ mysql- ]]; then + MYSQL_CUR_DISTRIBUTION="MySQL" + elif [[ -d "/usr/local/mysql" ]] && [[ "$(basename "$(realpath "/usr/local/mysql")")" =~ mariadb- ]]; then + MYSQL_CUR_DISTRIBUTION="MariaDB" + else + error "MySQL Instalation found, but cannot determin the distribution!" + + MYSQL_CUR_DISTRIBUTION= + echo "" + echo " Select the MySQL distribution to install." + echo "" + echo " [1] MySQL (the original community edition)" + echo " [2] Percona Server for MySQL" + echo " [3] MariaDB" + echo "" + echononl " Eingabe [1/2/3]: " + + while [ "$MYSQL_CUR_DISTRIBUTION" != "MySQL" -a "$MYSQL_CUR_DISTRIBUTION" != "MariaDB" -a "$MYSQL_CUR_DISTRIBUTION" != "Percona" ];do + read OPTION + case $OPTION in + 1) MYSQL_CUR_DISTRIBUTION="MySQL" + ;; + 2) MYSQL_CUR_DISTRIBUTION="Percona" + ;; + 3) MYSQL_CUR_DISTRIBUTION="MariaDB" + ;; + *) echo "" + echo -e "\tFalsche Eingabe ! [ 1 = MySQL ; 2 = Percona ; 3 = MariaDB ]" + echo "" + echononl " Eingabe:" + ;; + esac + done + fi + + MYSQL_VERSION="$(echo $_MYSQLD_VERSION | grep -o -E "[0-9]+\.[0-9]+\.[0-9]+(-[0-9]+)?" | head -n 1)" + MYSQL_MAJOR_VERSION="$(echo $MYSQL_VERSION | cut -d '.' -f1)" + MYSQL_MINOR_VERSION="$(echo $MYSQL_VERSION | cut -d '.' -f2)" + MYSQL_PATCH_LEVEL="$(echo $MYSQL_VERSION | cut -d '.' -f3)" + MYSQL_MAIN_VERSION="$(echo $MYSQL_VERSION | cut -d '.' -f1,2)" + +} + # - Is 'systemd' supported on this system @@ -228,14 +283,14 @@ else fi DEFAULT_POSTFIX_DB_NAME="postfix" DEFAULT_POSTFIX_DB_USER="postfix" -if [[ -f "/usr/local/mysql/sys-maint.cnf" ]] ; then - DEFAULT_MYSQL_CREDENTIALS="--defaults-file=/usr/local/mysql/sys-maint.cnf" -elif [[ -f "/etc/mysql/debian.cnf" ]] ; then - DEFAULT_MYSQL_CREDENTIALS="--defaults-file=/etc/mysql/debian.cnf" -else - DEFAULT_MYSQL_CREDENTIALS="" -fi -DEFAULT_DEBIAN_MYSQL_CREDENTIALS="/etc/mysql/debian.cnf" +#if [[ -f "/usr/local/mysql/sys-maint.cnf" ]] ; then +# DEFAULT_MYSQL_CREDENTIALS="--defaults-file=/usr/local/mysql/sys-maint.cnf" +#elif [[ -f "/etc/mysql/debian.cnf" ]] ; then +# DEFAULT_MYSQL_CREDENTIALS="--defaults-file=/etc/mysql/debian.cnf" +#else +# DEFAULT_MYSQL_CREDENTIALS="" +#fi +#DEFAULT_DEBIAN_MYSQL_CREDENTIALS="/etc/mysql/debian.cnf" DEFAULT_DOVEADM_PW="/usr/local/dovecot/bin/doveadm pw" DEFAULT_DELETED_MAILBOX_DIR="/var/deleted-maildirs" @@ -342,11 +397,60 @@ fi [[ -n "$MYSQL_DEBIAN_INSTALLATION" ]] || MYSQL_DEBIAN_INSTALLATION=false if [[ "$POSTFIX_DB_TYPE" = "mysql" ]]; then - if $MYSQL_DEBIAN_INSTALLATION ; then - [[ -n "$MYSQL_CREDENTIALS" ]] || MYSQL_CREDENTIALS="$DEFAULT_DEBIAN_MYSQL_CREDENTIALS" + + detect_mysql_version + + if [[ "$MYSQL_CUR_DISTRIBUTION" = "MariaDB" ]] && ([[ $MAJOR_VERSION -gt 10 ]] \ + || ( [[ $MAJOR_VERSION -eq 10 ]] && [[ $MINOR_VERSION -gt 3 ]] )) ; then + if [[ -S "/tmp/mysql.sock" ]]; then + MYSQL_CREDENTIALS="-u root -S /tmp/mysql.sock" + elif [[ -S "/run/mysqld/mysqld.sock" ]]; then + MYSQL_CREDENTIALS="-u root -S /run/mysqld/mysqld.sock" + elif [[ -S "/var/run/mysqld/mysqld.sock" ]]; then + MYSQL_CREDENTIALS="-u root -S /var/run/mysqld/mysqld.sock" + else + fatal "Parameter 'MYSQL_CREDENTIALS' cannot be determined automated. + + Use configuration file "$conf_file" to set + parameter manually." + fi + else - [[ -n "$MYSQL_CREDENTIALS" ]] || MYSQL_CREDENTIALS="$DEFAULT_MYSQL_CREDENTIALS" + + echononl " Get MySQL command.." + mysql_command="$(which mysql)" + if [[ $? -eq 0 ]]; then + echo_ok + else + + if [[ -x "/usr/local/mysql/bin/mysql" ]]; then + mysql_command="/usr/local/mysql/bin/mysql" + echo_ok + else + echo_failed + fatal "$(cat $tmp_log_file)" + fi + fi + + if $(${mysql_command} --login-path=local -e ";" > /dev/null 2>&1) ; then + MYSQL_CREDENTIALS="--login-path=local" + elif [[ -f "/usr/local/mysql/sys-maint.cnf" ]] ; then + MYSQL_CREDENTIALS="--defaults-file=/usr/local/mysql/sys-maint.cnf" + elif [[ -f "/etc/mysql/debian.cnf" ]] ; then + MYSQL_CREDENTIALS="--defaults-file=/etc/mysql/debian.cnf" + else + fatal "Parameter 'MYSQL_CREDENTIALS' cannot be determined automated. + + Use configuration file "$conf_file" to set + parameter manually." + fi fi + + #if $MYSQL_DEBIAN_INSTALLATION ; then + # [[ -n "$MYSQL_CREDENTIALS" ]] || MYSQL_CREDENTIALS="$DEFAULT_DEBIAN_MYSQL_CREDENTIALS" + #else + # [[ -n "$MYSQL_CREDENTIALS" ]] || MYSQL_CREDENTIALS="$DEFAULT_MYSQL_CREDENTIALS" + #fi else [[ "$POSTFIX_DB_TYPE" = "pgsql" ]] || fatal "Unknown Database Type '$POSTFIX_DB_TYPE' (POSTFIX_DB_TYPE)" fi