MoinMoin Wiki auf dem Raspberry Pi

MoinMoin ist ein Wiki, das in Python geschrieben wurde, und mit reinen Text Files als Speicher arbeitet. Es können auch Medien eingebunden werden.

/!\ 2018-03-30 Update to moinmoin 1.9.9

Installation

Da das Volkszaehler Image bereits einen Webserver Lighttpd mitbringt, sollte das MoinMoin Wiki mit FastCGI an den Lighttpd angebunden werden.

Leider gibt es keine guten Anleitungen für diese Anbindung. Deshalb wird MoinMoin als standalone server konfiguriert.

Die Installation, erfolgt nach docs/README_FIRST, doc/INSTALL.html, und installing-moinmoin-on-shared-hosting.

# Man sollte im Home Ordner sein
$ pwd
/home/pi

# hole das aktuelle moinmoin Archiv (35.2 MB)
curl -O http://static.moinmo.in/files/moin-1.9.9.tar.gz

# extrahiere die Files
$ tar xvfz moin-1.9.9.tar.gz

# gehe in den Ordner
$ cd moin-1.9.9/

# installiere nach /usr/local/
$ sudo python setup.py install --prefix='/usr/local' --record=install.log

# Test, ob erfolgreich
$ python
Python 2.7.3 (default, Mar 18 2014, 05:13:23)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MoinMoin
>>>
# drücke "strg-D" zum beenden

# kopiere den FastCGI Anpassungsfile für lighttpd in das Hauptverzeichnis
$ cp wiki/server/moin.fcgi .
# setze einen Link der htdocs in den lokalen Ordner
$ ln -s /usr/local/lib/python2.7/dist-packages/MoinMoin/web/static/htdocs/ moin_static199

/!\ Wenn man ein Update der MoinMoin Installation auf eine neue Version macht, muss man einen neuen symbolischen Link setzen, der die korrekte Version Nummer enthält.

Jetzt kann man den lokalen Test machen:

# Editiere den File wikiconfig.py, und füge 4 Zeilen ein
    superuser = [u"PiMoin", ]
    page_front_page = u'StartSeite'
    # show page load timings on web page
    show_timings = True

# starte den lokalen webserver
$ python wikiserver.py
# Es kommt als Log:
2014-04-06 15:28:55,442 INFO MoinMoin.log:135 using logging configuration read from "/home/pi/moin-1.9.9/wikiserverlogging.conf"
2014-04-06 15:28:55,448 INFO MoinMoin.log:157 Running MoinMoin 1.9.9 release code from /home/pi/moin-1.9.9/MoinMoin
2014-04-06 15:28:58,035 INFO werkzeug:116  * Running on http://localhost:8080/
2014-04-06 15:29:06,801 INFO MoinMoin.config.multiconfig:127 using wiki config: /home/pi/moin-1.9.9/wikiconfig.pyc

# gehe mit dem Webbrowser auf die IP Adresse vom Raspberry Pi, z.B.
192.168.17.183:8080

# dann kommt die Seite "LanguageSetup"
# klicke oben auf "anmelden" und "nun eins anlegen"
# Benutzername: "PiMoin"
# Passwort: "raspberry"  2x
# Email: "pi@moin"
# klicke auf "Profil anlegen"
# klicke wieder auf "anmelden"
# Benutzername: "PiMoin"
# Passwort: "raspberry" 
# klicke wieder auf "anmelden"
# jetzt muss in der Kopfzeile erscheinen "PiMoin"

# klicke in der Seite "LanguageSetup" auf "install help and system page packages"
# dort wählt man oben aus "english" und unten "install all"
# dann wählt man oben aus "german" und unten "alle installieren"
# Damit werde die Hilfeseiten und die Starteite installiert in "wiki/underlay"

# stoppe den lokalen webserver mit Taste "strg-C"

logging mit "rotating log file"

Im Fall der Desktop Edition ist die einfachste Methode das logging über den error output zu machen.

Wenn man beim Rechner Kaltstart MoinMoin im Server Modus (als Hintegrund Daemon) laufen lassen möchte, muss das logging in einen File gemacht werden. Speziell bei kleinen Rechnern hat man nicht den vollen Support von Linux. Deshalb wird ein eigener rotating log file handler benutzt.

# This is the standalone wikiserver logging configuration.
# It can be easily modified to help when debugging, see the comments.
# Available loglevels, to adjust verbosity: DEBUG, INFO, WARNING, ERROR, CRITICAL
# 2014-04-08 RudolfReuter, adopted to RotatingFileHandler

[DEFAULT]
#logfile=moin.log
logfile=moin_rot.log

[loggers]
keys=root,moin_debug

[logger_root]
level=INFO
#level=DEBUG
handlers=stderr

[logger_moin_debug]
# adapt the next lines to your debugging needs:
level=INFO
#level=DEBUG
handlers=stderr
qualname=MoinMoin.auth
propagate=0

[handlers]
keys=logfile,stderr
#keys=stderr

[handler_logfile]
class=FileHandler
formatter=default
level=DEBUG
args=('%(logfile)s', 'at')

[handler_stderr]
#class=StreamHandler
class=handlers.RotatingFileHandler
formatter=default
# after test, switch from DEBUG to INFO
level=DEBUG
#level=INFO
#args=(sys.stderr, )
# rotate if the size of 64000 bytes are reached, 3 files total.
# args  filename, mode, maxBytes, backupCount
args=('%(logfile)s', 'a', 64000, 2)

[formatters]
keys=default

[formatter_default]
format=%(asctime)s %(levelname)s %(name)s:%(lineno)d %(message)s
datefmt=
class=logging.Formatter

Server special:
$ cp wiki/server/moin .   # copy to main folder
$ chmod 755 moin          # set execute bits

#from MoinMoin import log
from MoinMoin import log
#log.load_config('/path/to/logging_configuration_file')
log.load_config('wikiserverlogging.conf')

Danach muss man bei dem standalone server Betrieb noch den File moin anpassen, siehe unten.

MoinMoin als standalone server

Wenn man MoinMoin als eigenständiger Web Server laufen lassen möchte, muss man in dem File wikiserverconfig.py Anpassungen machen:

hostname = ''
port = 8080
#user = 'www-data'
user = 'pi'
#group = 'www-data'
group = 'pi'

Starte web server zum test:
$ ./wikiserver.py

Im Web Browser die folgende Seite aufrufen:
http://server-name-or-IP:8080

Zum automatischen Starten von MoinMoin beim Rechner Kaltstart erzeuge den File /etc/init.d/moin_sas.sh

File: /etc/init.d/moin_sas.sh
#!/bin/sh
### BEGIN INIT INFO
# Provides:          moin_sas
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2,3
# Default-Stop:      6
# Short-Description: Start moin wiki as StandAlone Server (_sas).
# Description:       adopt PYTHONPATH, PREFIX
### END INIT INFO
# Structur Reference: http://wiki.debian.org/LSBInitScripts/
# Debug with: sh -x moin_sas.sh (linewise output with '+' Prefix)
# Port check with: nmap localhost
# for Raspberry Pi
# Start with "root", runs under "user" (setup in wikiserverconfig.py) for better security
# file moin_sas.sh must be stored in /etc/init.d
# Install file with: cd /etc/init.d; sudo update-rc.d moin_sas.sh default
# 2014-04-08 RudolfReuter


PYTHONPATH="/usr/bin/python"
# check for existing python
if [ ! -e "$PYTHONPATH" ]; then
  echo "moin_sas.sh: Error - NO $PYTHONPATH" | logger
  exit
fi

PREFIX="/home/pi/moin-1.9.9"  # moin home folder
# for use from access over internet
#PARAMS=" server standalone --user=www-data --group=www-data"
# for use from in house network only
PARAMS=" server standalone --user=pi --group=pi"
DAEMON="moin"
MOINPATH=${PREFIX}/${DAEMON}

if [ ! -x "$MOINPATH" ]; then
  echo "moin_sas.sh: Error - No file moin, or no exec attr. 775" | logger
  exit
fi

# check for first letter of LINK in /etc/rc2.d and set START/STOP
if [ -z "$1" ] ; then
    case `echo "$0" | sed 's:^.*/\(.*\):\1:g'` in
        S??*) rc="start" ;;
        K??*) rc="stop" ;;
        *) rc="usage" ;;
    esac
else
    rc="$1"
fi

case "$rc" in
    start|"")
        echo "Starting web server: $DAEMON" 2>&1 | logger
        cd $PREFIX
        $MOINPATH $PARAMS --start 2>&1 | logger
        # change owner, otherwise it cannot be deleted at Stop
        if [ -e "moin.pid" ] ; then
            chown pi:pi moin.pid
        fi
        ;;
    stop)
        echo "Stopping web server: $NAME" 2>&1 | logger
        cd $PREFIX
        $MOINPATH $PARAMS --stop 2>&1 | logger
        ;;
    restart)
        "$0" stop
        sleep 1
        "$0" start
        ;;
    *)
        echo "Usage: $0 (start|stop|restart)"
        exit 3
        ;;
esac
exit 0
# end of file

und installiere das mit:

# ein symbolischer Link wird in den run level 2,3 und 6 erzeugt.
$ cd /etc
$ sudo ln -fs /etc/init.d/moin_sas.sh rc2.d/S05moin_sas
$ sudo ln -fs /etc/init.d/moin_sas.sh rc3.d/S05moin_sas
$ sudo ln -fs /etc/init.d/moin_sas.sh rc6.d/K05moin_sas

# es sollte original mit "update-rc.d funktionieren, leider macht es das nicht.
$ sudo update-rc.d moin_sas.sh defaults
# Der startup link "/etc/rc2.d/S04moin_sas.sh" wird erzeugt.
# Für mehr Informationen zu dem '''init system''' rufe auf in dem Terminal: man update-rc.d, or man init

Zusätzlich muss der server help file moin in das home directory kopiert und erweitert werden:

$ cd /home/pi/moin-1.9.9
$ cp wiki/server/moin moin

# Füge die folgenden Zeilen vor "run()" ein, um das logging zu aktivieren:

from MoinMoin import log
log.load_config('wikiserverlogging.conf')

Jetzt kann der moin daemon manuell zum Test gestartet werden:

$ sudo /etc/init.d/moin_sas.sh start

Prüfe, ob der Prozess läuft:
$ ps -Af | grep moin
pi        5112     1  1 11:00 ?        00:00:05 python /home/pi/moin-1.9.9/moin server standalone --user=pi --group=pi --start

$ cat moin_rot.log
2014-04-08 09:48:11,972 INFO MoinMoin.log:135 using logging configuration read from "/home/pi/moin-1.9.9/wikiserverlogging.conf"
2014-04-08 09:48:11,978 INFO MoinMoin.log:157 Running MoinMoin 1.9.9 release code from /home/pi/moin-1.9.9/MoinMoin
2014-04-08 09:48:15,048 INFO MoinMoin.web.serving:129 Running as uid/gid 1000/1000
2014-04-08 09:48:15,052 INFO werkzeug:116  * Running on http://localhost:8080/

Nach einem reboot sollte der moin standalone server automatisch starten.

Anbindung an lighttpd

Dann kommt die Serveranbindung an lighttpd.

# get Python WSGI gateway flup

# install "easy-install"
$ sudo apt-get install python-setuptools

$ curl -O https://pypi.python.org/packages/2.5/f/flup/flup-1.0-py2.5.egg
$ sudo easy_install flup-1.0-py2.5.egg
...
Installed /usr/local/lib/python2.7/dist-packages/flup-1.0-py2.7.egg

Leider war das nicht zu realisieren.

Tipps

Um das Wiki Layout möglichst gleichmäßig auf verschiedenen Bildschirm Breiten darzustellen, kann man die Layout Breite limitieren, z.B. auf 1000 Pixel. Das kann man online im CSS editieren. Nach einem reload im Web Browser sollte das dann so dargestellt werden. Man sollte das auch beim Thema modernized ändern.

Path MoinMoin/web/static/htdocs/modern/css/screen.css
Edit to:
body {
    padding: 0;
    border: 0;
    width: 1000px;
}

Im Original ist die Breite des TableOfContent (Inhaltsverzeichnis) mit 50% line length zu schmal, das kann man verbessern mit einem Wert von 90% in MoinMoin/web/static/htdocs/modern/css/common.css about line 139. Das reduziert die Anzahl der Zeilenumbrüche. Man sollte das auch beim Thema modernized ändern.

    max-width: 90%; /* 2012-03-07 RudolfReuter, 50% -> 90%, reduce line breaks */

Highlight Lexer

In order to displaying a table with the list of available Pygments lexers, you need HighlighterList macro. To install:

GraphViz Einbindung

In order to install the moin support for Graphviz you have to install from the archiv MoinGraphViz-1.0rc4-brn-1.9.x.comp.zip:

$ unzip MoinGraphViz-1.0rc4-brn-1.9.x.comp.zip
# to wiki/data/plugin/action/
# to wiki/data/plugin/parser/
$ cp -r MoinGraphViz-1.0rc4-brn-1.9.x.comp/wiki ~/moin-1.9.9/wiki/
$ cp -r MoinGraphViz-1.0rc4-brn-1.9.x.comp/umoin ~/moin-1.9.9/MoinMoin/support/

List of pages in this category:

-- RudolfReuter 2014-04-06 18:03:44


Go back to CategoryRaspberryPi oder StartSeite

RaspberryPIMoinMoinWiki (last edited 2018-04-03 15:22:27 by RudolfReuter)