#!/bin/bash # Source YunoHost helpers source /usr/share/yunohost/helpers # Stop script if errors ynh_abort_if_errors # Import common cmd source ./psql.sh source ./experimental_helper.sh source ./_common.sh # Retrieve arguments domain=$(ynh_app_setting_get $app special_domain) path_url=$(ynh_app_setting_get $app special_path) final_path=$(ynh_app_setting_get $app final_path) synapse_old_version=$(ynh_app_setting_get $app synapse_version) synapse_db_pwd=$(ynh_app_setting_get $app synapse_db_pwd) is_public=$(ynh_app_setting_get $app is_public) port=$(ynh_app_setting_get $app synapse_port) synapse_tls_port=$(ynh_app_setting_get $app synapse_tls_port) turnserver_tls_port=$(ynh_app_setting_get $app turnserver_tls_port) turnserver_alt_tls_port=$(ynh_app_setting_get $app turnserver_alt_tls_port) turnserver_pwd=$(ynh_app_setting_get $app turnserver_pwd) cli_port=$(ynh_app_setting_get $app cli_port) # To be sure that the migration is sucessfull we check that the old synapse version is compatible with the synapse_port_db script. if [[ -z $synapse_old_version ]] && [[ $(dpkg -l | grep -c -E "ii.*matrix-synapse.*0.25") != 1 ]] && [[ $(dpkg -l | grep -c -E "ii.*matrix-synapse.*0.26") != 1 ]] then ynh_die "Update from this synapse version is not available now. You need to wait for the next update." fi systemctl stop matrix-$app.service if [[ $(ynh_app_setting_get $app disable_backup_before_upgrade) != '1' ]] then ynh_backup_before_upgrade ynh_clean_setup () { ynh_restore_upgradebackup } fi ynh_abort_if_errors if [[ -z $synapse_old_version ]] then ## We move from debian package to new package with python virtualenv # Change settings path_url="/_matrix" domain=$(ynh_app_setting_get $app domain) final_path="/opt/yunohost/matrix-synapse" ynh_app_setting_set $app special_domain $domain ynh_app_setting_set $app special_path $path_url ynh_app_setting_set $app final_path $final_path ynh_app_setting_delete $app domain ynh_app_setting_delete $app path ynh_app_setting_delete $app skipped_uris # Remove old package and add new package as dependance ynh_secure_remove /etc/apt/sources.list.d/matrix.list ynh_package_autoremove --purge matrix-synapse python-matrix-synapse-ldap3 || true # If we don't remove these line in dpkg config, dpkg fail on every new package install sudo sed --in-place ':a;N;$!ba;s@matrix-synapse nogroup 755 /var/lib/matrix-synapse\n@@g' /var/lib/dpkg/statoverride sudo sed --in-place ':a;N;$!ba;s@matrix-synapse nogroup 755 /var/log/matrix-synapse\n@@g' /var/lib/dpkg/statoverride sudo sed --in-place ':a;N;$!ba;s@matrix-synapse nogroup 755 /etc/matrix-synapse\n@@g' /var/lib/dpkg/statoverride # add new package as dependance and install dependance install_dependances # Create directory Install synapse in virtualenv setup_dir || true # If the dir aready exist the command could fail install_source cp /etc/yunohost/certs/$domain/dh.pem /etc/matrix-synapse/dh.pem set_permission # Open access to server without a button the home cp ../conf/add_sso_conf.py $final_path cp ../conf/remove_sso_conf.py $final_path python $final_path/add_sso_conf.py || echo "Error while sso config, please add '/_matrix' in /etc/ssowat/conf.json.persistent" # Create user ynh_system_user_create $synapse_user /var/lib/matrix-synapse adduser $synapse_user ssl-cert adduser turnserver ssl-cert # Create systemd service ynh_secure_remove /etc/init.d/matrix-synapse ynh_secure_remove /lib/systemd/system/matrix-synapse.service ynh_secure_remove /etc/systemd/system/matrix-synapse.service systemctl daemon-reload systemctl disable matrix-synapse.service cp ../conf/default_matrix-synapse /etc/default/matrix-synapse cp ../conf/matrix-synapse.service /etc/systemd/system/matrix-synapse.service ynh_replace_string __APP__ $app /etc/systemd/system/matrix-synapse.service systemctl daemon-reload systemctl enable matrix-synapse.service # Configuration de logrotate ynh_use_logrotate /var/log/matrix-synapse # register yunohost service yunohost service add matrix-synapse ## Move to postgresql from sqlite # We create the new settings synapse_db_pwd=$(ynh_string_random 30) ynh_app_setting_set $app synapse_db_pwd $synapse_db_pwd # Create postgresql database ynh_psql_create_user $synapse_db_user $synapse_db_pwd ynh_psql_execute_as_root \ "CREATE DATABASE $synapse_db_name ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER $synapse_db_user;" # Create config file for synapse with postgresql config_synapse # We get the last version of the synapse_port_db script because an old version could be buggy. cp ../sources/synapse_port_db /opt/yunohost/matrix-synapse/bin/synapse_port_db # Migrate database (in virtualenv) source $final_path/bin/activate /opt/yunohost/matrix-synapse/bin/synapse_port_db --sqlite-database /var/lib/matrix-synapse/homeserver.db \ --postgres-config /etc/matrix-synapse/homeserver.yaml deactivate fi # Disable default config for turnserver and create a new service if [[ ! -e /etc/matrix-$app/coturn.conf ]] then systemctl stop coturn.service # Set by default the system config for coturn echo "" > /etc/turnserver.conf ynh_replace_string "TURNSERVER_ENABLED=1" "TURNSERVER_ENABLED=0" /etc/default/coturn # Set a port for each service in turnserver turnserver_alt_tls_port=$(ynh_find_port $((turnserver_tls_port+1))) cli_port=$(ynh_find_port 5766) ynh_app_setting_set $app turnserver_alt_tls_port $turnserver_alt_tls_port ynh_app_setting_set $app cli_port $cli_port yunohost firewall allow --no-upnp Both $turnserver_alt_tls_port > /dev/null 2>&1 # Configure systemd cp ../conf/default_coturn /etc/default/coturn-$app cp ../conf/coturn-synapse.service /etc/systemd/system/coturn-$app.service ynh_replace_string __APP__ $app /etc/systemd/system/coturn-$app.service systemctl daemon-reload systemctl enable coturn-$app.service # Clean logrotate file for all old instances ynh_remove_logrotate ynh_use_logrotate /var/log/matrix-$app fi # Fix issue about certificates access if [[ ! $(grep "ssl-cert:x:[0-9]*:.*matrix-$app" /etc/group) ]] then adduser $synapse_user ssl-cert adduser turnserver ssl-cert fi # If we don't have the dh file in synapse config dir we copy it test -e /etc/matrix-$app/dh.pem || cp /etc/yunohost/certs/$domain/dh.pem /etc/matrix-$app/dh.pem # Upgrade manually Synapse install_source # Update nginx config ynh_add_nginx_config # Configure Synapse config_synapse # Configure Coturn config_coturn # Set Permission for all directory set_permission # Set new settings ynh_app_setting_set $app synapse_version $upstream_version # Restart service systemctl restart coturn-$app.service ynh_check_starting "Synapse now listening on port 8448" "/var/log/matrix-$app/homeserver.log" 300 "matrix-$app"