unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH] gnu: Add openldap.
@ 2013-01-26 19:37 Andreas Enge
  2013-01-26 22:36 ` Ludovic Courtès
  0 siblings, 1 reply; 4+ messages in thread
From: Andreas Enge @ 2013-01-26 19:37 UTC (permalink / raw
  To: bug-guix


[-- Attachment #1.1: Type: text/plain, Size: 800 bytes --]

Attached a patch for openldap, the test phase of which was really tricky.

Since there are dynamically linked independent server and client programs, 
I had to set LD_LIBRARY_PATH. Still, one test failed, but not all the time: 
It succeeded once when run in the build tree. So I took it out. Even then, 
some test fails from time to time; sometimes after an hour of different 
tests passing, sometimes after 15 minutes.

So my impression is that the programs are correctly compiled, but that 
sometimes the server does not respond, or responds too late, and I ended up 
disabling all the tests. But I left my modifications for running tests in 
the file, you can try them out by setting #:tests? to #t.

If there are no opposition or other comments, I am going to push the patch 
on Monday.

Andreas

[-- Attachment #1.2: Type: text/html, Size: 2601 bytes --]

[-- Attachment #2: 0001-gnu-Add-openldap.patch --]
[-- Type: text/x-patch, Size: 4562 bytes --]

From 88a17b0ae63ca3b23006d5654312c14e25ab711c Mon Sep 17 00:00:00 2001
From: Andreas Enge <andreas@enge.fr>
Date: Sat, 26 Jan 2013 20:31:37 +0100
Subject: [PATCH] gnu: Add openldap.

* gnu/packages/openldap.scm: New file.
* Makefile.am (MODULE): Add it.
---
 Makefile.am               |    3 +-
 gnu/packages/openldap.scm |   78 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 80 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/openldap.scm

diff --git a/Makefile.am b/Makefile.am
index 3942db5..9bb8d73 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -110,8 +110,9 @@ MODULES =					\
   gnu/packages/netpbm.scm			\
   gnu/packages/nettle.scm			\
   gnu/packages/ocaml.scm 			\
-  gnu/packages/openssl.scm			\
   gnu/packages/oggvorbis.scm			\
+  gnu/packages/openldap.scm			\
+  gnu/packages/openssl.scm			\
   gnu/packages/pdf.scm				\
   gnu/packages/perl.scm				\
   gnu/packages/pkg-config.scm			\
diff --git a/gnu/packages/openldap.scm b/gnu/packages/openldap.scm
new file mode 100644
index 0000000..83a453e
--- /dev/null
+++ b/gnu/packages/openldap.scm
@@ -0,0 +1,78 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages openldap)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages bdb)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages cyrus-sasl)
+  #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages groff)
+  #:use-module (gnu packages icu4c)
+  #:use-module (gnu packages openssl)
+  #:use-module ((guix licenses) #:select (openldap2.8))
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu))
+
+(define-public openldap
+  (package
+   (name "openldap")
+   (version "2.4.33")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append
+                   "ftp://sunsite.cnlab-switch.ch/mirror/OpenLDAP/openldap-release/openldap-"
+                   version ".tgz"))
+            (sha256 (base32
+                     "0k51mhrs7pkwph2j38w09x7xl1ii69mcdi7b2mfrm9hp1yifrsc1"))))
+   (build-system gnu-build-system)
+   (inputs `(("bdb" ,bdb)
+             ("openssl" ,openssl)
+             ("cyrus-sasl" ,cyrus-sasl)
+             ("groff" ,groff)
+             ("icu4c" ,icu4c)
+             ("libgcrypt" ,libgcrypt)
+             ;; FIXME: currently, openldap requires openssl or gnutls<3, see
+             ;; http://www.openldap.org/its/index.cgi/Incoming?id=7430;page=17
+             ;; Once this is fixed, switch to gnutls.
+             ("zlib" ,zlib)))
+   (arguments
+    `(#:parallel-tests? #f
+      ;; disable all tests; they are too unreliable to be run automatically,
+      ;; since they fail intermittently
+      #:tests? #f
+      #:phases
+       (alist-replace
+        'check
+        (lambda* (#:key #:allow-other-keys #:rest args)
+         (let ((check (assoc-ref %standard-phases 'check)))
+           (for-each (lambda (f)
+                       (substitute* (string-append "tests/scripts/" f)
+                                    (("/bin/rm") "rm")))
+                       '("all" "its-all" "passwd-search" "sql-all" "test027-emptydn"))
+           (setenv "LD_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
+           ;; disable especially finicky test
+           (delete-file "tests/scripts/test050-syncrepl-multimaster")
+           (apply check args)))
+       %standard-phases)))
+   (synopsis "openldap, an implementation of the Lightweight Directory Access Protocol")
+   (description
+    "OpenLDAP is a free implementation of the Lightweight Directory Access Protocol.")
+   (license openldap2.8)
+   (home-page "http://www.openldap.org/")))
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] gnu: Add openldap.
  2013-01-26 19:37 [PATCH] gnu: Add openldap Andreas Enge
@ 2013-01-26 22:36 ` Ludovic Courtès
  2013-01-29 18:58   ` Andreas Enge
  0 siblings, 1 reply; 4+ messages in thread
From: Ludovic Courtès @ 2013-01-26 22:36 UTC (permalink / raw
  To: Andreas Enge; +Cc: bug-guix

Andreas Enge <andreas@enge.fr> skribis:

> Attached a patch for openldap, the test phase of which was really tricky.

Builds fine for me when tests are turned off.

> Since there are dynamically linked independent server and client programs, 
> I had to set LD_LIBRARY_PATH.

That’s a problem.  The problem is that the servers/slapd executable ends
up without libdb in its RUNPATH:

--8<---------------cut here---------------start------------->8---
$ objdump -x /tmp/nix-build-openldap-2.4.33.drv-0/openldap-2.4.33/tests/../servers/slapd/slapd |grep RUNPATH
  RUNPATH              /nix/store/n0m40arwkv84ispnah1hma7526bw0llk-cyrus-sasl-2.1.26/lib:/nix/store/9fnjjsbarscbmakr44ixfv9yhg6z12mw-glibc-2.17/lib:/nix/store/lwc6sygaglzfk17v3w15cc2xv97fjgci-gcc-4.7.2/lib64:/nix/store/lwc6sygaglzfk17v3w15cc2xv97fjgci-gcc-4.7.2/lib:/nix/store/b8vagvbwasqwy8wv8545np40ra468c3p-icu4c-50.1.1/lib:/nix/store/ip943rzyiak1k06h7p2srily1wz73hsd-openssl-1.0.1c/lib
--8<---------------cut here---------------end--------------->8---

That binary gets built like this:

--8<---------------cut here---------------start------------->8---
/nix/store/ryk1ywzz31kp4biclxq3yq6hpjycalyy-bash-4.2/bin/sh ../../libtool --mode=link gcc -static -g -O2     -o slapd main.o globals.o bconfig.o config.o daemon.o connection.o search.o filter.o add.o cr.o attr.o entry.o backend.o backends.o result.o operation.o dn.o compare.o modify.o delete.o modrdn.o ch_malloc.o value.o ava.o bind.o unbind.o abandon.o filterentry.o phonetic.o acl.o str2filter.o aclparse.o init.o user.o lock.o controls.o extended.o passwd.o schema.o schema_check.o schema_init.o schema_prep.o schemaparse.o ad.o at.o mr.o syntax.o oc.o saslauthz.o oidm.o starttls.o index.o sets.o referral.o root_dse.o sasl.o module.o mra.o mods.o sl_malloc.o zn_malloc.o limits.o operational.o matchedValues.o cancel.o syncrepl.o backglue.o backover.o ctxcsn.o ldapsync.o frontend.o slapadd.o slapcat.o slapcommon.o slapdn.o slapindex.o slappasswd.o slaptest.o slapauth.o slapacl.o component.o aci.o alock.o txn.o slapschema.o  version.o libbackends.a liboverlays.a ../../libraries/liblunicode/liblunicode.a ../../libraries/librewrite/librewrite.a ../../libraries/liblutil/liblutil.a ../../libraries/libldap_r/libldap_r.la ../../libraries/liblber/liblber.la  -ldb-5.3      -licuuc -licudata -lsasl2  -lssl -lcrypto   -lresolv  -pthread  \
	
mkdir .libs
gcc -g -O2 -o slapd main.o globals.o bconfig.o config.o daemon.o connection.o search.o filter.o add.o cr.o attr.o entry.o backend.o backends.o result.o operation.o dn.o compare.o modify.o delete.o modrdn.o ch_malloc.o value.o ava.o bind.o unbind.o abandon.o filterentry.o phonetic.o acl.o str2filter.o aclparse.o init.o user.o lock.o controls.o extended.o passwd.o schema.o schema_check.o schema_init.o schema_prep.o schemaparse.o ad.o at.o mr.o syntax.o oc.o saslauthz.o oidm.o starttls.o index.o sets.o referral.o root_dse.o sasl.o module.o mra.o mods.o sl_malloc.o zn_malloc.o limits.o operational.o matchedValues.o cancel.o syncrepl.o backglue.o backover.o ctxcsn.o ldapsync.o frontend.o slapadd.o slapcat.o slapcommon.o slapdn.o slapindex.o slappasswd.o slaptest.o slapauth.o slapacl.o component.o aci.o alock.o txn.o slapschema.o version.o -pthread  libbackends.a liboverlays.a ../../libraries/liblunicode/liblunicode.a ../../libraries/librewrite/librewrite.a ../../libraries/liblutil/liblutil.a ../../libraries/libldap_r/.libs/libldap_r.a /tmp/nix-build-openldap-2.4.33.drv-0/openldap-2.4.33/libraries/liblber/.libs/liblber.a ../../libraries/liblber/.libs/liblber.a /nix/store/c6hmllvdzgphyfb9pwaad42mzdf3kx8w-bdb-5.3.21/lib/libdb-5.3.so -lpthread -licuuc -licudata /nix/store/n0m40arwkv84ispnah1hma7526bw0llk-cyrus-sasl-2.1.26/lib/libsasl2.so -ldl -lssl -lcrypto -lresolv -pthread -Wl,--rpath -Wl,/nix/store/n0m40arwkv84ispnah1hma7526bw0llk-cyrus-sasl-2.1.26/lib -Wl,--rpath -Wl,/nix/store/n0m40arwkv84ispnah1hma7526bw0llk-cyrus-sasl-2.1.26/lib
--8<---------------cut here---------------end--------------->8---

As you can see, libtool replaced -ldb-5.3 by the corresponding absolute
file name.

However, our ld-wrapper only adds to the RUNPATH directories when they
contain libraries passed via -l.  We can fix that eventually, but that’s
not the problem here.

Here’s a hint:

--8<---------------cut here---------------start------------->8---
$ /tmp/nix-build-openldap-2.4.33.drv-0/openldap-2.4.33/libtool --version
ltmain.sh (GNU libtool) 1.5.22-OpenLDAP (1.1220.2.365 2005/12/18 22:14:06)
--8<---------------cut here---------------end--------------->8---

This is not only old, but also hacked in unknown ways.

So, here’s what I tried:

--8<---------------cut here---------------start------------->8---
[ludo@pluto:/tmp/nix-build-openldap-2.4.33.drv-0/openldap-2.4.33]$ cp `type -P libtool` .

[ludo@pluto:/tmp/nix-build-openldap-2.4.33.drv-0/openldap-2.4.33]$ ./libtool --version
libtool (GNU libtool) 2.4.2
Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996

Copyright (C) 2011 Free Software Foundation, Inc.  
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[ludo@pluto:/tmp/nix-build-openldap-2.4.33.drv-0/openldap-2.4.33]$ bash

[ludo@pluto:/tmp/nix-build-openldap-2.4.33.drv-0/openldap-2.4.33]$ source ../environment-variables
[ludo@pluto:/tmp/nix-build-openldap-2.4.33.drv-0]$ rm servers/slapd/slapd

[ludo@pluto:/tmp/nix-build-openldap-2.4.33.drv-0]$ make -C servers/slapd/

[...]

/nix/store/ryk1ywzz31kp4biclxq3yq6hpjycalyy-bash-4.2/bin/sh ../../libtool --mode=link gcc -static -g -O2     -o slapd main.o globals.o bconfig.o config.o daemon.o connection.o search.o filter.o add.o cr.o attr.o entry.o backend.o backends.o result.o operation.o dn.o compare.o modify.o delete.o modrdn.o ch_malloc.o value.o ava.o bind.o unbind.o abandon.o filterentry.o phonetic.o acl.o str2filter.o aclparse.o init.o user.o lock.o controls.o extended.o passwd.o schema.o schema_check.o schema_init.o schema_prep.o schemaparse.o ad.o at.o mr.o syntax.o oc.o saslauthz.o oidm.o starttls.o index.o sets.o referral.o root_dse.o sasl.o module.o mra.o mods.o sl_malloc.o zn_malloc.o limits.o operational.o matchedValues.o cancel.o syncrepl.o backglue.o backover.o ctxcsn.o ldapsync.o frontend.o slapadd.o slapcat.o slapcommon.o slapdn.o slapindex.o slappasswd.o slaptest.o slapauth.o slapacl.o component.o aci.o alock.o txn.o slapschema.o  version.o libbackends.a liboverlays.a ../../libraries/liblunicode/liblunicode.a ../../libraries/librewrite/librewrite.a ../../libraries/liblutil/liblutil.a ../../libraries/libldap_r/libldap_r.la ../../libraries/liblber/liblber.la  -ldb-5.3      -licuuc -licudata -lsasl2  -lssl -lcrypto   -lresolv  -pthread  \

libtool: link: gcc -g -O2 -o slapd main.o globals.o bconfig.o config.o daemon.o connection.o search.o filter.o add.o cr.o attr.o entry.o backend.o backends.o result.o operation.o dn.o compare.o modify.o delete.o modrdn.o ch_malloc.o value.o ava.o bind.o unbind.o abandon.o filterentry.o phonetic.o acl.o str2filter.o aclparse.o init.o user.o lock.o controls.o extended.o passwd.o schema.o schema_check.o schema_init.o schema_prep.o schemaparse.o ad.o at.o mr.o syntax.o oc.o saslauthz.o oidm.o starttls.o index.o sets.o referral.o root_dse.o sasl.o module.o mra.o mods.o sl_malloc.o zn_malloc.o limits.o operational.o matchedValues.o cancel.o syncrepl.o backglue.o backover.o ctxcsn.o ldapsync.o frontend.o slapadd.o slapcat.o slapcommon.o slapdn.o slapindex.o slappasswd.o slaptest.o slapauth.o slapacl.o component.o aci.o alock.o txn.o slapschema.o version.o -pthread  libbackends.a liboverlays.a ../../libraries/liblunicode/liblunicode.a ../../libraries/librewrite/librewrite.a ../../libraries/liblutil/liblutil.a ../../libraries/libldap_r/.libs/libldap_r.a /tmp/nix-build-openldap-2.4.33.drv-0/openldap-2.4.33/libraries/liblber/.libs/liblber.a ../../libraries/liblber/.libs/liblber.a -ldb-5.3 -licuuc -licudata /nix/store/n0m40arwkv84ispnah1hma7526bw0llk-cyrus-sasl-2.1.26/lib/libsasl2.so -ldl -lssl -lcrypto -lresolv -pthread -Wl,-rpath -Wl,/nix/store/n0m40arwkv84ispnah1hma7526bw0llk-cyrus-sasl-2.1.26/lib -Wl,-rpath -Wl,/nix/store/n0m40arwkv84ispnah1hma7526bw0llk-cyrus-sasl-2.1.26/lib
rm -f slapadd slapcat slapdn slapindex slappasswd slaptest slapauth slapacl slapschema
--8<---------------cut here---------------end--------------->8---

Surprise, -ldb5.3 is used now, and thus it ends up in the RPATH.

So I would suggest adding Libtool/bin as an input, and adding a phase
that does (copy-file (which "libtool") "libtool") right after ‘configure’.

> Still, one test failed, but not all the time: It succeeded once when
> run in the build tree. So I took it out. Even then, some test fails
> from time to time; sometimes after an hour of different tests passing,
> sometimes after 15 minutes.

Did you check whether it does DNS lookups or similar?

If it turns out to be this unreliable, then yes, it’s safer to disable
them.

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] gnu: Add openldap.
  2013-01-26 22:36 ` Ludovic Courtès
@ 2013-01-29 18:58   ` Andreas Enge
  2013-01-29 20:44     ` Ludovic Courtès
  0 siblings, 1 reply; 4+ messages in thread
From: Andreas Enge @ 2013-01-29 18:58 UTC (permalink / raw
  To: Ludovic Courtès; +Cc: bug-guix

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

Am Samstag, 26. Januar 2013 schrieb Ludovic Courtès:
> So I would suggest adding Libtool/bin as an input, and adding a phase
> that does (copy-file (which "libtool") "libtool") right after
> ‘configure’.

Thanks for your help in implementing this!

> Did you check whether it does DNS lookups or similar?

Not that I could tell and there is no reason for it, but the file has over 
2000 lines. I ended up disabling two tests; the remaining tests pass, 
taking over an hour on my laptop, and I pushed the patch.

Andreas


[-- Attachment #2: Type: text/html, Size: 2960 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] gnu: Add openldap.
  2013-01-29 18:58   ` Andreas Enge
@ 2013-01-29 20:44     ` Ludovic Courtès
  0 siblings, 0 replies; 4+ messages in thread
From: Ludovic Courtès @ 2013-01-29 20:44 UTC (permalink / raw
  To: Andreas Enge; +Cc: bug-guix

Andreas Enge <andreas@enge.fr> skribis:

> Am Samstag, 26. Januar 2013 schrieb Ludovic Courtès:

[...]

>> Did you check whether it does DNS lookups or similar?
>
> Not that I could tell and there is no reason for it, but the file has over 
> 2000 lines. I ended up disabling two tests; the remaining tests pass, 
> taking over an hour on my laptop, and I pushed the patch.

Cool, thanks!

Ludo’.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-01-29 20:44 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-26 19:37 [PATCH] gnu: Add openldap Andreas Enge
2013-01-26 22:36 ` Ludovic Courtès
2013-01-29 18:58   ` Andreas Enge
2013-01-29 20:44     ` Ludovic Courtès

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