From f203f2e3e91623fdbf4a802fa57b5faed5d7fcb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Tille?= Date: Tue, 4 Aug 2020 21:54:28 +0200 Subject: [PATCH] Implement migration from sogo 3 to sogo 4 --- manifest.json | 4 +- scripts/migrations/3.2-4.0.sh | 76 +++++++++++++++++++++++++++++++++++ scripts/upgrade | 12 ++++++ 3 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 scripts/migrations/3.2-4.0.sh diff --git a/manifest.json b/manifest.json index 5cc3a67..b3f0629 100644 --- a/manifest.json +++ b/manifest.json @@ -4,7 +4,7 @@ "packaging_format": 1, "license": "LGPL-2.1,GPL-2.0", "url": "https://sogo.nu/", - "version": "3.2.6-3~ynh1", + "version": "4.0.7-1~ynh1", "description": { "en": "Sogo is an opensource groupware for E-Mail, Contacts and Calender.", "fr": "Sogo est un groupware opensource pour les e-mail, contacts et calendrier" @@ -24,7 +24,7 @@ "mysql" ], "requirements": { - "yunohost": ">= 3.5.2.2" + "yunohost": ">= 4.0" }, "arguments": { "install" : [ diff --git a/scripts/migrations/3.2-4.0.sh b/scripts/migrations/3.2-4.0.sh new file mode 100644 index 0000000..8cd6489 --- /dev/null +++ b/scripts/migrations/3.2-4.0.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +# This script comme from the debian package in /usr/share/doc/sogo/sql-update-3.2.10_to_4.0.0-mysql.sh +# Some monor modification was made to improve the automation of this script + +set -e + +# This script only works with MySQL - it does: +# +# 1- updates c_defaults and c_settings to longtext in the sogo_user_profile table +# to avoid truncation of data at 64k +# 2- increase the c_mail column to text to contact quick table +# 3- add the c_hascertificate column to contact quick table + +defaultusername=$USER +defaulthostname=127.0.0.1 +defaultdatabase=sogo +indextable=$(sogo-tool dump-defaults -f /etc/sogo/sogo.conf | awk -F\" '/ OCSFolderInfoURL =/ {print $2}' | awk -F/ '{print $NF}') +if [ -z "$indextable" ]; then + echo "Couldn't fetch OCSFolderInfoURL value, aborting" >&2 + exit 1 +fi +storeurl=$(sogo-tool dump-defaults -f /etc/sogo/sogo.conf | awk -F\" '/ OCSStoreURL =/ {print $2}' | awk -F/ '{print $NF}') + +username="__DBUSER__" +hostname=127.0.0.1 +database="__APP__" +dbpasswd="__DBPASS__" + +sqlscript="" + +function growUserProfile() { + oldIFS="$IFS" + IFS=" " + part="`echo -e \"ALTER TABLE sogo_user_profile MODIFY c_defaults LONGTEXT;\\n\"`"; + sqlscript="$sqlscript$part" + part="`echo -e \"ALTER TABLE sogo_user_profile MODIFY c_settings LONGTEXT;\\n\"`"; + sqlscript="$sqlscript$part" + IFS="$oldIFS" +} + +function growMailInContactsQuick() { + oldIFS="$IFS" + IFS=" " + part="`echo -e \"ALTER TABLE $table MODIFY c_mail text;\\n\"`"; + sqlscript="$sqlscript$part" + IFS="$oldIFS" +} + +function addCertificateInContactsQuick() { + oldIFS="$IFS" + IFS=" " + part="`echo -e \"ALTER TABLE $table ADD c_hascertificate INT4 DEFAULT 0;\\n\"`"; + sqlscript="$sqlscript$part" + IFS="$oldIFS" +} + + +echo "This script will ask for the database password twice" >&2 +echo "Converting c_content from TEXT to LONGTEXT in the sogo_user_profile table" >&2 +growUserProfile + +echo "Converting c_mail from VARCHAR(255) to TEXT in Contacts quick tables" >&2 +if [ -z "$storeurl" ]; then + tables=`mysql -p"$dbpasswd" -s -u $username -h $hostname $database -e "select SUBSTRING_INDEX(c_quick_location, '/', -1) from $indextable where c_path3 = 'Contacts';"` +else + tables="sogo_quick_contact" +fi + +for table in $tables; +do + growMailInContactsQuick + addCertificateInContactsQuick +done + +echo "$sqlscript" | mysql -p"$dbpasswd" -f -s -u $username -h $hostname $database diff --git a/scripts/upgrade b/scripts/upgrade index 6dcabe8..6cb41aa 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -74,6 +74,18 @@ then ynh_app_setting_set --app $app --key db_user --value $db_user fi +# Manage migration form SOGo 3.x to SOGo 4.x (Debian stretch -> Buster) +ynh_script_progression --message="Migrating database if needed..." + +# FIXME use the new way to manage version when available on the core +app_previous_version="$(jq -r .version /etc/yunohost/apps/$app/manifest.json | cut -d~ -f1)" +if [[ "$app_previous_version" == 3.2.* ]]; then + ynh_replace_string --match_string __APP__ --replace_string $app --target_file migrations/3.2-4.0.sh + ynh_replace_string --match_string __DBUSER__ --replace_string $db_user --target_file migrations/3.2-4.0.sh + ynh_replace_string --match_string __DBPASS__ --replace_string $db_pwd --target_file migrations/3.2-4.0.sh + bash migrations/3.2-4.0.sh +fi + #================================================= # STANDARD MODIFICATIONS #=================================================