all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: John Darrington <john@darrington.wattle.id.au>
To: Alex Vong <alexvong1995@gmail.com>
Cc: guix-devel@gnu.org, John Darrington <jmd@gnu.org>
Subject: Re: [PATCH] gnu: Add sendmail
Date: Sat, 17 Sep 2016 10:50:35 +0200	[thread overview]
Message-ID: <20160917085035.GA23691@jocasta.intra> (raw)
In-Reply-To: <87d1k3t9h3.fsf@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 6152 bytes --]

On Sat, Sep 17, 2016 at 12:51:20PM +0800, Alex Vong wrote:
     Hello,
     
     Thanks for the patch. I do not know how to set up a mail server, so I
     can only comment on generic things. You will have to wait for sysadmin
     to help :)
     
     John Darrington <jmd@gnu.org> writes:
     
     > * gnu/packages/mail.scm (sendmail): New variable.
     > ---
     >  gnu/packages/mail.scm | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++
     >  1 file changed, 80 insertions(+)
     >
     > diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
     > index e344683..aff6a2c 100644
     > --- a/gnu/packages/mail.scm
     > +++ b/gnu/packages/mail.scm
     > @@ -1410,3 +1410,83 @@ provides HTML mail archiving with index, mail thread linking,
     >  etc; plus other capabilities including support for MIME and
     >  powerful user customization features.")
     >      (license gpl2+)))
     > +
     > +
     > +(define-public sendmail
     > +  (package
     > +    (name "sendmail")
     > +    (version "8.15.2")
     > +    (source
     > +     (origin
     > +       (method url-fetch)
     > +       (uri (string-append
     > +             "ftp://ftp.sendmail.org/pub/sendmail/sendmail."
     > +             version ".tar.gz"))
     > +       (sha256
     > +        (base32
     > +         "0fdl9ndmspqspdlmghzxlaqk56j3yajk52d7jxcg21b7sxglpy94"))))
     > +    (build-system gnu-build-system)
     > +    (arguments
     > +     `(#:tests? #f  ; There are no tests
     There is a test/ directory in the tarball which needs seperate
     compilation. The readme in the test/ directory says the test needs root
     privilege, but this is not a problem, since the build daemon has root
     privilege.

They need more than that.  They need the binary to be installed setuid.  So these
cannot be run as package tests.  They must be tested after the as-yet-to-be-written
service is installed.  But I'll update the comment to make it more clear.
     
     > +       #:phases
     > +       (modify-phases %standard-phases
     > +         (add-before 'build 'replace-/bin/sh
     > +           (lambda _
     > +             (substitute*
     > +                 (append
     > +                  (list "smrsh/smrsh.c" "sendmail/conf.c" "contrib/mailprio"
     > +                        "contrib/mmuegel" "devtools/bin/configure.sh")
     > +                  (find-files "." ".*\\.m4")
     > +                  (find-files "." ".*\\.cf"))
     I think this can be simplified to:
     `("smrsh/smrsh.c" "sendmail/conf.c"
        "contrib/mailprio" "contrib/mmuegel"
        "devtools/bin/configure.sh"
        .@(find-files "." ".*\\.m4")
        ,@(find-files "." ".*\\.cf"))
     using the quasi-quote quasi-unquote-splicing notation, which is similar
     to string interpolation in shell "foo bar $(CAR) $(TAR)".

Is that simpler?  It has more characters?
     
     > +                        "contrib/mmuegel" "devtools/bin/configure.sh")
     > +               (("/bin/sh") (which "bash")))
     > +
     > +             (substitute* "devtools/bin/Build"
     > +               (("SHELL=/bin/sh") (string-append "SHELL=" (which "bash"))))
     > +             #t))
     I think the `#t' is not neccessary here, since `substitute*' uses
     `substitute', which will either return #t or throw an exception.

WTF??   Didn't you complain earlier this week when I *didn't* put #t in exactly this
scenario??
     
     > +         (replace 'configure
     > +           (lambda _
     > +
     > +             ;; Render harmless any attempts to chown or chmod
     > +             (substitute* "devtools/bin/install.sh"
     > +               (("owner=\\$2") "owner=''")
     > +               (("group=\\$2") "group=''"))
     > +
     > +             (with-output-to-file "devtools/Site/site.config.m4"
     > +               (lambda ()
     > +                 (format #t "
     > +define(`confCC', `gcc')
     > +define(`confOPTIMIZE', `-g -O2')
     > +define(`confLIBS', `-lresolv')
     > +define(`confINSTALL', `~a/devtools/bin/install.sh')
     > +define(`confDEPEND_TYPE', `CC-M')
     > +define(`confINST_DEP', `')
     > +" (getcwd))))))
     > +         (replace 'build
     > +           (lambda _
     > +             (system* "sh" "Build")
     I think there is a missing `zero?' here.


Would that make any difference? Since only the last expression would get returned from lambda ?
     
     > +             (with-directory-excursion "cf/cf"
     > +               (begin
     > +                 (copy-file "generic-linux.mc" "sendmail.mc")
     > +                 (zero? (system* "sh" "Build" "sendmail.cf"))))))
     > +         (add-before 'install 'pre-install
     > +           (lambda _
     > +             (let ((out (assoc-ref %outputs "out")))
     > +               (mkdir-p (string-append out "/usr/bin"))
     > +               (mkdir-p (string-append out "/usr/sbin"))
     > +               (mkdir-p (string-append out "/etc/mail"))
     > +               (setenv "DESTDIR" out)
     > +               (with-directory-excursion "cf/cf"
     > +                 (zero? (system* "sh" "Build" "install-cf")))))))))
     > +    (inputs
     > +     `(("m4" ,m4)
     > +       ("perl" ,perl)))
     > +    (home-page "http://sendmail.org")
     > +    (synopsis
     > +     "Highly configurable Mail Transfer Agent (MTA)")
     > +    (description
     > +     "Sendmail is a mail transfer agent (MTA) originally developed by Eric
     > +Allman.  It is highly configurable and supports many delivery methods and many
     > +transfer protocols.")
     > +    (license (non-copyleft "file://LICENSE"
     > +                           "See LICENSE in the distribution."))))
     > +
     
     Thanks,
     Alex

-- 
Avoid eavesdropping.  Send strong encrypted email.
PGP Public key ID: 1024D/2DE827B3 
fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
See http://sks-keyservers.net or any PGP keyserver for public key.


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

  reply	other threads:[~2016-09-17  8:50 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-16 16:21 [PATCH] gnu: Add sendmail John Darrington
2016-09-17  4:51 ` Alex Vong
2016-09-17  8:50   ` John Darrington [this message]
2016-09-17  9:03     ` John Darrington
2016-09-17  9:38     ` Alex Vong
2016-09-17 10:11       ` John Darrington
2016-09-18 19:14         ` Alex Kost
2016-09-24  8:22           ` Alex Vong
2016-09-24 17:50             ` Alex Kost

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

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

  git send-email \
    --in-reply-to=20160917085035.GA23691@jocasta.intra \
    --to=john@darrington.wattle.id.au \
    --cc=alexvong1995@gmail.com \
    --cc=guix-devel@gnu.org \
    --cc=jmd@gnu.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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.