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.
Installare il pacchetto python2.7
- Scaricare moinmoin (tar) dal sito moinmo.in
- estrarre il file tar dove preferite (io l'ho fatto dentro a /srv/ ottenendo così la directory /srv/moin-1.9-1.9.11 (da ora in avanti, prendiamo questa directory come punto di partenza)
- andare sotto wiki ed estrarre il file underlay.tar
- sempre sotto wiki, rinominiamo "data" e ci carichiamo la nostra vecchia "data" con dentro i nostri dati del wiki (se stiamo partendo da zero, ovviamente, non facciamo questo passaggio)
- facciamo un chown -R a www-data. della nostra directory "data"
- nella directody principale modifichiamo i files di config:
- wikiconfig.py nel quale dobbiamo modificare tutti i parametri del wiki e soprattutto disattivare la "non sicurezza" del "personal wiki"
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'
- wikiserverconfig.py nel quale impostiamo l'utente che farà girare il server (lo lancio da root, e poi lui diventa www-data)
user = 'www-data' group = 'www-data'
- wikiserverlogging.conf, dove dopo aver verificato che vada tutto metto il logging a "ERROR" per non avere output in stdout e stderr
[logger_root] level=ERROR handlers=stderr
- wikiconfig.py nel quale dobbiamo modificare tutti i parametri del wiki e soprattutto disattivare la "non sicurezza" del "personal wiki"
Per provare se va tutto, lanciamo a mano python2.7 wikiserver.py e proviamo a collegarci a http://localhost:8080, poi lasciamo in esecuzione questo processo mentre installiamo apache e proviamo la config del reverse proxy, come segue:
- Installare Apache2 con i moduli per fare da proxy:
apt install apache2 a2enmod proxy a2enmod proxy_http
- Configurare apache per fare da proxy (diciamo in un named virtual che si chiama kb.kurgan.org)
<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>
- Attivare il virtuale, creare i certificati ssl, ecc.
- Se tutto funziona, ora vedremo il wiki proxato da Apache in https sulla 443 dall'esterno.
- Fermare il server di moinmoin che avevamo lanciato a mano.
Creare una unit di systemd (per Debian) per lanciare all'avvio il "server" interno di moinmoin. Editare il file /lib/systemd/system/moinmoin.service e metterci dentro:
[Unit] Description=MoinMoin wiki application After=syslog.target network.target [Service] 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
eseguire systemctl start moinmoin.service
- Ora il sito dovrebbe essere accessibile e il web server interno di moinmoin gira come demone.
Se tutto è a posto, lo facciamo partire al boot con systemctl enable moinmoin.service
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:
- Al file /srv/moin-1.9-1.9.11/MoinMoin/formatter/text_html.py (riga 674) commentare le due righe di seguito commentate (la if e la sua successiva)
# 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 */ }
Una volta riavviato moin, controllate che i simboli > e < non siano sostituiti dalla codifica html (> <) dentro ai blocchi di codice. Se lo sono, la colpa sembra essere della modifica al file text_html.py. Quella che ho riportato io qui (che non e` quella originale del bug report linkato) funziona bene.
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