Hace tiempo que no dedico tiempo en serio al proyecto de vesta, esta semana he estado algo aburrido y me he estado haciendo algunas cosas con mysql y me dio por mirar el tema de vestacp, ya que me acorde de algunas peticiones que tenia la gente sobre el soporte para mysql 8 ya que esta estable desde ni se cuando así que me decidi a meter mano y probar a instalar vestaCP directamente con soporte para mysql 8 en un debian 9
Tal como hice con el soporte para mysql 5.7 he probado a mejorar la compatibilidad con mysql 8 que hasta ahora era inexistente
El tema es que ya sabía que no funcionaba pero necesitaba mi conejillo de indias y este fue un debian 9, decidí no actualizar ya que probe en un ubuntu 18 y fue bastante mal por algún tema de apparmor así que lo deje y monte un servidor con debian 9, antes de instalar vesta añadí los repos de mysql 8 de la siguiente manera:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb dpkg -i mysql-apt-config_0.8.10-1_all.deb
Sí, así de sencillo, luego instalamos vestacp con normalidad, parece que todo va bien en primera instanacia, aunque las bases de datos que creamos no funcionan y para eso debemos parchearlo
Primero añadimos soporte para el sistema antiguo de contraseñas ya que no funcionará de momento con las contraseñas cifradas en SHA-256
Mysql 8 Support
Es necesario modificar el my.cnf añadiendo la siguiente linea después de [Mysqld]
default_authentication_plugin=mysql_native_password
Reiniciamos mysql y parcheamos vestacp con el siguiente código:
https://github.com/serghey-rodin/vesta/pull/1805/files
https://github.com/serghey-rodin/vesta/pull/1806/files
De momento no es oficial, ya que acabo de hacerlo y requiere revisión por parte de vestacp y testeos varios, los dos parches los he probado y en principio funcionan bien pero puede que tarden en ser aceptados o directamente pueden ser rechazados, eso no se sabe, aunque la vez pasada fueron aceptados y esta es una modificación al anterior código
En todo caso el parche importante para que la creación de bases de datos y usuarios funcione es el parche 1805, que añade compatibilidad a mysql 8 con el siguiente código:
Lo más sencillo es reemplazar toda la función add_mysql_database del func/db.sh por la siguiente función modificada, se cambiaron muchas lineas así que reemplazarla es más sencillo:
add_mysql_database() {
mysql_connect $host
query="CREATE DATABASE \`$database\` CHARACTER SET $charset"
mysql_query "$query" > /dev/null
if [ "$(echo $mysql_ver |cut -d '.' -f1)" -eq 8 ]; then
query="CREATE USER IF NOT EXISTS '$dbuser'@'localhost' IDENTIFIED BY '$dbpass';"
mysql_query "$query" > /dev/null
query="CREATE USER IF NOT EXISTS '$dbuser'@'%' IDENTIFIED BY '$dbpass';"
mysql_query "$query" > /dev/null
query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@\`%\`"
query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@localhost"
mysql_query "$query" > /dev/null
else
query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@\`%\`
IDENTIFIED BY '$dbpass'"
mysql_query "$query" > /dev/null
query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@localhost
IDENTIFIED BY '$dbpass'"
mysql_query "$query" > /dev/null
fi
if [ "$(echo $mysql_ver |cut -d '.' -f2)" -ge 7 ] || [ "$(echo $mysql_ver |cut -d '.' -f1)" -eq 8 ]; then
md5=$(mysql_query "SHOW CREATE USER \`$dbuser\`" 2>/dev/null)
md5=$(echo "$md5" |grep password |cut -f8 -d \')
else
md5=$(mysql_query "SHOW GRANTS FOR \`$dbuser\`" 2>/dev/null)
md5=$(echo "$md5" |grep PASSW|tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
fi
}
Eso es todo, lo mismo habría que hacer con el otro parche si no no se podrán restaurar backups 😛