mod_pythonのエラー

CentOS5でTrac環境を構築したところ下記のエラーとなり動作しませんでした。

[notice] child pid 12189 exit signal Aborted (6)
httpd: Objects/stringobject.c:117: PyString_FromString: Assertion `str != ((void *)0)' failed.

このエラーはApacheが使っているライブラリとPythonが使っているexpatライブラリのバージョンが異なる為に発生します。

どのバージョンを使っているかは下記の手順で確認できます。

Apache

# ldd /usr/local/apache2/bin/httpd | grep expat
libexpat.so.0 => /usr/local/apr/lib/libexpat.so.0 (0x00002b7b2a2fd000)
# strings /usr/local/apr/lib/libexpat.so.0 | grep expat_
expat_1.95.2

Python

# python
Python 2.4.3 (#1, Nov 11 2010, 13:30:19)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyexpat
>>> pyexpat.version_info
(1, 95, 8)

このバージョンの違いを一致させる必要があります。

私の環境では/lib64/libexpat.so.0.5.0が1.95.8でしたのでそれに合わせる事にしました。

一番手軽な方法は起動スクリプトに追加することです。

/etc/init.d/httpdに下記の行を追加

export LD_PRELOAD=/lib64/libexpat.so.0.5.0

※ライブラリ名は環境に合わせて変更して下さい。

これでApacheを再起動すると動作するようになります。