Català  

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

Contenido

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 );

  • 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 cambiar el menú de navegación

Mediawiki:Sidebar

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

MediaWiki:Noarticletext

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

Más info

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

Herramientas personales