Building FreeRADIUS on Debian and the RTDL_GLOBAL issue.
Chris Moules
chris at gms.lu
Wed Sep 24 16:50:59 CEST 2008
Hi All,
I have been reading lots into this, and related libltdl issues on Debian, and trying to solve this myself. The problem is that I
am not a great developer / debugger, just a Sys Admin.
I know that there is 'issues' with FreeRADIUS (and other software) on Debian. However I need a working system with a number of
features (SQL, SQL IP Pool and Perl). I am willing to forgo some niceties to have a working system, but I want this to be contained.
I was reading through the thread "RTLD_GLOBAL and sql_ippool" from the list. I understand the issues at hand and that there is
no 'current' solution to this issue. There are some work-arounds however. I opted to try and build the FreeRADIUS package with
it's own libltdl library and install this as a package local library. This is, in my view, the cleanest current solution.
I have modified the debian/rules file:
+++ debian/rules 2008-09-24 14:21:49.000000000 +0200
@@ -68,7 +68,7 @@
--localstatedir=/var \
--with-raddbdir=$(raddbdir) \
--with-logdir=/var/log/$(package) \
- --with-system-libtool --disable-ltdl-install \
+ --with-included-ltdl --enable-ltdl-install \
--with-large-files --with-udpfromto --with-edir \
--enable-developer \
--with-rlm-sql-postgresql-lib-dir=`pg_config --libdir` \
This makes the build system build and (try to) install a local libltdl. The local version has the RTDL_GLOBAL in the dlopen() call.
My problem is that the build system still links all the libraries to the system libltdl.so in /usr/lib/ and not to the 'new'
version in /usr/lib/freeradius
For testing, I modified the sym-link /usr/lib/libltdl.so.3 (the debian linked library) to point to the new version. Doing this,
FreeRADIUS would run. It is not, however, the contained solution that I wanted.
I am unsure how to tell the build system to use this new library. I have done some small experiments, with no success.
Here is a small extract from the build log, regarding the rlm_sql module:
gcc -Wall -g -O2 -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -Wall -D_GNU_SOURCE -g -Wshadow -Wpointer-arith -Wcast-qual
-Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -W
-Wredundant-decls -Wundef -I/home/src/FreeRADIUS/testing/freeradius-server-2.1.0/src
-I/home/src/FreeRADIUS/testing/freeradius-server-2.1.0/libltdl -I/home/src/FreeRADIUS/testing/freeradius-server-2.1.0/libltdl
-I/home/src/FreeRADIUS/testing/freeradius-server-2.1.0/src/modules/rlm_sql -c rlm_sql.c -fPIC -DPIC -o .libs/rlm_sql.o
--
libtool: install: warning: relinking `rlm_sql.la'
(cd /home/src/FreeRADIUS/testing/freeradius-server-2.1.0/src/modules/rlm_sql; /bin/sh
/home/src/FreeRADIUS/testing/freeradius-server-2.1.0/libtool --mode=relink gcc -release 2.1.0 -module -export-dynamic -o
rlm_sql.la -rpath /usr/lib/freeradius rlm_sql.lo sql.lo rlm_sql.c sql.c
/home/src/FreeRADIUS/testing/freeradius-server-2.1.0/src/lib/libfreeradius-radius.la
/home/src/FreeRADIUS/testing/freeradius-server-2.1.0/libltdl/libltdl.la -lnsl -lresolv -lpthread -inst-prefix-dir
/home/src/FreeRADIUS/testing/freeradius-server-2.1.0/debian/tmp)
gcc -shared .libs/rlm_sql.o .libs/sql.o -Wl,--rpath -Wl,/usr/lib/freeradius
-L/home/src/FreeRADIUS/testing/freeradius-server-2.1.0/debian/tmp/usr/lib/freeradius -L/usr/lib/freeradius -lfreeradius-radius
-lltdl -lnsl -lresolv -lpthread -Wl,-soname -Wl,rlm_sql-2.1.0.so -o .libs/rlm_sql-2.1.0.so
-----------------------
Here I see that in the "libtool" line, "-L/usr/lib/freeradius" is set before the "-lltdl", as is "-Wl,--rpath
-Wl,/usr/lib/freeradius".
Still the outcome is:
ldd /usr/lib/freeradius/rlm_sql.so
linux-gate.so.1 => (0xffffe000)
libfreeradius-radius-2.1.0.so => /usr/lib/freeradius/libfreeradius-radius-2.1.0.so (0xb7fcf000)
libltdl.so.3 => /usr/lib/libltdl.so.3 (0xb7fbf000)
libnsl.so.1 => /lib/tls/i686/cmov/libnsl.so.1 (0xb7fa9000)
libresolv.so.2 => /lib/tls/i686/cmov/libresolv.so.2 (0xb7f95000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7f83000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e52000)
/lib/ld-linux.so.2 (0x80000000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7e4e000)
-----------------------
Can anyone tell me how I can get this to build against the included libltdl?
If so, this could be worthy of a patch to the debian system for people who need this to work before the whole this is "fixed
properly" in the words of Alan DeKok ;)
Thanks
Chris
More information about the Freeradius-Devel
mailing list