[PATCH] gnu: Add postfix.

  • Open
  • quality assurance status badge
Details
2 participants
  • EuAndreh
  • Ludovic Courtès
Owner
unassigned
Submitted by
EuAndreh
Severity
normal
E
E
EuAndreh wrote on 30 Nov 2022 00:59
(address . guix-patches@gnu.org)(name . EuAndreh)(address . eu@euandre.org)
20221129235930.2532-1-eu@euandre.org
* gnu/packages/mail.scm (postfix): New variable.
---

Notes:
This package has a few too many assumptions about the system where its
running.
Other than the usual call to hard-coded /bin/sh paths:
- is too conservative on the PATH that the "master" process is launched
into;
- what is available to sbin(8) commands under their paths;
- where the setuid programs live;
- what should be the permissions of files under /etc/.
It also has a very opinionated way of being given $PREFIX paths, and how
the dynamic Makefiles are generated, how DESTDIR is handled, etc.
I had disabled the "postconf -e" ability to edit configuration options
in-place, as the postfix-service-type that I'm working on generates
those files and puts the in the store, which isn't writable.
All in all, this is a working package: this very email is sent from a
local installation of Postfix in my Guix laptop, which forward the email
to the server running Postfix under Guix, who than sends it off to the
internet! So if you're reading this, it is working :)

gnu/packages/mail.scm | 125 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 125 insertions(+)

Toggle diff (135 lines)
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 754c9bc6de..c18ddced82 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -4876,3 +4876,128 @@ (define-public aerc
;; <https://lists.sr.ht/~rjarry/aerc-devel/%3Cb5cb213a7d0c699a886971658c2476
;; 1073eb2391%40disroot.org%3E>
(license license:gpl3+)))
+
+(define-public postfix
+ (package
+ (name "postfix")
+ (version "3.8-20221023")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "http://cdn.postfix.johnriley.me/mirrors/postfix-release/experimental/postfix-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "0aaylhn81n9z3kidx53kzf2jrilr3lgwfxsk1r4hn7nkrp62bcwm"))))
+ (build-system gnu-build-system)
+ (arguments
+ (list #:tests? #f
+ #:modules `((srfi srfi-26)
+ ,@%gnu-build-system-modules)
+ #:phases #~(modify-phases %standard-phases
+ (add-before 'configure 'patch-/bin/sh
+ (lambda _
+ (substitute* (find-files "." "^Makefile")
+ (("/bin/sh")
+ (which "sh")))))
+ (add-before 'configure 'patch-bdb-include
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "makedefs"
+ (("/usr/include")
+ (string-append (assoc-ref inputs "bdb")
+ "/include")))))
+ (add-before 'configure 'dont-hardcode-PATH
+ (lambda _
+ (substitute* '("postfix-install"
+ "conf/post-install")
+ (("^PATH=")
+ "# PATH="))))
+ (add-before 'configure 'fix-strict-PATH
+ (lambda _
+ (substitute* "src/util/sys_defs.h"
+ (("^#define (ROOT_PATH|_PATH_DEFPATH|_PATH_STDPATH).*")
+ "#define ROOT_PATH \"/run/setuid-programs:/run/current-system/profile/bin:/run/current-system/profile/sbin\"\n"))))
+ (add-before 'configure 'use-relative-symlink-to-store
+ (lambda _
+ (substitute* "postfix-install"
+ (("ln -sf")
+ "ln -rsf"))))
+ (add-before 'configure 'fix-absolute-path-to-setuid-programs
+ (lambda _
+ (substitute* "conf/postfix-script"
+ (("\\$command_directory/postqueue")
+ "/run/setuid-programs/postqueue")
+ (("\\$command_directory/postdrop")
+ "/run/setuid-programs/postdrop"))))
+ (add-before 'configure 'disable-warning-on-non-writable-config-files
+ (lambda _
+ (substitute* "conf/postfix-script"
+ (("find \\$todo \\\\\\( -perm -020 -o -perm -002 \\\\\\) \\\\\n")
+ " # find $todo \\( -perm -020 -o -perm -002 \\)"))))
+ (add-before 'configure 'disable-write-to-/etc/postfix
+ (lambda _
+ (substitute* "src/postconf/postconf_edit.c"
+ (("pcf_set_config_dir.*")
+ "return;"))))
+ (add-before 'configure 'setup-environment
+ (lambda* (#:key outputs inputs #:allow-other-keys)
+ (setenv "CCARGS"
+ (string-append
+ "-DUSE_TLS -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I"
+ (assoc-ref inputs "cyrus-sasl")
+ "/include/sasl"))
+ (setenv "AUXLIBS" "-lnsl -lcrypto -lssl -lsasl2")
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin"))
+ (sbin (string-append out "/sbin"))
+ (lib (string-append out "/lib/postfix"))
+ (libexec (string-append out
+ "/libexec/postfix"))
+ (etc (string-append out "/etc/postfix"))
+ (man (string-append out "/share/man"))
+ (doc (string-append out
+ "/share/doc/postfix-"
+ #$version))
+ (html (string-append doc "/html")))
+ (setenv "install_root" "wip-prefix")
+ (setenv "newaliases_path"
+ (string-append bin "/newaliases"))
+ (setenv "mailq_path"
+ (string-append bin "/mailq"))
+ (setenv "sendmail_path"
+ (string-append sbin "/sendmail"))
+ (setenv "command_directory" sbin)
+ (setenv "shlib_directory" lib)
+ (setenv "daemon_directory" libexec)
+ (setenv "meta_directory" etc)
+ (setenv "sample_directory" etc)
+ (setenv "manpage_directory" man)
+ (setenv "readme_directory" doc)
+ (setenv "html_directory" html)
+ (setenv "sample_directory"
+ (string-append out "/share/postfix")))))
+ (replace 'configure
+ (lambda _
+ (invoke "make" "makefiles" "pie=yes"
+ "dynamicmaps=yes")))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (invoke "make" "non-interactive-package")
+ (delete-file-recursively "wip-prefix/var")
+ (copy-recursively "wip-prefix/etc"
+ (string-append out "/etc"))
+ (copy-recursively (string-append "wip-prefix"
+ out) out)))))))
+ (inputs (list bdb cyrus-sasl libnsl openssl perl))
+ (native-inputs (list m4))
+ (home-page "https://www.postfix.org")
+ (synopsis "sendmail compatible MTA")
+ (description
+ "Postfix is Wietse Venema's mail server that started life at IBM research
+as an alternative to the widely-used Sendmail program. Now at Google, Wietse
+continues to support Postfix.
+
+Postfix attempts to be fast, easy to administer, and secure. The outside has a
+definite Sendmail-ish flavor, but the inside is completely different.")
+ (license (list license:ibmpl1.0 license:epl2.0))))
--
2.38.1
E
E
EuAndreh wrote on 1 Dec 2022 00:32
(address . 59705@debbugs.gnu.org)
08c43e00-4b3b-1195-49a6-f6f08ae68ddb@euandre.org
Talking about this with rekado on IRC, it reminded me that I found out
about the "wip-postfix" branch after I started working on this package.
This patch supersedes it, and I took inspiration from it during the
final tweaks.

I'm Cc'ing some people involved in previous discussions about Postfix on
Guix, and wip-postfix, and invite you to review it too: :)

I'm doing the final polishing touches on postfix-service-type, alongsige
with cyrus-sasl-service-type and dkimproxyout-service-type to have a
fully compliant woking mail server.
L
L
Ludovic Courtès wrote on 14 Dec 2022 12:36
control message for bug #59705
(address . control@debbugs.gnu.org)
87y1rarzdl.fsf@gnu.org
tags 59705 + moreinfo
quit
?