Abenteuer MoinMoin-Wiki

MoinMoin

Endlich wird es Zeit, dass ich das versprochene MoinMoin-Wiki für die LUGT auf dem Server installiere, auf dem auch meine Homepage mit drauf ist. Dem Wallerforum möchte ich auf diesem Weg auch noch einmal recht herzlich für den Webspace danken. Ich werde dafür den Server pflegen, als ob es mein eigener wäre. :-)

Vorbereitungen

Die URL (schreibt man jetzt "der URL" oder "die URL"?) für den Testbetrieb ist schon eingerichtet: http://lugt.halvar.at/ Das hatte ich schon vor ein paar Wochen erledigt.

Jetzt fehlt nur noch das MoinMoin-Wiki. Aber wie soll ich MoinMoin an den Apachen binden? mod_python oder mod_fastcgi gefallen mir beide nicht so recht, da man bei jeder Änderung im Programmcode den Apachen neu starten muss. Aber im Moment fällt mir nichts besseres ein. :-|

Ich verwende für meine eigene Homepage CherryPy mit mod_fastcgi. Und da ich irgendwo mal gelesen habe, dass FastCGI die Empfehlung für MoinMoin ist, werde ich hier keine großen Experimente machen und mod_fastcgi verwenden.

Zuerst hat man immer die Hoffnung, dass bei der verwendeten Distribution die aktuellste Programmversion per aptitude install installiert werden kann.

waller ~ # aptitude search moinmoin
p   moinmoin-common                                      - Python clone of WikiWiki - common data
p   python-moinmoin                                      - Python clone of WikiWiki - library
v   python2.3-moinmoin                                   -
v   python2.4-moinmoin                                   -
v   python2.5-moinmoin                                   -
waller ~ # aptitude show python-moinmoin
Package: python-moinmoin
State: not installed
Version: 1.5.3-1.2
Priority: optional
Section: python
Maintainer: Jonas Smedegaard <dr@jones.dk>
Uncompressed Size: 4022k
Depends: python-support (>= 0.2), python (>= 2.1), moinmoin-common (= 1.5.3-1.2)
Recommends: exim4 | mail-transport-agent
Suggests: libapache2-mod-python | libapache-mod-python | python-twisted | libapache-mod-fastcgi |
          httpd, miscfiles | wordlist, python-4suite, python-gdchart, python-docutils (>= 0.3.10)

Aber wie man hier sieht, ist bei diesem Debian nur die Version 1.5.3 mit dabei. Ein Blick in die Liste der Änderungen seit diesem Release hat mich dazu bewogen, diesmal die Dienste von Debian nicht in Anspruch zu nehmen. ;-)

Außer bei den Abhaengigkeiten natürlich:

aptitude install libapache2-mod-fastcgi
aptitude install python-docutils
aptitude install python-xml

FastCGI muss man noch in den Einstellungen des Apachen aktivieren. Bei Debian genügt es, wenn man je einen Symlink von /etc/apache2/mods-available/fastcgi.conf nach /etc/apache2/mods-enabled/fastcgi.conf und von /etc/apache2/mods-available/fastcgi.load nach /etc/apache2/mods-enabled/fastcgi.load erstellt.

Jetzt wird es Zeit, dass ich mir MoinMoin endlich herunterlade und die README durchlese.

wget http://prdownloads.sourceforge.net/moin/moin-1.5.8.tar.gz?download

Mit dem Midnight Commander lässt sich das herunter geladene Archiv wunderbar einsehen und entpacken. Die README verrät, dass man sich docs/INSTALL.html ansehen sollte, wenn man MoinMoin installieren will. Warum nicht. ;-)

Die docs/INSTALL.html-Datei kann man auch unter http://moinmaster.wikiwikiweb.de/MoinMoin/InstallDocs einsehen.

MoinDude

So, jetzt habe ich für ein Weilchen Lesestoff. ;-)

Im Groben und Ganzen steht das hier drinnen:

  • MoinMoin herunterladen
  • Basis-Installation mit python setup.py...
  • Erstellen einer Wiki-Instanz
  • Statischen Content direkt vom Apachen ausliefern lassen
  • MoinMoin per FastCGI an den Apachen binden

Basisinstallation

Ich hasse Updateorgien von Webprogrammen. Ganz besonders schlimm ist das bei Zope und Plone. Da geht das so weit, dass nach einem Update zehn oder sogar 20 Plone-Sites nicht mehr richtig funktionieren. Um so etwas zu vermeiden, installiere ich Webframeworks so, dass im Namen auch die Version enthalten ist. So kann ich, wenn ich möchte jede Instanz einzeln, nach Bedarf und Ermessen auf eine neuere Version umstellen.

So werde ich es auch mit MoinMoin machen. Als Zielordner wähle ich /usr/local/moin_1_5_8. Damit pfusche ich der Gnu/Linux-Distribution nicht ins Handwerk.

python setup.py install --prefix="/usr/local/moin_1_5_8"

So ist MoinMoin zwar nicht im Python-Pfad, aber das möchte ich ja auch nicht. Ich möchte später für jede Instanz extra bestimmen können, welche Version von MoinMoin verwendet wird.

Der Ordner /usr/local/moin_1_5_8 wurde automatisch erstellt. Unterhalb dieses Ordners befinden sich die Ordner bin, lib und share. Was man damit tun muss, erfahren wir später.

Basisinstallation testen

Dazu starte ich den Python-Interpreter, füge den neuen site-packages-Pfad zum Python-Pfad hinzu und versuche dann das Paket MoinMoin zu importieren. Funktioniert das alles, dann ist das Basispaket von MoinMoin korrekt installiert.

waller local # python
Python 2.4.4 (#2, Apr  5 2007, 18:43:10)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.insert(0, "/usr/local/moin_1_5_8/lib/python2.4/site-packages")
>>> import MoinMoin
>>>

Man zusätzlich auch noch nachsehen, ob auch wirklich das soeben installierte MoinMoin verwendet wird und nicht irgendein evt. vorher installiertes MoinMoin. Das sollte ungefähr so aussehen:

>>> sys.modules["MoinMoin"]
<module 'MoinMoin' from '/usr/local/moin_1_5_8/lib/python2.4/site-packages/MoinMoin/__init__.pyc'>
>>>

Wiki-Instanz erstellen

Gleich mal vorweg: Der Apache ist bei mir so eingerichtet, dass dieser innerhalb der Home-Verzeichnisse der Benutzer nach dem Ordner public_html sucht. Ist dieser Ordner vorhanden, dann liefert er Daten von unterhalb dieses Ordners aus falls diese von einem Browser angefordert werden.

Auf keinen Fall darf die Wiki-Instanz unterhalb dieses Ordners public_html erstellt werden. Damit hätte unter Umständen jeder Zugriff auf die Daten und Einstellungen des Wikis. Die Wiki-Instanz muss in einem Ordner erstellt werden, den der Apache nicht automatisch ausliefert. Ich wähle dafür den Ordner /home/gerold/lugt aus.

So, jetzt geht es an die Erstellung der neuen Wiki-Instanz. Eine Wiki-Instanz ist eigentlich nur eine Kopie der Ordner share/moin/data und share/moin/underlay, welche bei der Basisinstallation nach /usr/local/moin_1_5_8/ kopiert wurden. Zusätzlich braucht man noch die Datei wikiconfig.py, welche sich im share/moin/config-Ordner befindet.

todo: Absatz korrigieren

Da ich vor habe, dass der Apache sich die statischen Dateien direkt vom htdocs-Ordner holen soll, wird dieser auch noch in den neuen Instanz-Ordner kopiert. Und um den für die Anbindung an den Apachen als FastCGI-Server, brauchen wir noch die Datei moin.fcg.
cd /home/gerold
mkdir lugt
cp -R /usr/local/moin_1_5_8/share/moin/data lugt
cp -R /usr/local/moin_1_5_8/share/moin/underlay lugt
cp -R /usr/local/moin_1_5_8/share/moin/config/wikiconfig.py lugt
cp -R /usr/local/moin_1_5_8/share/moin/htdocs lugt
cp -R /usr/local/moin_1_5_8/share/moin/server/moin.fcg lugt

Jetzt müssen noch die Berechtigungen der neuen Dateien und Ordner angepasst werden.

chown -R gerold:gerold lugt
chmod -R ug+rwX lugt
chmod -R o-rwx lugt

Jetzt können nur mehr der Besitzer "gerold" und die Gruppe "gerold" auf die Dateien und Ordner zugreifen. Allerdings hat so auch der Apache Probleme damit, auf die Dateien zuzugreifen. Da ich ja root-Rechte auf dem Computer habe, füge ich den Benutzer "www-data" zur Gruppe "gerold" hinzu.

Wer diese Möglichkeit nicht hat, der kann den Instanzordner und alle seine Unterordner für Other "o+rwX" frei geben. Das ist aber nicht sonderlich sicher, da jeder der sich an den Computer anmelden kann, die Wiki-Dateien ansehen und auch ändern kann. Außgenommen, jeder Benutzer ist in seinen Home-Ordner eingesperrt. Ansonsten gibt es noch die Apache-Anweisung suexec. Aber das ist hier nicht unser Thema.

MoinMoin einrichten

wikiconfig.py

Die Einstellungen befinden sich alle in der Datei wikiconfig.py. Diese gilt es an unsere Anforderungen anzupassen. Hier die Änderungen die ich an dieser Datei vorgenommen habe. -- vorerst

todo: Skript korrigieren

sitename = u'LUGT'
page_front_page = u'FrontPage'
superuser = [u"root", ] #???
acl_rights_before = u"admin:read,write,delete,revert,admin"
language_default = "de"
surge_action_limits = { # allow max. <count> <action> requests per <dt> secs
    # action: (count, dt)
    'all': (300, 30),
    'show': (300, 60),
    'recall': (50, 60),
    'raw': (200, 40),  # some people use this for css
    'AttachFile': (900, 60),
    'diff': (300, 60),
    'fullsearch': (50, 60),
    'edit': (100, 120),
    'rss_rc': (10, 60),
    'default': (300, 60),
}
surge_lockout_time = 10 # secs you get locked out when you ignore warnings
#default_markup = 'rst'
log_reverse_dns_lookups = False  # if we do reverse dns lookups for logging hostnames
                                 # instead of just IPs

moin.fcg

Hier die Änderungen, die ich vorerst vorgenommen habe:

import os
sys.path.insert(0, "/usr/local/moin_1_5_8/lib/python2.4/site-packages")
sys.path.insert(0, "/home/gerold/lugt")
os.environ["MOIN_DEBUG"] = "1"
max_threads = 1

.

.

An dieser Seite wird noch geschrieben...

.

.