Table of Contents

Moinmoin

Purtroppo moinmoin è obsoleto. Io mi trovo costretto a usarlo perchè la mia KB (quella che state leggendo ora) nasceva su moinmoin e non ho trovato un tool per convertirla a dokuwiki.

Moinmoin non è più pacchettizzato da Debian 11 / Devuan Chimaera in avanti, e richiede python 2.7 che per fortuna esiste ancora, ma non esiste più il modulo WSGI per Apache2. Questo significa che ho dovuto usare un trucco orrendo per fare andare moinmoin 1.9 su Debian 11.

Moinmoin su Debian 11

L'idea è quella di fare girare moinmoin usando il suo "piccolo web server interno" il che richiede praticamente zero integrazione con il sistema. Il web server risponde sulla 8080 a localhost, e poi gli faccio davanti un proxy con Apache. Dicono che è lento, a me sembra che vada benissimo.

Attenzione perché la config di default in questa modalità è "per uso personale" e quindi è priva di ogni tipo di autenticazione / controllo accessi, ma è sufficiente modificare la config per farlo funzionare come vogliamo.

Nota: io ho "importato" la config e i dati dal mio vecchio moinmoin che era installato su Debian 9, quindi avevo già degli account utente funzionanti. Non ho studiato la creazione di un nuovo wiki con nuovi account partendo da zero. Non ho idea di quanto possa essere complesso farlo.

    DesktopEdition = False

    # Sicurezza
    acl_hierarchic = 1
    actions_excluded = ['newaccount']
    superuser = [u"Kurgan", ]
    acl_rights_before = u"Kurgan,AdminGroup:read,write,delete,revert,admin"
    acl_rights_default = u"EditorsGroup:read,write,delete,revert All:read"
    acl_rights_after = u"All:"

    # Personalizzazione sito
    sitename = u'La Knowledge Base di Kurgan' # [Unicode]
    interwikiname = None
    language_default = 'en'
    page_front_page = u"FrontPage"
    show_interwiki = 0
    logo_string = u''
    navi_bar = [
        # If you want to show your page_front_page here:
        u'%(page_front_page)s',
        u'RecentChanges',
        u'FindPage',
        u'HelpContents',
    ]

    secrets = 'La vostra stringa random preferita e lunga'
    user = 'www-data'
    group = 'www-data'
[logger_root]
level=ERROR
handlers=stderr
apt install apache2
a2enmod proxy
a2enmod proxy_http
<VirtualHost *:80>
        ServerName kb.kurgan.org
        ServerAdmin webmaster@kurgan.org
        RedirectMatch 301 ^(?!/\.well-known/acme-challenge/).* https://kb.kurgan.org$0
        DocumentRoot /var/www/kb
        ErrorLog ${APACHE_LOG_DIR}/kb-error.log
        CustomLog ${APACHE_LOG_DIR}/kb-access.log combined
<[[/VirtualHost]]>


<IfModule mod_ssl.c>
   <VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/kb.kurgan.org.cert
        SSLCertificateKeyFile /etc/letsencrypt/kb.kurgan.org.key
        ServerName kb.kurgan.org
        ServerAdmin webmaster@kurgan.org
        DocumentRoot /var/www/kb
        ErrorLog ${APACHE_LOG_DIR}/kb-error.log
        CustomLog ${APACHE_LOG_DIR}/kb-access.log combined

        # il web server dentro moinmoin riporta un 500 se fai una get
        # di / quindi faccio un rewrite da / a FrontPage
        RewriteEngine on
        RewriteCond %{REQUEST_URI} ^/$
        Rewriterule ^(.*)$ https://kb.kurgan.org[[/FrontPage]] [L,R=301]

        ProxyPass / http://localhost:8080/
        ProxyPassReverse / http://localhost:8080/
        ProxyPreserveHost On
   <[[/VirtualHost]]>
<[[/IfModule]]>
 [Unit]
Description=MoinMoin wiki application
After=syslog.target network.target
StartLimitIntervalSec=30
StartLimitBurst=2

[Service]
Restart=on-failure
Type=simple
ExecStart=/usr/bin/python2.7 /srv/moin-1.9-1.9.11/wikiserver.py
User=root
Group=root
KillSignal=SIGQUIT

[Install]
WantedBy=multi-user.target

BUG del non-breaking space o NBSP

Quando si crea una riga di testo "teletype", cioè usando due backtick (vedi sotto) o usando le tre graffe aperte e chiuse sulla stessa riga, succede che moinmoin (versione 1.9.11 lo fa) ci mette in mezzo dei non-breaking spaces al posto degli spazi. Risultato, quando copi e incolli qualcosa (che tipicamente nasce per essere copia-incollato) non funziona un cavolo perché i non-breaking spaces SEMBRANO spazi ma non lo sono. sono in realtà sequenze UTF-8 codificate con C2 0A in esadecimale.

C'è un bug report qui: http://moinmo.in[[/MoinMoinBugs]]/BrokenRenderingOfTeletypeText che non so se sia stato applicato in seguito. Io l'ho applicato alla mia installazione e ora funziona. (riavviare moinmoin!!!)

Per comodità riporto qui le mie modifiche:

  # Text ##############################################################

    def _text(self, text):
        text = wikiutil.escape(text)
        #if self._in_code:
        #    text = text.replace(' ', self.hardspace)
        return text

*Al file /srv/moin-1.9-1.9.11/MoinMoin/web/static/htdocs/modernized/css/common.css (riga 69 in avanti) aggiungere 3 righe come segue:

pre {
    border: 1pt solid #AEBDCC;
    background-color: #F3F5F7;
    padding: 5pt;
    font-family: courier, monospace;
}
pre, tt{
    white-space: pre;
    /* begin css 3 or browser specific rules - do not remove!
    see: http://forums.techguy.org/archive/index.php/t-249849.html */
    white-space: pre-wrap;
    word-wrap: break-word;
    white-space: -moz-pre-wrap;
    white-space: -pre-wrap;
    white-space: -o-pre-wrap;
    /* end css 3 or browser specific rules */
}

Nota sul quoting con il backtick (il carattere "`")

Nelle versioni recenti di !MoinMoin non e` possibile disattivare il quoting con il backtick, il che e` allucinante per me che scrivo in italiano con una tastiera americana, quindi lo uso per gli accenti.

La soluzione e` andare a modificarselo a mano.

Nel file MoinMoin/parser/text_moin_wiki.py, alla riga 302 (o giu` di li`) c'e` una voce che dice:

)|(?P<tt_bt>
    `  # teletype (using a backtick) on
    (?P<tt_bt_text>.*?)  # capture the text
    `  # off

Questa va cambiata in qualcos'altro. Per dire, cosi` ci vogliono due "`" di fila per attivare la funzione di quoting.

)|(?P<tt_bt>
    ``  # teletype (using a backtick) on
    (?P<tt_bt_text>.*?)  # capture the text
    ``  # off

Eliminare pagine vuote

Per quanto uno possa proteggere moinmoin dagli spammer, questi possono sempre creare directory inutili nel file system cercando di creare le loro pagine di spam. Per ripulirle (a vostro rischio) andate dove sono salvate le pagine e usate find per ripulire cio` che e` vuoto:

cd /usr/share/moin/kb/data/pages
find . -empty -delete

Cancellare i log ogni tanto

I log si trovano dentro a /wiki/data (relativamente alla vostra installazione) e si riempiono all'infinito. Ogni tanto andrebbero cancellati, specie l' event-log che di fatto è inutile perché riporta gli accessi al sito, ma sono tutti provenienti da localhost visto che c'è apache davanti come proxy. Utilità quindi molto ridotta.