From a8538a73a782779ce6e4191c779de470f938d5fd Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Thu, 9 Jan 2020 21:12:59 +0000 Subject: [PATCH] mailman: init package for Mailman CLI We already had python3Packages.mailman, but that's only really usable as a library. The only other option was to create a whole Python environment, which was undesirable to install as a system-wide package. --- nixos/modules/services/mail/mailman.nix | 21 ++++----------------- pkgs/servers/mail/mailman/default.nix | 9 +++------ pkgs/servers/mail/mailman/wrapped.nix | 20 ++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 4 files changed, 29 insertions(+), 23 deletions(-) create mode 100644 pkgs/servers/mail/mailman/wrapped.nix diff --git a/nixos/modules/services/mail/mailman.nix b/nixos/modules/services/mail/mailman.nix index ba12c9468e0e..82dedaf9b29a 100644 --- a/nixos/modules/services/mail/mailman.nix +++ b/nixos/modules/services/mail/mailman.nix @@ -6,19 +6,6 @@ let cfg = config.services.mailman; - mailmanPyEnv = pkgs.python3.withPackages (ps: with ps; [mailman mailman-hyperkitty]); - - mailmanExe = with pkgs; stdenv.mkDerivation { - name = "mailman-" + python3Packages.mailman.version; - buildInputs = [makeWrapper]; - unpackPhase = ":"; - installPhase = '' - mkdir -p $out/bin - makeWrapper ${mailmanPyEnv}/bin/mailman $out/bin/mailman \ - --set MAILMAN_CONFIG_FILE /etc/mailman.cfg - ''; - }; - mailmanWeb = pkgs.python3Packages.mailman-web.override { serverEMail = cfg.siteOwner; archiverKey = cfg.hyperkittyApiKey; @@ -189,7 +176,7 @@ in { users.users.mailman = { description = "GNU Mailman"; isSystemUser = true; }; environment = { - systemPackages = [ mailmanExe mailmanWebExe pkgs.sassc ]; + systemPackages = [ pkgs.mailman mailmanWebExe pkgs.sassc ]; etc."mailman.cfg".text = mailmanCfg; }; @@ -205,8 +192,8 @@ in { after = [ "network.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { - ExecStart = "${mailmanExe}/bin/mailman start"; - ExecStop = "${mailmanExe}/bin/mailman stop"; + ExecStart = "${pkgs.mailman}/bin/mailman start"; + ExecStop = "${pkgs.mailman}/bin/mailman stop"; User = "mailman"; Type = "forking"; RuntimeDirectory = "mailman"; @@ -271,7 +258,7 @@ in { description = "Trigger daily Mailman events"; startAt = "daily"; serviceConfig = { - ExecStart = "${mailmanExe}/bin/mailman digests --send"; + ExecStart = "${pkgs.mailman}/bin/mailman digests --send"; User = "mailman"; }; }; diff --git a/pkgs/servers/mail/mailman/default.nix b/pkgs/servers/mail/mailman/default.nix index 8e763800f650..d6b73aea3da5 100644 --- a/pkgs/servers/mail/mailman/default.nix +++ b/pkgs/servers/mail/mailman/default.nix @@ -28,15 +28,12 @@ buildPythonPackage rec { ''; # Mailman assumes that those scripts in $out/bin are Python scripts. Wrapping - # them in shell code breaks this assumption. The proper way to use mailman is - # to create a specialized python interpreter: - # - # python37.withPackages (ps: [ps.mailman]) + # them in shell code breaks this assumption. Use the wrapped version (see + # wrapped.nix) if you need the CLI (rather than the Python library). # # This gives a properly wrapped 'mailman' command plus an interpreter that # has all the necessary search paths to execute unwrapped 'master' and - # 'runner' scripts. The setup is a little tricky, but fortunately NixOS is - # about to get a OS module that takes care of those details. + # 'runner' scripts. dontWrapPythonPrograms = true; meta = { diff --git a/pkgs/servers/mail/mailman/wrapped.nix b/pkgs/servers/mail/mailman/wrapped.nix new file mode 100644 index 000000000000..2a620763d876 --- /dev/null +++ b/pkgs/servers/mail/mailman/wrapped.nix @@ -0,0 +1,20 @@ +{ runCommand, lib, makeWrapper, python3 +, archivers ? [ python3.pkgs.mailman-hyperkitty ] +}: + +let + inherit (python3.pkgs) makePythonPath mailman; +in + +runCommand "${mailman.name}-wrapped" { + inherit (mailman) meta; + buildInputs = [ makeWrapper ]; + passthru = mailman.passthru // { unwrapped = mailman; }; +} '' + mkdir -p "$out/bin" + cd "${mailman}/bin" + for exe in *; do + makeWrapper "${mailman}/bin/$exe" "$out/bin/$exe" \ + --set PYTHONPATH ${makePythonPath ([ mailman ] ++ archivers)} + done +'' diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2feb885ba5dd..255b5dfd90bc 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15321,6 +15321,8 @@ in labelImg = callPackage ../applications/science/machine-learning/labelimg { }; + mailman = callPackage ../servers/mail/mailman/wrapped.nix { }; + mailman-rss = callPackage ../development/python-modules/mailman-rss { }; mattermost = callPackage ../servers/mattermost { };