Mediawiki
Die Wiki-Software Mediawiki (auch: MediaWiki) wird seit 2002 als Ersatz für Usemod für die freie Online-Enzyklopädie Wikipedia entwickelt. Inzwischen laufen auch die Wikipedia-Ableger Wikisource (freie Quellen zur Wikipedia), Wiktionary (Wörterbuch), Wikiquote (Zitatensammlung) und Wikibooks (Sachbücher) sowie eine Vielzahl anderer Projekte im Internet oder in Intranets mit dieser Software. Sie ist unter der GPL lizenziert und in der Programmiersprache PHP geschrieben. Zum Speichern der Inhalte wird die relationale Datenbank Mysql genutzt. Wahlweise können inzwischen auch Postgresql und Sqllite als Datenbankserver verwendet werden.
Zur Installation dient ein kleines PHP-Skript. Im Verzeichnis "maintenance/archives" finden sich SQL-Skripte zum Anlegen der Tabellen, Indizes und Benutzer. Nach Anpassung der Datei "LocalSettings.php" müssen alle PHP-Dateien (auch die in den Unterverzeichnissen) in das gewünschte Serververzeichnis kopiert werden. Der Aufruf der Datei "wiki.phtml" im Browser startet das Wiki, wobei "phtml" als PHP-Endung in der Apache-Konfiguration eingetragen sein muss.
Produkte
Ich liste hier nur die von mir selber verwendeten Versionen.
- Mediawiki 1.5.6
- Mediawiki 1.10.0
- Mediawiki 1.13.0
- Mediawiki 1.13.3
- Mediawiki 1.14.0
- Mediawiki 1.16.0
- Mediawiki 1.19.0
- Mediawiki 1.23.0
Konzepte
- Benutzerführung
- Benutzertyp
- Bilder
- Erweiterung
- Inhaltsverzeichnis
- Namensraum
- Seitenkategorie
- Skin
- Vorlage
- Sicherheit: Um sicherheitstechnisch auf dem neuesten Stand zu bleiben, sollte sich der Benutzer "Sysop" bei Wikipedia.org in die entsprechende Mailingliste eintragen: http://mail.wikipedia.org/mailman/listinfo/mediawiki-announce
Installation
Das Installationsskript legt drei MySQL-Benutzer an und setzt deren Rechte in der Datenbank.
- Der Benutzer "$wgDBuser" führt alle normalen Datenbankoperationen durch
- Der SQL-Benutzer "$wgDBsqluser" hat nur Lesezugriff und wird für die Spezialseite verwendet, auf welcher der Systemverwalter SQL-Abfragen ausführen kann. Dammit können z. B. neue Benutzer gefunden und begrüsst werden.
- Der Benutzer "$wgDBadminuser" und sein Passwort werden zusätzlich in der Datei "AdminSettings.php" eingetragen. Dieser Benutzer mit Schreibrecht auf die Wiki-Datenbank wird bei der Installation und von den Wartungsskripten verwendet.
Das Installationsskript (früher "install.php") fragt u. a. nach dem MySQL-Root-Passwort und legt die Datenbank, Tabellen und MySQL-Benutzer an. Zuletzt wird angeboten, zwei Wiki-Benutzerkonten (Sysop, Developer) anzulegen. Die Konfiguration des Webservers beschränkt sich darauf, die Dateiendung ".phtml" als PHP-Erweiterung einzutragen.
AddType application/x-httpd-php .php .phtml
Im bei der Installation erzeugten Verzeichnis "upload", in dem Mediawiki hochgeladene Dateien speichert, sollte die Ausführung von PHP und die Darstellung von HTML verboten sein:
<Directory "/path/to/upload/directory"> AllowOverride None AddType text/plain .html .htm .shtml php_admin_flag engine off </Directory>
Konfiguration
Die Konfiguration von Mediawiki findet in der Datei "LocalSettings.php" statt.
- http://www.mediawiki.org/wiki/Manual:LocalSettings.php
- http://www.mediawiki.org/wiki/Manual:Configuration_settings
Grundkonfiguration | |
---|---|
$IP | Lokaler Pfad, auf dem Rechner, in den das Wiki kopiert werden soll, z. B. "/srv/www/htdocs" |
$wgServer | Teil der Rechneradresse vor dem ersten Schrägstrich, z. B. "http://www.meinwiki.ch/" |
$wgScriptPath | Unterverzeichnis mit den PHP-Dateien, z. B. "wiki"; diese Variable wird leergelassen (""), wenn diese im Hauptverzeichnis liegen. |
$wgEmergencyContact | E-Mail-Adresse des Systemverwalters, die bei Problemen angezeigt wird. |
$wgDBserver | Name der Mysql-Datenbank. |
$wgDBuser $wgDBpassword |
Mysql-Benutzer für den normalen Datenbankzugriff. |
$wgDBsqluser $wgDBsqlpassword |
Mysql-Benutzer für SQL-Abfragen über den Webbrowser, hat nur Leserechte. |
$wgLanguageCode | Zwei-Buchstaben-Code der verwendeten Sprache, z. B. "de" für Deutsch. |
- Logo
- Aktivierung des Dateihochladens
- Kleingeschriebene Links
- Zugriffsrechte
- Benutzerrechte (Sysop und Bureaucrat)
- Suche nach Wörtern mit weniger als 4 Buchstaben
- Entfernen von Reitern für nicht angemeldete Benutzer
- Entfernen von Boxen für nicht angemeldete Benutzer
- Aktivierung von Easytimeline
- Textformatierung
- Zurücksetzen der Seitenzähler
Für ein schnelleres Laden der Inhalte sowie weniger Bandbreitenverbrauch können häufig geladene Dateien wie "main.css" oder "wikibits.js" von überflüssigen Kommentaren und Leerzeichen befreit werden.
FAQ
Änderung des Icons im Webbrowser
Das sogenannte Favicon im Webbrowser links vom URL kann in der Datei "DefaultSettings.php" mit folgender Variable bestimmt werden. Im Beispiel befindet sich die Datei "favicon.ico" im Apache-Wurzelverzeichnis.
$wgFavicon = '/favicon.ico';
Ausblenden der Sidebar auf linker Seite
Folgender Code muss in der Datei "skins/vector/vecor.js" vor dem abschliessenden "});" eingebaut werden.
- Danach kann durch Drücken der Taste "F3" der Bereich der Sidebar auf der linken Seite ausgeblendet werden.
- Ein Neuladen der Seite über die Taste "F5" zeigt wieder den normalen Zustand.
$('document').ready(function() { $("body").keydown(function (e) { if (e.keyCode == 114) { //F3 to collapse $("#mw-panel").toggle(); $("div#mw-panel").css('display', 'none'); $("#left-navigation").css('left', '1em'); $("#mw-head-base").css('margin-left', '1em'); $("div#content").css('margin-left', '1em'); $("div#footer").css('margin-left', '1em'); } }); });
Ein- und ausklappbare Tabellen
- http://meta.wikimedia.org/wiki/Help:Collapsing
- http://en.wikipedia.org/wiki/Wikipedia:Collapsible_tables
Folgender Code muss in "MediaWiki:Common.js" eingebaut werden.
/*<source lang="javascript">*/ /** Collapsible tables ********************************************************* * * Description: Allows tables to be collapsed, showing only the header. See * [[Wikipedia:NavFrame]]. * Maintainer on Wikipedia: [[User:R. Koot]] */ var autoCollapse = 2; var collapseCaption = "hide"; var expandCaption = "show"; function hasClass( element, className ) { var Classes = element.className.split( " " ); for ( var i = 0; i < Classes.length; i++ ) { if ( Classes[i] == className ) { return ( true ); } } return ( false ); } function collapseTable( tableIndex ) { var Button = document.getElementById( "collapseButton" + tableIndex ); var Table = document.getElementById( "collapsibleTable" + tableIndex ); if ( !Table || !Button ) { return false; } var Rows = Table.getElementsByTagName( "tr" ); if ( Button.firstChild.data == collapseCaption ) { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = "none"; } Button.firstChild.data = expandCaption; } else { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = Rows[0].style.display; } Button.firstChild.data = collapseCaption; } } function createCollapseButtons() { var tableIndex = 0; var NavigationBoxes = new Object(); var Tables = document.getElementsByTagName( "table" ); for ( var i = 0; i < Tables.length; i++ ) { if ( hasClass( Tables[i], "collapsible" ) ) { NavigationBoxes[ tableIndex ] = Tables[i]; Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex ); var Button = document.createElement( "span" ); var ButtonLink = document.createElement( "a" ); var ButtonText = document.createTextNode( collapseCaption ); Button.style.styleFloat = "right"; Button.style.cssFloat = "right"; Button.style.fontWeight = "normal"; Button.style.textAlign = "right"; Button.style.width = "6em"; ButtonLink.setAttribute( "id", "collapseButton" + tableIndex ); ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" ); ButtonLink.appendChild( ButtonText ); Button.appendChild( document.createTextNode( "[" ) ); Button.appendChild( ButtonLink ); Button.appendChild( document.createTextNode( "]" ) ); var Header = Tables[i].getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0]; /* only add button and increment count if there is a header row to work with */ if (Header) { Header.insertBefore( Button, Header.childNodes[0] ); tableIndex++; } } } for ( var i = 0; i < tableIndex; i++ ) { if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) { collapseTable( i ); } } } addOnloadHook( createCollapseButtons );
Fehlersuche
Lokale Links
Performanceverbesserung
Benutzeranpassungen
Sicherung
Eine Sicherung von Mediawiki besteht aus folgenden Teilen:
- der Wiki-Inhalt aus der Mysql-Datenbank, der auf zwei Arten erstellt werden kann:
- ein SQL-Datenbankdump mit "mysqldump"
- ein XML-Datenbankdump mit dem Skript "dumpBackup.php" (dafür muss die Datei "AdminSettings.php" konfiguriert sein)
- die Bilder und sonstigen Dateien mit tar
- Konfigurationsdateien wie "LocalSettings.php" oder "AdminSettings.php"
- Mediawiki-Programmdateien, einschliesslich aller Skins und Erweiterungen
Ich nutze für die tägliche Sicherung das Skript "MEDIAWIKIbackup-kuhn.sh".
$ mkdir /home/mik/bin && cd /home/mik/bin $ vi MEDIAWIKIbackup-kuhn.sh $ chmod 744 MEDIAWIKIbackup-kuhn.sh
Die crontab von Benutzer "mik" ruft das Skript wie folgt auf.
30 5 * * * /home/mik/bin/MEDIAWIKIbackup-kuhn.sh database /var/www/directory emailaddress
Das Skript "MEDIAWIKIbackup-kuhn.sh" hat folgenden Inhalt:
#!/bin/bash
#
# Name MEDIAWIKIbackup-kuhn.sh
# Author Michael Kuhn
# Date 28 December 2008
# Description Basic backup script for a Mediawiki installation
# set -x
##### CONFIGURATION #####
# The database the wiki stores data in
DATABASE="$1"
#
USER="root"
#
PASSWORD=
#
# The directory Mediawiki is installed in
MEDIAWIKIPATH="$2"
#
# The directory to write the backup to
BACKUPPATH="~/backup/mediawiki"
#
# File system where the BACKUPPATH resides (according to "df -k")
BACKUPFILESYSTEM="/dev/hdv1"
#
# An e-mail address to notify
EMAILTO="$3"
##### MAIN #####
TIMESTAMP=$(date -I)
DATABASEDUMP=${BACKUPPATH}/DBSAVE${DATABASE}-${TIMESTAMP}.sql.bz2
XMLFULLDUMP=${BACKUPPATH}/DBSAVE${DATABASE}-full-${TIMESTAMP}.xml.bz2
XMLCURRENTDUMP=${BACKUPPATH}/DBSAVE${DATABASE}-current-${TIMESTAMP}.xml.bz2
FILEDUMP=${BACKUPPATH}/${DATABASE}-${TIMESTAMP}.files.bz2
DISKSEIZURE=$(df -k | grep ^$BACKUPFILESYSTEM | awk '{ print $5 }' | awk 'BEGIN { FS = "" } { print $1 $2 }')
if [ $DISKSEIZURE -gt 90 ]; then
( printf "To: ${EMAILTO}\n" ;
printf "Subject: ALARM!!! $(uname -n) ($1) ";
printf "${DISKSEIZURE}%% Disk nearly full!!! "
printf "(hosttime $(date -I))\n";
printf "\n" ) | /usr/sbin/sendmail -f ${EMAILTO} -t
else
echo
echo "Mediawiki backup"
echo " Database : ${DATABASE}"
echo " Directory: ${MEDIAWIKIPATH}"
echo " Backup to: ${BACKUPPATH}"
echo
echo "Creating database dump ${DATABASEDUMP}..."
/usr/bin/mysqldump -u ${USER} --password=${PASSWORD} --quick ${DATABASE} |\
bzip2 -c > ${DATABASEDUMP} || exit $?
if [ $? = 0 ]
then
( printf "To: ${EMAILTO}\n" ;
printf "Subject: SUCCESS: $(uname -n) ";
printf "$(df -k | grep ${BACKUPFILESYSTEM} | awk '{print $5}')% ";
printf "dump ${DATABASE} (hosttime $(date -I))\n";
printf "\n" ) | /usr/sbin/sendmail -f ${EMAILTO} -t
elif [ $? != 0 ]
then
( printf "To: ${EMAILTO}\n" ;
printf "Subject: ALARM!!! $(uname -n) ";
printf "Creating dump ${DATABASEDUMP} NOT successful! ";
printf "(hosttime $(date -I))\n";
printf "\n" ) | /usr/sbin/sendmail -f ${EMAILTO} -t
fi
echo
echo "Creating XML full dump ${XMLFULLDUMP}..."
cd ${MEDIAWIKIPATH}/maintenance
php -d error_reporting=E_ERROR dumpBackup.php --full | \
bzip2 -c > ${XMLFULLDUMP} || exit $?
echo
echo "Creating XML current dump ${XMLCURRENTDUMP}..."
cd ${MEDIAWIKIPATH}/maintenance
php -d error_reporting=E_ERROR dumpBackup.php --current | \
bzip2 -c > ${XMLCURRENTDUMP} || exit $?
echo
echo "Creating file archive ${FILEDUMP}..."
cd "${MEDIAWIKIPATH}"
tar --exclude .svn -zcf ${FILEDUMP} . || exit $?
echo
echo "Done!"
echo
echo "Files to copy to a safe place:"
echo "- ${DATABASEDUMP}"
echo "- ${XMLFULLDUMP}"
echo "- ${XMLCURRENTDUMP}"
echo "- ${FILEDUMP}"
fi
##### END #####
|
Unterstrich im Seitentitel
Zur Anzeige des Unterstrichs (engl. underline, underscore) in einem Mediawiki-Seitentitel kann folgende Variable verwendet werden:
{{DISPLAYTITLE:Titel_mit_Unterstrichen}}
Weblinks
Folgende Weblinks behandeln Mediawiki-Themen:
- Mediawiki (Mediawiki.org)
- How to become a MediaWiki hacker
- Manual:Navigation bar
- Mediawiki Help:FAQ which contains
- How do I add extra namespaces?
- Initial user was not created by installer
- How do I hide the main page title?
- How do I add/remove tabs in general?
- How can I force users to preview before they save?
- How do I reset a password?
- Sites using Mediawiki
- Wikimedia Meta-Wiki
Siehe die Dokumentation zur Anpassung der Benutzeroberfläche und das Benutzerhandbuch für Hilfe zur Benutzung und Konfiguration.