From f766e859f72146dcc0fa2a32365acdc0b2a4badf Mon Sep 17 00:00:00 2001 From: Christoph Date: Sat, 10 Aug 2024 16:43:51 +0200 Subject: [PATCH] upgrade_roundcube.sh: Change settimgs of var 'MYSQL_CREDENTIALS'. --- upgrade_roundcube.sh | 131 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 116 insertions(+), 15 deletions(-) diff --git a/upgrade_roundcube.sh b/upgrade_roundcube.sh index ef9c1c7..c85cc3d 100755 --- a/upgrade_roundcube.sh +++ b/upgrade_roundcube.sh @@ -112,6 +112,62 @@ echo_not_yet_implemented(){ echo -e "\033[85G[ \033[30m\033[1mnot yet implemented\033[m ]" } +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 installed MySQL distribution." + 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)" + +} + + trap clean_up SIGHUP SIGINT SIGTERM @@ -156,15 +212,6 @@ fi DEFAULT_DB_HOST="localhost" DEFAULT_DB_NAME="roundcubemail" DEFAULT_DB_USER="roundcube" -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="--defaults-file=/etc/mysql/debian.cnf" -DEFAULT_MYSQL_CREDENTIALS="--defaults-file=/usr/local/mysql/sys-maint.cnf" while IFS='' read -r -d '' _conf_file ; do @@ -276,16 +323,70 @@ if [ "$DB_TYPE" = "postgres" -o "$DB_TYPE" = "postgresql" -o "$DB_TYPE" = "pgsq fi -if [[ "$DB_TYPE" = "mysql" ]]; then - if $MYSQL_DEBIAN_INSTALLATION ; then - [[ -n "$MYSQL_CREDENTIALS" ]] || MYSQL_CREDENTIALS="$DEFAULT_DEBIAN_MYSQL_CREDENTIALS" - else - [[ -n "$MYSQL_CREDENTIALS" ]] || MYSQL_CREDENTIALS="$DEFAULT_MYSQL_CREDENTIALS" +mysql_credential_args="$MYSQL_CREDENTIALS" +if [[ "$DB_TYPE" = "mysql" ]] ; then + + if [[ -z ${MYSQL_CREDENTIALS} ]] ; then + + detect_mysql_version + + if [[ "$MYSQL_CUR_DISTRIBUTION" = "MariaDB" ]] && ([[ $MYSQL_MAJOR_VERSION -gt 10 ]] \ + || ( [[ $MYSQL_MAJOR_VERSION -eq 10 ]] && [[ $MYSQL_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 + + echononl "\tGet 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 + fi else + #[[ "$POSTFIX_DB_TYPE" = "pgsql" ]] || fatal "Unknown Database Type '$POSTFIX_DB_TYPE' (POSTFIX_DB_TYPE)" [[ "$DB_TYPE" = "pgsql" ]] || fatal "Unknown Database Type '$DB_TYPE' (DB_TYPE)" fi -mysql_credential_args="$MYSQL_CREDENTIALS" if [[ "$DB_TYPE" = "mysql" ]]; then