Antrieb, warum diese Seite?

Ich habe die letzten beiden Tage - wirklich 48 Stunden - versucht Moin Moin auf mod_python Basis bei Hosteurope zu installieren, leider bis jetzt ohne Erfolg. Natürlich läuft MoinMoin bei mir seit langem auf dem Linux-Rechner zuhause, doch kann die DynDns.org-Lösung nicht der Weisheit letzter Schluss bleiben.

Als Informationsquelle habe ich auch das IRC (Dank an Lydon) genutzt und bin dort zwei weiteren Personen begegnet, die genau das gleiche Problem hatten, wobei von einem sogar ein Rootserver erwogen wurde (eigens für MoinMoin!).

Etwas Kritik an der Doku

Vorweg: insgesamt finde ich die Dokumentation (INSTALL.html) sehr gut. Allerdings hilft der mod_python Abschnitt vermutlich nur jenen, die einen Shell-Zugang besitzen. Webhosting mit Shellzugang ist aber m.E. eher die Ausnahme und FTP die Regel.

Im gleichen Abschnitt heißt es follow the basic apache installation. Gemeint ist damit vermutlich python setup.py --quit install --prefix /pfad/, ein Hinweis, welcher Stand genau vorausgesetzt wird, wäre hier sehr hilfreich.

Die Information, wie man ohne Shellzugang python setup.py ... aufrufen kann, versteckt sich - kurz angerissen - im Abschnitt Installation into your home directory. Ein genialer Trick, der sofern die Ausführbarkeitsrechte gesetzt sind, auch funktioniert:

echo "Content-Type: text/html"
echo ""
echo "<html><head>"
echo "</head><body>"
echo "<h1>welche Python-Version hat der Webhoster?</h1>"
echo "<h1>Hello World in /bin/sh</h1>"

/usr/bin/python -V 2>&1

echo "</body>"
echo "</html>"

2>&1 leitet den Fehlerkanal auf die Standardausgabe und damit an den Browser weiter. Auf dem gleichen Wege geht dann auch ein

/usr/bin/python -c "print 12345"

was zum austesten auch ganz hilfreich sein kann. Der Aufruf von

/usr/bin/python ./setup.py --help 2>&1

muss allerdings wieder scheitern. Schuld daran ist, wie ich in der Zwischenzeit herausgefunden habe, dass der entsprechende HTTP-Header fehlt. Hier kann Abhilfe geschaffen werden. Nach einer kleinen Änderung (Zeile 2+3) an der setup.py sehen die ersten Zeilen so aus:

print "Content-Type: text/html"
print # Empty line for end of header
# -*- coding: iso-8859-1 -*-

Nun spricht das Setup-Programm (auf Hosteurope) Klartext:

File "./setup.py", line 17, in ? import distutils ImportError: No module named distutils

Ein ernüchternder Fehler, denn an anderer Stelle in INSTALL.html fand ich den Hinweis:
You will need the Python Development package installed on UNIX systems for distutils to work correctly.
Doch vermutlich kann ich Hosteurope nicht davon überzeugen, das Devel-Paket nachzuinstallieren :(

Trotzdem, wer so schnell klein beigibt, ist selbst schuld. Hosteurope hat derzeit Python 2.2.1 installiert. Die gleiche Version ist z.B. in SuSE 8.0 enthalten, welches noch auf meinem Laptop herumlungert. Dort funktioniert natürlich das Ausführen von Setup setup.py mit --prefix wie oben beschrieben. Den generierten Verzeichnisbaum mit den Verzeichnissen (bin, lib, share) habe ich als "moin-basis" per FTP hochgeladen. Den Tipp bekam ich im IRC. Über Hinweise wie sinnvoll, bzw. wie erfolgsversprechend dieser (hier weiter beschriebene) Ansatz ist, wäre ich sehr dankbar.

Doch der weitere Verlauf ist mir jetzt noch unklar. Ich gehe einfach mal davon aus, dass der in der mod_python Sektion der Anleitung geforderte Voraussetzung
follow the basic apache installation for your operating system as described in other parts of the MoinMoin documentation
genüge getan ist.

Weitere Fragen

Obwohl mir die Datei .htaccess eigentlich nicht neu ist, holt mich mein ausgeprägtes Apache Halbwissen nun ein. Die Originaldatei moin_modpy.htaccess enthält eigentlich nur die folgenden Zeilen:

<Files wiki>
  # Use mod_python as handler
  SetHandler python-program
  # add the path where the moin_modpy.py wrapper can be found
  PythonPath "['/path/to/moin/share/moin/cgi-bin']+sys.path"
  # use the moin_modpy wrapper to handle requests
  PythonHandler moin_modpy
</Files>

Unklar ist mir:

  1. Welche MoinMoin-Dateien müssen in das ".htaccess-Verzeichnis" kopiert werden?

  2. Was bedeutet <Files wiki>? Und über welche URL muss ich dann das .htaccess-Verzeichnis ansprechen? http://irgendwas.de/.htaccess-Verzeichnis/wiki ?

  3. Benötige ich evtl. noch eine DirectoryIndex-Anweisung?

  4. Wie muss ich die PythonPath Zeile anpassen (Beispiel erbeten) und vor allem was bewirkt diese Zeile? Ist PythonPath eine Variable?

Probiert habe ich:

  1. Die abgeänderte (s.u.) Datei moin_modpy.py in das cgi-bin Verzeichnis zu kopieren (das einzige Verzeichnis, in dem bei Hosteurope CGI´s ausgeführt werden).

  2. Die in .htaccess umbenannte und geänderte Datei (s.u.) moin_modpy.htaccess in ein Verzeichnis test hochzuladen (ansonsten ist test leer).

Datei .htaccess in "cgi-bin"

import sys
sys.path[0:0]=['/is/htdocs/12345/www.xyz.de/moin-basis/lib/python2.2/site-packages/', 
'/is/htdocs/12345/www.xyz.de/moin-basis/lib/python2.2/site-packages/MoinMoin/config.py']

from MoinMoin.request import RequestModPy

def handler(request):
    moinreq = RequestModPy(request)
    return moinreq.run(request)

Datei .htaccess in "test"

<Files wiki>
  # Use mod_python as handler
  SetHandler python-program

  # add the path where the moin_modpy.py wrapper can be found
  #  PythonPath "['/path/to/moin/share/moin/cgi-bin']+sys.path"
PythonPath "['/is/htdocs/12345/www.xyz.de/cgi-bin/']"
  # use the moin_modpy wrapper to handle requests
  PythonHandler moin_modpy
</Files>

Wenn ich nun versuche auf http://www.xyz.de/test/ zuzugreifen, erhalte ich im Apache error-log:

Invalid command 'PythonPath', perhaps mis-spelled or defined by a module not included in the server 
configuration

Was tun? Vielen Dank im voraus!



Ergebnisse Versuch: MoinMoin als CGI

MoinMoin CGI Diagnosis
======================

Package "MoinMoin" successfully imported.


Traceback (innermost last):
  File "/is/htdocs/12345/www.xyz.de/cgi-bin/test/moin.cgi", line 23, in ?
    request = RequestCGI()
   File "/is/htdocs/12345/www.xyz.de/moin-basis/lib/python2.2/site-packages/MoinMoin/request.py", line 503, in __init__
    RequestBase.__init__(self, properties)
   File "/is/htdocs/12345/www.xyz.de/moin-basis/lib/python2.2/site-packages/MoinMoin/request.py", line 63, in __init__
    self.dicts = self.initdicts()
   File "/is/htdocs/12345/www.xyz.de/moin-basis/lib/python2.2/site-packages/MoinMoin/request.py", line 223, in initdicts
    dicts.scandicts()
   File "/is/htdocs/12345/www.xyz.de/moin-basis/lib/python2.2/site-packages/MoinMoin/wikidicts.py", line 253, in scandicts
    pagelist = wikiutil.getPageList(config.text_dir)
   File "/is/htdocs/12345/www.xyz.de/moin-basis/lib/python2.2/site-packages/MoinMoin/wikiutil.py", line 275, in getPageList
    pages = os.listdir(text_dir)
 OSError: [Errno 2] No such file or directory: 'wiki/data/text'

In welchem Verzeichnis sucht er nunr nach wiki/data/text ???

Da das ein relativer Pfad ist, im aktuellen. Vielleicht willst Du aber einfach im aktuellen Verzeichnis eine moin_config.py anlegen und dort nen absoluten Pfad reinschreiben, ist vielleicht etwas definitiver.

RudolfHenze/MoinMoin-mod_python Probleme (zuletzt geändert am 2007-12-23 22:47:26 durch localhost)