]> git.immae.eu Git - perso/Immae/Config/Nix.git/commitdiff
Add roundcubemail
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Tue, 8 Jan 2019 12:28:22 +0000 (13:28 +0100)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Tue, 8 Jan 2019 12:28:22 +0000 (13:28 +0100)
virtual/eldiron.nix
virtual/packages.nix
virtual/packages/roundcubemail.nix [new file with mode: 0644]

index 2152aff465670c1829471a22dbad9bd22d0a4780..172b3697f878c956b9262e01df6f69f0d9cce901 100644 (file)
         nextcloud = mypkgs.nextcloud.phpFpm.pool;
         mantisbt = mypkgs.mantisbt.phpFpm.pool;
         ttrss = mypkgs.ttrss.phpFpm.pool;
+        roundcubemail = mypkgs.roundcubemail.phpFpm.pool;
       };
     };
 
       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
         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"
             mypkgs.adminer.apache.vhostConf
             mypkgs.ympd.apache.vhostConf
             mypkgs.ttrss.apache.vhostConf
+            mypkgs.roundcubemail.apache.vhostConf
           ];
         })
         (withConf "eldiron" // {
index ee5dc155634b73a2d20ecace8a0d53b0c30b4164..ef14e90d764f6af7825b9a6703f0cebf0d22210a 100644 (file)
@@ -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 (file)
index 0000000..1aa2d87
--- /dev/null
@@ -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" ''
+      <?php
+        $config['db_dsnw'] = '${builtins.getEnv "NIXOPS_ROUNDCUBEMAIL_PSQL_URL"}';
+        $config['default_host'] = 'ssl://mail.immae.eu';
+        $config['imap_conn_options'] = array("ssl" => 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}"
+      <Directory "${webRoot}">
+          DirectoryIndex index.php
+          AllowOverride All
+          Options FollowSymlinks
+          Require all granted
+
+          <FilesMatch "\.php$">
+            SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost"
+          </FilesMatch>
+        </Directory>
+        '';
+    };
+    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