Просмотр исходного кода

#3318 Remove: decrepitation warning MariaDB (#3465)

* #3318 Remove: decrepitation warning MariaDB

mysql: Deprecated program name. It will be removed in a future release, use '/usr/bin/mariadb' instead

Fix some more locations

Clean up version check v-list-sys-services

From 10.4 and up it works fine...

10.4 and lower didn't work

Fix check

* Add php8.1 test
Jaap Marcus 2 лет назад
Родитель
Сommit
62adf2a638
7 измененных файлов с 100 добавлено и 38 удалено
  1. 16 11
      bin/v-list-sys-services
  2. 18 5
      func/db.sh
  3. 5 1
      func/rebuild.sh
  4. 9 3
      install/deb/phpmyadmin/pma.sh
  5. 14 9
      install/hst-install-debian.sh
  6. 14 9
      install/hst-install-ubuntu.sh
  7. 24 0
      test/test.bats

+ 16 - 11
bin/v-list-sys-services

@@ -234,24 +234,29 @@ if [ -n "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'remote' ]; then
 	for db in ${DB_SYSTEM//,/ }; do
 		service="$db"
 		proc_name=''
+		mysql="/usr/bin/mysql"
+		if [ -f '/usr/bin/mariadb' ]; then
+			mysql="/usr/bin/mariadb"
+		fi
 		if [ "$service" = 'mysql' ]; then
-			mysql_version=$(mysql -V)
+			mysql_version=$($mysql -V)
 			mariadb_string="MariaDB"
 			if [[ ! $mysql_version =~ $mariadb_string ]]; then
 				# MySQL
 				service='mysql'
 				proc_name='mysqld'
 			else
-				# MariaDB
-				if [ -e "/lib/systemd/system/mariadb.service" ]; then
-					service='mariadb'
-					proc_name='mysqld'
-				fi
-				if [ -f /usr/bin/mysql ]; then
-					mariadb_v=$(mysql -V | awk 'NR==1{print $5}' | cut -d'.' -f2)
-					if [ $mariadb_v -ge "5" ]; then
-						service='mariadb'
-						proc_name='mariadbd'
+				service='mariadb'
+				proc_name='mariadbd'
+				# MariaDB 10.4 and lower
+				if [ -f $mysql ]; then
+					mariadb_v=$($mysql -V | awk 'NR==1{print $5}')
+					if [[ $mariadb_v =~ $mariadb_string ]]; then
+						mariadb_v=$(echo $mariadb_v | cut -f2 -d'.')
+						if [ $mariadb_v -le "4" ]; then
+							service='mariadb'
+							proc_name='mysqld'
+						fi
 					fi
 				fi
 			fi

+ 18 - 5
func/db.sh

@@ -65,7 +65,11 @@ mysql_connect() {
 		fi
 	fi
 	mysql_out=$(mktemp)
-	mysql --defaults-file=$mycnf -e 'SELECT VERSION()' > $mysql_out 2>&1
+	if [ -f '/usr/bin/mariadb' ]; then
+		mariadb --defaults-file=$mycnf -e 'SELECT VERSION()' > $mysql_out 2>&1
+	else
+		mysql --defaults-file=$mycnf -e 'SELECT VERSION()' > $mysql_out 2>&1
+	fi
 	if [ '0' -ne "$?" ]; then
 		if [ "$notify" != 'no' ]; then
 			email=$(grep CONTACT $HESTIA/data/users/admin/user.conf | cut -f 2 -d \')
@@ -90,17 +94,26 @@ mysql_connect() {
 mysql_query() {
 	sql_tmp=$(mktemp)
 	echo "$1" > $sql_tmp
-	mysql --defaults-file=$mycnf < "$sql_tmp" 2> /dev/null
-	return_code=$?
+	if [ -f '/usr/bin/mariadb' ]; then
+		mariadb --defaults-file=$mycnf < "$sql_tmp" 2> /dev/null
+		return_code=$?
+	else
+		mysql --defaults-file=$mycnf < "$sql_tmp" 2> /dev/null
+		return_code=$?
+	fi
 	rm -f "$sql_tmp"
 	return $return_code
 }
 
 mysql_dump() {
 	err="/tmp/e.mysql"
-	mysqldump --defaults-file=$mycnf --single-transaction --routines -r $1 $2 2> $err
+	mysqldmp="mysqldump"
+	if [ -f '/usr/bin/mariadb-dump' ]; then
+		mysqldmp="/usr/bin/mariadb-dump"
+	fi
+	$mysqldmp --defaults-file=$mycnf --single-transaction --routines -r $1 $2 2> $err
 	if [ '0' -ne "$?" ]; then
-		mysqldump --defaults-extra-file=$mycnf --single-transaction --routines -r $1 $2 2> $err
+		$mysqldmp --defaults-extra-file=$mycnf --single-transaction --routines -r $1 $2 2> $err
 		if [ '0' -ne "$?" ]; then
 			rm -rf $tmpdir
 			if [ "$notify" != 'no' ]; then

+ 5 - 1
func/rebuild.sh

@@ -893,8 +893,12 @@ import_mysql_database() {
 		log_event "$E_PARSING" "$ARGUMENTS"
 		exit "$E_PARSING"
 	fi
+	if [ -f '/usr/bin/mariadb' ]; then
+		mariadb -h $HOST -u $USER -p$PASSWORD $DB < $1 > /dev/null 2>&1
+	else
+		mysql -h $HOST -u $USER -p$PASSWORD $DB < $1 > /dev/null 2>&1
+	fi
 
-	mysql -h $HOST -u $USER -p$PASSWORD $DB < $1 > /dev/null 2>&1
 }
 
 # Import PostgreSQL dump

+ 9 - 3
install/deb/phpmyadmin/pma.sh

@@ -55,13 +55,19 @@ PMAUSER=pma
 # MYSQL_PMA1
 
 #CREATE PMA USER
-mysql -uroot << MYSQL_PMA2
+if [ -f '/usr/bin/mariadb' ]; then
+	mysql="mariadb"
+else
+	mysql="mysql"
+fi
+
+$mysql -uroot << MYSQL_PMA2
 CREATE USER '$PMAUSER'@'localhost' IDENTIFIED BY '$PASS';
 CREATE DATABASE $PMADB;
 MYSQL_PMA2
 
 #GRANT PMA USE SOME RIGHTS
-mysql -uroot << MYSQL_PMA3
+$mysql -uroot << MYSQL_PMA3
 USE $PMADB;
 GRANT USAGE ON $PMADB.* TO '$PMAUSER'@'localhost' IDENTIFIED BY '$PASS';
 GRANT ALL PRIVILEGES ON $PMADB.* TO '$PMAUSER'@'localhost';
@@ -69,4 +75,4 @@ FLUSH PRIVILEGES;
 MYSQL_PMA3
 
 #MYSQL DB and TABLES ADDITION
-mysql -uroot < "$HESTIA_INSTALL_DIR/phpmyadmin/create_tables.sql"
+$mysql -uroot < "$HESTIA_INSTALL_DIR/phpmyadmin/create_tables.sql"

+ 14 - 9
install/hst-install-debian.sh

@@ -1554,23 +1554,28 @@ if [ "$mysql" = 'yes' ] || [ "$mysqlclassic" = 'yes' ]; then
 	echo -e "[client]\npassword='$mpass'\n" > /root/.my.cnf
 	chmod 600 /root/.my.cnf
 
+	if [ -f '/usr/bin/mariadb' ]; then
+		mysql="mariadb"
+	else
+		mysql="mysql"
+	fi
 	# Alter root password
-	mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$mpass'; FLUSH PRIVILEGES;"
+	$mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$mpass'; FLUSH PRIVILEGES;"
 	if [ "$mysql_type" = 'MariaDB' ]; then
 		# Allow mysql access via socket for startup
-		mysql -e "UPDATE mysql.global_priv SET priv=json_set(priv, '$.password_last_changed', UNIX_TIMESTAMP(), '$.plugin', 'mysql_native_password', '$.authentication_string', 'invalid', '$.auth_or', json_array(json_object(), json_object('plugin', 'unix_socket'))) WHERE User='root';"
+		$mysql -e "UPDATE mysql.global_priv SET priv=json_set(priv, '$.password_last_changed', UNIX_TIMESTAMP(), '$.plugin', 'mysql_native_password', '$.authentication_string', 'invalid', '$.auth_or', json_array(json_object(), json_object('plugin', 'unix_socket'))) WHERE User='root';"
 		# Disable anonymous users
-		mysql -e "DELETE FROM mysql.global_priv WHERE User='';"
+		$mysql -e "DELETE FROM mysql.global_priv WHERE User='';"
 	else
-		mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '$mpass';"
-		mysql -e "DELETE FROM mysql.user WHERE User='';"
-		mysql -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"
+		$mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '$mpass';"
+		$mysql -e "DELETE FROM mysql.user WHERE User='';"
+		$mysql -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"
 	fi
 	# Drop test database
-	mysql -e "DROP DATABASE IF EXISTS test"
-	mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
+	$mysql -e "DROP DATABASE IF EXISTS test"
+	$mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
 	# Flush privileges
-	mysql -e "FLUSH PRIVILEGES;"
+	$mysql -e "FLUSH PRIVILEGES;"
 fi
 
 #----------------------------------------------------------#

+ 14 - 9
install/hst-install-ubuntu.sh

@@ -1597,23 +1597,28 @@ if [ "$mysql" = 'yes' ] || [ "$mysqlclassic" = 'yes' ]; then
 	echo -e "[client]\npassword='$mpass'\n" > /root/.my.cnf
 	chmod 600 /root/.my.cnf
 
+	if [ -f '/usr/bin/mariadb' ]; then
+		mysql="mariadb"
+	else
+		mysql="mysql"
+	fi
 	# Alter root password
-	mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$mpass'; FLUSH PRIVILEGES;"
+	$mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$mpass'; FLUSH PRIVILEGES;"
 	if [ "$mysql_type" = 'MariaDB' ]; then
 		# Allow mysql access via socket for startup
-		mysql -e "UPDATE mysql.global_priv SET priv=json_set(priv, '$.password_last_changed', UNIX_TIMESTAMP(), '$.plugin', 'mysql_native_password', '$.authentication_string', 'invalid', '$.auth_or', json_array(json_object(), json_object('plugin', 'unix_socket'))) WHERE User='root';"
+		$mysql -e "UPDATE mysql.global_priv SET priv=json_set(priv, '$.password_last_changed', UNIX_TIMESTAMP(), '$.plugin', 'mysql_native_password', '$.authentication_string', 'invalid', '$.auth_or', json_array(json_object(), json_object('plugin', 'unix_socket'))) WHERE User='root';"
 		# Disable anonymous users
-		mysql -e "DELETE FROM mysql.global_priv WHERE User='';"
+		$mysql -e "DELETE FROM mysql.global_priv WHERE User='';"
 	else
-		mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '$mpass';"
-		mysql -e "DELETE FROM mysql.user WHERE User='';"
-		mysql -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"
+		$mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '$mpass';"
+		$mysql -e "DELETE FROM mysql.user WHERE User='';"
+		$mysql -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"
 	fi
 	# Drop test database
-	mysql -e "DROP DATABASE IF EXISTS test"
-	mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
+	$mysql -e "DROP DATABASE IF EXISTS test"
+	$mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
 	# Flush privileges
-	mysql -e "FLUSH PRIVILEGES;"
+	$mysql -e "FLUSH PRIVILEGES;"
 fi
 
 #----------------------------------------------------------#

+ 24 - 0
test/test.bats

@@ -1099,6 +1099,30 @@ function check_ip_not_banned(){
     rm $HOMEDIR/$user/web/$multi_domain/public_html/php-test.php
 }
 
+@test "Multiphp: Change backend version - PHP v8.2" {
+	test_phpver='8.2'
+	multi_domain="multiphp.${domain}"
+
+	if [ ! -d "/etc/php/${test_phpver}/fpm/pool.d/" ]; then
+		skip "PHP ${test_phpver} not installed"
+	fi
+
+	run v-change-web-domain-backend-tpl $user $multi_domain 'PHP-8_2' 'yes'
+	assert_success
+	refute_output
+
+	# Changing web backend will create a php-fpm pool config in the corresponding php folder
+	assert_file_exist "/etc/php/${test_phpver}/fpm/pool.d/${multi_domain}.conf"
+
+	# A single php-fpm pool config file must be present
+	num_fpm_config_files="$(find -L /etc/php/ -name "${multi_domain}.conf" | wc -l)"
+	assert_equal "$num_fpm_config_files" '1'
+
+	echo -e "<?php\necho 'hestia-multiphptest:'.PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;" > "$HOMEDIR/$user/web/$multi_domain/public_html/php-test.php"
+	validate_web_domain $user $multi_domain "hestia-multiphptest:$test_phpver" 'php-test.php'
+	rm $HOMEDIR/$user/web/$multi_domain/public_html/php-test.php
+}
+
 @test "Multiphp: Cleanup" {
     multi_domain="multiphp.${domain}"