Warum tritt ein "Internal Server Error" auf RHEL oder Derivaten auf?


Das Öffnen eines Dialogs (z.B beim Anlegen eines neuen Ordners) in BSCW 5.0 kann auf Red Hat Enterprise Linux (RHEL) 6 oder Derivaten (CentOS/Scientific Linux) zu einem Absturz des Python 2.6 Interpreters führen. In diesem Fall wird anstelle des gewählten Dialoges ein "Internal Server Error" angezeigt und die Apache Web Server Fehler Log-Datei enthält folgende Einträge:

[Mon Jul 09 17:14:25 2012] [error] [client 10.10.10.20] python: Objects/stringobject.c:4098:
str_subtype_new: Assertion `((((PyObject*)(tmp))->ob_type) == &PyString_Type)' failed.,
referer: http:///bscw/bscw.cgi/48?op=addfolder&id=48
[Mon Jul 09 17:14:25 2012] [error] [client 10.10.10.20] Premature end of script headers: bscw.cgi,
referer: http:///bscw/bscw.cgi/48

Das oben beschriebene Problem wurde ab Version 6.4 von Red Hat behoben, so dass sich zunächst eine Aktualisierung auf Version 6.4 (oder höher) anbietet.

Wenn weiterhin ähnliche Probleme bestehen, empfiehlt es sich einen eigenen Python 2.7 Interpreter zu übersetzen und in /usr/local zu installieren, so dass er nicht mit dem System Python 2.6 interferiert. Aktualisieren Sie anschließend Ihren BSCW Server auf Python 2.7.

RHEL Python 2.7 Installation

  1. Installieren Sie zunächst die folgenden benötigten (Entwicklungs-) RPM Pakete (mit Ihren Abhängigkeiten):
yum install gcc g++ make patch
yum install db4-devel
yum install sqlite-devel
yum install openssl-devel
yum install bzip2-devel
yum install readline-devel
yum install gdbm-devel
yum install tk-devel
  1. Laden Sie das Archiv der jüngsten Python 2.7 Quell-Distribution herunter und extrahieren Sie das Archiv:
wget http://python.org/ftp/python/2.7.6/Python-2.7.6.tgz
md5sum Python-2.7.6.tgz
bcf93efa8eaf383c98ed3ce40b763497  Python-2.7.6.tgz
tar xf Python-2.7.6.tgz

  1. Starten Sie das "configure" Skript mit den angegebenen Optionen und kompilieren Sie die Quellen:
cd Python-2.7.6
export LDFLAGS="-L/usr/local/lib -Wl,-rpath=/usr/local/lib"
./configure \
     --prefix=/usr/local \
     --enable-shared \
     --enable-ipv6 \
     --with-signal-module \
     --with-threads \
     --with-pymalloc
make
  1. Installieren Sie die Python 2.7 Umgebung (ohne mit der System Python 2.6 Umgebung zu interferieren):
make altinstall