diff --git a/nixos/modules/services/mail/roundcube.nix b/nixos/modules/services/mail/roundcube.nix index 66b1c1e3e6f..e8b2e11bf72 100644 --- a/nixos/modules/services/mail/roundcube.nix +++ b/nixos/modules/services/mail/roundcube.nix @@ -141,27 +141,31 @@ in systemd.services.roundcube-setup = let pgSuperUser = config.services.postgresql.superUser; - in { - requires = [ "postgresql.service" ]; - after = [ "postgresql.service" ]; - wantedBy = [ "multi-user.target" ]; - path = [ config.services.postgresql.package ]; - script = '' - mkdir -p /var/lib/roundcube - if [ ! -f /var/lib/roundcube/db-created ]; then - if [ "${cfg.database.host}" = "localhost" ]; then - ${pkgs.sudo}/bin/sudo -u ${pgSuperUser} psql postgres -c "create role ${cfg.database.username} with login password '${cfg.database.password}'"; - ${pkgs.sudo}/bin/sudo -u ${pgSuperUser} psql postgres -c "create database ${cfg.database.dbname} with owner ${cfg.database.username}"; + in mkMerge [ + (mkIf (cfg.database.host == "localhost") { + requires = [ "postgresql.service" ]; + after = [ "postgresql.service" ]; + path = [ config.services.postgresql.package ]; + }) + { + wantedBy = [ "multi-user.target" ]; + script = '' + mkdir -p /var/lib/roundcube + if [ ! -f /var/lib/roundcube/db-created ]; then + if [ "${cfg.database.host}" = "localhost" ]; then + ${pkgs.sudo}/bin/sudo -u ${pgSuperUser} psql postgres -c "create role ${cfg.database.username} with login password '${cfg.database.password}'"; + ${pkgs.sudo}/bin/sudo -u ${pgSuperUser} psql postgres -c "create database ${cfg.database.dbname} with owner ${cfg.database.username}"; + fi + PGPASSWORD=${cfg.database.password} ${pkgs.postgresql}/bin/psql -U ${cfg.database.username} \ + -f ${cfg.package}/SQL/postgres.initial.sql \ + -h ${cfg.database.host} ${cfg.database.dbname} + touch /var/lib/roundcube/db-created fi - PGPASSWORD=${cfg.database.password} ${pkgs.postgresql}/bin/psql -U ${cfg.database.username} \ - -f ${cfg.package}/SQL/postgres.initial.sql \ - -h ${cfg.database.host} ${cfg.database.dbname} - touch /var/lib/roundcube/db-created - fi - ${pkgs.php}/bin/php ${cfg.package}/bin/update.sh - ''; - serviceConfig.Type = "oneshot"; - }; + ${pkgs.php}/bin/php ${cfg.package}/bin/update.sh + ''; + serviceConfig.Type = "oneshot"; + } + ]; }; } diff --git a/pkgs/servers/roundcube/0001-Don-t-resolve-symlinks-when-trying-to-find-INSTALL_P.patch b/pkgs/servers/roundcube/0001-Don-t-resolve-symlinks-when-trying-to-find-INSTALL_P.patch new file mode 100644 index 00000000000..96710d6162d --- /dev/null +++ b/pkgs/servers/roundcube/0001-Don-t-resolve-symlinks-when-trying-to-find-INSTALL_P.patch @@ -0,0 +1,27 @@ +From c1832eabb99cec47f1714f696275285e1e28da34 Mon Sep 17 00:00:00 2001 +From: Maximilian Bosch +Date: Tue, 2 Apr 2019 16:20:50 +0200 +Subject: [PATCH] Don't resolve symlinks when trying to find INSTALL_PATH + +Nix specific patch. This behavior breaks roundcube setups where plugins +are in a store path with symlinks to the actual source. +--- + bin/update.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/bin/update.sh b/bin/update.sh +index 08e3bb5..b2ad498 100755 +--- a/bin/update.sh ++++ b/bin/update.sh +@@ -19,7 +19,7 @@ + +-----------------------------------------------------------------------+ + */ + +-define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); ++define('INSTALL_PATH', __DIR__ . '/../' ); + + require_once INSTALL_PATH . 'program/include/clisetup.php'; + +-- +2.19.2 + diff --git a/pkgs/servers/roundcube/default.nix b/pkgs/servers/roundcube/default.nix index cda5ae1d6c5..685e856644e 100644 --- a/pkgs/servers/roundcube/default.nix +++ b/pkgs/servers/roundcube/default.nix @@ -1,14 +1,21 @@ -{ lib, stdenv, fetchzip, buildEnv, roundcube, roundcubePlugins }: -let +{ lib, fetchurl, stdenv, buildEnv, roundcube, roundcubePlugins }: + +stdenv.mkDerivation rec { + pname = "roundcube"; version = "1.3.8"; -in -fetchzip rec { - name= "roundcube-${version}"; - url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/roundcubemail-${version}-complete.tar.gz"; - sha256 = "1lhwr13bglm8rqgamnb480b07wpqhw9bskjj2xxb0x8kdjly29ks"; + src = fetchurl { + url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/roundcubemail-${version}-complete.tar.gz"; + sha256 = "018djad7ygfl9c9f2l2j42qkg31ml3hs2f01f0dk361zckwk77n4"; + }; - extraPostFetch = '' + patches = [ ./0001-Don-t-resolve-symlinks-when-trying-to-find-INSTALL_P.patch ]; + + dontBuild = true; + + installPhase = '' + mkdir $out + cp -r * $out/ ln -sf /etc/roundcube/config.inc.php $out/config/config.inc.php rm -rf $out/installer '';