WikiWiki für Low-End Rechner

oder
Wie erweitere ich meinen alten SUN Sparcstation Server mit einem Webforum


Einführung

Was sind WikiWikis?

Wikipedia.org sagt zu WikiWikis:

"Wikis sind im World Wide Web verfügbare Seitensammlungen, die von den Benutzern online geändert werden können. Sie sind durch Links verbunden - wie anderer Hypertext auch. Sie lassen sich jedoch praktisch sofort am Bildschirm in einer Editbox ganz leicht ändern.

Die Einfachheit der Bearbeitung entsteht dadurch, dass - im Gegensatz zu HTML - nur mit wenigen Formatbefehlen gearbeitet wird. Dieser Minimalismus ermöglicht einer großen Gruppe von Menschen mit wenig Lernaufwand an diesem System teilzuhaben."

Auch die Erklärung WasIstEinWiki von wikiweb.at ist Empfehlenswert.

"So etwas will ich haben."

Diese Seitensammlungen werden durch CGI Skripte realisiert. Mittlerweile gibt es eine sehr umfangreiche Sammlung von diesen Skripten — auch WikiWikiEngines oder WikiWikiClones genannt. Eine Liste mit vielen Clones befindet sich auf der Seite des ursprünglichen WikiWiki Erfinders, Ward Cunningham. In dieser Sammlung befinden sich Skripte in vielen verschiedenen Programmiersprachen wie Python, Perl, Java, etc.

Alle diese Scripte haben aber ein Problem. Auf einer Sparcstation 10 (mit 36MHz und 32MB RAM) laufen diese Scripte viel zu langsam. Dieses liegt an der Tatsache, dass die Interpreter der jeweiligen Programmiersprache einen, für einen Low-End Rechner, zu hohen Balast mitbringen.

In der Praxis sieht es so aus, dass z.B. MoinMoin schon auf der Konsole, mit dem time Befehl, über 5 Sekunden CPU Zeit benötigt. Die reale Zeit, die zwischen Mausklick und dem Anzeigen der Seite liegt, ist bis zu 10 Sekunden lang.

Aber wie gesagt: "So etwas will ich haben."

Also setzte ich mich hin und schrieb mein eigenes WikiWiki. Für mein Wiki musste eine Programmiersparache her, die schneller als Perl oder Python ist. Ein Wiki in C wäre mit Sicherheit am schnellsten, der Aufwand aber nicht Verhältnismässig. Da die Hauptaufgabe eines Wikis ist, die Formatbefehle in HTML umzuwandeln, eignet sich für so etwas auch sed und awk. Und da man mit awk auch Programmieren kann, stand meine Wahl fest. Ich programmierte also mein WikiWiki in awk. Das Resultat — AwkiAwki.

Und um die Frage der Performance gleich zu beantworten:

 # /usr/bin/time ./awki.cgi >/dev/null
 0.23 real         0.06 user         0.26 sys

Mittlerweile ist AwkiAwki sogar ein kleines Projekt bei Sourceforge.net geworden: http://awkiawki.bogosoft.com/

Wie jedes bei Sourceforge gehostete Projekt, ist auch AwkiAwki OpenSource. Es steht unter der MIT Lizenz.

Wer AwkiAwki vor der Installation testen möchte, kann die Demo-Site bei Sourceforge oder meine oben genannte SUN Sparcstation waid (dyndns) besuchen.

Im folgenden beschreibe ich die Installation von AwkiAwki unter NetBSD. Anschließend gehe ich auf die Konfiguration ein.


Installation

Webserver

Für AwkiAwki benötigt man ein Webserver der CGI-Skripte ausführen kann. Da das Ganze auf einem Low-End Rechner laufen soll, habe ich thttpd genommen. Die Installation unter NetBSD ist natürlich ein Kinderspiel.

# export PKG_PATH=ftp://ftp.de.netbsd.org/pub/NetBSD/packages/1.6/sparc/All
# pkg_add thttpd

Die Standardkonfiguration kann von /usr/pkg/share/examples/thttpd.conf nach /usr/pkg/etc/thttpd.conf kopiert werden. Nach einem echo "thttpd=YES" >> /etc/rc.conf kann der Webserver mit /usr/pkg/etc/rc.d/thttpd start gestartet werden. Durch hinzufügen der folgenden drei Zeilen zu /etc/rc.local wird thttpd bei jedem Boot automatisch gestartet.

if [ -f /usr/pkg/etc/rc.d/thttpd ]; then
     /usr/pkg/etc/rc.d/thttpd
start fi

AwkiAwki

AwkiAwki kann man über CVS oder WebCVS beziehen, oder von der Hompepage downloaden (einzeln oder als tarball). Letzteres ist am einfachsten.

# cd /tmp
# wget -nd http://awkiawki.bogosoft.com/awkiawki-daily-snapshot.tar.gz
# tar -xzvpf awkiawki-daily-snapshot.tar.gz
# cd awkiawki

Das Stammverzeichnis von thttpd ist /usr/pkg/share/thttpd/. Für das Beispiel installieren wir AwkiAwki in das /cgi-bin Verzeichnis.

# cd /tmp/awkiawki
# mkdir -p /usr/pkg/share/thttpd/cgi-bin
# cp awki.cgi parser.awk special_parser.awk /usr/pkg/share/thttpd/cgi-bin/
# cp awki.png /usr/pkg/share/thttpd/

Nun muss noch ein Verzeichnis zum Speichern der Seiten erstellt werden und den Webserver Benutzer als Besitzer eintragen ( in unserem Beispiel der Benutzer nobody).

# cd /usr/pkg/share/thttpd/cgi-bin
# mkdir data
# chown nobody data/

Fertig. Das Ergebniss kann nun unter http://meinserver/cgi-bin/awki.cgi bewundert werden. Man sieht nun die erste Seite, die FrontPage. Diese ist noch leer und kann mit einem Klick auf Edit FrontPage bearbeitet werden. Unterhalb der Editbox werden die Formatbefehle aufgelistet. Durch das zusammenschreiben von grossgeschriebenen Wörtern kann man neü Seiten erstellen. (z.B. MeineNeüSeite). Nun kann man mit AwkiAwki herumexperimentieren: Ein paar neü Seite erstellen, die Formatbefehle testen, die Seiten auflisten lassen. Einfach alles Ausprobieren und so das WikiWikiPrinzip verstehen. (Z.B. listet ein Klick auf den oberen Seitennamen alle Seiten, die auf diese verweisen)


Konfiguration

AwkiAwki bietet einige Optionen an, mit den es an die eigenen Bedürfnisse angepasst werden kann.

Es gibt keinen einheitlichen Namen der Konfigurationsdatei. Er ist abhängig vom Scriptnamen. Einfach gesagt: Die Konfiguration muss im gleichen Verzeichniss leigen, den gleichen Basename haben (also ohne suffix) und mit .conf enden. Wenn das Script myawki.cgi heisst, muss die Konfiguration myawki.conf heissen.

Alle Optionen und ihre Standardwerte stehen am Anfang der awki.cgi Datei. Die wichtigsten werde ich hier erläutern.

Eine AwkiAwki Konfigurationsdatei besteht aus Zeilen mit jeweils einem Option/Werte Paar. Beide werden durch ein Gleichheitszeichen getrennt. Vor und nach dem Gleichheistzeichen können Leerzeichen oder Tabulator auftreten. Werte dürfen in Anführungszeichen stehen.

Beispiel:

default_page = "AwkiAwki"
show_changes=15
css= "/site.css"

Optionen

default_page

Diese Variable enthält den Namen der Startseite. Dies ist die Seite die bei einem Aufruf von awki.cgi angezeigt wird. Ausserdem befindet sich am Ende jeder Seite ein Link zu dieser Seite. Beispielwerte: SonnenblenDe, MeineSeiteDe, BogosoftDotCom, AwkiAwki, etc.

always_convert_spaces

Um Listen zu gestallten muss man ein TAB gefolgt von einer 1 für nummerierte oder ein * für normale Listen eingeben. Da viele Browser Probleme mit dem Eingeben von Tabulatoren innerhalb einer Editbox haben, wurde eine Notlösung eingebaut. Durch eine Auswahlbox (Convert runs of 8 spaces to Tab) kann man AwkiAwki veranlassen, beim Speichern einer Seite, folgen von acht Leerzeichen in ein Tab umzuwandeln. Wenn man der Variable always_convert_spaces irgendeinen Wert zuweist, dann verschwindet diese Box und die Umwandlung der Leerzeichen erfolgt automatisch bei jedem Speichern.

css

Die Variable css kann eine URL enthalten, die auf eine externe CSS Datei verweist. Dadurch kann man das Aussehen von AwkiAwki beeinflussen.

show_changes

Die Funktion RecentChanges listet die letzten 10 veränderten Dateien auf. Mit show_changes kann dieser Wert verändert werden.

write_protection

Mit write_protection kann man bestimmte Seiten sperren, d.h. man kann sie nicht Editieren und Speichern. Als Wert für die write_protection Option kann man beliebige Reguläre Ausdrücke verwenden. Mit einem Pipe Zeichen (oder) kann man mehrere Ausdrücke aneinander Reihen.

Beispiele:

Ein Konfigurationsbeispiel: Unterschiediche Benutzerrechte

Wir erstellen nun ein weiteres Verzeichnis und erstellen dort eine Kopie von AwkiAwki.

# mkdir /usr/pkg/share/thttpd/cgi-bin/admin/
# cd /usr/pkg/share/thttpd/cgi-bin/admin/
# cp ../awki.cgi ../*parser.awk ./

Wie schon oben beschrieben, sucht AwkiAwki die Konfigurationsdatei im gleichen Verzeichnis wie die Datei. Wir können im cgi-bin/ Verzeichnis eine awki.conf schreiben, in der bestimmte Seiten gesperrt werden. Den Zugriff auf die gesperrten Seiten realisieren wir mit einem zweiten AwkiAwki. Damit das zweite auf die gleichen Seiten zugreifen kann, setzen wir die Variable datadir auf "../data/". Die write_protection bleibt hier leer.

Nun wird mit thtpasswd -c .htpasswd admin ein Passwortdatei erstellt.

Das Resultat ist ein AwkiAwki mit geschützen Seiten und ein weiteres passwortgeschütztes AwkiAwki mit Vollzugriff auf alle Seiten.

Das Ergebnis kann auch auf den folgenden Seiten getestet werden:

Schluss

Mit AwkiAwki kann man auch eine schwachbrüstige SUN Sparcstation, IPX oder IPC in einen Server mit Webforum verwandeln, ohne das dabei der ganze Rechner in die Knie gehen muss.

Hier und dort wird AwkiAwki noch verbessert. Wer über Veränderungen informiert werden möchte, Verbesserungen hat, Bugs findet, oder einfach nur eine Frage zu AwkiAwki hat, kann sich die awkiawki-users mailling-list abonieren.


(c) Copyright 2002 Oliver Tonnhofer (http://www.bogosoft.com/)
$Id: wiki4sun.html,v 1.3 2002/11/03 18:08:35 olt Exp olt $