diff --git a/nixos/doc/manual/release-notes/rl-2003.xml b/nixos/doc/manual/release-notes/rl-2003.xml
index b629c460f4c..18cb1e4c314 100644
--- a/nixos/doc/manual/release-notes/rl-2003.xml
+++ b/nixos/doc/manual/release-notes/rl-2003.xml
@@ -712,6 +712,66 @@ auth required pam_succeed_if.so uid >= 1000 quiet
For further reference, please read #68953 or the corresponding discourse thread.
+
+
+ The matrix-synapse-package has been updated to
+ v1.11.1.
+ Due to stricter requirements
+ for database configuration when using postgresql, the automated database setup
+ of the module has been removed to avoid any further edge-cases.
+
+
+ matrix-synapse expects postgresql-databases to have the options
+ LC_COLLATE and LC_CTYPE set to
+ 'C' which basically
+ instructs postgresql to ignore any locale-based preferences.
+
+
+ Depending on your setup, you need to incorporate one of the following changes in your setup to
+ upgrade to 20.03:
+
+ If you use sqlite3 you don't need to do anything.
+ If you use postgresql on a different server, you don't need
+ to change anything as well since this module was never designed to configure remote databases.
+
+ If you use postgresql and configured your synapse initially on
+ 19.09 or older, you simply need to enable postgresql-support
+ explicitly:
+{ ... }: {
+ services.matrix-synapse = {
+ enable = true;
+ /* and all the other config you've defined here */
+ };
+ services.postgresql.enable = true;
+}
+
+ If you deploy a fresh matrix-synapse, you need to configure
+ the database yourself. An example for this can be found in <nixpkgs/nixos/tests/matrix-synapse.nix>:
+{ ... }: {
+ services.matrix-synapse = {
+ enable = true;
+ /* and all the other config you've defined here */
+ };
+ services.postgresql.enable = true;
+ services.postgresql.initialScript = ''
+ CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD 'synapse';
+ CREATE DATABASE "matrix-synapse" WITH OWNER "matrix-synapse"
+ TEMPLATE template0
+ LC_COLLATE = "C"
+ LC_CTYPE = "C";
+ '';
+}
+
+ If you initially deployed your matrix-synapse on
+ nixos-unstableafter the 19.09-release,
+ your database is misconfigured due to a regression in NixOS. For now, matrix-synapse will
+ startup with a warning, but it's recommended to reconfigure the database to set the values
+ LC_COLLATE and LC_CTYPE to
+ 'C'.
+
+
+
+
diff --git a/nixos/modules/services/misc/matrix-synapse.nix b/nixos/modules/services/misc/matrix-synapse.nix
index 750f4a292fb..52b917a73a0 100644
--- a/nixos/modules/services/misc/matrix-synapse.nix
+++ b/nixos/modules/services/misc/matrix-synapse.nix
@@ -111,6 +111,9 @@ app_service_config_files: ${builtins.toJSON cfg.app_service_config_files}
${cfg.extraConfig}
'';
+
+ hasLocalPostgresDB = let args = cfg.database_args; in
+ usePostgresql && (!(args ? host) || (elem args.host [ "localhost" "127.0.0.1" ]));
in {
options = {
services.matrix-synapse = {
@@ -354,13 +357,6 @@ in {
The database engine name. Can be sqlite or psycopg2.
'';
};
- create_local_database = mkOption {
- type = types.bool;
- default = true;
- description = ''
- Whether to create a local database automatically.
- '';
- };
database_name = mkOption {
type = types.str;
default = "matrix-synapse";
@@ -657,6 +653,25 @@ in {
};
config = mkIf cfg.enable {
+ assertions = [
+ { assertion = hasLocalPostgresDB -> config.services.postgresql.enable;
+ message = ''
+ Cannot deploy matrix-synapse with a configuration for a local postgresql database
+ and a missing postgresql service. Since 20.03 it's mandatory to manually configure the
+ database (please read the thread in https://github.com/NixOS/nixpkgs/pull/80447 for
+ further reference).
+
+ If you
+ - try to deploy a fresh synapse, you need to configure the database yourself. An example
+ for this can be found in
+ - update your existing matrix-synapse instance, you simply need to add `services.postgresql.enable = true`
+ to your configuration.
+
+ For further information about this update, please read the release-notes of 20.03 carefully.
+ '';
+ }
+ ];
+
users.users.matrix-synapse = {
group = "matrix-synapse";
home = cfg.dataDir;
@@ -669,18 +684,9 @@ in {
gid = config.ids.gids.matrix-synapse;
};
- services.postgresql = mkIf (usePostgresql && cfg.create_local_database) {
- enable = mkDefault true;
- ensureDatabases = [ cfg.database_name ];
- ensureUsers = [{
- name = cfg.database_user;
- ensurePermissions = { "DATABASE \"${cfg.database_name}\"" = "ALL PRIVILEGES"; };
- }];
- };
-
systemd.services.matrix-synapse = {
description = "Synapse Matrix homeserver";
- after = [ "network.target" ] ++ lib.optional config.services.postgresql.enable "postgresql.service" ;
+ after = [ "network.target" ] ++ optional hasLocalPostgresDB "postgresql.service";
wantedBy = [ "multi-user.target" ];
preStart = ''
${cfg.package}/bin/homeserver \
@@ -709,6 +715,10 @@ in {
The `trusted_third_party_id_servers` option as been removed in `matrix-synapse` v1.4.0
as the behavior is now obsolete.
'')
+ (mkRemovedOptionModule [ "services" "matrix-synapse" "create_local_database" ] ''
+ Database configuration must be done manually. An exemplary setup is demonstrated in
+
+ '')
];
}
diff --git a/nixos/tests/matrix-synapse.nix b/nixos/tests/matrix-synapse.nix
index fca53009083..f3623aa3c09 100644
--- a/nixos/tests/matrix-synapse.nix
+++ b/nixos/tests/matrix-synapse.nix
@@ -35,12 +35,31 @@ in {
nodes = {
# Since 0.33.0, matrix-synapse doesn't allow underscores in server names
- serverpostgres = args: {
+ serverpostgres = { pkgs, ... }: {
services.matrix-synapse = {
enable = true;
database_type = "psycopg2";
tls_certificate_path = "${cert}";
tls_private_key_path = "${key}";
+ database_args = {
+ password = "synapse";
+ };
+ };
+ services.postgresql = {
+ enable = true;
+
+ # The database name and user are configured by the following options:
+ # - services.matrix-synapse.database_name
+ # - services.matrix-synapse.database_user
+ #
+ # The values used here represent the default values of the module.
+ initialScript = pkgs.writeText "synapse-init.sql" ''
+ CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD 'synapse';
+ CREATE DATABASE "matrix-synapse" WITH OWNER "matrix-synapse"
+ TEMPLATE template0
+ LC_COLLATE = "C"
+ LC_CTYPE = "C";
+ '';
};
};
diff --git a/pkgs/servers/matrix-synapse/default.nix b/pkgs/servers/matrix-synapse/default.nix
index 295881b03a3..8da5d4676d6 100644
--- a/pkgs/servers/matrix-synapse/default.nix
+++ b/pkgs/servers/matrix-synapse/default.nix
@@ -23,11 +23,11 @@ let
in buildPythonApplication rec {
pname = "matrix-synapse";
- version = "1.9.1";
+ version = "1.11.1";
src = fetchPypi {
inherit pname version;
- sha256 = "13csf18dchm75vw251a7h57diag94vw6rhg8kkkbpi35cibn0cz2";
+ sha256 = "0xd4bxsmk67r6pfj5lh0hn36r8z51mxsl39fjfrfdidvl1qqbxnk";
};
patches = [