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 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.