[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
2.0-alpha and Solaris 7
Folks, just a few notes on trying to build OpenLDAP 2.0-alpha on Solaris 7 for
testing; most of this is an update on existing known problems.
Test Environ:
OpenLDAP 2.0-alpha, Solaris 7, sun4c (SPARC), gcc 2.8.1, Berkeley DB 2.7.5
- Problem #1: OpenLDAP and Solaris threads don't like each other (saga)
With OpenLDAP 1.x the error has been:
pthread.h and pthread_create are not compatible
With OpenLDAP 2.0-alpha the error has become:
pthread_create is not usable, check environment settings
In both cases, the cause is generally the same (Solaris' libc including
a bogus pthread_create stub - Solaris 2.6 and 7, but not 2.5.1). Previous
discussions (leading to FAQ notes) has revolved around four approaches:
a. disable threads;
b. use Sun LWP's instead;
c. add "-lpthread -lposix4" to LIBS before running configure; or,
d. preset a lot of environment variables to "no" to trick configure into
using the correct POSIX threads configuration for Solaris.
Approach (a) is no good if you need replication as slurpd requires threads.
Approach (b) is iffy, given Kurt's comments in relation to ITS#249 regarding
some Solaris systems not reclaiming LWP resources (in which case, shouldn't
this be removed as a "viable alternative" from the FAQ?).
Approach (c) is noted in the FAQ as being "not generally recommended", and
besides is version specific (Solaris 2.5.1 and 2.6 have a distinct
"libposix4" whereas Solaris 7's "libposix4" is just a symlink to "librt").
Approach (d) is user unfriendly (even for experienced sysadmins) and is
OpenLDAP version specific (the variable names have changed for 2.0-alpha
so the recommended settings don't work and thus trigger the "-kthread"
problem noted in the FAQ).
It would be *really* nice if configure just recognised this problem and
worked around it (after all, AIX and Linux seem to be singled out for
special threads attention in configure - why not Solaris? It has just as
many bugs as the others..). Not having autoconf on any of our Solaris
boxen I just hacked configure to see if it would at least build the beast,
by adding the following starting at line 6140:
# skip tests we know will fail, jump to -lpthread
# since sunpro c uses -mt, maybe we should not do this if CC is sunpro c
case "$target" in
*-sun-solaris2.[67])
# should perhaps only do this for gcc/egcs
ol_cv_pthread_create=no
ol_cv_pthread_mt=no
ol_cv_pthread_kthread=no
ol_cv_pthread_pthread=no
ol_cv_pthread_pthreads=no
ol_cv_pthread_mthreads=no
ol_cv_pthread_thread=no
ol_cv_pthread_lpthread_lmach_lexc_lc_r=no
ol_cv_pthread_lpthread_lmach_lexc=no
ol_cv_pthread_lpthread_lexc=no
ol_cv_pthread_lib_lpthread_woff=no
ol_cv_pthread_lpthread=yes
;;
esac
# Solaris 7 is like Digital UNIX - sched_yield() in -lrt
# libposix4 is a symlink to librt
# but does it work -- who knows...
case "$target" in
*-sun-solaris2.7)
# should perhaps only do this for gcc/egcs
ac_cv_func_sched_yield=yes
LTHREAD_LIBS="$LTHREAD_LIBS -lrt"
;;
esac
Is there any particular reason for the threads detection code used by
configure at present? Squid's configure (for example) just looks straight
for "-lpthread"; would putting that test first break any other platforms?
- Problem #2: symbol inet_aton not found linking slapd
This is ITS#244; until the "new inet_aton" (now replaced with "inet_addr"?)
appears on the scene (a new 2.0 snapshot, for those of us without CVS),
this just breaks completely making it a tad difficult for Solaris 2.x users
to test OpenLDAP 2.0-alpha.
The comment was made that libresolv.so should be linked to libresolv.so.2
to fix this problem - I found this was already the case on the Solaris 7,
2.6 and 2.5.1 (recent patch cluster) machines I checked. The problem was
in fact that "-lresolv" wasn't even being linked at all to slapd.
- Problem #3: documentation mismatch
After finally completing the build, the top-level INSTALL file says to run:
cd tests
make
Alas, this doesn't actually achieve the desired result. As the README in
the "tests" subdirectory shows, you need to run:
make test
At this point slapd core dumped upon startup, the caffeine ran out and the
sleep process gained control of the CPU.
Cheers..
dave