Servidor
De WikiTraba
| | Aquest article està inacabat i és clarament insuficient. Si-us-plau, ajuda'ns a completar-lo o aporta idees per millorar-lo. |
En este artículo se explica de la forma más detallada posible cómo poner en marcha un servidor de internet desde nuestro ordenador personal. Un servidor no es más que un ordenador que está conectado a internet cuantas más horas al día mejor, y que mediante distintos programas permite la visualización remota (desde otros ordenadores conectados a internet) de páginas web almacenadas en su interior, además de otros servicios adicionales. Tenemos también una sesión para aprender las bases de la construcción de páginas web.
El servidor que permite ver y editar la WikiTraba está montado de la forma que se explica en esta guía bajo GNU/Linux Ubuntu. Como este manual está un poco estancado, puedes consultar este otro.
Contingut |
Con don pinguino
Introducción
Probado con
- Ubuntu 7.04 Feisty Fawn
- Apache 2.2.3 con ssl
- PHP 5.2.1
- MySQL 5.0.38, MySQLAdmin 1.2.5, MySQLQueryBrowser 1.2.5
- phpMyAdmin 2.9.1
- ProFTPd 1.3.0
- Postfix 2.3.8, Courier IMAP 4.1.1, Cyrus SASL 2.1.22 (libsasl???), Amavis-new 2.4.2, ClamAV 0.90.2, SpamAssassin 3.1.7, SquirrelMail 1.4.9 (con plugins compatibility y changemysqlpass),
postgrey 1.24y Mailman 2.1.9 - ssh (con putty desde windows) y NX Server 2.1.0-13
- R 2.4.1 con CGIwithR 0.70
- aMule 2.1.3 con webserver y GUI remoto
- Samba 3.0.24
- Firestarter 1.0.3
- ImageMagick 6.2.4.5
monitor hard
- Simple Machines 1.0.9 con Spoiler Tag
- MediaWiki 1.15.1 con texvc, GoogleMaps, wikicalendar, SpecialCite, inputbox, Biblio, EasyTimeline, gnuplot, GraphViz, svgextension,
WikiPDF, R extension, slides extension,PageProtection, youtube, googlevideo, ParserFunctions, PDFexport y AddArticleToCategory - WordPress 2.8.4
- eGroupWare 1.2.005
- Moodle 1.8.2+
- Coppermine 1.4.12
- Mambo 4.5.2.3
- WebAlizer 2.01
Un par de cosas en que siempre hay que pensar
Cuando surge algún problema con la instalación, la configuración o el funcionamiento de un servidor, antes de rompernos la cabeza hay que comprobar siempre un par de cosas:
- que el router o el firewall' no nos estén interfiriendo en el tema puertos
- que los directorios tengan los permisos necesarios (chmod)
Instalación y configuración
Sistema básico
apache, php, mysql (+admin+querybrowser), phpmyadmin
Añadiendo algunas funcionalidades
proftpd, postfix, freenx, R
La família Traba
La família Traba está compuesta por tres miembros, cada uno de ellos basado en un software distinto pero que tienen en común que todos usan Apache + PHP + MySQL para funcionar:
- El padre es el Trabachat, el foro basado en Simple Machines
- La madre es la WikiTraba, la wiki basada en MediaWiki
- El hijo, muy pequeñito y con retraso de crecimiento, es el TrabaBlog, el blog basado en WordPress
Los tres paquetes para instalarlos son una colección de archivos .php (entre otros), que van a generar las tablas de MySQL necesarias para almacenar la información. Su instalación es sumamente sencilla, pues consiste en descomprimir...........................Luego hay algunas peculiaridades:
- blog: calendario
- wiki
- smf
Y otros miembros de la familia son el egroupware, la galeria, el portal o el sitio de formación.
Mantenerse al dia
Los paquetes de software se van a actualizar solos, como se explica más abajo. Para los tres paquetes de la família Traba vale la pena mirar de vez en cuando si hay grandes fallos de seguridad o updates en sus webs, y bajarnos en tal caso el nuevo instalador, que ya contendrá instrucciones detalladas sobre como realizar la actulización sin perder archivos ni la información almacenada en las bases de datos de MySQL.
Para que nos encuentren
Un problema fundamental cuando uno no tiene ni dinero ni intención de pagarse un dominio, es como conseguir que los cibernautas nos encuentren si tenemos una IP dinámica. Efectivamente la dirección de nuestro servidor es http://nuestraIPenaquelmomento/loquesea, lo cual podría volvernos locos pues habría que mandar constantemente mails a nuestros usuarios para informarles de cuál es nuestra dirección en cada momento.
Servidores DNS
Por suerte hay algunas empresas que ofrecen un servicio de DNS, que no es más que traducir nuestra IP a un nombre que sea siempre el mismo y que podamos ofrecer a los cibernautas como una dirección constante. Así pues, lo que hace un servidor de DNS es traducir la dirección http://nuestraIPenaquelmomento/loquesea a http://unnombrefijo/loquesea.
Algunas de las empresas que ofrecen este servicio lo hacen de forma gratuita, como por ejemplo 2myDNS. El precio que hay que pagar es que nos aparecerá el nombre de la empresa en nuestra dirección web. Si nos damos de alta en 2myDNS, por ejemplo, nos van a pedir un nombre de dominio y un usuario y password para poder actualizar nuestra IP. Nuestra dirección entonces será http://nombrededominioescogido.2mydns.com/loquesea (por ejemplo acrida.2mydns.com/xxx).
Todo esto no suena del todo mal pero claro, ¿cómo le decimos a los señores de 2myDNS que nuestra IP ha cambiado y que deben actualizar su base de datos para que la dirección http://nombrededominioescogido.2mydns.com/loquesea apunte a nuestra nueva IP cada vez que esta cambie? En M$ Ventanas hay diferentes software que realizan esta función, pero en GNU/Linux no disponemos de demasiadas alternativas. La mejor, sin duda, es realizar un script que se ejecute cada vez que cambie nuestra IP e informe a 2myDNS de cuál es la nueva. Lo que sigue es una adaptación (por no decir copia), y vale para sistemas Ubuntu con cable-módem, donde el script deberá ejecutarse cada vez que se entre en el sistema, que es cuando se obtiene la IP. Para conexiones mediante módem se deberá proceder de distinta manera, pues la nueva IP se obtiene en el momento de la conexión.
Bien suponiendo que tenemos un cable-módem, que trabajamos en Ubuntu y que nos hemos dados de alta en 2myDNS (lo cual es mucho suponer), lo que debemos hacer es:
- Crear un fichero llamado 2mydns.sh en el directorio /etc/init.d:
sudo gedit /etc/init.d/2mydns.sh
- Escribimos el siguiente código en el fichero recién creado, sustituyendo eth1 por la dirección de la ethernet que se conecta a internet. Este código captura la IP actual de nuestro ordenador:
#!/bin/bash IP=`/sbin/ifconfig eth1 | grep "inet addr:" | sed -e 's/^.*inet addr://' -e 's/ .*$//'`;
Nota: Esta forma de capturar la IP no será válida si estamos detrás de un router, pues obtendrá nuestra IP privada. En este caso, para obtener la IP pública hay que usar distintas combinaciones de los comandos grep, tail, awk y otros para conseguir obtener la IP pública desde una página web que nos la diga, o desde la página de configuración del router. A continuación se muestran dos posibles ejemplos que habrá que adaptar a cada caso particular:
IP=`lynx -dump http://whatismyip.com | awk '/Your/ {print $4}'`;
IP=`wget -O - --http-user xxxxxx --http-passwd xxxxxx http://192.168.x.x/xxx.asp 2>/dev/null |grep -A 1 'IP Address'|tail -1| awk 'BEGIN { FS = ";" } ; { print $2 }'`;
- En las dos siguientes líneas tecleamos lo siguiente, sustituyendo usuario, contraseña y nombredominio por sus valores reales (los que hemos elegido al darnos de alta en 2myDNS). Para otros servicios DNS habría que modificar esta línea según los requisitos del servidor. De esta forma mandamos nuestra IP (capturada con cualquiera de las formas anteriores) a 2myDNS:
wget "http://dyn.2mydns.com/dyn.asp?username=usuario&password=contraseña&hostname=nombredominio.2mydns.com&myip=83.14.83.14" -O /dev/null; wget "http://dyn.2mydns.com/dyn.asp?username=usuario&password=contraseña&hostname=nombredominio.2mydns.com&myip=$IP" -O /dev/null;
El primer comando pone una IP cualquiera, y el segundo comando transmite nuestra verdadera IP. Hay que realizar este doble paso porque si nuestra IP actual es la misma que hay almacenada en el servidor de DNS, en realidad no se produce ninguna actualización. Si esto sucede durante 30 días seguidos, nuestra cuenta en 2mydns será eliminada a menos que seamos usuarios Privileged (requiere un único pago simbólico cuya cantidad la decide el usuario).
Para mantener también vivos nuestros redireccionamientos tk podemos añadir las siguientes lineas:
wget "http://www.kini.tk" -O /dev/null; wget "http://www.trabachat.tk" -O /dev/null; wget "http://www.wikitraba.tk" -O /dev/null;
- Salvamos el fichero, salimos de gedit y hacemos ejecutable el script mediante:
sudo chmod 777 /etc/init.d/2mydns.sh
- Y ya sólo nos queda declarar que el script es un servicio que debe iniciarse al arrancar el sistema y terminarse cuando lo apaguemos. Para ello:
sudo update-rc.d -f 2mydns.sh defaults 99
- O si preferimos que sólo se ejecute al iniciar pero no al cerrar:
sudo update-rc.d -f 2mydns.sh start 99 2 3 4 5 .
- Si quisiéramos que el script dejara de ejecutarse al arrancar el sistema:
sudo update-rc.d -f 2mydns.sh remove
Con todo esto ya tenemos asegurada una dirección web fija del estilo http://nombredominio.2mydns.com, que también nos servirá como dirección para nuestro servidor FTP, control remoto o servidor de correo.
Redireccionamiento web
Aunque no está mal haber llegado hasta aquí, quizá queremos dar aún un paso más: que nuestra dirección sea más amigable, es decir que los usuarios la puedan recordar más fácilmente. Para ello existen varios sistemas de redireccionamiento gratuitos como cjb.net, es.tt o tk. Si nos quedamos por ejemplo con este último, debemos darnos de alta como usuarios en su página web y tendremos derecho automáticamente a diferentes dominios gratuitos (a condición que no sean nombre populares) que van a redireccionar a las direcciones que le indiquemos. Así, por ejemplo, la dirección http://nomrelegido.tk (por ejemplo trabachat.tk), cuando sea introducida en el navegador, va a mostrar directamente la página web correspondiente a http://nombredominio.2mydns.com. Esta nueva dirección sólo sirve para la navegación de páginas web, pero no para otros servicios.
Una ventaja del redireccionamiento tk sobre otros servicios gratuitos es que permite eliminar los pop-up de publicidad. Para ello, una vez hemos creado nuestro dominio tk y estamos logeados en myDotTk, elegimos la opción Dot TK Linker Promo en el menú de la izquierda, y luego la opción NO BANNER y le damos a CONTINUE en la parte inferior de la página.
En resumen
Resumiendo, lo que hay que hacer para que nos encuentren:
- Darnos de alta en un servidor de DNS como 2myDNS
- Instalar un script que informe a 2myDNS de nuestra IP
- Darnos de alta en un redireccionador de dominios como tk para hacer más recordable nuestra dirección
Qué problema tiene todo esto? Pues que como más pasos, más posibilidades de error. Por si no tuvieramos suficiente en asegurar que nuestro servidor está siempre encendido, funcionando y conectado, ahora debemos también esperar (o rezar), que lo señores 2myDNS y los señores tk no estén caídos. La verdad es que por lo menos hasta hace poco, 2myDNS ofrecía un servicio de notable calidad. Los tk ya son otro tema, y por eso es recomendable que nuestros usuarios habituales se guarden en su carpeta de Favoritos nuestra dirección con formato 2mydns para poder puentear a los tk cuando estén caídos.
La alternativa
Una alternativa a lo explicado anteriormente es la compra de un nombre de dominio (por ejemplo traba.org), por ejemplo en Register.com o en NetworkSolutions. Un nombre de dominio puede costar entre 10 y 15 € por año.
Una vez comprado el dominio, debemos darnos de alta en el Servicio Premier de 2mydns, lo que requiere ser usuario Privileged mediante el pago único de una cantidad voluntaria.
En 2mydns nos proporcionarán las DNS necesarias (NS1.2MYDNS.COM, NS2.2MYDNS.COM y NS3.2MYDNS.COM), que deberemos introducir en la información de nuestro dominio en la página web donde lo hayamos comprado (Register.com o NetworkSolutions o cualquier otro).
Como se ha explicado anteriormente, debemos informar igualmente a 2mydns de nuestra IP mediante el uso de un script que se ejecute al iniciar el sistema.
Este sistema tiene varias ventajas sobre el descrito antes:
- Nos ahorramos los frecuentes fallos de los sistemas de redireccionamiento como .tk u otros
- Conseguimos un dominio con una extensión más estándar (.com, .org, .net....)
- Podemos tener, por ejemplo, un servidor de FTP o de correo con el mismo dominio (los redireccionamientos .tk permiten sólo el redireccionamiento web)
Para tener buena salud
Teniendo en cuenta que el servidor es básicamente un PC al que no le hacemos excesivo caso y que va a pasarse 24 horas encendido, 365 días al año, conviene dejar previstas algunas tareas para que se ejecuten de forma periódica sin que tengamos que preocuparnos de ellas. Para ello deberemos crear un script para cada tarea que deseemos programar, guardarlos todos ordenados en una misma carpeta (por ejemplo /home/nombreusuario/tareasprogramadas, y poner en marcha el sistema cron para programar su ejecución.
El paquete cron
En Ubuntu, la programación de tareas se realiza mediante el paquete cron, instalable desde Synaptic (en principio se instala automáticamente cuando instalamos el sistema). El archivo de configuración se llama crontab, y ahí es donde escribiremos las tareas a realizar. Aunque existen algunos GUI para cron (como kcron o gcrontab), la sintaxis es tan sencilla que nos sale más a cuenta escribirlo nosotros a mano. Para ello:
sudo crontab -e
Nota: Es necesario entrar como sudo sólo si alguna de las tareas que queremos realizar necesita dichos privilegios, como es nuestro caso.
Esto abre un editor de texto donde añadiremos todas las tareas (mediante scripts ejecutables) que queramos, como se mostrará en los siguientes apartados. Luego guardamos con Ctrl-O y {Return}, y salimos con Ctrl-X.
El proceso de creación de un script es siempre el mismo. Primero lo creamos:
sudo gedit /home/nombreusuario/tareasprogramadas/nombrescript.sh
Lo rellenamos con el código que queramos (siempre la primera linea sera #!/bin/bash para que se procese desde una ventana de terminal), salvamos y salimos. Luego ya sólo hay que hacerlo ejecutable con:
sudo chmod +x /home/nombreusuario/tareasprogramadas/nombrescript.sh
A continuación se muestran 4 ejemplos con sus respectivos scripts y la línea que hay que añadir a nuestro crontab para que se ejecuten.
Update automático
Lo primero es asegurarnos que nuestro Ubuntu se mantendrá actualizado aunque nosotros no estemos. Para ello creamos el script update.sh y lo rellenamos con:
#!/bin/bash apt-get update apt-get upgrade -y apt-get autoclean
Después de hacerlo ejecutable, ya lo podemos añadir a nuestro crontab, donde escribiremos la siguiente línea:
30 3 * * mon,thu /home/nombreusuario/tareasprogramadas/update.sh
Backups de ficheros
No es mala idea hacer un backup diario de todos los archivos de nuestras páginas web. Para ello crearemos el script backup.sh que contendrá al siguiente código:
#!/bin/bash data1=`date -u +%d-%m-%Y`; mkdir "/rutabackup/$data1" cd /rutaweb/ tar -cvf /rutabackup/$data1/$data1.tar * ; gzip /rutabackup/$data1/$data1.tar data0=`date -d "4 days ago" +%d-%m-%Y`; rm -r /rutabackup/$data0
Este script generará cada día una carpeta (dentro de rutabackup) cuyo nombre será la fecha actual y generará dentro suyo un fichero .tar.gz (cuyo nombre será también la fecha actual) que contendrá todos los ficheros almacenados en la carpeta rutaweb. Posteriormente eliminará la carpeta correspondiente a 4 días antes, con lo que conservaremos siempre la información durante 4 días.
Luego hacemos ejecutable el script y lo añadimos a crontab para que se ejecute diariamente a las 4:30 de la madrugada:
30 4 * * * /home/nombreusuario/tareasprogramadas/backup.sh
Dumps de MySQL
Igual que hemos programado un backup de ficheros, es conveniente realizar copias de seguridad de las bases de datos de MySQL, los llamados dumps. Aunque esta tarea la puede realizar periódicamente MySQLAdmin, es mejor (o por lo menos más divertido) programarla uno mismo mediante un script que llamaremos dump.sh:
#!/bin/bash data1=`date -u +%d-%m-%Y`; mysqldump -u nombreusuario -pcontraseña nombreBD1 > /rutabackup/$data1/nombreBD1.sql mysqldump -u nombreusuario -pcontraseña nombreBD2 > /rutabackup/$data1/nombreBD2.sql cd /rutabackup/$data1/ tar -cvf sql.$data1.tar *.sql ; gzip /rutabackup/$data1/sql.$data1.tar rm /rutabackup/$data1/*.sql
Nota: Es importante no dejar espacio entre -p y la contraseña. Hay que realizar un dump para cada una del as bases de datos que tengamos.
Este script generará una fichero .tar.gz cuyo nombre será la fecha actual precedida del término sql., y lo ubicará en la carpeta /rutabackup/fechaactual generada por el script backup.sh (que por lo tanto tendrá que haber sido ejecutado anteriormente). Este fichero contendrá los archivos .sql correspondientes a cada una de las bases de datos que hemos volcado.
Luego hacemos ejecutable el script y lo añadimos a crontab para que se ejecute diariamente a las 4:45 de la madrugada:
45 4 * * * /home/nombreusuario/tareasprogramadas/dump.sh
Para restaurar un dump:
mysql -u nombreusuario -pcontraseña nombreBD < /rutabackup/nombreBD.sql
El script backup.sh eliminará completamente la carpeta /rutabackup/fechaactual, y por lo tanto los dumps generados, cuatro días después de su creación, con lo que conservaremos siempre la información durante 4 días.
Así pues, nuestra carpeta /rutacompleta/fechaactual contendrá siempre 4 subdirectorios, uno por cada uno de los 4 días anteriores. Dentro de cada subdirectorio habrá dos archivos .tar.gz, uno con los archivos de la web y otra con los dumps de las bases de datos de MySQL.
Reinicio
Para mantener en buena salud nuestro servidor, no está mal provocar que se reinicie cada día a una hora en que en principio no haya usuarios conectados. Al script que realiza esta función le llamaremos reinicio.sh y contendrá:
#!/bin/bash sudo shutdown -r now
Lo hacemos ejecutable y provocamos que se lance cada día a las 5 de la madrugada introduciendo la siguiente línea en nuestro crontab:
0 5 * * * /home/nombreusuario/tareasprogramadas/reinicio.sh
Una vez reiniciado el sistema, Ubuntu no entrará en ninguna sesión, pero sí que va a iniciar todos los servicios necesarios para que el servidor funcione correctamente (Apache, MySQL, etc.).
Mandando mails desde PHP y MySQL
Aunque no es para mantenerse en buena salud, se explica aquí porque se incorporará a nuestro crontab. Se trata de mandar, cada miércoles por la noche, un correo electrónico para recordar a los usuarios de la kini que deben mandarla, pero lógicamente sólo deben recibir el correo aquellos que aun no la han mandado. Para ello creamos primero el script de php que nos permitirá mandar los mails, que puede ser algo parecido a:
<?php
if($varseguridad==1){
include "parametrosdeconexion.php";
$result9=mysql_query("SELECT ... FROM ... WHERE ...", ...);
include "parametrosdeconexion.php";
while($row9=mysql_fetch_row($result9)){
$dest[]=$row9[0];
}
for ($i=0; $i<count($dest); $i++){
$desti=$desti.$dest[$i].",";
}
$desti=substr($desti,0,strlen($desti)-1);
$assum = 'Recordatorio kini';
$text = 'Hola qué tal. Parece que aún no has mandado la kini, si puedes hazlo, ok? Ya sabes lo de no dejar para dentro de media hora lo que puedas hacer ahora, así que te recuerdo la web:'."\n\n".'http://www.kini.tk'."\n\n".'Y si no funciona prueba por:'."\n\n".'http://www.traba.org/kini'."\n\n\n".'Gracias!';
$text = wordwrap($text, 70);
$headers = 'From: ... <...@...>'."\r\n".'Content-type: text/plain; charset=utf8';
mail($desti, $assum, $text, $headers);
}
?>
Tenemos que poner el script php en nuestro directorio web, y luego crear el script que ejecutará el código php, que podría ser algo como:
#!/bin/bash wget "http://www.traba.org/...php?varseguridad=1" -O /dev/null;
Luego ya sólo tenemos que hacer ejecutable el script e introducirlo en nuestro crontab:
30 20 * * wed /home/nombreusuario/tareasprogramadas/kini.sh
Resumen
- Creamos todos los scripts necesarios y los guardamos en la carptea que queramos
- Editamos el fichero de configuración de cron mediante:
sudo crontab -e
- Y le añadimos, por ejemplo, la siguiente información:
30 3 * * mon,thu /home/nombreusuario/tareasprogramadas/update.sh 30 4 * * * /home/nombreusuario/tareasprogramadas/backup.sh 45 4 * * * /home/nombreusuario/tareasprogramadas/dump.sh 0 5 * * * /home/nombreusuario/tareasprogramadas/reinicio.sh 30 20 * * wed /home/nombreusuario/tareasprogramadas/kini.sh
- Pulsamos Ctrl-O, {Return} y Ctrl-X y ya lo tenemos todo listo
Perfeccionando los backups
Se trata de conseguir que un solo script nos genere un fichero .tar.gz que contenga dentro suyo distintas carpetas, que puedan corresponder tanto a distintos directorios de ficheros como a dumps de MySQL. El script podría ser algo parecido a:
#!/bin/bash data1=`date -u +%d-%m-%Y`; cd /var tar -cvf /mnt/winfat/Backups/$data1.tar www/* ; cd /home/acrida tar -rvf /mnt/winfat/Backups/$data1.tar Documents/*; cd /usr/lib tar -rvf /mnt/winfat/Backups/$data1.tar cgi-bin/*; cd /usr/share tar -rvf /mnt/winfat/Backups/$data1.tar phpmyadmin/*; mkdir "/mnt/winfat/Backups/etc/"; cp /etc/apache2/ /mnt/winfat/Backups/etc/ -R -L cp /etc/php4/ /mnt/winfat/Backups/etc/ -R cp /etc/mysql/ /mnt/winfat/Backups/etc/ -R cp /etc/proftpd.conf /mnt/winfat/Backups/etc/ -R cd /mnt/winfat/Backups tar -rvf /mnt/winfat/Backups/$data1.tar etc/* rm -r /mnt/winfat/Backups/etc/ mysqldump -u usuario -pcontraseña bd1 > /mnt/winfat/Backups/bd1.sql mysqldump -u usuario -pcontraseña bd2 > /mnt/winfat/Backups/bd2.sql mysqldump -u usuario -pcontraseña bd3 > /mnt/winfat/Backups/bd3.sql mysqldump -u usuario -pcontraseña bd4 > /mnt/winfat/Backups/bd4.sql mysqldump -u usuario -pcontraseña bd5 > /mnt/winfat/Backups/bd5.sql mysqldump -u usuario -pcontraseña bd6 > /mnt/winfat/Backups/bd6.sql mysqldump -u usuario -pcontraseña bd7 > /mnt/winfat/Backups/bd7.sql mysqldump -u usuario -pcontraseña bd8 > /mnt/winfat/Backups/bd8.sql mysqldump -u usuario -pcontraseña bd9 > /mnt/winfat/Backups/bd9.sql mkdir "/mnt/winfat/Backups/sql"; cd /mnt/winfat/Backups/ mv *.sql /mnt/winfat/Backups/sql tar -rvf $data1.tar sql/* ; rm -r /mnt/winfat/Backups/sql/ gzip /mnt/winfat/Backups/$data1.tar data0=`date -d "4 days ago" +%d-%m-%Y`; rm /mnt/winfat/Backups/$data0.tar.gz
Con este script logramos tener un único fichero .tar.gz por día, que contendrá todos los backups que queramos y también los dumps.
Con don ventanas
Probado en:
- M$ Window$ XP con SP1 (es necesario tener el SP1 instalado)
Peculiaridades
El proceso es muy similar pero:
Debe usarse VNC (RealVNC) en lugar de FreeNX
Hay algún software propietario como Serv-U, MDaemon o DirectUpdate.
Se pueden servir bases de datos bibliograficas con refman
CGIwithR no funciona
Migración de ventanas a pinguinos
dumps de mysql (accents...)
smf?
wiki?
Links
Por qué no te habré descubierto antes, link que parece muy completo aunque poco explotado de momento
Demos de distintas aplicaciones, per triar, remenar i escollir

