2021-01-11 23:46:48 +01:00
#!/bin/bash
#=================================================
# COMMON VARIABLES
#=================================================
2023-11-09 20:01:57 +01:00
# We want Mattermost emails to be sent from the main domain
# (the one for which the emails headers are properly configured),
# and not the subdomain or secondary domain used for Mattermost.
main_domain = $( cat /etc/yunohost/current_host)
2021-01-11 23:46:48 +01:00
#=================================================
# PERSONAL HELPERS
#=================================================
2023-03-06 22:26:35 +01:00
mariadb-to-pg( ) {
ynh_print_info --message= "Migrating to PostgreSQL database..."
2023-09-11 21:36:20 +02:00
# Retrieve MySQL user and password
2023-03-06 22:26:35 +01:00
mysqlpwd = $( ynh_app_setting_get --app= $app --key= mysqlpwd)
mysql_db_user = " $db_user "
if ynh_mysql_connect_as --user= "mmuser" --password= " $mysqlpwd " 2> /dev/null <<< ";" ; then
2023-09-11 21:36:20 +02:00
# On old instances db_user is `mmuser`
2023-03-06 22:26:35 +01:00
mysql_db_user = "mmuser"
fi
2023-09-11 21:36:20 +02:00
# The PostgreSQL database has already been created by Yunohost before running the script.
# Configure the new database and run Mattermost in order to create tables.
ynh_write_var_in_file --file= " $install_dir /config/config.json " --key= "DriverName" --value= "postgres" --after= "SqlSettings"
ynh_write_var_in_file --file= " $install_dir /config/config.json " --key= "DataSource" --value= " postgres:// $db_user : $db_pwd @localhost:5432/ $db_name ?sslmode=disable&connect_timeout=10 " --after= "SqlSettings"
cat " $install_dir /config/config.json "
pushd $install_dir
2023-03-06 22:26:35 +01:00
ynh_systemd_action --service_name= " $app " --action= "stop"
set +e
2023-09-11 21:36:20 +02:00
sudo -u $app timeout --preserve-status 300 "./bin/mattermost"
2023-03-06 22:26:35 +01:00
if [ " $? " != "0" ] && [ " $? " != "143" ] ; then
ynh_die --message= "Failed to run Mattermost to create PostgreSQL database tables" --ret_code= 1
fi
set -e
popd
# Some fixes to let the MariaDB -> PostgreSQL conversion working
ynh_psql_execute_as_root --sql= 'DROP INDEX public.idx_fileinfo_content_txt;' --database= $db_name
ynh_psql_execute_as_root --sql= 'DROP INDEX public.idx_posts_message_txt;' --database= $db_name
ynh_mysql_execute_as_root --sql= "ALTER TABLE mattermost.Users DROP COLUMN IF EXISTS acceptedtermsofserviceid;" --database= $db_name
ynh_mysql_execute_as_root --sql= "ALTER TABLE mattermost.SharedChannelRemotes DROP COLUMN IF EXISTS description;" --database= $db_name
ynh_mysql_execute_as_root --sql= "ALTER TABLE mattermost.SharedChannelRemotes DROP COLUMN IF EXISTS nextsyncat;" --database= $db_name
2023-03-07 11:42:53 +01:00
# Focalboard is broken in Mattermost 7.3.0
if ynh_compare_current_package_version --comparison eq --version 7.3.0~ynh1
then
2023-03-17 22:46:56 +01:00
remove_focalboard_if_7_3_0 = "EXCLUDING TABLE NAMES MATCHING ~/^focalboard_/"
else
remove_focalboard_if_7_3_0 = ""
2023-03-07 11:42:53 +01:00
fi
2023-03-06 22:26:35 +01:00
# Use pgloader to migrate database content from MariaDB to PostgreSQL
tmpdir = " $( mktemp -d) "
cat <<EOT > $tmpdir /commands.load
LOAD DATABASE
FROM mysql://$mysql_db_user :$mysqlpwd @127.0.0.1:3306/$db_name
2023-09-11 21:36:20 +02:00
INTO postgresql://$db_user :$db_pwd @127.0.0.1:5432/$db_name
2023-03-06 22:26:35 +01:00
WITH include no drop, truncate, create no tables,
create no indexes, preserve index names, no foreign keys,
2023-07-28 08:33:53 +02:00
data only, workers = 16, concurrency = 1, prefetch rows = 10000
2023-03-06 22:26:35 +01:00
SET MySQL PARAMETERS
net_read_timeout = '90' ,
net_write_timeout = '180'
2023-03-17 22:46:56 +01:00
$remove_focalboard_if_7_3_0
2023-03-06 22:26:35 +01:00
ALTER SCHEMA '$db_name' RENAME TO 'public'
;
EOT
pgloader $tmpdir /commands.load
# Rebuild INDEX
ynh_psql_execute_as_root --sql= 'CREATE INDEX idx_fileinfo_content_txt ON public.fileinfo USING gin (to_tsvector(' \' 'english' \' '::regconfig, content))' --database= $db_name
ynh_psql_execute_as_root --sql= 'CREATE INDEX idx_posts_message_txt ON public.posts USING gin (to_tsvector(' \' 'english' \' '::regconfig, (message)::text));' --database= $db_name
if ynh_compare_current_package_version --comparison eq --version 7.3.0~ynh1
then
# There is a problem with version 7.3.0 and the database migration.
# More information here: https://forum.mattermost.com/t/migrating-from-mariadb-to-postgresql-db/14194/6
ynh_psql_execute_as_root --sql= "DELETE FROM db_migrations WHERE version=92;" --database= $db_name
fi
2023-09-11 21:36:20 +02:00
2023-03-06 22:26:35 +01:00
# Remove the MariaDB database
ynh_mysql_remove_db --db_user= $mysql_db_user --db_name= $db_name
}
2021-01-11 23:46:48 +01:00
#=================================================
# EXPERIMENTAL HELPERS
#=================================================
#=================================================
# FUTURE OFFICIAL HELPERS
#=================================================