From d252d718e9d42fb3a13d64e5b8daa37ca9264211 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Tue, 8 Jan 2019 13:28:22 +0100 Subject: [PATCH] Add roundcubemail --- virtual/eldiron.nix | 4 ++ virtual/packages.nix | 2 + virtual/packages/roundcubemail.nix | 110 +++++++++++++++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100644 virtual/packages/roundcubemail.nix diff --git a/virtual/eldiron.nix b/virtual/eldiron.nix index 2152aff..172b369 100644 --- a/virtual/eldiron.nix +++ b/virtual/eldiron.nix @@ -256,6 +256,7 @@ nextcloud = mypkgs.nextcloud.phpFpm.pool; mantisbt = mypkgs.mantisbt.phpFpm.pool; ttrss = mypkgs.ttrss.phpFpm.pool; + roundcubemail = mypkgs.roundcubemail.phpFpm.pool; }; }; @@ -272,6 +273,7 @@ aten_prod = mypkgs.aten_prod.activationScript; nextcloud = mypkgs.nextcloud.activationScript; ttrss = mypkgs.ttrss.activationScript; + roundcubemail = mypkgs.roundcubemail.activationScript; httpd = '' install -d -m 0755 /var/lib/acme/acme-challenge install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions @@ -432,6 +434,7 @@ mypkgs.git.web.apache.modules ++ mypkgs.mantisbt.apache.modules ++ mypkgs.ttrss.apache.modules ++ + mypkgs.roundcubemail.apache.modules ++ pkgs.lib.lists.flatten (pkgs.lib.attrsets.mapAttrsToList (n: v: v.modules) apacheConfig) ++ [ "macro" ]); extraConfig = builtins.concatStringsSep "\n" @@ -458,6 +461,7 @@ mypkgs.adminer.apache.vhostConf mypkgs.ympd.apache.vhostConf mypkgs.ttrss.apache.vhostConf + mypkgs.roundcubemail.apache.vhostConf ]; }) (withConf "eldiron" // { diff --git a/virtual/packages.nix b/virtual/packages.nix index ee5dc15..ef14e90 100644 --- a/virtual/packages.nix +++ b/virtual/packages.nix @@ -11,6 +11,7 @@ let gitweb = callPackage ./packages/gitweb.nix {}; mantisbt = callPackage ./packages/mantisbt.nix { inherit checkEnv fetchedGithub; }; ttrss = callPackage ./packages/ttrss.nix { inherit checkEnv fetchedGithub fetchedGit; }; + roundcubemail = callPackage ./packages/roundcubemail.nix { inherit checkEnv; }; in { inherit adminer; @@ -28,6 +29,7 @@ in inherit nextcloud; inherit mantisbt; inherit ttrss; + inherit roundcubemail; # FIXME: add buildbot git = { web = gitweb; }; } diff --git a/virtual/packages/roundcubemail.nix b/virtual/packages/roundcubemail.nix new file mode 100644 index 0000000..1aa2d87 --- /dev/null +++ b/virtual/packages/roundcubemail.nix @@ -0,0 +1,110 @@ +{ lib, checkEnv, writeText, stdenv, fetchurl }: +let + roundcubemail = let + plugins = {}; + in rec { + varDir = "/var/lib/roundcubemail"; + # FIXME: initial sync + activationScript = { + deps = [ "wrappers" ]; + text = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/cache + install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions + ''; + }; + config = + # FIXME: LOG_DESTINATION syslog? + assert checkEnv "NIXOPS_ROUNDCUBEMAIL_PSQL_URL"; + assert checkEnv "NIXOPS_ROUNDCUBEMAIL_SECRET"; + writeText "config.php" '' + array("verify_peer" => false)); + $config['smtp_server'] = 'tls://mail.immae.eu'; + + $config['imap_cache'] = 'db'; + $config['messages_cache'] = 'db'; + + $config['support_url'] = '''; + + $config['des_key'] = '${builtins.getEnv "NIXOPS_ROUNDCUBEMAIL_SECRET"}'; + + $config['plugins'] = array(); + + $config['language'] = 'fr_FR'; + + $config['drafts_mbox'] = 'Mail/Drafts'; + $config['junk_mbox'] = 'Mail/Spam'; + $config['sent_mbox'] = 'Mail/sent'; + $config['trash_mbox'] = '''; + $config['default_folders'] = array('INBOX', 'Mail/Drafts', 'Mail/sent', 'Mail/Spam', '''); + $config['draft_autosave'] = 60; + $config['enable_installer'] = false; + $config['log_driver'] = 'stdout'; + $config['temp_dir'] = '${varDir}/cache'; + $config['debug_level'] = 1; + ''; + webRoot = stdenv.mkDerivation rec { + version = "1.3.8"; + name = "roundcubemail-${version}"; + src= fetchurl { + url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz"; + sha256 = "018djad7ygfl9c9f2l2j42qkg31ml3hs2f01f0dk361zckwk77n4"; + }; + buildPhase = '' + sed -i \ + -e "s|RCUBE_INSTALL_PATH . 'temp.*|'${varDir}/cache';|" \ + config/defaults.inc.php + ''; + installPhase = '' + cp -a . $out + ln -s ${config} $out/config/config.inc.php + ${builtins.concatStringsSep "\n" ( + lib.attrsets.mapAttrsToList (name: value: "ln -sf ${value} $out/plugins/${name}") plugins + )} + ''; + }; + apache = { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + vhostConf = '' + Alias /roundcube "${webRoot}" + + DirectoryIndex index.php + AllowOverride All + Options FollowSymlinks + Require all granted + + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + + + ''; + }; + phpFpm = rec { + basedir = builtins.concatStringsSep ":" ( + [ webRoot config varDir ] + ++ lib.attrsets.mapAttrsToList (name: value: value) plugins); + socket = "/var/run/phpfpm/roundcubemail.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = ondemand + pm.max_children = 60 + pm.process_idle_timeout = 60 + + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = RoundcubemailPHPSESSID + php_admin_value[open_basedir] = "${basedir}:/tmp" + php_admin_value[session.save_path] = "${varDir}/phpSessions" + ''; + }; + }; +in + roundcubemail -- 2.41.0