unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: EuAndreh via Guix-patches via <guix-patches@gnu.org>
To: 59705@debbugs.gnu.org
Cc: EuAndreh <eu@euandre.org>
Subject: [bug#59705] [PATCH] gnu: Add postfix.
Date: Tue, 29 Nov 2022 20:59:30 -0300	[thread overview]
Message-ID: <20221129235930.2532-1-eu@euandre.org> (raw)

* 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(+)

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





             reply	other threads:[~2022-11-30  0:00 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-29 23:59 EuAndreh via Guix-patches via [this message]
2022-11-30 23:32 ` [bug#59705] [PATCH] gnu: Add postfix EuAndreh via Guix-patches via

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221129235930.2532-1-eu@euandre.org \
    --to=guix-patches@gnu.org \
    --cc=59705@debbugs.gnu.org \
    --cc=eu@euandre.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).