MediaWiki
De Guifi.net - Wiki Hispano
MediaWiki es un motor para wikis bajo licencia GPL, programado en PHP usando MySQL sobre Apache. A pesar de haber sido creado y desarrollado para Wikipedia y los otros proyectos de la Fundación Wikimedia, ha tenido una gran expansión a partir de 2005, existiendo gran número de wikis basados en este software que nada tienen que ver con dicha fundación. La mayoría de ellos se dedican a la documentación de software o a temas especializados. Como este de Guifi.net.
Extraído de Wikipedia
- Guía de ayuda para editar wikis.
- Guía de ayuda para administrar wikis.
Contenido
- 1 Instalación
- 2 Administración
- 2.1 Habilitar y deshabilitar características en el archivo 'LocalSettings.php'
- 2.2 Cambiar a publicación abierta
- 2.3 Cómo personalizar el logo
- 2.4 Cómo configurarlo para subir documentos
- 2.5 Cómo integrar mediawiki con LDAP
- 2.6 Cómo cambiar el menú de navegación
- 2.7 Cómo personalizar estilos CSS
- 2.8 Cómo combatir al spam
- 2.9 Cómo esconder páginas
- 2.10 Cómo editar la página que se muestra cuando no hay texto en ella
- 2.11 Cómo cambiar el la visión del /index.php/ a /wiki/
- 2.12 Cómo copiar un wiki en otro wiki
- 3 Actualización
- 3.1 Cuándo actualizar
- 3.2 Comprobar la versión y extensiones que tenemos instaladas
- 3.3 Descargar la actualización de software
- 3.4 Copiar los archivos
- 3.5 Pasar el dominio al servidor secundario
- 3.6 Actualizar el sistema de tablas de la base de datos
- 3.7 Cambiar el enlace simbólico a la nueva versión
- 3.8 Actualizar las extensiones
- 3.9 Copiar las últimas modificaciones
- 3.10 Volver a pasar el dominio al servidor primario
- 3.11 No borramos ni renombramos el directorio antiguo
- 3.12 Finalmente volvemos a activar el rsync
- 4 Actualización de skins
- 5 Enlaces externos
Instalación
Hay dos maneras de instalar MediaWiki: desde las fuentes y desde paquetes Debian. También se puede instalar a partir de otra instalación de Mediawiki aprovechando su base de datos. Aquí también explicamos la instalación más compleja: Instalación con LDAP, multiwiki, cache y miniaturas de imágenes.
Desde las fuentes
Nos bajamos las fuentes de http://www.mediawiki.org/wiki/Download, las descomprimimos en el directorio accesible para apache con tar -xvzf
y actuamos como la instalación desde paquetes Debian.
Desde paquetes debian
aptitude install mediawiki
Nos dejará los archivos php del wiki en: /usr/share/mediawiki[versión]
. Entonces haremos un enlace simbólico a nuestro directorio visible por el apache:
ln -s /usr/share/mediawiki[versión] /var/www/wiki
Una vez hecho esto vamos a nuestro navegador y ponemos la URL de la máquina y el wiki, por ejemplo: http://localhost/wiki
y corremos el Setup. Mediawiki será instalado en /var/lib/mediawiki[versión]
.
Rellenamos todos los datos que nos pida. Ten en cuenta que tendrás que tener instalado MySQL, puedes crear la base de datos previamente o, si dispones de la contraseña de root de MySQL, el setup te la creará.
Ya sólo nos queda mover por seguridad el archivo Settings
a su directorio padre, si hemos seguido el ejemplo será:
mv /var/www/wiki/config/LocalSettings.php /var/www/wiki/
Instalación con LDAP, multiwiki, cache y miniaturas de imágenes
Nos bajamos Mediawiki dese las fuentes o desde los paquetes Debian como hemos mencionado anteriormente e instalamos el resto de paquetes necesarios:
apt-get install php5-dev php5-apc imagemagick php5-ldap
Los cachés que podemos utilizar son:
- APC: precompilados de bytecode propios de PHP
- eAccelerator:
- Memcached
- Filecache o, mejor Squid
Para habilitar el cache de APC añadimos lo siguiente en php.ini
:
[apc] extension=apc.so apc.enabled=1
Luego lo habilitamos en la pantalla de instalación de MediaWiki
El otro cache que vamos a habilitar es eAccelerator. El cache almacenamiento basado en memoria memcached no vale la pena instalarlo para sitios con no tanto tráfico. Para instalar eAccelerator lo haremos compilando las fuentes, ya que todavía no se encuentra en ninguna versión de las paquetería de Debian.
- Descargar las fuentes:
Nos bajamos la última versión tar.bz2 de http://bart.eaccelerator.net/source/
La descomprimimos con:
tar jvxf eaccelerator-0.9.5.3.tar.bz2
Entramos y compilamos:
cd eaccelerator-0.9.5.3 ./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config make make install
Una vez terminada la instalación se nos mostrará la ruta donde se ha copiado el módulo del eAccelerator que debemos configurar en el php.ini, si todo ha ido bien debes tener algo como esto:
Installing shared extensions: /usr/lib/php/modules/20080501/
Ahora debemos indicar en el php.ini nuestro nuevo módulo para que sea cargado con el intérprete. Editamos php.ini
y buscamos una sección llamada Dynamic Extensions
. Buscamos una directiva llamada extension_dir y la definimos con la ruta donde guardamos las extensiones:
extension_dir = "/usr/php/modulos/"
A continuación agregamos las siguientes líneas que incluyen el nombre del módulo y su configuración:
extension="eaccelerator.so" eaccelerator.shm_size="16" eaccelerator.cache_dir="/tmp/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9"
Guardamos el php.ini
y ahora debemos crear el directorio temporal que usará eAccelerator, definido en la configuración que acabamos de agregar al php.ini
como eaccelerator.cache, este directorio debe tener permisos de escritura:
mkdir /tmp/eaccelerator/ chmod 777 /tmp/eaccelerator/
Termidamo esto ya tenemos eAccelerator intalado en nuestro servidor. Sólo falta reiniciar apache para que la nueva configuración tenga efecto.
(Extraído de Salva G. Mendez)
Filecache o Squid
Otro cache que se puede usar es el de páginas estáticas Filecache el cual las almacena en disco, pero si disponemos de un Squid no aportaría nada.
Multiwiki
Atención: este apartado permanece aquí como ejemplo probado y funcional, pero no hace referencia a cómo está configurado actualmente este wiki, aunque lo fue en un principio
A partir de una instalación de MediaWiki habitual se pueden ir haciendo otras compartiendo la mayoría de ficheros del código de Mediawiki (menos 3).
La base de datos entre los wikis también es compartida pero no las tablas. Para ello usamos un prefijo distinto para cada wiki.
Los 3 ficheros de código que son distintos para cada wiki son:
LocalSettings.php index.php includes/WebStart.php
La ventaja de este enfoque es que, si tenemos varios wikis, la actualización o el añadir extensiones es compartido, pero la configuración es propia de cada uno.
a) Instalas Mediawiki en tu servidor.
b) En el proceso de instalación tienes que añadir un prefijo en las tablas de la base de datos.
c) El script de instalación genera el fichero LocalSettings.php
que hay que mover de config/
a la raíz.
d) Para instalar otro wiki vamos a cambiar el nombre de los 3 ficheros mencionados que podrían quedar así:
indexWikiA.php LocalSettingsWikiA.php includes/WebStartWikiA.php
e) Tenemos que editar el indexWikiA.php y cambiar la línea:
require_once( './includes/WebStart.php' );
por
require_once( './includes/WebStartWikiA.php' );
f) También tenemos que editar el includes/WebStartWikiA.php y cambiar las líneas:
require_once( './LocalSettings.php' );
por
require_once( './LocalSettingsWikiA.php' );
Y:
if( !file_exists( './LocalSettings.php' ) ) {
por
if( !file_exists( './LocalSettingsWikiA.php' ) ) {
g) en LocalSettingsWikiA.php cambiaremos:
$wgScriptExtension = ".php";
por
$wgScriptExtension = "WikiA.php";
h) Una vez realizados estos cambios podemos ejecutar de nuevo el script de instalación (como no hay ya index.php
ni LocalSettings.php
sólo hay que cargar el directorio raíz en un navegador). Mantenemos los mismos datos para la base de datos pero cambiando el prefijo
i) Una vez realizada la instalación hacemos lo mismo que en los pasos d,e,f y g pero para el nuevo wiki, por ejemplo añadiendo "WikiB" a los ficheros en cuestión.
Y así seguimos para cualquier nueva instalación de otro wiki.
Nota: La documentación anterior es imprecisa, aunque aporta una idea de lo que hay que hacer, no se desarrolla más ya que estamos a la espera de que la versión de la Extensión de Farmer sea más estable
- Habilitar subida de imágenes
Nuevos programas útiles instalados a partir de la instalación de la versión 1.22.0 (2014)
A partir de la actualización a la versión 1.22.0 mediawiki puede utilizar dos funcionalidades de PHP para optmización de los recursos: la extensión intl PECL de PHP para la normalización Unicode y subir el máximo posible de la longitud (lenght) de suhosin a, al menos, 1024 (por defecto está a 512).
Para la extensión intl PECL simplemente, desde debian la instalamos con:
apt-get install php5-intl
Para subir el máximo posible de la longitud (lenght) de suhosin añadimos al archivo php.ini
las siguientes lineas:
[suhosin] suhosin.get.max_value_length = 1024
Y, para que pueda utilizarlo mediawiki, en nuestro LocalSettings.php añadimos:
$wgResourceLoaderMaxQueryLength = 1024;
Al finalizar todo ello reiniciamos apache.
/etc/init.d/apache restart
Más información:
Administración
Habilitar y deshabilitar características en el archivo 'LocalSettings.php'
http://meta.wikimedia.org/wiki/LocalSettings.php
Cambiar a publicación abierta
En el fichero 'LocalSettings.php':
# Evitar accesos de lectura y escrituras anónimos. # Pages anonymous (not-logged-in) users may see #$wgWhitelistRead = array ("Main Page", "Special:Userlogin", "Wikipedia:Help"); $wgWhitelistRead = array ( "Especial:Userlogin", "MiWiki:Ayuda"); # Restricción en la creación de usuarios $wgWhitelistAccount = array ( "sysop" => 1, "developer" => 1 );
Cómo personalizar el logo
- Añadimos el archivo con la imagen que queramos poner en:
[Path de mediawiki]/skins/common/images
- Cambiamos el nombre de la imagen en:
[Path de mediawiki]/LocalSettings.php
$wgLogo = "$wgStylePath/common/images/nombredelaimagen.png";
- Cambiamos el nombre de la imagen también en:
[Path de mediawiki]includes/DefaultSettings.php
$wgLogo = "{$wgUploadPath}/nombredelaimagen.png";
- Ajustamos el tamaño en: (es necesario cambiar todos los valores en px; en este ejemplo serían todos los 207px)
[Path de mediawiki]/skins/monobook/main.css
} #column-one { padding-top: 207px; }
#p-logo { z-index: 3; position:absolute; /*needed to use z-index */ top: 0; left: 0; height: 207px; width: 12em; overflow: visible; } #p-logo h5 #p-logo a, #p-logo a:hover { display: block; height: 207px; width: 12.2em; background-repeat: no-repeat; background-position: 35% 50% !important; text-decoration: none; }
Cómo configurarlo para subir documentos
Editar el fichero de configuración "LocalSettings.php" debemos forzar el valor falso de la variable:
$wgDisableUploads = false;
En algunas versiones de mediawiki lo que debemos hacer es forzar a cierto el valor de la variable:
$wgEnableUploads = true;
Además, como por defecto sólo se admiten algunos tipos de imágenes, debemos añadir todas las extensiones que queramos soportar:
$wgFileExtensions = array( 'png','jpg','jpeg','ogg','pdf','odt','odp','odg' );
Por defecto PHP sólo tolera archivos de hasta 2 MB, para modificar el límite, hay que hacerlo en el archivo de configuración de php.
Cómo integrar mediawiki con LDAP
Usar la versión de subversion
svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/LdapAuthentication/
o la revisión 43434 para la 1.2a
svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/LdapAuthentication/ -r 43434
http://www.mediawiki.org/wiki/Extension:LDAP_Authentication#Explanation_of_options
Cómo personalizar estilos CSS
http://meta.wikimedia.org/wiki/Help:User_style
Cómo combatir al spam
Por configuración
http://meta.wikimedia.org/wiki/Spam
En los tres wikis de Blogx Populi está instalada la Extensión SpamBlacklist para listas negras de URLs y la variable $wgSpamRegex para listas negras de palabras.
Se pueden añadir URLs de spammers en http://ca.wiki.blogmail.cc/index.php/My_spam_blacklist para los wikis hispano y català (ambos en nodreams) y en http://en.wiki.blogmail.cc/index.php/My_spam_blacklist para el wiki english (en orwell) Sólo usuarias autorizadas.
Una vez que el spam ya está ahí
Logueado como Admin o como una usuaria, ir a Cambios recientes, mostrar los últimos 500 en los últimos 30 días, ir desde abajo a arriba comprobando páginas y borrando las que no tenían nada (desaparecerán de los historiales) o revirtiendo al último cambio sin spam con el botón que rollback o revertir.
No permitir edición a usuarias no registradas
Como situación excepcional, no permitir edición a usuarias no registradas bloquea gran parte de spammers, aunque hay spammers que logran registrarse automáticamente para poder editar.
Añadir la siguiente regla en LocalSettings.php
$wgGroupPermissions['*']['edit'] = false; $wgGroupPermissions['user']['edit'] = true;
Configurar Captcha
en desarrollo
Cómo esconder páginas
Existen varios patchs y extensiones de mediawiki para llevarlo a cabo, nosotras en este wiki hispano hemos utilizado:
http://meta.wikimedia.org/wiki/Page_access_restriction_with_MediaWiki
Cómo editar la página que se muestra cuando no hay texto en ella
Cómo cambiar el la visión del /index.php/
a /wiki/
Manual de mediawiki (en inglés)
Cómo copiar un wiki en otro wiki
Ver MySQL#Copias_de_seguridad.
Actualización
Este manual es para actualizar esta instalación de Mediawiki ya que necesita una actualización especial puesto que da soporte a muchos wikis.
Como éstos pueden estar consultándose o editándose en cualquier momento, es importante evitar todo lo posible que Mediawiki esté caído.
Cuándo actualizar
Diferenciaremos las actualizaciones de seguridad (cambio en último número de versión) de las actualizaciones mayores (cambio en el segundo número de versión).
Ambas se anuncian en la lista de correo mediawiki-announce.
Las actualizaciones de seguridad (también llamadas cambio de versión menor) se deben hacer siempre que se presentan. Suponen una mejora en cuanto resistencia a ataques y no suponen un problema en cuanto actualización de extensiones, ni necesitan correr el script de actualización de base de datos, además se pueden hacer tan sólo el parche de diferencia entre ambas versiones.
Las actualizaciones mayores se llevarán a cabo cuando el ciclo de vida de la versión actual pase a no estar mantenida y se hará siempre a la versión estable, procurando que sea una LTS (Long Time Service), excepcionalmente se puede instalar la última versión estable no LTS. En el caso de la Fundación Wikimedia mantiene actualizaciones de seguridad hasta 3 años si es LTS o sólo 1 año si no lo es. Las actualizaciones mayores suponen además una actualización de las extensiones que posee el wiki, pudiendo no estar disponibles algunas de ellas. Debido a que este wiki es mantenido por voluntarios que mantienen muchos servidores, una actualización cada tres años entra dentro de lo entendido como ritmo sostenible, una actualización cada año podría resultar demasiado trabajo.
Es importante comunicar que se procede a la actualización al resto de admins de marsupi en marsupi (arroba) marsupi.org.
Comprobar la versión y extensiones que tenemos instaladas
En Especial:Versión de cada uno de los wikis miramos y guardamos las extensiones que tenemos instaladas.
Descargar la actualización de software
Entramos por ssh a wiki.guifi.net, vamos a /home/backups/wiki/fuentes/
y descargamos ahí con wget en la última actualización de Mediawiki y la descomprimimos en /home/wiki/
con
tar -xvzf mediawiki-númerodeversión
Copiar los archivos
Son varios los archivos que se deben copiar desde la antigua instalación de Mediawiki a la actual, están listados en el script /home/wiki/scripts/actualizadorX.XX.X-a-X.XX.X.sh
. En su interior cambiamos la variable por la adecuada a la versión a la que estamos actualizando, echamos un vistazo para comprobar que no hay cambios importantes en las URLs de los archivos, lo copiamos a /home/wiki/
y lo ejecutamos.
./actualizadorX.XX.X-a-X.XX.X.sh
Pasar el dominio al servidor secundario
Como el servidor principal fermat está copiándose en otra máquina constantemente, antes de hacer la actualización haremos el último rsync, probaremos que la máquina secundaria derrida funciona cambiando la IP en nuestro /etc/hosts/
y pondremos los DNS apuntando a la máquina secundaria tanto para las resoluciones internas como para las externas de .guifi.net, .blogxpopuli.org y sus terminaciones en .gfi y .guifi. Entonces paramos el cron que mantiene el rsync copiando desde fermat a derrida y cambiamos de nuevo nuestro /etc/hosts/
pero esta vez al servidor primario.
Actualizar el sistema de tablas de la base de datos
Este paso no se necesita llevar a cabo si estamos haciendo una actualización de seguridad (cambio en el último número de versión)
Este paso interviene directamente en la base de datos y podría intervenir en el trabajo que pudiera estar haciendo alguien en los wikis suponiendo que esté forzando el acceso a esa máquina, así que como medida de seguridad adicional añadiremos esta linea al LocalSettings
general:
$wgReadOnly = 'Actualizando MediaWiki';
Que anunciará vía web que se está haciendo una actualización no dejando editar en la base de datos durante esos momentos.
Mediawiki provee su propio script de actualización de la base de datos. En /home/wiki/mediawiki-versiónnueva
lo ejecutamos con
php --conf LocalSettings_sufijodelwiki.php maintenance/update.php
Este proceso se hará por cada uno de los wikis, sugiriendo comenzar por el que menos páginas tenga y poder comprobar que la actualización ha funcionado correctamente. Comprobando después uno por uno.
Cambiar el enlace simbólico a la nueva versión
En /home/wiki/
tecleamos:
rm w && ln -s mediawiki-versiónnueva w
Vamos al navegador y, como tenemos el /etc/hosts/
apuntando al servidor primario, ya deberíamos ver si está funcionando la nueva versión.
Actualizar las extensiones
Actualizamos una por una las extensiones que hemos apuntado en el paso mencionado anteriormente. Podemos usar el "servicio expendedor de extensiones a la versión deseada" de Wikimedia
Nota especial para la actualización de la extensión Semantic Bundle
Semantic Bundle es una meta-extensión que provee de golpe un conjunto de extensiones que tienen que ver con la estructuración de contenido de los wikis en torno a su semántica. Actualmente no está activado en el conjunto de wikis de esta instalación. Para activar Semantic Bundle en uno de los wikis primeramente se han de comentar las siguientes líneas en el archivo extensions/SemanticBundle/SemanticBundleSettings.php
:
include_once( "$IP/extensions/SemanticForms/SemanticForms.php" ); include_once( "$IP/extensions/SemanticDrilldown/SemanticDrilldown.php" );
Ejecutar rápidamente "Inicializar o actualizar tablas" en la página "Special:SMWAdmin" del wiki en cuestión y, posteriormente volverlas a descomentar. Más info.
Nota especial para la actualización MediaWiki Language Extension Bundle
MediaWiki Language Extension Bundle es una meta-extensión que provee de golpe un conjunto de extensiones que tienen que ver con la elección de idioma y facilidades para la traducción de artículos dentro del wiki. Actualmente no está activado en el conjunto de wikis de esta instalación. Para activar MediaWiki Language Extension Bundle en uno de los wikis se tiene que añadir en su LocalSettings
las siguientes líneas:
// Language Bundle $EXT = "$IP/extensions"; require_once( "$EXT/Babel/Babel.php" ); require_once( "$EXT/cldr/cldr.php" ); require_once( "$EXT/CleanChanges/CleanChanges.php" ); $wgCCTrailerFilter = true; $wgCCUserFilter = false; $wgDefaultUserOptions['usenewrc'] = 1; require_once( "$EXT/LocalisationUpdate/LocalisationUpdate.php" ); $wgLocalisationUpdateDirectory = "$IP/cache"; require_once( "$EXT/Translate/Translate.php" ); $wgGroupPermissions['user']['translate'] = true; $wgGroupPermissions['user']['translate-messagereview'] = true; $wgGroupPermissions['user']['translate-groupreview'] = true; $wgGroupPermissions['user']['translate-import'] = true; $wgGroupPermissions['sysop']['pagetranslation'] = true; $wgGroupPermissions['sysop']['translate-manage'] = true; $wgTranslateDocumentationLanguageCode = 'qqq'; $wgExtraLanguageNames['qqq'] = 'Message documentation'; # No linguistic content. Used for documenting messages require_once( "$EXT/UniversalLanguageSelector/UniversalLanguageSelector.php" );
Y después ejecutar
php --conf LocalSettings_sufijodelwiki.php maintenance/update.php
Copiar las últimas modificaciones
Hacemos un rsync de la base de datos del secundario al primario para aprovecharlos últimos cambios llevados a cabo.
Volver a pasar el dominio al servidor primario
Volver a pasar el dominio al servidor primario y borramos o comentamos la linea del /etc/hosts/
que apunta al servidor secundario de forma que nuestra máquina haga la petición para resolver nombres directamente.
No borramos ni renombramos el directorio antiguo
El directorio "w" siempre apuntará con el enlace simbólico al último mediawiki instalado, pero siempre dejaremos las anteriores instalaciones de mediawiki, de forma que si la actualización actual aparentemente en un principio funciona pero luego descubrimos que alguna cosa no funciona podemos volver a enlazar simbólicamente "w" a la anterior, crear un nuevo enlace simbólico de pruebas para arreglar el nuevo. También puede resultar útil para ver cómo era el wiki en un pasado. El espacio en disco que gastará será muy simbólico.
Finalmente volvemos a activar el rsync
Después de comprobar que todo funciona volvemos a activar el rsync para que se sigan haciendo las copias de seguridad al servidor secundario.
Actualización de skins
Este wiki utiliza un skin o plantilla de diseño personalizada que se encuentra en https://gitorious.org/guifi/mw-guifi-skin y se mantiene acutalizada por git a través de este script de actualización mw-guifi-skin_update_from_repo.sh
.
#!/bin/sh echo "This will remove your current guifi skin." echo "You will lose all the changes you did, if any" echo "Hit any key to continue" read A cd /home/wiki/mw-guifi-skin echo "- Updating git repository" git pull --rebase cd - #cd /home/wiki/w/skins echo "- Updating files" cp mw-guifi-skin/Guifi.php . -ar cp mw-guifi-skin/Guifi.deps.php . -ar cp mw-guifi-skin/guifi . -ar echo "Done"
El skin de Blogx Populi es directamente el skin por defecto Vector con tan solo esta modificación en screen.less
para permitir que el tamaño del logo sea mayor:
/* Logo */ #p-logo { position: absolute; top: -175px; left: 0; width: 10em; height: 200px; } #p-logo a { display: block; width: 10em; height: 200px; background-repeat: no-repeat; background-position: center center; text-decoration: none; }
Enlaces externos
- Charla-Taller de Mediawiki en HackMeeting 2007 por David Gómez del TAG, Taller d'Intangibles.
- Manual Upgrading (en inglés)
- Preguntas habituales sobre personalización de una instalación de Mediawiki