Mediawiki

De Astillas.net
Versión
1.15.5-2
Página principal
http://www.mediawiki.org
Observaciones
Versión correspondiente a Squeeze (Debian)


Enlaces y referencias

Configuración

Paquetes en una distribución Debian

La siguiente es una relación orientativa de paquetes que son necesarios para disponer de mediawiki funcionando en la rama estable de Debian, incluyendo los mecanismos de creación de vistas de imágenes, comprobación antivirus en los archivos enviados, funciones matemáticas y caché de base de datos.

Pasos genéricos a seguir

  1. Instalar el software
  2. Configurar la base de datos
  3. Configurar el servidor web
  4. Ajustar la configuración de PHP

Tras instalar en Debian los paquetes de software el sistema queda prácticamente preparado para poder configurarlo vía web:

 http://localhost/mediawiki/config/index.php

Necesitaremos principalmente el superusuario del servidor MySQL y su contraseña para que pueda crear automáticamente la base de datos y una cuenta de administración del wiki llamada WikiSysOp (aunque puede cambiarse y elegir otra).

La configuración queda grabada en un archivo en /var/lib/mediawiki/config/LocalSettings.php que deberíamos mover a /etc/mediawiki con los permisos adecuados para que nadie más que el programa Apache pueda acceder a su contenido (figuran varias contraseñas).

Configurar la base de datos

Conectamos con el servidor MySQL como el administrador:

victor@falcata:~$ mysql -u root -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.

...

mysql> 

y procedemos a crear un usuario que hará de administrador, una base de datos y a darle al usuario derechos sobre ella.

mysql> create user wikiadmin;
mysql> create database mediawiki character set utf8;
mysql> set password for wikiadmin = PASSWORD('CONTRASEÑA');
mysql> grant all on mediawiki to 'wikiadmin'@'localhost';

Configurar el servidor web

Los aspectos que quiero tocar en el servidor web son:

  • Hacer obligatoria la conexión cifrada para no enviar credenciales en claro.
  • Determinar el URL de acceso al wiki:
    • A través de un host virtual.
    • Sin prefijo de wiki
    • Con un prefijo específico.

Aspectos

Imágenes

Las imágenes en el wiki precisan de:

  1. Un directorio con permisos de escritura
  2. Acceso al programa de conversión de imágenes
  3. Un modelo de almacenamiento definido antes de subir la primera imagen.
## Indicadores activos para emplear imágenes en el wiki (incluyendo subir mediante un URL)
$wgEnableUploads                = true;
$wgUseImageMagick               = true;
$wgImageMagickConvertCommand    = "/usr/bin/convert";
$wgAllowCopyUploads             = true;
$wgShowExceptionDetails         = true;
## 
## Parámetros de almacenamiento y acceso a las imágenes
$wgUploadDirectory      = "/var/lib/mediawiki/images";
$wgUploadPath           = "/w/images";
##
## Almacenar las imágenes linealmente y no dentro de un 
## árbol de subdirectorios
$wgHashedUploadDirectory        = false;

Logotipo y favicon

Una vez obtenida una imagen para utilizar como logotipo derivamos de ella un favicon y la subimos al directorio de imágenes y anotamos en la configuración cuál utilizar:

$wgLogo      = "{$wgUploadPath}/astillas-logo-120.jpg";
$wgFavicon   = "{$wgUploadPath}/favicon.ico";

Ajustes de configuración

Acortando URL

Cuando se pretende que los URL del wiki sean lo más limpio posible tenemos que tocar en varios sitios en la configuración, dependiendo de si tenemos o no acceso como root a la instalación del wiki.

En mi caso he tomado la decisión de usar la forma estándar de URL que se emplea en la Wikipedia como

http://example.com/wiki/Page_title

porque me permite disponer de un espacio de nombres libres en la raíz del servidor

http://example.com/debian
http://example.com/webdav
http://example.com/cgi-bin/tool.pl
http://example.com/victor

para poder emplearlos con otras aplicaciones o páginas especiales.

Según la documentación los pasos a seguir son los siguientes:

  1. Asegurarse de que el directorio de Mediawiki no está directamente bajo el árbol de archivos del servidor web para no mezclar páginas del wiki y otros contenidos. En Debian se instala bajo /var/lib/mediawiki por lo que esta precaución ya está tomada. En mi caso, además, suelo añadir un enlace simbólico de dicho directorio a /var/www/w de manera que toda la instalación (como los temas) queda al alcance de una única ruta.
  2. Modificar la configuración del wiki en el archivo LocalSettings.php para que refleje las rutas de los programas (/w/index.php) y los artículos (/wiki/Page_title).
  3. Cambiar la configuración del servidor web para apuntar a estas nuevas rutas.
  4. Reiniciar el servidor web
  5. Probar el acceso a través de http://localhost/wiki

El archivo LocalSettings.php queda así:

$wgScriptPath = "/w"; 
$wgScript = "$wgScriptPath/index.php";
$wgArticlePath = "/wiki/$1";

mientras que la configuración de Apache queda de esta forma:

Alias /wiki /var/lib/mediawiki/index.php

<Directory /var/lib/mediawiki/>
        Options +FollowSymLinks
        AllowOverride All
        order allow,deny
        allow from all
</Directory>

Subpáginas

Además de tener un nombre más largo ya que la jerarquía de páginas se separa con una barra inclinada como en

http://astillas.net/wiki/SandoBox/Tipografia/varios

en cada página se añade automáticamente, al principio de la misma, enlaces hacia las páginas superiores de las que descienden.

Un detalle a tener en cuenta es que el nombre de la subpágina no admite las mismas mejoras estéticas que los nombres de página. Estos, en mediawiki, se normalizan automágicamente cambiando a mayúscula la primera letra de los mismos. En las subpáginas no sucede así por lo que Hardware/impresoras es diferente de Hardware/Impresoras.

Wikis múltiples

Dada la extensión del tema he abierto una página nueva para describir la configuración de múltiples wikis en un mismo servidor.

Derechos de acceso

Existen varios parámetros que se pueden definir en la configuración local (LocalSettings.php) y que marcan las líneas generales de funcionamiento del wiki:

# Creación de usuarios sólo a administradores
$wgGroupPermissions['sysop']['createaccount'] = true;

# Permite la edición sólo a usuarios registrados
$wgGroupPermissions['*']['edit']              = false;
$wgGroupPermissions['user']['edit']           = true;

Modificando la barra de navegación

Para ello es necesario editar la página MediaWiki:Sidebar y cambiar allí el orden o el contenido mostrado. Éste consiste en una lista de elementos un poco especiales porque aparece un destino y un texto a mostrar separados por una barra vertical (|). El destino puede ser una página del wiki o un URL completo.

Ejemplo:

* navigation
** mainpage|mainpage
** recentchanges-url|recentchanges
** randompage-url|randompage
** sandbox|Zona de pruebas

Enlaces entre wikis

Existe un tipo de enlace especial que permite crear direcciones de otros wikis sin necesidad de conocerlas al completo.

Por ejemplo se puede crear un enlace de éste tipo

[[:wp:Agujero Analógico|esto es obligatorio de leer]]

y el programa mediawiki lo convierte a

[http://es.wikipedia.org/wiki/Agujero_Analógico esto es obligatorio de leer]

en el producto final de la página.

El programa emplea una tabla de su base de datos llamada interwiki para conservar una correlacción entre prefijos (como wp) y direcciones web (como http://es.wikipedia.org/wiki/). Alterarla implica tener acceso a bajo nivel al servidor de datos e insertar un registro en dicha tabla o cambiar el contenido de otra puesto que el entorno mediawiki suele incluir una larga lista de ellos.

La estructura de la tabla de enlaces entre wikis tiene una descripción propia aunque existe una extensión preparada para mantener más cómodamente este mapa de correspondencias.

Otra característica de estos enlaces es que para ellos no existe la comprobación habitual de página existente o nueva, por lo que siempre aparecen como enlaces externos (en color azul generalmente).

Si se tiene acceso directo al servidor MySQL se pueden insertar directamente valores en la tabla apropiada:

$ mysql ...

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 181
Server version: 5.0.51a-24+lenny5 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> insert into interwiki set iw_prefix='wp', iw_url='http://es.wikipedia.org/wiki/$1';
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql>

Tamaño de los archivos a subir

En el caso del tamaño de los archivos a subir a un wiki existen tres actores que pueden tener algo que decir al respecto: el lenguaje de programación, el servidor web y el propio Mediawiki.

PHP
El entorno del lenguaje debe ser alterado para que permita subidas de archivos mayores de 2 Mb, que es el valor predeterminado. Para ello es necesario cambiar las variables
upload_max_filesize
y
post_max_size
en el archivo principal de configuración.
La cifra límite puede expresarse en bytes o emplear alguna de las abreviaturas como K para kilobytes, M para megabytes o G para gigabytes.
Apache
Hablo sobre éste aunque podría ser cualquier otro con soporte PHP. En este caso se debe cambiar el parámetro
LimitRequestBody
al valor cero (0) para no limitarlo (que suele ser el valor predeterminado) o a un número entero de bytes expresando el límite.
Mediawiki
El programa también tiene una variable que controla el tamaño de los archivos que recibe y se llama
$wgMaxUploadSize
aunque al ser leída en tiempo de ejecución no se aplica retroactivamente. Su valor predeterminado es de 100 Megabytes aunque en realidad Mediawiki sólo emplea este límite cuando se usan URL como fuente de archivos.

Empleando URL para subir archivos

Advertencia: esta característica puede abrir algunas brechas de seguridad en el wiki. Es necesario emplearla con precaución.

Para poder subir archivos a un wiki procedentes directamente de la red, sin necesidad de tomarlos del almacenamiento local, es necesario cumplir unos requisitos:

  • Fijar a verdadero la variable
    $wgAllowCopyUploads = true
  • Conceder permiso a los usuarios para utilizar esta característica alterando la variable
    $wgGroupPermissions['user']['upload_by_url'] = true
    ya que generalmente sólo está concedida a los administradores (sysop).
  • El entorno PHP debe tener habilitada la característica cURL y si el servidor está accediendo a la red mediante un proxy también se debe ajustar la variable
    $wgHTTPProxy

Validación de contenidos

El proceso de aceptación de contenidos en Mediawiki consta de dos fases: la primera consiste en detectar qué se ha subido y la segunda en comprobar si lo detectado, el tipo MIME, coincide con su nomenclatura

Detección MIME

Mediawiki emplea el módulo PHP FileInfo o el antiguo MimeMagic para obtener el tipo MIME del contenido. Como última opción se utilizará la detección que proporciona el módulo PHP GD, que sólo sirve para un grupo pequeño de imágenes.

También se puede usar un programa externo, indicando cómo llamarlo dentro de la variable $wgMimeDetectorCommand, lo que permite efectuar pruebas sobre lo que va a reconocer Mediawiki -evitando falsos positivios- sin tocar módulos PHP ni activando la depuración.

Si se desea desactivar completamente la detección de contenido se usa lo siguiente en la configuración

$wgVerifyMimeType = false;

Validación MIME

Para emparejar la extensión del nombre del archivo con su tipo MIME Mediawiki emplea un archivo llamado mime.types cuya estructura es la de un archivo de texto plano con un registro por línea. Este registro contiene campos separados por espacios en blanco: el primero es el tipo formal MIME y los siguientes son las extensiones admisibles de archivos para el tipo dado.

Ejemplo tomado del archivo real:

...
application/x-xpinstall xpi
application/xhtml+xml xhtml xht
application/xslt+xml xslt
application/xml xml xsl xsd
application/xml-dtd dtd
application/zip zip jar xpi  sxc stc  sxd std   sxi sti   sxm stm   sxw stw
application/x-rar rar
...

Una vez que el emparejamiento funciona se procede a comprobar si la extensión es una de las admitidas consultando varias variables:

Variable Valor Descripción
$wgStrictFileExtensions true Si está activa indica que no se admita ninguna extensión que no figure en $wgFileExtensions
$wgFileExtensions Ver manual Lista de extensiones de archivos que son admisibles vía subida de archivos o simplemente lista de aquellas extensiones preferentes. Depende de la variable $wgStrictFileExtensions.
$wgCheckFileExtensions true Activa o no la comprobación de extensiones de archivos en la subida al wiki.
$wgFileBlackList Ver detalles Lista de extensiones de archivos que nunca se permite subir al wiki.
$wgVerifyMimeType true Activa o no la comprobación de tipos MIME (por contenido) en la subidad de archivos al wiki.

Alias y clasificación MIME

Mediawiki emplea un mecanismo para clasificar los contenidos según su tipo MIME. Para ello consulta una lista guardada en el archivo mime.info en la que relaciona, línea por línea, uno o varios tipos MIME con una etiqueta clasificatoria que luego guarda -junto con el tipo MIME resultante- en la tabla de imágenes de la base de datos que contiene el wiki.

Algunos ejemplos son:

image/png image/x-png	[BITMAP]
image/svg image/svg+xml application/svg+xml application/svg	[DRAWING]
audio/mp3 audio/mpeg3 audio/mpeg	[AUDIO]

Por el momento no tiene utilidad concreta pero se espera que en el futuro sirva para mejorar la presentación de medios.

Configuración para validaciones MIME

Existen algunas variables que definen los recursos de validación:

Variable Valor Descripción
$wgMimeTypeFile "includes/mime.types" Contiene la ruta del archivo con la asociación de tipos MIME y extensiones.
$wgMimeInfoFile "includes/mime.info" Contiene la ruta del archivo que contiene los alias y las clasificaciones de los tipos MIME.
$wgMimeDetectorCommand

Define la llamada a un programa externo para detectar contenidos. El programa debe enviar únicmaente el tipo MIME resultante a su salida estándar. Recibirá como parámetro final el nombre del archivo a comprobar.

Como ejemplo se puede usar
$wgMimeDetectorCommand = "file --brief --mime";

Espacios de nombres adicionales

Mediawiki admite la creación de espacios de nombres adicionales bajo los cuales crear páginas nuevas como Contabilidad:Errores o Noticias:Economía. Para ello se precisa retocar la configuración del wiki y declarar la nueva raíz de nombres en el archivo LocalSettings.php asignándole un valor numérico que sirva como índice dentro del entorno.

$wgExtraNamespaces[510] = "Contabilidad";
$wgExtraNamespaces[511] = "Noticias";

Las páginas pueden crearse entonces de la forma habitual solo que añadiéndoles el prefijo correspondiente:

Noticias:Nueva impresora
Contabilidad:Saldos contables 

Para evitar colisiones existe un registro público de números y nombres en el que se ha reservado el rango 510 a 599 para instalaciones locales, de tal manera que las extensiones futuras no usarán estos valores en sus instalaciones.

Otra retoque adicional en la configuración es asegurarse de que las nuevas páginas creadas en estos nuevos espacios de nombres estén incluídas en la estadística del sitio y en funciones como la de página al azar. Para ello se deben añadir los índices a la variable $wgContentNamespaces:

$wgContentNamespaces[] = 500;
$wgContentNamespaces[] = 501;
# ...

Cuando se retoca esta variable es también una buena idea actualizar las estadísticas internas del wiki.

Uso y costumbres

Archivo php.ini

El archivo php.ini es el designado para almacenar la configuración del entorno PHP y al que hace referencia la mayor parte de las páginas con documentación, artículos y errores. Las definiciones que contiene condicionan totalmente el funcionamiento de cualquier programa escrito en ese lenguaje por lo que es importante protegerlo y ajustar su contenido.

Encontrar el archivo

La ruta más habitual (y más citada) del archivo principal de configuración de PHP es

/etc/php/php.ini

aunque el método más seguro para obtenerlo es invocar a la función phpinfo() creando un pequeño archivo llamado phpinfo.php en el directorio raíz del servidor web con esta línea como contenido

<?php phpinfo(); ?>

y luego ejecutarlo a través de su URL; algo como http://localhost/phpinfo.php y buscar las líneas que indican qué archivos están cargados y dónde los ha encontrado:


Configuration File (php.ini) Path /etc/php5/apache2
Loaded Configuration File /etc/php5/apache2/php.ini
Scan this dir for additional .ini files /etc/php5/apache2/conf.d
Additional .ini files parsed
/etc/php5/apache2/conf.d/curl.ini,
... 
/etc/php5/apache2/conf.d/sqlite3.ini, 
/etc/php5/apache2/conf.d/suhosin.ini 

En Debian existe un esquema bastante ordenado que divide la configuración primero por la versión de PHP y luego por cada uno de los SAPI existentes al estilo

/etc/php$VERSION/$SAPI/php.ini

por lo que si tenemos PHP funcionando con Apache2 en Debian el archivo de configuración será

/etc/php5/apache2/php.ini

Parámetros importantes

engine
Habilitar (on) para que PHP pueda usarse.
expose_php
Deshabilitar (off) para que no se muestre información sobre versión ni extensiones instaladas.
memory_limit
Ajustar si los programas emplean mucha memoria para un mejor funcionamiento.
post_max_size
Tamaño máximo de un acción POST puede tener. Indispensable para subir archivos grandes.

Depurando errores

Según la documentación se debe tener en cuenta lo siguiente:

  1. Como parte del diseño general de Mediawiki la orden echo no sirve para encontrar errores.
  2. Los mecanismos descritos para facilitar la depuración deben desactivarse una vez se ha encontrado una solución al problema, dado que podrían proprocionar demasiada información a supuestos atacantes.

La variable

$wgDebugLogFile

puede contener una ruta absoluta de un archivo a donde enviar todos los registros de depuración. El mecanismo se desactiva anulando dicha variable. El archivo debe tener permisos de escritura para el usuario bajo el que se ejecuta el servidor web; en el caso de Debian es www-data.

Errores PHP

Para que los errores de PHP se muestren en la página generada se debe incluir la siguiente estrofa al comienzo (muy al comienzo) del archivo de configuración LocalSettings.php:

error_reporting(E_ALL);
ini_set("display_errors", 1);

Pueden ocurrir errores lo bastante graves como para que éstas líneas no tengan tiempo de tener efecto, pero en ese caso dichos errores suelen quedar registrados en el servidor web. Conviene entonces repasar la variable error_log de la configuración de PHP.

Errores SQL

$wgShowSQLErrors = true;
$wgDebugDumpSql  = true;

Crear un usuario

Para poder crear usuarios en Mediawiki se necesita primero que el wiki esté configurado para que alguien tenga permisos suficientes para crear cuentas. En el siguiente ejemplo asignamos estos privilegios a aquellos usuarios del grupo sysop (WikiSysop por ejemplo) pero lo negamos a cualquier otro por lo que en la pantalla de entrada de usuarios no aparecerá el correspondiente enlace para hacerlo.

# Archivo /etc/mediawiki/LocalSettings.php
...
$wgGroupPermissions['*']['createaccount']       = false;
$wgGroupPermissions['sysop']['createaccount']   = true;
...

Y segundo se debe acceder al lugar adecuado que es la página especial Special:UserLogin. En este caso necesitamos estar ya registrados con una cuenta privilegiada y podemos ir directamente con una URL tipo http://URL_DEL_WIKI/Special:UserLogin o escribir

Special:UserLogin

en la caja de búsqueda y seleccionar Ir (y no Buscar).

Es entonces cuando aparece la siguiente pantalla:

Mediawiki-user-login.jpg

Palabras mágicas

Se denominan así a todas aquellas que hacen algo diferente cuando Mediawiki muestra la página, bien sea ejecutar código, bien sea mostrar otra página u otro valor.

Existen varios tipos:

  • Conmutadores de funcionamiento como __TOC__.
  • Pares de etiquetas con estilo XML como <nowiki>.
  • Una variable como {{CURRENTDAY}}.

Conmutadores de funcionamiento

Sólo incluyo aquellas que he empleado y quiero tener como referencia.

Palabra Descripción
__TOC__ Fuerza la aparición de la tabla de contenidos en ese punto.
__NOTOC__ Oculta la tabla de contenidos de la página.
__NOEDITSECTION__ Oculta los enlaces de edición de sección que aparece junto a los encabezados.

Etiquetas especiales

Las etiquetas deben incluirse al estilo XML y el contenido es el texto que encierran.

<etiqueta>Contenido</etiqueta>


Etiqueta Funcionamiento
nowiki Inserta su contenido literalmente, sin interpretar ningún carácter ni palabra especial.


Variables

Todas las variables se escriben entre dos pares de llaves como en

{{CURRENTYEAR}}
Nombre Contenido
CURRENTYEAR Año en curso (2022))
CURRENTMONTH Número de mes actual (06)
CURRENTDAY Número de día según el mes (6)
CURRENTTIME Hora y minutos (15:16)
----
SITENAME Nombre del wiki (Astillas.net)
SERVER URL del dominio (https://astillas.net)
SERVERNAME Nombre del servidor (astillas.net)
PAGENAME Título de la página (Mediawiki)
FULLPAGENAME Espacio de nombre y título de la página (Mediawiki)
----
NUMBEROFPAGES Número de páginas totales incluyendo imágenes y plantillas (482).
NUMBEROFARTICLES Número de artículos (205)
----
CURRENTVERSION Versión del software Mediawiki (1.31.16)

Programas de mantenimiento

Mediawiki dispone de un conjunto de programas escritos generalmente en lenguaje PHP que sirven para efectuar tareas de mantenimiento en la instalación, y que residen en un directorio específico. En Debian están situados en /usr/share/mediawiki/maintenance/.

Estos programas suelen precisar de un acceso a la base de datos con mayores privilegios que la cuenta de uso habitual en Mediawiki (wikiuser) por lo que existen dos variables concretas llamadas

en el archivo /etc/mediawiki/AdminSettings.php.

El usuario debe ser una cuenta especial, con privilegios administrativos, y en el caso de MySQL puede realizarse con la siguiente instrucción:

GRANT ALL PRIVILEGES ON wikidb.* TO 'wikidbadmin'@'localhost' IDENTIFIED BY 'strong-password';

Para ejecutar estos programas se puede emplear la consola y el intérprete PHP directamente, aunque existen algunos parámetros comunes a todos ellos:

--conf <path>
Define la localización del archivo LocalSettings.php.
--dbuser <username>
Nombre de usuario para conectar con la base de datos.
--dbpass <password>
Contraseña a emplear con el usuario anterior.

Un ejemplo de ejecución sería:

# cd /usr/share/mediawiki/maintenance
# php update.php
MediaWiki 1.15.5-2squeeze1 Updater

Going to run database updates for wikidb-mw_
Depending on the size of your database this may take a while!
Abort with control-c in the next five seconds...0
...have ipb_id field in ipblocks table.
...have ipb_expiry field in ipblocks table.
...already have interwiki table
...
Deleting old default messages (this may take a long time!)...Done
Checking site_stats row...ok.
Purging caches...done.
Done.

Plantillas

Para crear una plantilla en Mediawiki es necesario primero crear una página en el espacio de nombres Template, rellenarla con aquella información que va fija en cada plantillas y luego, desde otra página, llamarla pasándole la información variable.

Si se emplean parámetros anónimos es posible que determinados contenidos, como los URL que incluyan lista de parámetros, lleguen mal formados a la plantilla. Para ello he encontrado una solución usando forzando el uso de parámetros numerados.

Por ejemplo, si la plantilla hace este uso de lo que recibe:

Ref: [ {{{1}}} {{{2}}} ]

y se la llama con algo como

{{Ref|http://example.com?q=code|Ejemplo}}

la plantilla sólo recibirá el segundo parámetro por lo que es necesario forzarle a que distinga dichos parámetros con:

{{Ref|1=http://example.com?q=code|2=Ejemplo}}

Controlando qué se incluye de una plantilla

Dentro de una plantilla se pueden emplear texto entre etiquetas especiales para incluir o excluir parte del contenido en dos situaciones diferentes: cuando se visualiza la página de la plantilla y cuando se usa en otras páginas.

noinclude
Cualquier cosa dentro de esta etiqueta será procesado y mostrado sólo cuando la página de la plantilla sea vista directamente. Tiene un buen puñado de utilidades, pero la más importante es añadir texto descriptivo sobre cómo se usa la plantilla y de qué forma.
includeonly
Por contra, cualquiera cosa dentro de esta etiqueta será procesada y mostrada únicamente cuando la plantilla se haga en la página que la usa. La finalidad principal es añadir la página que usa la plantilla a una o más categorías sin que ésto afecte a la plantilla en sí, que puede tener cualquier otra filiación.

Si además empleamos la etiqueta nowiki es bastante sencillo incluir ejemplos prácticos de uso de la plantilla que puedan ser copiados directamente.

Como ejemplo se puede visitar la plantilla Template:Programa.

Encontrando plantillas disponibles

Para encontrar todas las plantillas disponibles en un wiki existe la página especial

[[Special:Uncategorizedtemplates]]

que muestra precisamente todas aquellas plantillas que no pertenecen a una categoría. En caso de que dentro de un wiki el número de plantillas sea muy grande y se haga necesario clasificarlas se puede emplear la página especial

[[Special:Allpages]]

e indicar en el formulario de búsqueda que sólo lo haga en el espacio de nombres Templates.

En astillas podemos ver entonces:

Anclajes

  1. Para crear un anclaje (elemento anchor en el lenguaje HTML) en una página del wiki se debe escribir lo siguiente
    [[#anchor_name|text]]
    teniendo en cuenta que si el texto se deja en blanco (un simple espacio puede servir) el anclaje será invisible en la visualización de la página.
  2. Para hacer referencia a un anclaje basta con usar la siguiente construcción
    [[page#anchor|text]]
    esto es, se crea un enlace intrawiki normal y corriente pero se emplea el carácter almohadilla (#) como separador.
  3. Mediawiki crea anclajes automáticamente para cada encabezado formal que encuentre en una página. El texto de dicho encabezado será el nombre del anclaje.

Galerías de imágenes

Para ello se debe emplear la etiqueta gallery con apertura y cierre, e incluir dentro de ella una lista de archivos para usar como imágenes, separados con un carácter tubería (|) de un título opcional.

<gallery widths=250px>
Image:archivo1.ext|titulo
Image:archivo2.ext|titulo
...
</gallery>

La etiqueta gallery admite unos cuantos parámetros, siendo los más útiles a mi entender los siguientes:

caption
Título para toda la galería
widths
Ancho en pixels para todas las imágenes
perrow
Nº de imágenes por fila

Tablas

Sumario de posibilidades:

{|
Inicio de tabla
|+
Leyenda de la tabla (opcional. Sólo puede situarse entre el comienzo y la primera fila.
|-
Nueva fila (opcional si es la primera)
! 
Celda de cabecera de la tabla (opcional). Se pueden añadir más celdas de la cabecera en la misma línea (separándolas con dos cierres de exclamación !!) o en nuevas líneas comenzando cada una con un fin de exclamación (!).
|
Celda de datos de la tabla (obligatoria). Para añadir más celdas en la misma línea se deben separar con dos cierres de exclamación !!. En líneas separadas debe aparecer sólo un cierre de exclamación (!).
|}
Final de tabla
  • Todas estas marcas deben comenzar en una nueva línea excepto las secuencias || y !! que sirven para añadir celdas sobre la mísma línea. Además, se ignora cualquier espacio en blanco al comienzo de una línea.
  • Atributos XHTML. Cada marca, exceptuando el final de tabla, acepta uno o más atributos en lenguaje XHTML. Deben aparecer en la misma línea que la marca separádos entre sí por un espacio en blanco.
    • Las celdas y la leyenda (| o ||, ! o !!, y |+) guardan contenido, así que se debe emplear un único carácter tubería (| para separar los atributos de dicho contenido. Éste puede estar en la misma línea que los atributos o en las siguientes.
    • Las marcas de tablas y fila ({| y |-) no almacenan contenido directamente por lo que no hay que añadir ningún carácter tubería (|) tras los posibles atributos.
  • El contenido puede o bien continuar en la misma línea, tras los atributos, o bien en líneas independientes bajo la marca de celda. Si dicho contenido emplea marcas de wiki que necesitan comenzar en una línea nueva como listas, encabezados o marcas de celda, necesitan estar en su propia línea independiente.
  • El carácter tubería se puede emplear como contenido dentro de etiquetas nowiki.

Redirecciones

Las redirecciones en los wiki son útiles cuando existen varios nombres que se refieran al mismo contenido, o existan nombres de página alternativos según estén en mayúsculas o minúsculas, contengan o no tildes u otros signos de puntuación.

Para ello se debe escribir justo al comienzo de la página la siguiente directiva

#REDIRECT [[Nueva pagina]]

sin ningún espacio entre el carácter (#) y la palabra clave REDIRECT, que a su vez tampoco es sensible a mayúsculas.

Otras páginas especiales

Mediawiki dispone de varios nombres de páginas especiales que permiten llegar a sitios ú obtener información especial. La lista es larga, puede variar de una instalación a otra y dispone de una página con documentación sobre las mismas.

Algunas de ellas son:

Recetario

Texto preformateado y líneas largas

Efecto de cambiar el estilo con líneas largas

Cuando queremos situar un texto como preformateado en una paǵina de mediawiki, pero no queremos que las líneas demasiado largas estropeen el diseño de la página le añadimos un atributo de estilo indicándo cómo queremos que trate los espacios en blanco.

Aviso: cambiar el estilo significa que el texto deja de estar preformateado y que las líneas comienzan a fluir por la página; los resultados pueden no ser los esperados.

<pre style="white-space: normal">
...
Texto con líneas largas 
...
</pre>

El estilo predeterminado es white-space:nowrap; que indica justo lo contrario.

Importando textos

Para importar páginas de texto en otros formatos de wiki se puede emplear una combinación de los programas pandoc y xclip, si lo que se desea es efectuar una edición directa de los mismos.

Página de inicio

La página de inicio de Mediawiki según la documentación está contenida dentro de la página Mediawiki:Mainpage del wiki. También aparece una referencia dentro de Mediawiki:Sitebar.

Instalando extensiones

Mediawiki dispone de una herramienta en línea para instalar extensiones individuales en la siguiente dirección:

Ref: Download MediaWiki extension

Los pasos a seguir tras instalar una extensión están descritos en la documentación oficial pero conviene recordar lo siguiente:

  • Tras descargar y descomprimir el software es necesario activarlo en la configuración de Mediawiki. Basta con añadir al final del archivo LocalSettings.php la instrucción de carga.
  • Después es obligado llamar al programa que realiza las actualizaciones, un script llamado Update.php o emplear el actualizador en línea (aunque no es aconsejable si la tarea va a ser muy larga en duración).

Errores

Archivo corrupto

Cuando se suben archivos a un sitio bajo control de Mediawiki puede aparecer una advertencia como

Este archivo está corrupto o la extensión indicada no se corresponde con el tipo de archivo. 

que en realidad es un error grave porque el archivo permanece sin subir.

Mediawiki intenta detectar qué tipo de archivo estamos subiendo y rechaza con este tipo de error aquellos cuyo tipo MIME no coincide con la extensión.

Para indagar en las causas es necesario habilitar la depuración de errores y echarle un vistazo al archivo de registro de errores que en mi caso he situado en /var/log/mediawiki.log.

Encontré este error en la construcción de una página de este wiki cuando intenté subir un programa ejemplo llamado nut-chroot-ctl renombrado como nut-chroot-ctl.txt precisamente para que pasase como archivo de texto. Un programa anterior (llamado nut-chroot-setup.txt) lo había hecho sin problemas, pero con éste no había manera:

File::getPropsFromPath: Getting file info for /tmp/php317uUM
MimeMagic::__construct: loading mime types from /etc/mime.types
MimeMagic::__construct: loading mime info from /var/lib/mediawiki/includes/mime.info
MimeMagic::doGuessMimeType: shell script recognized as application/x-sh
MimeMagic::guessMimeType: final mime type of /tmp/php317uUM: application/x-sh
MediaHandler::getHandler: no handler found for application/x-sh.
File::getPropsFromPath: /tmp/php317uUM loaded, 277 bytes, application/x-sh.
MacBinary::loadHeader: header bytes 0 and 74 not null
MimeMagic::doGuessMimeType: shell script recognized as application/x-sh
MimeMagic::guessMimeType: final mime type of /tmp/php317uUM: application/x-sh


mime: <application/x-sh> extension: <txt>

UploadForm::verifyExtension: mime type application/x-sh mismatches file extension txt, rejectin
g file
OutputPage::sendCacheControl: private caching;  **
Request ended normally

La solución consiste en tocar la configuración del wiki o plegarse a sus condiciones, renombrar el archivo para que tenga una extensión que corresponda y volver a subirlo ... siempre que esté entre los tipos permitidos.