[mod_python] old libexpat shared library

Luyi Chen lychen1109 at gmail.com
Mon Apr 7 06:59:55 EDT 2008


I have solved the problem. The solution is to remove the wrong
libexpat version from /usr/local/apache2/lib, then reinstall
apr/apr-util/apache.

Thanks Graham.

Luyi



On Mon, Apr 7, 2008 at 2:49 PM, Graham Dumpleton
<graham.dumpleton at gmail.com> wrote:
> You would need to go through the same ldd debugging to work out why.
>
>  BTW, if nothing is using the wrong/bad versions of apache/expat/apr
>  installed under /usr/local, can you just remove them so you are doing
>  a clean build with their only being the single expat version
>  installed.
>
>  Also be aware that if you can get past the dual expat linkage problem,
>  if you use Python 2.5, what version of expat library is used doesn't
>  even matter as in Python 2.5 the names of contained expat library in
>  Python expat module and namespace prefixed anyway and there is no
>  clash.
>
>  Graham
>
>  2008/4/7 Luyi Chen <lychen1109 at gmail.com>:
>
>
> > Thanks Graham,
>  >
>  >  I am almost done, but still need one more step. Here's what I did:
>  >
>  >  1) I installed Apache2.2.6 included apr
>  >  2) When I tried to install the included version of apr-util, I got the
>  >  following error
>  >  libtool: install: error: cannot install `libaprutil-1.la' to a
>  >  directory not ending in /usr/local/apache2/lib
>  >
>  >  A little Googling shows someone else also meet the problem, but
>  >  without finding the reason.
>  >
>  >  3) So I downloaded apr-util-1.2.12 from Apache website, and installed
>  >  it without problem.
>  >  4) I compiled Apache again with options pointing to the formerly
>  >  installed apr and apr-util
>  >  5) Now, when I ldd httpd, I got the following info
>  >
>  >         libz.so.1 => /usr/lib/libz.so.1 (0x00002aebe6011000)
>  >         libm.so.6 => /lib/libm.so.6 (0x00002aebe6127000)
>  >         libaprutil-1.so.0 =>
>  >  /usr/local/apr-util-httpd//lib/libaprutil-1.so.0 (0x00002aebe62ac000)
>  >         libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00002aebe63c4000)
>  >
>  >         libapr-1.so.0 => /usr/local/apache2/lib/libapr-1.so.0
>  >  (0x00002aebe64e8000)
>  >         librt.so.1 => /lib/librt.so.1 (0x00002aebe6610000)
>  >         libcrypt.so.1 => /lib/libcrypt.so.1 (0x00002aebe6718000)
>  >         libpthread.so.0 => /lib/libpthread.so.0 (0x00002aebe684c000)
>  >         libdl.so.2 => /lib/libdl.so.2 (0x00002aebe6961000)
>  >         libc.so.6 => /lib/libc.so.6 (0x00002aebe6a63000)
>  >         /lib64/ld-linux-x86-64.so.2 (0x00002aebe5efa000)
>  >
>  >  This seems good, because the libexpat in my /usr/lib directory is the right one.
>  >
>  >  6) I restarted Apache
>  >  7) I checked runtime context of Apache, then I got this
>  >
>  >  $ ps aux | grep http | head -3
>  >  root      4757  0.0  3.9  47972 10212 ?        Ss   Apr04   0:00
>  >  /usr/local/apache2/bin/httpd -k restart
>  >  apache   29984  0.0  3.4  48104  8992 ?        S    23:31   0:00
>  >  /usr/local/apache2/bin/httpd -k restart
>  >  apache   29985  0.0  3.2  47972  8580 ?        S    23:31   0:00
>  >  /usr/local/apache2/bin/httpd -k restart
>  >
>  >  $ sudo /usr/sbin/lsof -p 4757 | grep expat
>  >  httpd   4757 root  mem    REG     8,1    397288 1183944
>  >  /usr/local/apache2/lib/libexpat.so.0.1.0
>  >  httpd   4757 root  mem    REG     8,1    143944 1115945
>  >  /usr/lib/libexpat.so.1.0.0
>  >
>  >  Here's the problem: the runtime Apache still loads two version of
>  >  libexpat. And the Segmentation fault error still hits me as expected.
>  >
>  >  After I recompiled Apache, the original libexpat.so.0.1.0 still sits
>  >  in Apache lib directory. According to the ldd httpd result, it's not
>  >  needed anymore.
>  >
>  >  My question is why does it still loaded? Does simply deleting them an
>  >  elegant way to solve it?
>  >
>  >  Luyi
>  >
>  >
>  >
>  >
>  >
>  >
>  >  On Sun, Apr 6, 2008 at 6:14 PM, Graham Dumpleton
>  >
>  >
>  > <graham.dumpleton at gmail.com> wrote:
>  >  > Try getting the following option passed through to configure of apr-util:
>  >  >
>  >  >   --with-expat=/usr
>  >  >
>  >  >  Can't remember if top level Apache configure will pass it through automatically.
>  >  >
>  >  >  Think that is the correct directory to give as argument.
>  >  >
>  >  >  Graham
>  >  >
>  >  >  2008/4/6 Luyi Chen <lychen1109 at gmail.com>:
>  >  >
>  >  >
>  >  > > Thanks Graham,
>  >  >  >
>  >  >  >  Here's the info:
>  >  >  >
>  >  >  >  $ ldd /usr/local/apache2/bin/httpd
>  >  >  >         libz.so.1 => /usr/lib/libz.so.1 (0x00002b02938de000)
>  >  >  >         libm.so.6 => /lib/libm.so.6 (0x00002b02939f4000)
>  >  >  >         libaprutil-1.so.0 => /usr/local/apache2/lib/libaprutil-1.so.0
>  >  >  >  (0x00002b0293b79000)
>  >  >  >
>  >  >  >         libexpat.so.0 => /usr/local/apache2/lib/libexpat.so.0
>  >  >  >  (0x00002b0293c91000)
>  >  >  >         libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00002b0293db3000)
>  >  >  >         libapr-1.so.0 => /usr/local/apache2/lib/libapr-1.so.0
>  >  >  >  (0x00002b0293ed6000)
>  >  >  >         librt.so.1 => /lib/librt.so.1 (0x00002b0293ffe000)
>  >  >  >         libcrypt.so.1 => /lib/libcrypt.so.1 (0x00002b0294107000)
>  >  >  >         libpthread.so.0 => /lib/libpthread.so.0 (0x00002b029423a000)
>  >  >  >         libdl.so.2 => /lib/libdl.so.2 (0x00002b029434f000)
>  >  >  >         libc.so.6 => /lib/libc.so.6 (0x00002b0294452000)
>  >  >  >         /lib64/ld-linux-x86-64.so.2 (0x00002b02937c7000)
>  >  >  >  $ ldd /usr/lib/libz.so.1
>  >  >  >         libc.so.6 => /lib/libc.so.6 (0x00002b2764dc5000)
>  >  >  >         /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
>  >  >  >  $ ldd /lib/libm.so.6
>  >  >  >         libc.so.6 => /lib/libc.so.6 (0x00002b8bf9a3c000)
>  >  >  >         /lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2
>  >  >  >  (0x0000555555554000)
>  >  >  >  $ ldd /usr/local/apache2/lib/libaprutil-1.so.0
>  >  >  >
>  >  >  >         libexpat.so.0 => /usr/local/apache2/lib/libexpat.so.0
>  >  >  >  (0x00002b61001d0000)
>  >  >  >         libapr-1.so.0 => /usr/local/apache2/lib/libapr-1.so.0
>  >  >  >  (0x00002b61002f2000)
>  >  >  >         librt.so.1 => /lib/librt.so.1 (0x00002b610041e000)
>  >  >  >         libcrypt.so.1 => /lib/libcrypt.so.1 (0x00002b6100526000)
>  >  >  >         libpthread.so.0 => /lib/libpthread.so.0 (0x00002b610065a000)
>  >  >  >         libdl.so.2 => /lib/libdl.so.2 (0x00002b610076f000)
>  >  >  >         libc.so.6 => /lib/libc.so.6 (0x00002b6100871000)
>  >  >  >         /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
>  >  >  >  $ ldd /usr/local/apache2/lib/libexpat.so.0
>  >  >  >         libc.so.6 => /lib/libc.so.6 (0x00002af851439000)
>  >  >  >         /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
>  >  >  >  $ ldd /usr/lib/libexpat.so.1
>  >  >  >         libc.so.6 => /lib/libc.so.6 (0x00002b96d0162000)
>  >  >  >         /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
>  >  >  >  $ ldd /usr/local/apache2/lib/libapr-1.so.0
>  >  >  >         librt.so.1 => /lib/librt.so.1 (0x00002ba649f41000)
>  >  >  >         libcrypt.so.1 => /lib/libcrypt.so.1 (0x00002ba64a04a000)
>  >  >  >         libpthread.so.0 => /lib/libpthread.so.0 (0x00002ba64a17d000)
>  >  >  >         libdl.so.2 => /lib/libdl.so.2 (0x00002ba64a292000)
>  >  >  >         libc.so.6 => /lib/libc.so.6 (0x00002ba64a395000)
>  >  >  >         /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
>  >  >  >  $ ldd /lib/librt.so.1
>  >  >  >         libc.so.6 => /lib/libc.so.6 (0x00002aab3a499000)
>  >  >  >         libpthread.so.0 => /lib/libpthread.so.0 (0x00002aab3a6d3000)
>  >  >  >         /lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2
>  >  >  >  (0x0000555555554000)
>  >  >  >  $ ldd /lib/libcrypt.so.1
>  >  >  >         libc.so.6 => /lib/libc.so.6 (0x00002ae20b9dd000)
>  >  >  >         /lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2
>  >  >  >  (0x0000555555554000)
>  >  >  >  $ ldd /lib/libpthread.so.0
>  >  >  >         libc.so.6 => /lib/libc.so.6 (0x00002b15ada6d000)
>  >  >  >         /lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2
>  >  >  >  (0x0000555555554000)
>  >  >  >  $ ldd /lib/libdl.so.2
>  >  >  >         libc.so.6 => /lib/libc.so.6 (0x00002b4f78de5000)
>  >  >  >         /lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2
>  >  >  >  (0x0000555555554000)
>  >  >  >  $ ldd /lib/libc.so.6
>  >  >  >         /lib/ld-linux-x86-64.so.2 (0x00002b7744489000)
>  >  >  >
>  >  >  >  My own analysis is that apr-util depends on the old version of
>  >  >  >  libexpat. So I checked Apache installation doc, and found that I can
>  >  >  >  use --with-included-apr to force Apache use the bundled apr. Since my
>  >  >  >  os (Ubuntu 6.06) is an old version, I thought this is very likely to
>  >  >  >  be the cause.
>  >  >  >
>  >  >  >  I tried to recompile Apache with the --with-included-apr option,
>  >  >  >  here's my newest config.nice
>  >  >  >  #! /bin/sh
>  >  >  >  #
>  >  >  >  # Created by configure
>  >  >  >
>  >  >  >  "./configure" \
>  >  >  >  "--prefix=/usr/local/apache2" \
>  >  >  >  "--enable-proxy" \
>  >  >  >  "--enable-proxy-http" \
>  >  >  >  "--enable-proxy-balancer" \
>  >  >  >  "--enable-dav" \
>  >  >  >  "--enable-rewrite" \
>  >  >  >  "--enable-deflate" \
>  >  >  >  "--with-included-apr" \
>  >  >  >  "$@"
>  >  >  >
>  >  >  >
>  >  >  >  But it didn't solve the problem. The above information from ldd
>  >  >  >  command is actually after I recompiled Apache, which is unchanged.
>  >  >  >
>  >  >  >  The libexpat on my OS is the latest version, because I have runned this command:
>  >  >  >  apt-get install libexpat1
>  >  >  >  And it says it's already the newest version, which is 1.95.8-3
>  >  >  >  according to the ubuntu's pachage directory.
>  >  >  >
>  >  >  >  Luyi
>  >  >  >
>  >  >  >
>  >  >  >
>  >  >  >
>  >  >  >
>  >  >  >
>  >  >  >
>  >  >  >
>  >  >  >  On Sun, Apr 6, 2008 at 3:09 PM, Graham Dumpleton
>  >  >  >  <graham.dumpleton at gmail.com> wrote:
>  >  >  >  > 2008/4/5 Luyi Chen <lychen1109 at gmail.com>:
>  >  >  >  >
>  >  >  >  > > Hi,
>  >  >  >  >  >
>  >  >  >  >  >  I am trying to make mod_python working on Apache 2.2.6, ubuntu dapper
>  >  >  >  >  >  6.06. But I was hit by the problem of wrong expat library issue, as
>  >  >  >  >  >  stated by Graham Dumpleton, on this page
>  >  >  >  >  >  http://www.dscpl.com.au/wiki/ModPython/Articles/ExpatCausingApacheCrash
>  >  >  >  >  >
>  >  >  >  >  >  I am using a custom compiled Apache2 in /usr/local/apache2, so I
>  >  >  >  >  >  checked version of libexpat with the following line,
>  >  >  >  >  >
>  >  >  >  >  >  ldd /usr/local/apache2/bin/httpd
>  >  >  >  >  >
>  >  >  >  >  >  in the result there're two lines
>  >  >  >  >  >   libexpat.so.0 => /usr/local/apache2/lib/libexpat.so.0 (0x00002b4f4e1c5000)
>  >  >  >  >  >   libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00002b4f4e2e7000)
>  >  >  >  >
>  >  >  >  >  If you have this, then something is quite broken with your Apache
>  >  >  >  >  httpd to start with, before even mod_python is loaded.
>  >  >  >  >
>  >  >  >  >  What is the full 'ldd' output from running it against 'httpd'.
>  >  >  >  >
>  >  >  >  >  Also go through each of the .so file it is dependent upon and run
>  >  >  >  >  'ldd' on them as well and post all the results.
>  >  >  >  >
>  >  >  >  >  As far as I can tell, one of the .so files depended on by httpd is
>  >  >  >  >  itself dependent on libexpat (a different version), as I can't see
>  >  >  >  >  otherwise how you can get an executable dependent on two different
>  >  >  >  >  versions of a shared library.
>  >  >  >  >
>  >  >  >  >  Graham
>  >  >  >  >
>  >  >  >  >
>  >  >  >  >  >  The one in /usr/local/apache2/lib is an old version 1.95.2, while the
>  >  >  >  >  >  one in /usr/lib is 1.95.8, which is identical to the version of
>  >  >  >  >  >  libexpat used by python.
>  >  >  >  >  >
>  >  >  >  >  >  How do I tell Apache to use the new version of libexpat only?
>  >  >  >  >  >
>  >  >  >  >  >  Luyi
>  >  >  >  >  >  _______________________________________________
>  >  >  >  >  >  Mod_python mailing list
>  >  >  >  >  >  Mod_python at modpython.org
>  >  >  >  >  >  http://mailman.modpython.org/mailman/listinfo/mod_python
>  >  >  >  >  >
>  >  >  >  >
>  >  >  >
>  >  >
>  >
>


More information about the Mod_python mailing list