Issuu on Google+

juegaLinEx

LINUX MAGAZINE

E D I C I Ó N

E S P E C I A L

LMMS

La edición profesional de música llega a Linux

Edición en Castellano

Más de 150 juegos completos

NÚMERO 14

Últimos drivers de vídeo y audio Software educativo incluido

NÚMERO 14 • P.V.P 5,95 €

Administra imágenes digitales en Linux

Fotografía Digital

Edición Fotográfica

imgSeek

FOTOS DIGITALES

Encriptación de datos

Protección de discos duros con DM-Crypt p68

Wlassistant

Acceso a red para portátiles p37

OpenVPN

Redes virtuales privadas p62

TaskJuggler

Linux Multimedia Studio

Trucos JPEG sin pérdidas p24 Búsqueda con imgSeek p15 Xnview: Visor versátil p18 Técnicas de edición para expertos p11

.Net Programación Mono y DotGNU p43

Configuración Squid

Evince El visualizador de documentos de GNOME p80

Konsultorio de Klaus

OOo Base El mejor sustituto de MS Access de OpenOffice p30 WWW.LINUX- MAGAZINE.ES

NeroLINUX ¿Está Nero listo para LINUX? p27


EDITORIAL

2005 Estimado Lector de Linux Magazine ara cuando esto se publique, las Navidades, el fin de año y los Reyes probablemente no sean más que un vago recuerdo en la mente del lector. Pero “ahora”, cuando escribo esto, es el 31 de diciembre y me parece un momento oportunísimo para repasar lo que nos ha deparado el año que hoy acaba. Sé que lo del repaso anual es un recurso socorridísimo, pero, por un lado, Linux Magazine cumplió doce números con el año y es buen ejercicio echar cuentas. Y por otro, ya se sabe que el pueblo que olvida su historia se condena a repetirla y en este pasado año hubieron algunos verdaderos momentos oscuros que no desearía para nada reviviese el “pueblo” del Software Libre. Visto como una liguilla, un recuento resumido de los partidos más emblemáticos de la temporada quedaría como sigue: Abril 2005, en la red: BitKeeper contra GIT: a pesar de que vino precedido de disputas internas y de que asistimos (al nada raro, todo hay que decirlo) espectáculo de los dioses del Olimpo del Software Libre lanzándose rayos y centellas, el cambio de una aplicación propietaria (BitKeeper) a otra libre (GIT) para el control del desarrollo del kernel de Linux, es algo sin duda positivo para la comunidad. Muchos desarrolladores se encontraban incómodos con una situación en la que la piedra angular del más popular de los sistemas operativos libres estuviera a merced de los caprichos de una tercera empresa y no bajo el control de sus artífices. A pesar del “trato entre caballeros” establecido entre Torvalds y Larry McVoy, CEO de BitMover, ocurrió lo que tenía que ocurrir (aún sin que Andrew Tridgell

P

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 Magazin, 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.

del proyecto SAMBA metiera el remo y precipitase los acontecimientos) y la relación se rompió. La subsiguiente crisis se resolvió bien gracias a los reflejos de Linus y su equipo, y el desarrollo del kernel sigue adelante a todo tren con la ayuda de GIT, una herramienta libre y de la comunidad. Un 1 en la quiniela. Julio, en el Parlamento Europeo: Patentes contra Software Libre (julio 2005): Y se celebró la votación sobre patentes de software que nos quisieron colar por la puerta de atrás las megacorporaciones productoras de pleitos… digo… de software americanas (y alguna que otra díscola europea que también se subió al carro) que mantuvo en vilo al mundillo del SL durante unos cuantos meses. Al final la cosa quedó en empate: la directiva que hubiera destruido el tejido industrial del desarrollo europeo no se aprobó, pero tampoco se ha hecho por aclarar las procelosas aguas de las patentes europeas, donde la ley dice que no se puede, pero las agencias de patentes, lo que se dice patentar, patentan. Resultado: una X, empate. Diciembre, en el Congreso de los Diputados: Software de “Patente” contra Software Libre: A pesar de las numerosas iniciativas regionales y las obvias y comprobables ventajas que ha supuesto la implementación de soluciones libres en ciertas autonomías, parece ser que muchos políticos en Madrid no lo ven claro. Las proposiciones de Ley referentes a la implantación del software libre en la Administración y que presentaron tanto ERC como IU en el Congreso de los Diputados el pasado 14 de diciembre del 2005 sufrieron una seria derrota a manos de los dos partidos mayoritarios: 290 votos en contra y sólo 15 votos a favor. ¿Las razones esgrimi-

WWW.LINUX- MAGAZINE.ES

das? Las de siempre: que si el software libre es inseguro (= es anti-americano) por que se le conocen sus tripas; que si mina la libre competencia (= es anti-americano) por su modelo de negocio; tendría efectos negativos en las inversiones I+D+i (= es antiamericano). Esta última razón tiene especial guasa, siendo, como es España, el farolillo rojo en el ranking de países por inversión en investigación. Pero, volviendo al tema: todos estos motivos al lector familiarizado con el mundillo del mercadeo del software le resultarán curiosamente familiares. Exacto: están calcados (¡oh, coincidencia!) de las campañas publicitarias anti-software libre de ciertas empresas que todos conocemos bien y que una y otra vez se han refutado de manera categórica. De momento, poco importa. Lo único que importa es el rotundo 1 en la quiniela a favor de los de siempre. Habrá revancha.

Paul C. Brown Director

Número 14

3


CONTENIDOS • Linux Magazine nº 14

PORTADA 11 Especial Foto Digital El entorno Linux incluye algunas poderosas herramientas para editar, manipular y escanear imágenes digitales. Las vemos en nuestra sección de portada.

EVALUACIÓN 27 Nero ¿Supera Nero en capacidad a los programas nativos de grabación de CDs de código abierto de Linux? ¿O se le quedan las tostadas por hacer?

15 imgSeek El visor de imágenes imgSeek ofrece una alternativa a la búsqueda tradicional por nombre de archivo: se puede buscar una foto basándose en formas de la imagen.

DESARROLLO 43 Mono y DotGNU Los proyectos de software libre Mono y DotGNU abren la plataforma .NET de Microsoft a los desarrolladores de Linux. Evaluamos estas implementaciones alternativas para la programación de sencillas aplicaciones GUI.

18 Xnview Xnview es una herramienta útil para el visionado y la edición de imágenes que es gratuito para uso privado.

21 XSane La interfaz Sane proporciona acceso a los dispositivos de procesamiento de imágenes como los escáneres. Se puede manejar un escáner con soporte Sane desde Linux con la interfaz de usuario XSane.

PRÁCTICO 47 Perl: Bancos de Pruebas 30 OOBase Si necesitamos una solución rápida y sencilla, podemos crear nuestra propia aplicación de base de datos con OpenOffice.org 2.0.

33 TaskJuggler

24 Exif Es posible renombrar y modificar archivos JPEG sin alterar los gráficos modificando las cabeceras del archivo. Veamos cómo.

Taskjuggler es una herramienta práctica para la gestión de proyectos. Mostramos cómo organizar un trabajo simple de remodelado con Taskjuggler.

37 Wlassistant

LINUX MAGAZINE 3 6 8 10 94 94 95 97 98

4

Editorial DVD Linux Magazine Inseguridades Correo Eventos Información de Contacto Subscripciones Linux Local Próximo Número

Número 14

Los usuarios de ordenadores portátiles que se mueven entre redes inalámbricas necesitan una herramienta simple y práctica para conectarse. Wlassistant ayuda a encontrar la señal.

Con un banco de pruebas se pueden corregir errores y añadir nuevas funcionalidades sin arruinar la base de código ya existente.

51 Python: Scripts sencillos Mucha gente habla de Python como el sustituto normal de Perl. Demostramos lo fácil que es crear un script potente y sencillo en Python.

ADMINISTRACIÓN 55 La Columna de Charly El analizador de los ficheros de registro del Squid, denominado Sarg por su autor, le ayuda a mantener su servidor Squid actualizado.

40 LMMS Linux Multimedia Studio (LMMS) es una herramienta de sonido que engloba una gran variedad de impresionantes características en un estupendo paquete.

WWW.LINUX- MAGAZINE.ES

56 Squid Un servidor proxy proporciona una navegación más segura y eficiente. Aunque existen soluciones proxy comerciales disponibles, todo lo que realmente necesitamos es Linux y el viejo PC del desván.


LINUX USER 76 KTools

62 OpenVPN Los cortafuegos a veces prohiben todo el tráfico excepto la navegación por la web, impidiendo que los usuarios puedan utilizar los servicios de IRC o los servidores de difusión. ¿La solución? OpenVPN.

La base de datos musical Yammi para KDE (Versión 3.2 o superior) es un buen sustituto de un tocadiscos.

EDICIÓN ESPECIAL LINUX MAGAZINE

78 DeskTopia Trayer aporta una útil bandeja donde depositar iconos de applets de uso frecuente. De gran utilidad para aquellos que no dispongan de KDE o GNOME.

Más de 150 juegos completos

Los últimos Drivers de vídeo y sonido optimizados

Instalación gráfica con Anaconda

Software educativo

80 Evince Evince se está convirtiendo en el visor estándar de GNOME para PDFs y otros formatos de documentos.

Más información en la página 6.

65 Sistema de Ficheros Las máquinas Unix organizan los archivos en un sistema de ficheros en forma de árbol con estructura jerárquica. Un sistema de nombres ayuda a los administradores a encontrar el camino.

82 Educación En nuestra segunda entrega sobre moodle, vemos como pueden profesores y alumnos utilizar la plataforma y examinaremos ejemplos en el entorno de clases presenciales.

86 Línea de Comandos Un escueto comando es todo lo que se necesita para empaquetar los datos o extraerlos de un archivo.

COMUNIDAD 89 Entrevista

68 Encriptación Si se toma en serio la seguridad, pruebe la encriptación del disco duro con DM-Crypt y LUKS.

Klaus Knopper tiene aún grandes ideas para la pequeña distribución que ha engendrado numerosos derivados y ha cambiado la manera de pensar respecto a Linux. Hablamos con Klaus acerca del pasado, presente y futuro de Knoppix.

WWW.LINUX- MAGAZINE.ES

Número 14

5


DVD LINUX MAGAZINE

Y en el DVD…

JUEGALINEX Edición Especial Linux Magazine

M

ucho se ha hablado estos últimos meses de Munich y sus muy cacareados planes de migrar 14.000 escritorios a Linux. También, y dentro de las noticias relacionadas con el sector, hemos podido oir la propuesta del gobierno de Massachusets de vetar toda documentación administrativa que no se encuentre en un formato abierto. Pero los planes de migración previstos en la capital Bávara para el 2005 todavía no se han materializado y lo último que sabemos de Massachusets es que las presiones de ya-sesabe-quién han llevado a la dimisión del principal impulsor del proyecto, Peter Quinn. De manera similar, en nuestro propio país existen prudentes planes, estudiadas estrategias y advertidos anteproyectos para implantar software y formatos libres a diversos niveles en las administraciones públicas. Estos estupendos propósitos, tal y como viene siendo habitual, puede que acaben en agua de borrajas ¿Por qué? No son lo suficientemente atrevidos. No le echan el suficiente valor. Sin embargo, en España sabemos que hay una administración que, al modo de cierto poblado galo de comic, se ha desmarcado de la “prudencia” y de los ponderados estudios interminables y, habi-

JuegaLinex Edición Especial Linux Magazine Base: gnuLinEx 2004r1 Kernel: 2.6.7 parcheado con drivers actualizados de video (ATI y Nvidia) y sonido, cámaras web y discos Serial ATA. Escritorio: Gnome 2.8 con menú superior para acceso más cómodo a juegos. Instalación: Gráfica con Anaconda. Sistema gráfico: Free86 4.3.0 de Debian Sarge.

6

Número 14

endo hecho sus cuentas (cuadraban), cogió el toro por los cuernos y migró todo su parque informático a Linux sin mirar atrás y sin aceptar presiones de grandes corporaciones. Al igual que el movimiento se demuestra andando, la experiencia extremeña demuestra que las reservas políticas ante la migración de la administración al software libre están basadas en miedos sin fundamentar. Y prueba de ello es la celebridad que ha alcanzado Extremadura, haciendo que una región considerada hasta ahora una de la más improbables como referente tecnológico, se constituya en la autonomía hacia la que se vuelven todas las miradas cuando se plantea una migración.

Las Caras de LinEx

utilizara a nivel institucional y en las pequeñas y medianas empresas de la región, que se populizara a nivel doméstico. Sólo así se conseguiría la masa crítica necesaria para que se alcanzaran los objetivos de alfabetismo digital marcados por la Junta de Extremadura. Y no hay mejor manera de popularizar una tecnología que aplicarla al mercado del entretenimiento. Con ese fin nació en el 2005 la derivada JuegaLinEx, una distro con, no sólo los clásicos juegos de Linux (Frozen Bubble, Tux Racer y GNU Board), sino con fabulosos juegos de estrategia, simulación y arcade.

El equipo al cargo de la producción de Edición especial Linux LinEx es consciente desde hace tiempo Magazine de que no se puede crear una distribución que sea todo para todo el mundo. La versión especial Linux Magazine, creada Por ello, aparte de su producto paraguas, por Dario Rapisardi, incluye, además de un LinEx [1], el equipo de desarrollo ha ido mayor número de juegos a cada cual más creando desde distribuciones derivadas espectacular, actualizaciones y correcespecializadas para satisfacer las necesiciones de drivers de vídeo y sonido para dades de las empresas extremeñas con ofrecer al jugador la mejor experiencia de LinEx Empresas [2], hasta infraestrucjuego posible en un sistema Linux. turas para fines específicos basadas en plataformas libres, como es el caso del proyecto Jara que sirve de base a todo la red sanitaria extremeña [3]. Sin embargo, si algo tenían claro los impulsores de LinEx aparte de la propia necesiFigura 1: JuegaLinEx ibcluye una gran variedad de software educativo, dad, era que se como, por ejemplo, el entorno de desarrollo para niños Squeak.

WWW.LINUX- MAGAZINE.ES


DVD LINUX MAGAZINE

JuegaLinEx cuenta con dos modalidades de instalación: una especial para niños, donde se omiten los juegos más violentos y otra dirigida a adultos que gusten de las emociones fuertes. Otro punto fuerte de JuegaLinEx es la inclusión de juegos y utilidades educativas. La distribución se ha creado trabajando muy estrechamente con la Consejería de Educación de la Junta Extremadura y los especialistas de la región han asesorado a los creadores sobre la inclusión de los mejore programas didácticos en base a sus experien-

Los Juegos Más de 150 juegos divididos en las siguientes categorías: Arcade glTron, Neverball, Nexuiz, Trackballs, etc. Estrategia Battle for Wesnoth, Glest, SimuTrans, Egoboo, etc. Misceláneo Squeak, GCompris, etc. Naipes Blackjack, Poker, Solitarios, etc. Plataforma Amphetamine, Supertux, Aquatic Bubble, etc. Rompecabezas Xwelltriss, MirrorMagic, Frozen Bubble, etc. Simuladores BilliardGL, Bzflag, Gl-117, FlightGear, etc. Tablero KMahJongg, Atlantik, Go, Reversi, etc.

cias en el aula. Por ejemplo: Junto con juegos de carreras y shooters en primera persona, podemos encontrar el potente entorno de desarrollo Squeak, diseñado por el equipo de Alan Kay y remodelado por ingenieros extremaños para adecuarlo a las necesidades educativas y domésticas españolas, que se utiliza para enseñar a los más jóvenes los conocimientos básicos para la creación de aplicaciones multimedia y conceptos como la programación orientada a objetos. GCompris, otro de los paquetes incluidos, es una suite de juegos educativos facilmente expandible que cuenta con un número cada vez mayor de aplicaciones y actividades y que abarca la enseñanza de matemáticas, vocabulario, conocimiento del medio, física y un largo etcétera. Por todo ello, JuegaLinEx es la distribución ideal para el entretenimiento y educación familiar.

Figura 2: Shooter en 1ª persona Nexuiz, que utiliza el motor Quake.

Instalación Para empezar la instalación, habremos de configurar la BIOS para arrancar desde el DVD. Rearrancaremos el ordenador con el DVD insertado en el lector y empezará el proceso de instalación. JuegaLinEx viene con el avanzado sistema de instalación, heredado de Red Hat, Anaconda. El interfaz gráfica guía al usuario a través de la elección de idioma, teclado, particionamiento, selección de paquetes y configuración del gestor de arranque. El avanzado sistema de detección de hardware configurará automáticamente tarjetas de vídeo y de sonido, conexiones a red y dispositivos como impresora y acceso a Internet, haciendo que incluso el más inexperto no tenga ningún problema para tener en poco tiempo el sistema listo para funcionar. ¡Instálalo ya!

Figura 3: En Simutrans has de crear un imperio de transporte y comunicación.

Figura 4 y 5: Velocidad a tope con Torcs (arriba) y GLTron (abajo).

Recursos [1] Página principal de LinEx: http://www. linex.org/ [2] LinEx Empresas: http://www.gnulinex. net/distribucion/ [3] Proyecto Jara: http://www.juntaex.es/ consejerias/syc/ses/jara/jara.html

WWW.LINUX- MAGAZINE.ES

Número 14

7


LINUX USER INSEGURIDADES Schlagwort sollte hier stehen

INSEGURIDADES ■ phpmyadmin Se han descubierto algunas vulnerabilidades de scripting de sitio cruzado en phpmyadmin, un juego de scripts PHP para administrar MySQL desde la web. El Proyecto de Vulnerabilidades y Exposiciones Comunes identifica los siguientes problemas: • CAN-2005-2869 – Andreas Kerber y Michal Cihar descubrieron algunas vulnerabilidades de sitio cruzado en la página de error y en el login de cookies. • CVE-2005-3300 – Stefan Esser descubrió restricciones de seguridad perdidas en grap_globals.php que

permitirían a un atacante provocar la inclusión de un fichero local arbitrario en phpmyadmin. • CVE-2005-3301 – Tobias Klein descubrió vulnerabilidades de sitio cruzado permitiendo a los atacantes inyectar HTML o scripting del lado del cliente.■ Referencia Debian: DSA-880-1 Referencia Gentoo: GLSA 200510-16 Referencia Mandriva: MDKSA-2005:201

■ OpenSSL OpenSSL es un juego de herramientas que implementa los protocolos Secure Sockets Layer (SSL v2/v3) y Transport

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 14

WWW.LINUX- MAGAZINE.ES

Layer Security (TLS v1), así como una librería criptográfica de propuesta general de potencia industrial. OpenSSL contiene una solución software para un error en la manipulación SSL en IE 3.0.2. Dicha solución se encuentra disponible en la mayoría de los servidores que usan OpenSSL para ofrecer soporte para SSL y TLS. Yutaka Oiwa descubrió que la solución podría permitir que un atacante actuara como “un hombre de en medio” para forzar a una conexión SSL a usar SSL 2.0 en vez de un protocolo más fuerte como SSL 3.0 o TLS 1.0. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http:// cve.mitre.org) ha asignado a este problema el nombre CAN-2005-2969.■ Referencia Debian: DSA-875-1 Referencia Red Hat: RHSA-2005:800-8 Referencia Slackware: SSA:2005-286-01 Referencia Suse: SUSE-SA:2005:061.

■Unzip Unzip 5.51 y versiones anteriores no advierten correctamente al usuario cuando obtienen ficheros setuid o setgid, lo cual podría permitir que los usuarios locales obtuvieran privilegios. (CAN2005-0602) Imran Ghory encontró una condición de carrera en la manipulación de ficheros de salida. Mientras se desempaquetaba un fichero mediante unzip, un atacante local con permisos de escritura sobre el directorio objeto podría explotarlo y cambiar los permisos de ficheros arbitrarios del usuario unzip. Esto afecta a versiones de unzip 5.52 y anteriores (CAN-2005-2475). Los paquetes actualizados se han parcheado provisionalmente para evitar estos problemas.■ Referencia Mandriva: MDKSA-2005:197

■Wget GNU Wget es una utilidad de recuperación de ficheros que puede usar protocolos HTTP o FTP. Se encontró un error en el desbordamiento de búfer basado en pila en la


INSEGURIDADES

implementación de la autenticación NTLM de wget. Un atacante podría ejecutar código arbitrario sobre la máquina de otros usuarios si el usuario puede ser burlado en la conexión a un servidor web malicioso usando autenticación NTLM. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http://cve.mitre.org) ha asignado el nombre CAN-2005-3185 a este problema.■ Referencia Mandriva: MDKSA-2005:204 Referencia Red Hat: RHSA-2005:812-5 Referencia Suse: SUSE-SA:2005:063

■Ethereal El paquete Ethereal es un programa para monitorizar el tráfico de la red. Se han descubierto fallos en este programa. En un sistema en el que está corriendo Ethereal, un atacante remoto podría enviar paquetes maliciosos para desencadenar dichos fallos y hacer que Ethereal se estropeara o que potencialmente ejecutara código arbitrario. El Proyecto de Vulnerabilidades y Exposi-

ciones Comunes (Common Vulnerabilities and Exposures o CVE – http://cve. mitre.org) ha asignado los nombres CVE2005-3241, CVE-2005-3242, CVE-20053243, CVE-2005-3244, CVE-2005-3245, CVE-2005-3246, CVE-2005-3247, CVE2005-3248, CVE-2005-3249 y CVE-20053184 a estos problemas.■ Referencia Gentoo: GLSA 200510-25 Referencia Red Hat: RHSA-2005:809-6

■Sudo Sudo (Superuser Do) es un programa para sistemas basados en Linux y Unix que permite a cualquier usuario ejecutar comandos como superusuario. Tavis Omandy descubrió que Sudo no realiza una limpieza de entorno integral; las variables SHELLOPTS y PS4 todavía se pasan al programa como si se tratara de un usuario alternativo, que en la ejecución de comandos arbitrarios puede resultar como el usuario alternativo cuando se ejecuta un script bash. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http://cve.

WWW.LINUX- MAGAZINE.ES

mitre.org) ha asignado el nombre CAN2005-2959 a este problema.■ Referencia Debian: DSA-870-1 Referencia Mandriva: MDKSA-2005:201 Referencia Red Hat: RHSA-2005:527-16

■Lynx Lynx es un navegador web basado en texto. Ulf Harnhammar descubrió un error de desbordamiento de pila en la manera en que Lynx manipula conexiones a servidores NNTP (noticias). Un atacante podría crear una página web que redireccionara a un servidor de noticias malicioso que podría ejecutar código arbitrario como si se tratara del usuario que corre Lynx. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE – http://cve.mitre.org) ha asignado el nombre CAN-2005-3120 a este problema.■ Referencia Debian: DSA-876-1 Referencia Gentoo: GLSA-200510-15 Referencia Mandriva: MDKSA:2005:186 Referencia Red Hat: RHSA-2005:803-4 Referencia Suse: SUSE-SR:2005:02

Número 14

9


LINUX USER CORREO

Schlagwort sollte hier stehen

Correo del Lector

Errare en humanum est Soy un subscriptor vuestro y en el número 12 de Linux Magazine venía de regalo el DVD SUSE 10.0. Como llevo usando Suse desde la versión 6.1 y tenía instalado la 9.3, el otro día me decidí a actualizar a la 10 con vuestro DVD, y me ha sorprendido ver que faltan paquetes básicos, como por ejemplo gcc , synaptic o kdegraphics3-extra, glibc-devel, etc. Sinceramente entiendo que otros paquetes que estén sujetos a licencias y otras cortapisas no se incluyan, pero otros tan esenciales como estos y que son GPL, pues como que no se comprende. Al final tendré que descargar la iso del DVD completa para terminar la actualización. Les invito a que los DVD que regalen, o bien estén completos o que avisen de sus limitaciones. Saludos Antonio

LM Efectivamente, la imagen iso que nos hicieron llegar la gente de Suse, no sabemos si por error o por la brillante idea de alguien del Departamento de Mercadotecnia, estaba tan limitada que más parecía una demo que una verdadera distribución. No comprendemos exactamente a qué ha sido debido y desde luego estudiaremos muy detenidamente cualquier otra iso que nos envíen los del camaleón. Sin embargo, en esta ocasión no hubo solución, ya que, cuando descubrimos el error, los DVDs ya estaban impresos, al igual que los ejemplares de

la revista… que contenían información incorrecta en lo que se refería al DVD. Desde aquí vaya nuestra más sincera disculpa. Sin embargo, no hace falta, como propone Antonio, descargarse toda una iso del DVD para actualizar el sistema. Con la utilidad de administración de Yast, bastará. Pulsamos en el botón de “K-menu” en el ángulo inferior izquierdo de la pantalla y escogemos “Sistema” > “Centro de Control (YaST)”. Una vez en YaST, escogemos “Software” y pulsamos en “Fuente de Instalación”. A continuación pulsamos en “Añadir” para… pues eso, añadir las fuentes de instalación citadas a continuación: Protocolo: HTTP Servidor: packman.iu-bremen.de Directorio: suse/10.0 Protocolo: FTP Servidor: ftp.suse.com Directorio 32 bits: i386/9.3 Directorio 64 bits: x86_64/9.3

pub/suse/ pub/suse/

Protocolo: FTP Servidor: ftp.suse.com Directorio 32 bits: pub/suse/ i386/current/inst-source-extra Directorio 64 bits: pub/suse/ x86_64/current/inst-source-extra Protocolo: FTP Servidor: ftp.rediris.es Directorio 32 bits: pub/linux/ distributions/suse/pub/suse/i386/ 10.0/SUSE-Linux10.0-GM-Extra Directorio 64 bits: pub/linux/ distributions/suse/pub/suse/ x86_64/10.0/SUSE-Linux10.0-GMExtra4 Protocolo: FTP Servidor: ftp.rediris.es Directorio de 32 bits: pub/linux/

10

Número 14

WWW.LINUX- MAGAZINE.ES

distributions/suse/pub/suse/i386/ 9.3 Directorio de 64 bits: pub/linux/ distributions/suse/pub/suse/ x86_64/9.3 Protocolo: FTP Servidor: ftp.gwdg.de Directorio: pub/linux/misc/suserdrcux/100 Protocolo: FTP Servidor: ftp.suse.com Directorio 32 bits:pub/suse/i386/ supplementary/KDE/ update_for_10.0/yast-source Directorio 64 bits: pub/suse/ x86_64/supplementary/KDE/ update_for_10.0/yast-source

Con eso deberíamos disponer de todo el software que se pueda necesitar. Se pueden añadir también repositorios de OpenSuse y de otras fuentes y YaST los integrará con el repositorio existente. Hay que evitar las barras tanto al principio como al final de los directorios y transcribir las direcciones tal y como se describe en esta sección. De otra manera YaST lanzará un error.. Para instalar, ya sólo hemos de dirigirnos en YaST a “Software” > “Administración de Software” (la primera vez que lancemos esta aplicación después de añadir nuevas fuentes de instalación, tardará un poco en recabar la lista completa de paquetes disponibles) y, para instalar por ejemplo gcc, escribiremos gcc en el campo Búsqueda y aparecerán todos los paquetes que necesitaremos para instalar el compilador.. Procederemos de igual manera para los restantes paquetes que nos falten hasta tener el sistema a nuestro ■ gusto.

Puedes enviar tus comentarios y sugerencias a: correo@linux-magazine.es

www.almogon.de

ACCESO DE ESCRITURA


Imagen Digital • PORTADA

Tratamiento de imágenes bajo Linux

LA MEJOR IMAGEN El entorno Linux incluye algunas poderosas herramientas para editar, manipular y escanear imágenes digitales. POR ACHIM SCHEFCZYK Y JOE CASAD

L

as modernas tecnologías de imagen digital ofrecen hoy día soluciones a algunos problemas históricos que arrastraba la fotografía desde la invención de la cámara. Pero la fotografía digital ha introducido una nueva serie de problemas, y la gran potencia de los medios técnicos ha propiciado nuevas posibilidades para el procesamiento de imágenes. Todas estas nuevas posibilidades han conducido a una nueva generación de herramientas. El entorno Linux proporciona numerosas y excelentes utilidades para el visionado, edición y procesamiento de imágenes digitales, y en el tema de portada de este mes se examinan algunas de estas herramientas. Se comenzará echando un vistazo a imgSeek, una herramienta futurística que permite ordenar las fotos por la forma de un objeto de la imagen. También se examinará Xnview, un visor de imágenes y editor que es capaz de leer la increíble cifra de 400 formatos gráficos. También se aprenderá acerca del front-end XSane para controlar escáners, y se verá cómo editar archivos JPEG desde la línea de comandos.

Introducción Los artículos del tema de portada de este mes no requieren ser experto en fotografía digital, pero será útil que se tenga algún conocimiento de los problemas relacionados con la manipulación de imágenes. Muchos lectores

estarán familiarizados con estos problemas, pero para aquellos que no estén inmersos en la revolución digital, se empezará con una breve introducción.

TEMA DE PORTADA imgSeek...............................................15 Xnview................................................. 18 Xsane................................................... 21 Exif....................................................... 24

WWW.LINUX- MAGAZINE.ES

Número 14

11


PORTADA • Imagen Digital

Tabla 1: ELEGIR UN TAMAÑO DE IMAGEN Tamaño de la imagen

Mega-pixels

Aplicaciones recomendadas

640x480 1024x768 1280x960 1600x1200 2048x1536 2560x1920

0,3 0,78 1,2 2,0 3,1 5,0

Sólo útil para Internet No usar, o sólo para 9 x 13 9x13 hasta 10 x 15 10x15 hasta 13 x 18 13x18 hasta 20 x 30 13x18 hasta tamaño poster

La mayoría de las cámaras guardan las imágenes al menos en dos formatos de archivo usuales (véase el cuadro titulado “Formatos Gráficos Comunes”). Además de proporcionar diferentes calidades de imagen, estos formatos ocupan diferentes cantidades de espacio en la tarjeta de memoria. Algunas otras ni siquiera especifican realmente el formato del archivo, sino que ofrecen una descripción genérica, del tipo Extra, Fine o Standard,

por ejemplo. Será preciso recurrir al manual de la cámara para descubrir qué significan en realidad estos términos. Dependiendo del fabricante, dichos términos pueden significar cosas bien distintas. Habitualmente, JPEG da buenos resultados incluso para calidad de impresión. Pero para evitar afectar a la calidad de imagen en demasía, debería elegirse un ratio de compresión dentro del tercio superior de las opciones disponibles.

El tamaño de la imagen tiene una gran influencia en la calidad de la misma (véase la Tabla 1). Las cámaras modernas ofrecen un rango de opciones que comienza en 640x480 (0.3 mega-píxeles) hasta lo que hoy día es el estándar, más o menos, en cuanto a resolución: 2560x1920 (5 mega-píxeles). Desafortunadamente, más grande no siempre es mejor. Los fabricantes han logrado que los usuarios piensen que la resolución es el factor decisivo de calidad, pero esto deja de lado factores tan importantes como las lentes, el CCD y el software interno de la cámara. Antes de intentar modificar las imágenes, será buena idea grabar los originales en un CD o DVD. Luego puede borrarse cualquiera de ellas que haya quedado descartada para posterior procesamiento. Esto puede incluir imá-

Formatos Gráficos Comunes TIFF (Target Image File Format) es el formato más importante para el intercambio de información en la fase previa a la impresión. El formato tiene su origen en el campo de las publicaciones y se usa generalmente en aplicaciones profesionales. Las imágenes TIFF usan un formato de compresión sin pérdidas. El nivel de calidad máxima de muchas cámaras digitales usa TIFF, que es perfecta para imágenes impresas realmente grandes, debido a que se evita la degradación que puede aparecer con JPEG. RAW El formato RAW no es realmente un formato de archivo, sino un tipo de datos. Cada fabricante tiene su estándar propietario, y estos estándares generalmente no son compatibles. Las cámaras suelen guardar la información de la imagen en RAW en una tarjeta de memoria. Las herramientas que la cámara pueda tener para mejorar la calidad de la imagen se deshabilitan. Este formato sólo tiene sentido para entornos profesionales. Además, una imagen RAW puede ocupar el triple de espacio a su equivalente en formato JPEG. Si aún así se quiere trabajar con el formato RAW, es preciso asegurarse antes de comprar la cámara de que existen realmente las herramientas bajo Linux para editar y leer estos archivos RAW. JPEG JPEG significa Joint Photographic Experts Group, el nombre del comité que

12

Número 14

introdujo el método estandarizado para la compresión con y sin pérdidas en 1992. En el

ques, efecto alias y otros problemas (véase la Figura 1). PNG Portable Network Graphics (PNG) se diseñó como un sustituto libre para el formato GIF, que está protegido por patentes. El PNG combina los beneficios de GIF y de JPEG. PNG tiene las mismas características de GIF con algunas excepciones, como las animaciones, pero con una compresión mayor. Al igual que GIF, PNG soporta píxeles de una paleta de 256 colores, así como imágenes en escala de grises con 1, 2, 4, 8 ó 16 bits, e imágenes en color (RGB) con 8 ó 16 bits por canal. Se utiliza compresión sin pérdidas para guardar los datos.

Figura 1: Si el archivo está demasiado comprimido, pueden aparecer zonas degradadas (véanse las nubes de la imagen).

proceso de compresión, una ventana se mueve secuencialmente a lo largo de la imagen y acumula la información en bloques. Cuanta más alta sea el ratio de compresión, más grande será la ventana de procesado. Esto lleva a una cierta pérdida de detalle y de enfoque si se selecciona un índice demasiado alto. En el peor de los casos puede aparecer degradación por compresión como blo-

WWW.LINUX- MAGAZINE.ES

Desafortunadamente, no todos los navegadores soportan las capacidades de este formato, y ésta es la razón por la cual no se usa generalmente en fotografía digital. La mayoría de las cámaras no soportan el formato PNG. GIF GIF (Graphics Interchange Format) puede tratar un máximo de 256 colores diferentes. Este formato se ha quedado algo anticuado hoy día, aunque GIF aún está bastante bien para gráficos y dibujos. Debido a su poca profundidad de color, no es adecuado para fotos a color. Las fortalezas de este formato son su habilidad para mostrar transparencias y gráficos animados.


Imagen Digital • PORTADA

genes completamente sobrexpuestas o fotos con demasiado movimiento de cámara. El siguiente paso es ver las fotos, asignarles nombres fáciles de recordar y rotar aquellas que no estén correctamente orientadas. Visores como Xnview (véase el artículo en este mismo número) son más que suficiente para ver, archivar y hacer un procesado simple de las imágenes. Si se van a ver las imágenes sólo en el monitor o mandarlas adjuntas por email, pueden escalarse a un tamaño más razonable de 640x480 en JPG con una compresión media (50-60%). El destinatario del envío estará agradecido, especialmente si tiene una conexión lenta a Internet. Si hay que retocar las fotos, será necesario asegurarse de hacer los cambios antes de realizar el escalado. Cuanto menor sea el tamaño de la imagen y mayor el ratio de compresión, menor será la información que se tendrá para trabajar. Si algunas de las imágenes necesitan editarse o un ajuste fino, debería encontrarse en las herramientas que se comentan este mes, las cuales son exactamente las que se necesitan para hacer las correcciones precisas. Las siguientes secciones describen algunos problemas comunes asociados a las imágenes digitales.

Gamma Para estar seguros de que las fotos de nuestra pantalla concuerdan con las copias en papel, se usará la Corrección Gamma de nuestro software de manipulación de imágenes. El valor Gamma de las imágenes es la relación entre los valores de los gráficos digitales y los valores mostrados en la

Figura 2: Con un poco de experiencia, se puede pulir una imagen para alcanzar resultados más satisfactorios.

pantalla o impresoras. Un ratio 1:1, esto es, que la impresora imprime de manera fiel lo que se ve en pantalla, es un sueño inalcanzable, ya que cada monitor (y cada Sistema Operativo) muestra los colores de manera diferente. Los buenos programas de manipulación de imágenes proporcionan doble corrección Gamma, una básica para el monitor y, en segundo lugar, unos controles más precisos para cada archivo de manera individual. La primera corrección alcanza un balance entre los valores de color y la manera en que se muestran en nuestra pantalla, pero sólo dentro de esta herramienta específica de manipulación de imágenes, por supuesto. Esto se consigue normalmente comparando plantillas. La segunda corrección es parte del proceso de manipulación de imágenes.

Figura 3: La mayoría de los programas de retoque fotográfico tienen herramientas de eliminación de ojos rojos.

WWW.LINUX- MAGAZINE.ES

Puede usarse la corrección Gamma para archivo para rectificar problemas de color causados por el origen de la imagen. Muchas cámaras digitales generan imágenes demasiado oscuras. Cuando una cámara digital calcula los valores RGB convirtiendo los valores claros en el momento de capturar la imagen, pueden surgir diferencias. Una corrección Gamma individual para cada imagen puede ayudar a resolver este problema.

Selección y Orientación Los molestos detalles en el borde de una imagen pueden estropear la impresión de una foto. Para evitar que ocurra esto, simplemente se tendrán que aplicar nuestras tijeras digitales. De esta manera se eliminan esa rama que cuelga o aquel sufrido corredor de nuestro maravilloso atardecer. Si se hace bien, podría incluso potenciarse el efecto del motivo. Otra de las típicas imperfecciones es que la foto esté torcida. La mejor foto que se tenga de la playa no valdrá si el horizonte está inclinado. Para arreglar esto, se puede girar la imagen hasta que el horizonte este realmente en horizontal. Esto puede dejar zonas en negro en las esquinas, pero es posible eliminarlas fácilmente recortando la imagen. También puede eliminarse la típica inclinación de edificios con aliasing aplicando un giro en sentido opuesto.

Número 14

13


PORTADA • Imagen Digital

Ojos Rojos

Contraste Muchas fotos carecen con frecuencia de contraste o son demasiado oscuras. Los colores no representan la imagen tal y como se recordaba. Si esta carencia no es demasiado extrema, pueden aplicarse las herramientas proporcionadas por nuestro programa de manipulación de imágenes a la imagen entera. Se puede probar a aplicar los controles de brillo y contraste en primer lugar. Las fotos en exteriores se benefician particularmente del incremento de contraste (véase Figura 2). Aumentar únicamente el brillo raramente mejora los resultados, pero es posible intentar una combinación de más contraste y más brillo. Puede realizarse un ajuste fino del brillo y contraste aplicando la herramienta de mejora del color. O bien si es preciso concentrarse mucho en encontrar los valores adecuados, usar las curvas de color es la manera adecuada. Ambas opciones requieren un programa de retoque de imágenes medianamente potente, como por ejemplo GIMP. Si nuestra foto está muy pálida, pueden conseguirse los valores necesarios de intensidad de color incrementando los

valores de saturación. También se pueden cambiar los valores de color o experimentar con el balance de color.

Más Nitidez Algunas veces las fotos salen bastante bien, con colores vivos, buen contraste y un motivo brillante, pero la cámara se movió o se tomó la foto con una ligera sobre-exposición que provocó un cierto desenfoque. Si la imagen tiene un desenfoque ligero, puede aplicars la herramienta de nitidez (sharpen). Algunos programas de retoque permiten definir una máscara donde no se aplica la herramienta, lo que permite aplicarla con bastante control. No tiene sentido pasarse con la herramienta de nitidez. Si nos excedemos, pueden aparecer arrugas o halos semitransparentes. Para acentuar el motivo principal, es posible suavizar el fondo. Si tanto el primer plano como el fondo están enfocados, puede conseguirse una especie de efecto 3D aplicando un filtro de imagen borrosa. Para mantener el control del retoque de la imagen, se debería desactivar la función “pre-sharpening” de nuestra cámara, que generalmente está activada por defecto.

Figura 4: La imagen de la izquierda fue escalado usando el algoritmo Mitchell. La de la derecha con el método Nearest Neighbor.

14

Número 14

WWW.LINUX- MAGAZINE.ES

Los ojos rojos son otro problema que es posible corregir en pocos segundos. Los ojos rojos aparecen cuando las personas o animales están en un entorno relativamente oscuro y se fotografían usando flash. La razón de esto es que la luz del flash se refleja en la retina. La distancia y el ángulo entre la cámara y el ojo, así como el tamaño de la pupila, pueden contribuir a este indeseable efecto. Puede combatirse en el momento de sacar la foto usando un pre-flash antes de sacarla, ya que esto causa que la pupila de la persona se contraiga. Casi todas las herramientas de retoque fotográfico ofrecen un eliminador de ojos rojos, ya sea incorporado o como plugin opcional. En la mayoría de los programas, simplemente tendrá que dibujar una selección alrededor de los ojos y lanzar la rutina. La herramienta analiza el brillo de los valores rojos y los sustituye con unos valores más oscuros (véase la Figura 3). Con un poco de habilidad, podemos hacer esto de manera manual. Nuestros resultados mejorarán con la práctica.

Escalado Imágen

y

Formato

de

Es difícil escalar una imagen. Obviamente no hay restricciones físicas, pero incluso un ligero escalado puede reducir la calidad. Existen varios algoritmos (véase la Figura 4) que ayudan a alcanzar el mejor resultado posible. Xnview tiene al menos ocho métodos de escalado, aunque algunos de ellos tienen efectos secundarios como un enfoque suavizado o pixelado.

Conclusión En el tema de portada de este mes se habla de fotografía digital, pero también se habla de Linux. En los siguientes artículos se verá cómo el entorno Linux se adapta al surgimiento de las nuevas tecnologías a través del desarrollo de nuevas herramientas de Software Libre. La mayoría de los fotógrafos digitales saben lo fácil que es llenar un disco duro con imágenes. La pregunta es qué hacemos con todas estas imágenes una vez que las tenemos en nuestro ordenador. El tema de portada de este mes ayudará a iniciarnos en la edición, retoque y esca■ neo de imágenes digitales en Linux.


imgSeek • PORTADA

El visor de imágenes imgSeek

BUSCAR LA FORMA El visor de imágenes imgSeek ofrece una alternativa única a la búsqueda tradicional por nombre de archivo: se puede buscar una foto basándose en formas de la imagen. POR CARSTEN SCHNOBER

L

a mente humana es capaz de recordar imágenes más fácilmente que hechos y cifras. Ésta fue la idea básica que originó el programa imgSeek (http://imgseek.python-hosting.com), el cual agrupa las imágenes de acuerdo a su motivo. Por ejemplo, imaginemos que se están buscando todas las imágenes de nuestra colección que muestren una palmera. Simplemente se puede introducir la imagen de una palmera a imgSeek, y el programa encontrará todas las que sean similares. Alternativamente, se podría hacer un esbozo de lo que se está buscando con la herramienta de dibujo integrada, e imgSeek mostrará todo lo que recuerde a nuestro boceto. Por supuesto que imgSeek también dispon de la funcionalidad que permite agrupar las imágenes por nombre de archivo y directorio, fecha de creación o entradas de metadatos. Además puede exportar colecciones de imágenes a archivos HTML para ayudarnos a configurar una página Web, o puede llenar un CD para poderlo visualizar fácilmente con un navegador.

Instalación Tanto Suse como Debian incluyen imgSeek, y puede ejecutarse Yast o apt-get install imgseek para instalar el programa. El paquete está también en el repositorio universe de Ubuntu, aunque pueden que se prefiera instalarlo manualmente, ya

correspondientes paquetes de desarrollo para permitir a imgSeek que trate los numerosos formatos gráficos soportados por esta librería gráfica. Si además se instala el paquete Python-Imaging, imgSeek también podrá tratar y editar los metadatos de varios formatos gráficos.

que la versión disponible presenta diversos problemas que lo hacen casi inutili¡Adelante! zable. Tras completar la instalación, sólo será imgSeek es un programa en Python, por necesario teclear el comando imgSeek lo que no es necesario compilarlo después para arrancar el programa. ¡Ojo con la S de instalarlo desde el código fuente. Puede mayúscula! La primera vez que obtenerse el código fuente en la página arrancamos el programa, no se verá Web de imgSeek: http://imgseek. ninguna imagen. Si se tiene la colección python-hosting.com. Se requieren privilede imágenes en el disco duro, se deseará gios de root para instalar los archivos del que la analice justo en este momento. paquete imgSeek-0.8.5.tar.bz2. En primer Para ello, se pulsa en la pestaña Add de la lugar es preciso descomprimirlo con tar ventana principal (véase Figura 1). -xjf imgSeek-0.8.5.tar.bz2 y posteriormente imgSeek subdivide la base de datos de se teclea el comando ./install. las imágenes en volúmenes. El volumen imgSeek requiere el lenguaje de script estándar incluye cualquier archivo que se Python y los paquetes de desarrollo, que haya añadido en el sistema de archivos llevan el nombre de python-dev o Local filesystem. Si se añaden imágenes python-devel, en función de la distribución, así como de PyQt, también con los paquetes de desarrollo (deben llamarse algo como pyqt o python-qt con la extensión dev o devel). Por último, es imprescindible el paquete de desarrollo de Qt, libqt-dev o qt-devel, en función de nuestra distribución. Puede ser una Figura 1: imgSeek clasifica grandes colecciones de imágenes en buena idea instalar función de criterios como la fecha, nombre de fichero y el motivo. ImageMagick y los

WWW.LINUX- MAGAZINE.ES

Número 14

15


PORTADA • imgSeek

Figura 2: La búsqueda por contenido de la imagen es muy útil, pero a veces genera resultados sin demasiadas similitudes.

de un CD, por ejemplo, puede que queramos añadir un nuevo volumen usando el nombre del CD para mantener estas colecciones en bases de datos separadas. Esto permite trabajar con las imágenes en nuestro sistema de archivos local sin que imgSeek esté intentado acceder a las imágenes del CD que puede no estar montado en ese momento. Después de decidirnos por un volumen, se teclea la ruta (Path:) hasta el directorio. Se pulsa el botón Add! para indicarle a imgSeek que busque las imágenes de esa ruta. Si se marca recursively, imgSeek también añadirá los archivos de los subdirectorios a la colección. La pestaña Browse de la ventana principal tiene un administrador de archivos que permite navegar entre las entradas de la colección de imágenes. Hay cuatro pestañas adicionales con las que se aplican diferentes criterios de organización. La pestaña Files usa una disposición en árbol con los volúmenes en la zona superior. Puede expandirse el árbol por debajo de ese nivel, y se verán las imágenes individuales que se muestran como entradas. Al pulsar en un directorio se presentan las miniaturas de los archivos de ese directorio en la parte superior derecha de la ventana de imgSeek, y si se pulsa en la miniatura se muestra la imagen original en la parte inferior derecha.

16

Número 14

Con Groups también se verá una disposición en forma de árbol, pero se permite una agrupación configurable por grupos. La configuración por defecto tiene un grupo por cada fecha de imagen añadida a la colección, y existe un grupo Orphan para las imágenes no asignadas a ningún grupo, por ejemplo debido a que se haya borrado el grupo al que

pertenecían. Al pulsar con el botón derecho en la ventana de grupos aparece un menú con la opción New group, la cual permite crear un nuevo grupo al que asignar cualquier nombre. Se puede arrastrar y soltar para mover o copiar imágenes o directorios completos atrás y adelante a través de los grupos. La pestaña System muestra el clásico sistema de archivos sin aplicar ningún criterio de clasificación. Puede navegarse por el sistema de archivos a través de la vista en árbol del mismo modo que con cualquier administrador de archivos y explorar sus ramas. Con Similarity dentro del área Browse se clasifican las imágenes por nombre de archivo o fecha. El cuadro de selección By: permite definir el criterio: Date o Filename. Al pulsar sobre Group se ordenan las imágenes en la base de datos y se muestra un ejemplo de cada grupo a la izquierda de la ventana imgSeek. Al pulsar en la imagen de ejemplo se nos mostrarán las miniaturas del resto de imágenes del grupo. El campo Threshold define un valor umbral. Cuanto mayor sea el número, más tolerante será imgSeek a las diferencias a la hora de agrupar imágenes: esto es, el grupo crecerá en tamaño. El cuadro de herramientas junto al botón Group! convierte los grupos en grupos lógicos

WWW.LINUX- MAGAZINE.ES

que aparecerán en la pestaña Groups, desde donde podremos administrarlos.

Busca y Captura La pestaña Search es el lugar en el que se encuentra la característica más excitante de imgSeek. La pestaña by Image content tiene dos secciones, Import y Draw. La primera nos permite cargar una imagen cualquiera. Tras esto, podemos pulsar sobre el botón Start Search para localizar cualquier imagen de la base de datos que tenga un motivo parecido, según el criterio de imgSeek. El programa, de hecho, muestra un porcentaje para indicar el grado de similitud calculado para la imagen (véase Figura 2). El algoritmo de búsqueda evalúa las formas y figuras para tomar una decisión. Esto significa que el programa puede descubrir similitudes entre imágenes que se le escapan al ojo humano. Por ejemplo, podría identificar fondos con colores similares que no son relevantes para la imagen en su conjunto. Pero independientemente de los numerosos falsos positivos que puedan aparecer, imgSeek suele encontrar la imagen que estábamos buscando, ahorrándonos una buena parte de trabajo, ya que es mucho más rápido descartar los resultados falsos que buscar manualmente en toda la base de datos. El programa de dibujo de imgSeek está ubicado en la pestaña de búsqueda Draw. Las únicas opciones que disponemos son las de grosor del pincel y el color. Es posi-

Figura 3: imgSeek localiza las imágenes que se parecen al boceto dibujado por el usuario.


imgSeek • PORTADA

ble dibujar un rápido esbozo y pulsar en Start search para indicar a imgSeek que comience la comparación en la base de datos y encuentre imágenes con motivos similares (véase Figura 3).

Imágenes Batch Al pulsar con el botón derecho en una miniatura en cualquier modo de vista aparece un menú. Este menú tiene una entrada llamada Add to batch que coloca la imagen seleccionada en una memoria caché. Esto permite aplicar las herramientas del menú Tools al mismo tiempo a varios archivos.

Figura 4: Situar imágenes en una memoria caché nos permite exportar imágenes, tratarlas o arrancar un pase de diapositivas.

La entrada de menú Tools | Work batch editor abre un cuadro desde donde puede editarse la memoria caché (véase la Figura 4). Si se pulsa con el botón derecho se puede desplegar el menú, y seleccionar Remove this item para borrar la entrada seleccionada. Se selecciona Clear current batch para borrar toda la pila de imágenes.

Figura 5: Podemos exportar imágenes a un álbum con formato HTML para poder verlo con un navegador Web.

El menú desplegable Batch name da acceso a varias cachés. La caché por defecto se llama Temporary work batch y puede pulsarse el botón Create a new batch para crear una nueva caché. Por ejemplo, podría crearse una caché para las imágenes que serán exportadas a un álbum HTML en una etapa posterior. Tras seleccionar la caché, se observa que el menú desplegable Action: tiene unas cuantas opciones. Extract image metadata from file lee los metadatos guardados con el archivo, como la fecha de creación, resolución o tamaño del archivo. Sin embargo, la función sólo transfiere esta información a la base de datos interna. En una próxima versión del programa, será capaz de exportar estos metadatos para usarlos con otros programas. Con Slideshow se ejecuta un pase de diapositivas de las imágenes de la caché. Para ello, el programa pasa a tamaño de pantalla completa y muestra las imágenes en un bucle infinito. Se pulsa [ESC] para salir del pase de diapositivas. Create HTML album usa la caché para crear una álbum de imágenes que puede visualizarse en un navegador Web (véase la Figura 5). Existen dos diseños, Acqua y Slides, que se diferencian únicamente en los esquemas de color. La Figura 6 muestra un ejemplo del diseño Acqua.

Versátil La entrada Edit metadata del menú desplegable le indica a imgSeek que muestre la metainformación guardada con la imagen y también proporciona una funcionalidad de edición. El menú Tools | Transform images sólo funciona si se tiene instalada la librería Python-Imaging. En este caso, soporta un tratamiento simple de las imágenes, incluyendo características como rotación, conversión a otros formatos, o escalado. Si prefiere usarse la línea de comandos para algunas tareas, imgSeek puede ser de gran ayuda. El comando imgSeekCmd

WWW.LINUX- MAGAZINE.ES

soporta la administración de la base de datos de imgSeek sin necesidad de una interfaz gráfica y es útil para hacer scripts. imgSeekCmd add añade imágenes nuevas o directorios a la base de datos. El comando imgSeekCmd browse -F muestra un lista de registros. Los parámetros -G y -V muestran los grupos o volúmenes, respectivamente. La lista de imágenes contiene la ID interna de cada imagen. Se puede usar el comando imgSeekCmd info -m -i ID para solicitar los metadatos de la imagen. La línea de comandos soporta e incluso mejora la búsqueda por contenido: el comando imgSeek-Cmd query -i ID muestra las IDs internas de las imágenes similares a la especificada con ID. El parámetro -r seguido por un valor numérico restringe el número de eventos en la búsqueda.

Conclusión imgSeek supera con facilidad a muchos otros visores de imágenes. A pesar de ser conceptualmente brillante, la búsqueda basada en el motivo no es del todo fiable debido a la complejidad de la tarea. Los resultados, sin embargo, se pueden utilizar. Desafortunadamente, los trabajos de desarrollo en esta función especial no progresan con suficiente rapidez. En los últimos 12 meses, las nuevas versiones han sido simples correcciones de fallos. Pero incluso si los desarrolladores no consiguen todo lo que se han propuesto hacer, al menos su trabajo de pioneros servirá de ■ ejemplo para otros programadores.

Figura 6: imgSeek tiene dos diseños HTML de momento, pero los diseñadores Web pueden modificar los esquemas.

Número 14

17


PORTADA • Xnview

PUNTOS DE VISTA Xnview es una herramienta útil para el visionado y la edición de imágenes que es gratuito para uso privado. Mostraremos algunas de las características más importantes de este programa. POR THOMAS LEICHTENSTERN

N

uestra colección de imágenes digitales sigue creciendo, pero aún no disponemos de la herramienta adecuada para la gestión y edición de dichas imágenes. Los programas especializados abundan, pero proporcionan más de lo que el usuario necesita y tantos detalles pueden llevar a la confusión. Si se está buscando una herramienta práctica para el manejo de imágenes, Xnview [1] puede ser la respuesta. Xnview lee unos 400 formatos de imágenes y escribe alrededor de 40, es bastante simple para uso personal. Los precios (en Euros) para uso comercial se muestran en la Tabla 1. Es tanto un explorador de imágenes como un visor con grandes opciones de edición. El paquete también viene con un convertidor por lotes, una característica de presentación de fotografías y un generador de thumbnails, que es útil si se desea hospedar imágenes en un sitio web. El programa lee y escribe meta información en formato IPCT y también lee datos EXIF, es decir, la información técnica de una imagen.

Explorador de Imágenes Cuando se ejecuta, Xnview viene con un explorador de imágenes (Figura 1), que está dividido en tres marcos: el árbol de directorios, los thumbnails, arriba a la

18

Número 14

derecha y la previsualización de la imagen abajo. Haciendo clic en el thumbnail se muestra la imagen correspondiente. El menú View | Layout permite cambiar la configuración del explorador o el tamaño del thumbnail. El fichero histórico es una ayuda útil de navegación; está accesible mediante el menú File. Para comprobar el directorio histórico, hay que hacer clic en el icono de la derecha de la barra de direcciones. Este icono también tiene la función de favoritos, que permite almacenar las direcciones a las que se necesita acceder con frecuencia.

Colecciones de Imágenes Xnview ofrece dos características para crear colecciones de imágenes. Haciendo clic en el botón HTML en la barra de herramientas se crea un sitio web con los thumbnails de las imágenes seleccionadas. Se puede usar el cuadro de diálogo para especificar parámetros tales como el tamaño del thumbnail, el número de columnas y líneas y el espacio entre ellas. Para facilitar la organización, Xnview crea dos subcarpetas, una con la imagen original y la otra con los thumbnails almacenados. Puede actualizarse la vista directamente en el servidor web. La segunda característica sigue un principio parecido a la creación de Contact

WWW.LINUX-MAGAZINE.ES

Sheet. En este caso, Xnview no crea un sitio web sino un nuevo contenedor de imágenes con los thumbnails de los originales seleccionados. Haciendo clic en el icono de la derecha de HTML aparecerá un cuadro de diálogo donde se puede especificar cómo desea que se muestren los ficheros y la información (tamaño del fichero o nombre) que proporcionará la hoja de contacto.

Entrando en Detalles Si las imágenes contienen meta-información en formato EXIF o IPTC, ésta se mostrará en un pequeño cuadro en la esquina inferior derecha del thumbnail. EXIF [2] indica los datos de los parámetros de la cámara usada para tomar la foto, por ejemplo, información sobre el diafragma, el tiempo de exposición o la resolución. IPTC [3] contiene datos como el género, el autor, el origen o las notas de copyright. Dichos datos se usan principalmente para la administración de los archivos. Programas como Imgseek pueden categorizar las imágenes basándose en esta información. Para leerla, hay que pulsar el thumbnail con el botón derecho del ratón, y se selecciona Properties… del menú desplegable. En la nueva ventana que aparece, hay que pulsar en la solapa con la información que se desee ver en la parte superior de la ima-


Xnview • PORTADA

gen. El elemento Edit IPC… del menú desplegable muestra la información IPTC en modo de edición.

Todo en uno Las imágenes recién obtenidas de una cámara tienen normalmente nombres tan poco intuitivos como IMG_0815.JPG. Xnview dispone de una herramienta de renombre por lotes (Figura 2) para asignar nombres más significativos. Hay que seleccionar todas las imágenes que se desean renombrar, luego se pulsa con el botón derecho del ratón y se selecciona Batch rename… del menú contextual. Se puede establecer un prefijo para todas las imágenes en la parte izquierda del cuadro de diálogo. Usemos Vacaciones# Start:0, Step:1 como ejemplo. Esto le indica al programa que renombre todos los ficheros basándose en el patrón Vacaciones0.jpg, Vacaciones1.jpg,… Si se desea estandarizar el caso, pueden establecerse los valores preferidos en Filename case.

Fotografiando la Pantalla Xnview dispone de una utilidad para capturar la pantalla. Pulsando en el símbolo de la cámara de la caja de herramientas se obtiene el cuadro de diálogo de captura. Además de las aplicaciones individuales, que se organizan en una lista, se puede capturar la pantalla completa, que se muestra en el visor. Desafortunadamente, la herramienta no proporciona la habilidad de ocultar el cuadro de diálogo de captura y esto hace que sea poco útil.

El Visor de Imágenes Haciendo doble clic en un thumbnail, se abre la imagen correspondiente en el visor de imágenes (Figura 3). La imagen es una nueva instancia; viene con funcionalidades extendidas y con botones que no aparecen en el navegador. Se

Tabla 1: Licencias Comerciales de Xnview Número de Licencias 1 licencia 2-9 licencias 10-19 licencias 20-49 licencias 50-99 licencias 100-499 licencias 500-999 licencias Más de 1000 licencias

Coste por Usuario 26.00 EUR 23.00 EUR 20.00 EUR 17.00 EUR 9.50 EUR 6.00 EUR 3.80 EUR 3.50 EUR

puede entrar directamente en el visualizador escribiendo Xnview nombre_de_fichero en la línea de comandos.

Sólo para tus ojos Los botones de las flechas de la caja de herramientas permiten al usuario navegar por las imágenes de un directorio. Se puede seleccionar el tamaño de la imagen a mostrar en View | Auto Image Size. El menú proporciona opciones para escalar la imagen al tamaño de la ventana y viceversa. La opción solamente afecta a la imagen actual. Para escalar cualquier imagen que se muestre en el visor, hay que seleccionar Tools | Options para obtener la ventana de configuración; luego se pulsa en View en la columna de la izquierda y se establece Auto Image Size: con el valor deseado. Si se tiene un ratón con rueda, la selección Mouse permite especificar si se desea utilizar la rueda para hacer scroll o para hacer zoom. Por defecto, los pasos del zoom son bastante bruscos y puede ser que se desee ajustar este parámetro. Para ello, se pulsa en View en el cuadro de diálogo Options y se habilita Change zoom in fixed steps. Entonces se introduce el valor (en porcentaje) en el cuadro para definir el paso del zoom. El elemento High zoom quality le indica a Xnview que recalcule la imagen a ampliar. Esto hace que se obtengan mayores niveles de detalles en factores altos de ampliación. Como punto negativo, es necesario disponer de un hardware razonablemente rápido para beneficiarse de esta característica: una máquina lenta puede tardar unos minutos en recalcular la imagen. Pulsando en Full Screen de la caja de herramientas o pulsando el atajo de teclado [CTRL+F], pasa el programa a pantalla completa. A continuación se pueden utilizar los botones derecho e izquierdo del ratón para navegar a la imagen siguiente o a la anterior. [Esc] cierra la vista a pantalla completa. Xnview ofrece la posibilidad de realizar una presentación para poder ver todas las imágenes en sucesión una tras otra. Para ejecutar la presentación hay que seleccionar View | Slide Show… y luego, en el diálogo que aparece, podremos seleccionar las imágenes o directorios que se desea queden incluidos.

WWW.LINUX-MAGAZINE.ES

Figura 1: El Navegador de Imágenes muestra una previsualización del thumbnail actualmente seleccionado.

La ayuda Display Color Information (Mostrar Información del Color) es una característica que los diseñadores web y los artistas gráficos agradecerán. El elemento Display Color Information en View habilita la característica que muestra los valores RGB y hexadecimales del color que se encuentran bajo la posición del cursor del ratón. Desafortunadamente, la ventana es visible a través de cualquier otra ventana que esté por delante de la que se está intentando ocultar y esto puede hacer que, después de un rato, el diseñador se ponga nervioso. No se sabría decir si esta persistencia es una característica o es un error.

Figura 2: El Batch renombra las características permitiendo a los usuarios asignar nombres de archivos significativos a varios archivos.

Retocando las Imágenes El programa es francamente bueno cuando se necesitan retocar imágenes digitales. Todas la herramientas que se necesitan para ello se encuentran ocultas en el menú Image y Filter. Como en otras herramientas de retoque fotográfico, los elementos de Filter definen operaciones para suavizar la imagen, mientras que Image contiene acciones que afectan al tamaño, el contraste o la profundidad de color.

Número 14

19


PORTADA • Xnview

Figura 3: Algunos iconos del Image Viewer no son intuitivos. La falta de documentación nos lleva a hacer pruebas de ensayo y error.

La opción Image | Resize hace exactamente lo que se espera de ella. Si se necesita convertir una imagen a un tamaño no estándar, se puede seleccionar un tamaño desde el desplegable Custom. Por otro lado, es posible introducir la altura y la anchura de la imagen en Screen Size en el cuadro de diálogo. Para evitar las distorsiones de la imagen, hay que habilitar la opción Keep ratio. El programa contiene una selección de ocho algoritmos diferentes para modificar el tamaño de la imagen, desde Nearest Neighbor hasta Lanczos. Ésta es una opción que no proporcionan programas como Gimp ni Photoshop. Para ajustar el brillo y el color, hay que seleccionar Adjust | Brightness/Contrast/ Color Balance en el menú Image (Figura 4). Se pueden utilizar los deslizadores para ajustar los valores. Si se tiene habilitada la opción Auto view al pie de la ventana, se pueden monitorizar los efectos producidos por los cambios. Para rotar u obtener la imagen especular de las imágenes con formato JPEG, hay que seleccionar JPEG Lossless Transformations. Los cambios se aplican a la imagen inmediatamente y son sin pérdidas, lo que implica que se pueden repetir las acciones múltiples veces sin que se vea afectada la calidad de la imagen. A excepción de los cambios globales como la conversión del color o el escalado, para el retoque de la imagen disponible pueden aplicarse cualquiera de las herramientas, más o menos, a una selección de la imagen. Para definir un cuadro con la selección de la imagen deseada será preciso pulsar el botón izquierdo del ratón y arrastrarlo. Los cuadrados en las esquinas de la imagen permiten escalar la selección actual. Pulsando en las tijeras de la caja de herramientas se recorta la selección.

20

Número 14

Figura 4: Ajuste del brillo y contraste en Xnview.

Xnview también dispone de una utilidad para la reducción de los ojos-rojos y retocar las fotografías realizadas con flash. Como la función reduce cualquier tono rojo de la imagen a un tono más oscuro, es necesario especificar de forma precisa el área donde se desea aplicar la herramienta. Se aconseja trabajar sobre cada ojo por separado y luego seleccionar Image | Edit red eye correction para realizar los cambios. Si los resultados no son de nuestro agrado, con tan sólo pulsar el botón Undo se restaurará el estado original.

Procesamiento por Lotes Si se necesita aplicar los mismos efectos a varias imágenes, puede ser de gran ayuda la característica de Xnview de procesamientos por lotes. Éste ayuda a aplicar todas las funciones de Xnview y sus filtros a múltiples imágenes. Para modificar el tamaño y el brillo a varias imágenes, hay que empezar seleccionando Tools | Multi convert… (Figura 5), y luego pulsar en Add… para añadir las imágenes que se quieren procesar. Si desea almacenar las imágenes en un nuevo directorio, hay que utilizar el

campo Directory para especificar el nombre del directorio. Si no se selecciona un directorio, Xnview escribirá los nuevos ficheros en el directorio original. En Directory se selecciona el formato de imagen deseado del menú desplegable. El botón Options… permite especificar opciones como el nivel de compresión. Ahora se abre el cuadro de diálogo de selección de filtros pulsando en Advanced Operations… En la lista de la izquierda, se selecciona resize y Brightness. Para realizar la selección de múltiples entradas al mismo tiempo hay que pulsar [Ctrl]. Cuando se haya finalizado, se pulsa sobre el botón con la flecha hacia la derecha para aplicar la selección. Para ajustar la operación, hay que pulsar en la operación de la ventana del lado derecho. Un cuadro de diálogo aparece en la parte de abajo de la ventana, mostrando las opciones de la operación actual. Finalmente, para empezar la conversión, hay que pulsar Go. Se puede pulsar en el icono Save Script… para salvar la configuración. Téngase en cuenta que el script almacenará las opciones seleccionadas pero no los formatos y los directorios.

Conclusiones Muchas de las características de Xnview y su soporte para los 400 formatos de imágenes disponibles lo convierten en una herramienta universal. Por otro lado, el programa carece de una documentación genuina, pero se puede navegar sin ningún problema por sus sencillos, pero poco intuitivos controles. Contiene algunos fallos menores, como la molesta ventana Display Information que se muestra por encima de cualquier otra, pero quizás, aún sea más irritante que la característica Undo tan sólo sea capaz de deshacer la última acción. El programa también carece de la posibilidad de “arrastrar y soltar” que permite a los usuarios mover imágenes desde un ■ directorio al programa.

RECURSOS [1] Página web de Xnview: http://www. Xnview.com [2] Especificación de EXIF: http://www. exif.org/specifications.html Figura 5: El convertidor por lotes de Xnview le permite procesar múltiples imágenes.

WWW.LINUX-MAGAZINE.ES

[3] Especificación de IPTC: http://www. iptc.org/IIM/


Xsane • PORTADA

La La interfaz interfaz de de usuario usuario para para el el escáner escáner XSane XSane de de Linux Linux

ESCANEANDO La interfaz Sane proporciona acceso a los dispositivos de procesamiento de imágenes como los escáneres. Se puede manejar un escáner con soporte Sane desde Linux con la interfaz de usuario XSane. POR KRISTIAN KISSLING

L

a mayoría de las veces un escáner se suministra con una colección de programas gratuitos que se pueden utilizar para manejarlo. Desafortunadamente, casi siempre este software sólo funciona en Windows o (quizás) en Windows y OS X. Si usted es un usuario de Linux y está buscando un GUI para comunicarse con su escáner, pruebe con XSane. XSane [1] es una interfaz de usuario gráfica basada en la interfaz de programación Sane [2]. Sane es el acrónimo de Scanner Access Now Easy (Ahora, Acceso Fácil al Escáner). La interfaz de programación Sane establece un estándar para acceder a los dispositivos de procesamiento de imágenes. Los controladores para los dispositivos de procesamiento de imágenes usados por XSane, incluido los escáneres, reciben el nombre, dentro de la jerga de Sane, de back-ends. Si Sane dispone de un back-end que

corresponde con el escáner, el proceso de instalación es bastante sencillo (véase el cuadro “Configuración del Escáner”). Las operaciones de Sane son controladas por los front-ends. XSane es un ejemplo de front-end. Otros front-ends para Sane incluyen herramientas como Kooka [3] y QuiteInsane [4]. Este artículo describe cómo manejar un escáner desde un ordenador Linux usando el front-end XSane.

primero a la ventana Preview (Figura 1). Coloque una fotografía en el escáner y pulse en Acquire preview. Tras concluir una breve fase de calentamiento, el escáner mostrará una previsualización de la imagen en baja resolución. El objetivo de esta previsualización es el de ayudar al usuario a definir una sección de la imagen original para escanear y ajustar los colores.

La Configuración

Opciones

Para ejecutar XSane, hay que pulsar [AltF2] para que aparezca una ventana de acceso rápido, y escribir xsane. El programa puede que le solicite el dispositivo gráfico que se desea utilizar antes de abrir varias ventanas. La ventana principal se identifica fácilmente por la etiqueta xsane; el nombre de escáner aparece a la derecha. El menú Window permite ocultar o mostrar varias ventanas. Hay que ir

Los cinco iconos lupa de la parte de arriba permiten inspeccionar el documento. La lupa con la cruz a la izquierda muestra la imagen completa; la segunda de la derecha permite aumentar la selección actual. Para seleccionar un área del documento a escanear, hay que mantener pulsado el botón izquierdo del ratón mientras se arrastra sobre la zona deseada. El área a escanear se indica con

WWW.LINUX- MAGAZINE.ES

Número 14

21


PORTADA •Xsane

Figura 1: Utilice la ventana de vista previa para comenzar a escanear. Puede ajustar los colores y seleccionar la parte de la imagen que quiera escanear.

la línea discontinua. Hay tres iconos flecha a la derecha de los iconos lupa; pulsando la flecha de la izquierda se le indica al programa XSane que seleccione el área de la imagen a escanear de forma automática. El icono de la derecha de la pantalla selecciona todo el área disponible. El icono de la calavera en el lado derecho borra la caché de la previsualización actual. Supongamos que se necesitan escanear una serie de imágenes fotográficas de 10 x 15 cm; en este caso, debería seleccionar 10 cm x 15 cm en vez de full size del combo de la izquierda. Esta opción permite escanear un área más pequeña y de este modo acelerar el proceso. Si la foto está al revés después de escanearla, el menú desplegable de la derecha puede servir de ayuda. La entrada 180 (refiriéndose a 180 grados) permite poner la foto derecha; la entrada 000 volteará verticalmente la imagen. El menú de la derecha asigna a la selección una relación de aspecto fija.

Corrección de Color La gestión del color se realiza en el modo de previsualización. Para aplicaciones normales, se puede optar por uno de los programas de selección de color automáticos de escaneo sin tener que aplicar correcciones manuales. Si el original está algo saturado de color o está demasiado pálido, oscuro o

22

Número 14

luminoso, habrá que ocultar un color. Para aplicar correcciones cambiar el brillo de la manuales. Para este imagen, hay que mover propósito se utilizan la los triángulos pequeños ventana Histogram, la hacia la izquierda o ventana principal y las hacia la derecha de la tres pipetas en la barra. Preview. Para modificar los Se pueden usar las valores individuales, pipetas para definir un hay que abrir la ventana espacio de color para la principal y pulsar en el imagen. Asignando las icono coloreado en la pipetas (de izquierda a fila de botones de la derecha) a los puntos izquierda. De este modo blanco, gris y negro en Figura 2: El histograma muestra la se abre un menú de la imagen distribución de color para la ima- características previsualizada. XSane gen escaneada. Las barras de avanzadas para el ajuste calcula los valores de desplazamiento le permiten modi- preciso del color (Figura brillo para la imagen ficar los valores. Los iconos de la 3); al mismo tiempo que basándose en esta parte inferior de la ventana habili- se muestran en la correspondencia. tan o deshabilitan un color. ventana Histogram los La ventana Histogram selectores del color. Se muestra la distribución del color de puede utilizar el selector junto al forma gráfica (Figura 2). Se puede pulsar símbolo gamma para la corrección en los iconos I, R, G y B para mostrar u gamma (ésta modifica los valores del

Configuración del Escáner Por lo general, un escaneo correcto depende de si Xsane dispone de un back-end para su escáner. Las posibilidades de que tenga un back-end aumentan cuanto más viejo y popular sea su modelo. La instalación de la Canon LiDE 30, que usamos para nuestras pruebas, resultaba más cómoda con el interfaz plustek, no importa qué distribución Linux tengamos. Vamos, que Debian necesitó que lo usáramos en modo de root. Para averiguar cómo soporta Sane su escáner, compruebe la descripción proporcionada por él en la página del proyecto [5]. La lista muestra que el soporte a nuestro escáner es completo. Otra lista en [6] le dice qué escáneres son soportados por el interfaz plustek además del modelo de Canon. Asegúrese de instalar el software en primer lugar, antes de añadir su escáner. Los paquetes se diferenciarán dependiendo de la distribución. Los usuarios de Suse 9.3 necesitan Sane, XSane, Sane-frontends; los usuarios de Suse 9.2 requieren Sane, Yast2-scanner y XSane.

WWW.LINUX- MAGAZINE.ES

Para Ubuntu, necesita ejecutar Apt-get para instalar Sane, Sane-utils, Xsane, Xsanecommon, Libsane y Libsane-extras. Debian requiere Xsane, Sane y Libsane. Los usuarios de Mandriva 10.2 pueden usar el centro de control para instalar Sane, Sane-frontends y XSane. Tras completar la instalación de XSane y todas las herramientas necesarias, puede proceder a añadir su escáner. En Mandriva, el centro de control le ayuda a chequear si su máquina ha sido detectada correctamente. Tras completar el chequeo, presione [Alt-F2] y lance XSane introduciendo el comando xsane. Los usuarios con Suse 9.2/9.3 pueden lanzar Yast2 para la instalación mediante la entrada en la pestaña Hardware. Para configurar el escáner, simplemente seleccione el modelo correcto de la lista. A continuación presione otra vez [Alt+F2] e introduzca el comando xsane para lanzar XSane. Lo que nos deja con Debian y Ubuntu. Los comandos sane-find-scanner y scanimage -L detectan el escáner y se deben ejecutar estos comandos como root. A continuación presione [Alt+F2] e introduzca xsane para lanzar el programa.


Xsane • PORTADA

color del espectro entre el negro y el blanco). El icono del sol es para ajustar el brillo, y el icono del círculo blanco y negro es para el contraste.

Pongámonos Serios Si se tiene seleccionada un área para escanear y también se han seleccionado los ajustes del color, ya se puede ir a la ventana principal para configurar el resto de los parámetros. En primer lugar, hay que pensar para qué se desea la imagen que se va a escanear, y basándose en esto, es necesario establecer una resolución adecuada usando el cuarto botón de la parte superior. El valor dpi (puntos por pulgada) es importante. Para una buena calidad de impresión, probablemente desee al menos 300 dpi, pero hay que tener cuidado, ya que una imagen de tamaño A4 a esta resolución ocupará entre 20 y 50 MBytes de espacio en disco. Si se piensa continuar procesando la imagen escaneada, hay que seleccionar primero el valor por defecto de Viewer en el menú XSane Mode. Luego se establece la calidad del escáner: dependiendo de si el

original es un texto, un fax o una fotografía en color, se selecciona Color, Grayscale o Lineart. Para originales positivos se requiere la opción Full color range, pero no es necesario cuando se van a escanear negativos de fotografías. En este caso, hay que seleccionar el vendedor de la lista. Pulsando en el segundo icono cuadrado de la parte de abajo a la izquierda se invierte el color de la imagen escaneada. Esto convierte negativos en positivos. Si se pulsa el icono de la derecha, XSane sugerirá una mejora del color. Si la sugerencia no le es de su agrado, se puede pulsar R para volver a la distribución original de colores de la imagen escaneada; para guardarla hay que pulsar M. Si lo hacemos en el icono de la doble flecha se le indica a XSane que aplique valores medios para el brillo y el color. Los números junto al botón Scan proporcionan la resolución de pantalla del área seleccionada para escanear, la cantidad de memoria que consumirá la imagen escaneada y la profundidad del color. El campo de abajo muestra el tamaño del área a escanear en centímetros. Suponiendo que estos valores son los que se necesitan, se puede comenzar el proceso pulsando en Scan. La imagen escaneada aparece en el Viewer (Figura 4). Aquí se puede retocar, si se desea, rotando, obteniendo la imagen especular o escalándola. Además se pueden eliminar manchas o aplicar una herramienta de desenfoque. Incluso se puede ejecutar un Reconocedor Óptico de Caracteres (OCR), pero se precisa tener un software de OCR externo para realizar esta tarea.

Inundando la Imagen

Figura 3: Haciendo click en el símbolo coloreado que parece un candelabro se muestra un número de controles para la puesta a punto gráfica. Estos controles también se muestran en el histograma.

La única cuestión pendiente hasta aquí es: ¿qué se hace con la imagen escaneada? Pues empecemos guardándola en el disco. Para ello, hay que seleccionar Save en XSane mode de la ventana principal. XSane usa el formato pnm por defecto, pero se puede utilizar el desplegable Type para seleccionar un formato de imagen diferente. Se puede elegir una tasa de compresión estándar a la hora de guardar la imagen en Configuration de la ventana Preferences de XSane. La solapa Image permite seleccionar qué calidad hay que utilizar en los formatos de imágenes JPEG, PNG y TIFF. Las otras solapas aquí son Copy, Fax o E-Mail; cada una de ellas dispone de una serie de

WWW.LINUX- MAGAZINE.ES

Figura 4: El Viewer muestra la imagen escaneada y da a los usuarios varias opciones para rotar, reflejar o escalar.

opciones para los programas de manipulación de imágenes externos. Es posible enviar por correo una imagen escaneada, ejecutar una herramienta de OCR, enviarla por fax o imprimirla. Por ejemplo, la solapa Copy proporciona la posibilidad de seleccionar la resolución y los bordes para imprimir las fotos. Se puede añadir la configuración de SMTP del programa de correo usando la opción E-Mail de XSane. Posteriormente cuando se seleccionen E-Mail, Copy o Fax como el XSane Mode de la ventana principal, XSane pasará las imágenes al programa de correo externo. ¡Permitiendo, incluso, enviar esas fotos comprometidas de la fiesta a todos sus amigos!

Conclusión XSane es un front-end sencillo para manipular los dispositivos de captura soportados por la interfaz Sane [5]. Encontrará bastante fácil la tarea de escanear documentos en Linux, si su escáner está lo suficientemente “Sano”. ■

RECURSOS [1] XSane: http://www.xsane.org/ [2] Proyecto Sane: http://www. sane-project.org/ [3] Kooka: http://www.kde.org/apps/ kooka/ [4] QuiteInsane: http://quiteinsane. sourceforge.net/ [5] Soporte Sane scanner: http://www. sane-project.org/ sane-supported-devices.html [6] El back-end de Sane para Canon LiDE 30 y chipsets relacionados: http:// www.sane-project.org/man/ sane-plustek.5.html

Número 14

23


PORTADA • Proceso de imágenes con EXIF

Renombrado de JPEGs y tratamientos sin pérdidas

LA MAGIA EXIF

Es posible renombrar y modificar archivos JPEG sin alterar los gráficos modificando las cabeceras del archivo. Veamos cómo. POR MARTIN STEIGERWALD

E

l formato Exchange Image File (EXIF) es un estándar desarrollado por el Japan Electronic Industry Development Association (JEIDA) que permite a las cámaras digitales guardar metainformación en la cabecera de un archivo de imagen. Los datos EXIF se incluyen con los formatos de archivo como JPEG y TIFF, así como con los formatos de audio como RIFF. En función de la marca y modelo de nuestra cámara, la meta-información guardada

en la cabecera de la imagen puede incluir aspectos como la fecha y hora de creación, tiempo de exposición, apertura, programa de exposición, tamaño, resolución y orientación de la imagen. Linux proporciona diversas herramientas para tratar los datos EXIF directamente. El tratamiento directo de los metadatos asociados con los archivos de imágenes ahorra tiempo, fomenta la automatización, y en algunos casos, evita la pérdida de información que

pudiera ocurrir en el tratamiento de la imagen. Este artículo describe algunas técnicas para usar los metadatos EXIF para renombrar y tratar imágenes JPEG.

Uso de Datos EXIF Muchos visualizadores gráficos y editores proporcionan el acceso a la información EXIF (véase Tabla 1). Incluso puede verse la configuración EXIF desde Konqueror. Para verla desde este explorador, se pulsa el botón derecho del ratón sobre una imagen en la ventana de Konqueror y se

Tabla 1: Niveles de Permisos de Ficheros Recomendados Aplicación Digikam 0.7.2, Tratamiento de fotos

Soporte EXIF Cargar, visualizar, pero no guardar

Eye of Gnome 2.8.2, Visor de imágenes Feh 1.3.4, Visor de imágenes Gimp 2.2.7, Tratamiento de imágenes Gqview 2.0.1, Visor de imágenes Gwenview 1.2.0, Visor de imágenes

Cargar, visualizar y guardar No Guardar Cargar y visualizar Cargar, visualizar y guardar. Rotación automática en el visor No No Cargar, visualizar, rotación automática en la visualización, pero no en guardar

Kpaint 0.6.2, Programa de dibujo Kolourpaint 1.4.1, Programa de dibujo Kuickshow 0.8.7, Visor de imágenes

24

Número 14

Rotación y simetría sin pérdidas En el menú desplegable de la imagen, también automáti camente en función de la información EXIF No Vía File | Edit en Place. La información EXIF se pierde No Vía Edit | Rotate Vía Edit y Plugins / Images, basada automáticamente en la información EXIF No No No

WWW.LINUX-MAGAZINE.ES


Proceso de imágenes con EXIF • PORTADA

Figura 1: Konqueror muestra la información EXIF de las fotos.

Figura 2: Krename permite renombrar fotos en función de la fecha de su toma. La ayuda del programa explica las complicadas plantillas.

selecciona Properties. La información EXIF se ubica bajo Meta Info (véase Figura 1). Puede añadirse un comentario a la imagen, que será guardada con la información EXIF en la cabecera del archivo. La orientación de la imagen se recoge en Orientation como un valor numérico (véase la Tabla 2). Los visualizadores basados en KDE Gwenview y Kuickshow también soportan este cuadro de diálogo estándar. Si preferimos Nautilus, de nuevo se selecciona Properties en el menú. Nautilus muestra los valores EXIF en Image, aunque la orientación de la imagen no está incluida. Puede añadirse un comentario, pero Nautilus lo guarda en ~/.nautilus/metafiles/ en lugar de guardarlo en la imagen. Linux también proporciona utilidades en línea de comandos para tratar los datos EXIF. Dos de estas herramientas,exiftags[1] y metacam[2] ofrecen un amplio abanico de opciones en línea de comandos. Algunas distros no incluyen estas utilidades, aunque está disponible un paquete RPM para exiftags. Como se verá a lo largo de este artículo, otras utilidades para EXIF, como Jhead, Krename y Jpegtran son también útiles para cierto tipo de tareas.

Se situan los archivos en la ventana del intuitivos a sus imágenes. Al editar los programa y se teclea datos EXIF, es posible añadir $-[jpgCreationDate]-[jpgCreationTime], información de fecha y hora al nombre por ejemplo. También pueden usarse de archivo. El programa Jhead [3] ayuda otras informaciones EXIF y JPEG, como a hacerlo: jhead los comentarios y la calidad del JPEG. Al -n%Y-%m-%d_%H-%M-%S *.jpg pulsar sobre Functions en la pestaña renombra las imágenes JPEG del Filename muestra los campos. Krename directorio actual. El formato es flexible y utiliza por defecto el formato de fecha y fácil de modificar, pero hay que hora definido en el KDE Control Center. asegurarse de no incluir un espacio en Una plantilla como blanco tras la opción -n. $-[7-{[jpgCreationDate]}]-[4-5{[jpgCreati La opción -nf permite dar a la imagen onDate]}]-[1-2{[jpgCreationDate]}]-[jpg un nombre que no esté compuesto CreationTime] fija el formato a fundamentalmente por números. Las YYYY-MM-DD para optimizar las cámaras digitales usan generalmente un búsquedas (véase Figura 2). formato compuesto por cifras. Esta es la manera que tiene Jhead de evitar que el usuario use -n para renombrar archivos que ya había renombrado a mano. La opción -ft fija la fecha del archivo con la fecha en la que se tomó la foto. La herramienta Krename de KDE [4] proporciona también la posibilidad de renombrar archivos en Figura 3: Jpegtran permite recortar imágenes sin pérdidas. Si la selecfunción de la ción a recortar no se ajusta completamente a un bloque JPEG, Jpeginformación EXIF. tran escala la selección hasta alcanzar el número de píxeles necesario.

Renombrado Automático de Archivos Las cámaras digitales son reconocidas por proporcionar nombres para nada

WWW.LINUX-MAGAZINE.ES

Número 14

25


PORTADA • Proceso de imágenes con EXIF

Tabla 2: Orientación de la Imagen 1ª fila en la imagen

1ª columna en la imagen

1

superior

izquierda

2

superior

derecha

3

inferior

derecha

4

inferior

izquierda

5

izquierda

superior

6

derecha

superior

7

derecha

inferior

8

izquierda

inferior

Sin Pérdidas Otro ejemplo de solución sencilla a través de tratamiento de datos EXIF es el problema de la orientación de las imágenes. Si se tiene una cámara con sensor de orientación, generalmente se deseará ver las fotos en la posición adecuada. Mientras que el visor Kuickshow analiza la orientación para mostrar las imágenes automáticamente en la posición correcta, Gwenview carga primero y muestra la imagen antes de rotarla. Kview, Eye of Gnome (EOG), Gqview, Feh, Display (ImageMagick) y Showfoto (Digikam) no rotan automáticamente las imágenes. Esto significa que habrá que rotarlas a mano, o usar una herramienta para hacerlo. Desafortunadamente este paso introduce una potencial fuente de perdida de información. El formato JPEG es un formato con pérdidas, y puede ayudar a ahorrar espacio, pero se puede perder información cada vez que se carga, manipula y guarda una imagen JPEG. En función del nivel de calidad, esta pérdida derivará tarde o temprano en zonas degradadas. A un nivel superior, algunos programas soportan tratamiento de imágenes JPEG sin pérdidas. Estas herramientas usan la estructura interna del formato JPEG para hacerlo. Un paso en el proceso JPEG es dividir la imagen en bloques de 8 por 8, 16 por 8 ó 16 por 16 píxeles. Esto significa que los programas sólo pueden efectuar tratamiento sin pérdidas en imágenes de tamaño múltiplo de 8 por 8, 16 por 8 ó 16 por 16 (esto es, 1600x1200 ó 3072x2048). Ciertos tratamientos de la imagen son siempre sin pérdidas: por ejemplo

26

Número 14

Ejemplo

rotación, imagen simétrica, recortar o convertir a monocromo (está última desecha la información del color). Si la cámara posee sensor, la información EXIF puede ayudar a rotar las imágenes automáticamente. Por ejemplo, jhead -auto-rot *.jpg rota todas las imágenes JPEG del directorio en función de su información EXIF. Para ello, el valor de la orientación se fija automáticamente a 1 (orientación normal) tras la rotación. Afortunadamente, Jhead sólo hace esto para fotos que realmente necesitan rotar, al contrario que Exiftran. Se puede usar Exiftran para rotar imágenes manualmente. exiftran -i -9 image.jpg rota la imagen 90 grados. Con -1 rotamos 180 grados, y con -2 la giramos 270 grados. La opción -f realiza simetría horizontal a la imagen, y -F vertical. El programa Jpegtran puede proporcionar tratamiento sin pérdidas en imágenes con tamaño que no es múltiplo de los bloques JPEG, pero lo hace ignorando los bordes, lo cual deja una franja negra en el filo de la imagen. Si se fija la opción -trim al ejecutar Jpegtran, el programa elimina el borde, pero este paso no es “sin pérdidas”. Si se indica la opción -perfect, Jpegtran muestra un mensaje de error si se intenta transformar una imagen que no es divisible entre el tamaño de bloque JPEG. Por ejemplo, jpegtran -perfect -rotate 90 image.jpg > image_new.jpg || djpeg image .jpg | pnmflip -r90 | cjpeg > image_new.jpg consigue una imagen sin pérdidas si el tamaño es adecuado, pero en caso contrario, es mejor usar Djpeg y Cjpeg, los cuales son “con pérdidas”.

WWW.LINUX-MAGAZINE.ES

La rotación manual sin pérdidas y la imagen simétrica también está soportada por los visores Gwenview, Gqview (en ambos casos siempre que se tenga instalado Jpegtran) y Feh. Por ejemplo, pueden rotarse imágenes mientras se ve un pase de diapositivas. Digikam usa el plugin Kipi para conseguir una mayor funcionalidad. Si el plugin Kipi para tratamiento sin pérdidas de imágenes JPEG está instalado y habilitado, el menú desplegable de una imagen tendrá las opciones Automatic Rotation and Mirroring based on EXIF Information, Rotate, Mirror y Convert to Monochrome.

Recortar Jpegtran también permite recortar una imagen sin pérdidas. Por ejemplo, el comando jpegtran -copy all -crop 904x904+1192+200 image.jpg > image_new.jpg permite centrar la imagen mostrada en la Figura 3. Esta foto usa un tamaño de bloque de 16 y, como las coordenadas de comienzo 1192,200 no son divisibles entre 16, Jpegtran mueve las coordenadas de comienzo hacia arriba a la izquierda los ocho píxeles requeridos. Si se modifica una imagen JPEG usando una herramienta de tratamiento y se guarda en formato JPEG, se debería intentar usar un programa que conserve la información EXIF. The GIMP tiene una opción Save EXIF Data en el cuadro de opciones JPEG. La opción está habilitada por defecto. Por contra, tanto Kolourpaint como Kpaint desechan la información ■ EXIF al guardar.

RECURSOS [1] Exiftags: http://johnst.org/sw/exiftags/ [2] Metacam: http://www.cheeseplant. org/~daniel/pages/metacam.html [3] Jhead: http://www.sentex.net/ ~mwandel/jhead/ [4] Krename: http://www.krename.net/

EL AUTOR

Valor EXIF

Interfaz Gráfica

Martin Steigerwald trabaja como administrador de sistemas en team(ix) GmbH en Nuremberg, Alemania. Ya instaló Linux en su Amiga 4000 hace años y usa Linux, preferentemente Debian Linux, en su portátil IBM Thinkpad.


Nero • EVALUACIÓN

Examinamos NeroLinux Version 2.0.0.2

DESEOS ARDIENTES ¿Supera Nero en capacidad a los programas nativos de grabación de CDs de código abierto de Linux? ¿O se le quedan las tostadas por hacer? POR HAGEN HÖPFNER

N

ero es un programa comercial para la grabación de CDs y DVDs muy popular en el mundo Windows. Hoy día muchas grabadoras vienen con una versión OEM de Nero, lo que la ha ayudado a convertirse en la aplicación estándar para grabación de CDs y DVDs en Windows. A principios de 2005 se presentó una versión de Nero para Linux, NeroLinux. Esta primera versión no estaba a la altura de la correspondiente para Windows. Pero recientemente hemos probado NeroLinux 2.0.0.2 para ver si se han acortado distancias entre ambas versiones.

Compra de Combustible Ya podemos comprar NeroLINUX (véase Figura 1) sin necesidad de tener Windows. Por 19.99 dólares USA se puede conseguir un número de serie que convierte la versión demo descargable desde [1] en la versión completa. Esta demo descargable ofrece al usuario de Linux tiempo suficiente para probar las capacidades de tostado de NeroLINUX antes de tomar una decisión. Nero no es excesivamente exigente en el apartado de requisitos del sistema. El programa funciona en sistemas RPM o basados en Debian Linux con kernel 2.4.x o superior. La versión 1.2 de la librería GTK es necesaria, pero está normalmente incluida en todas las principales distribuciones de Linux. En cuanto a hardware, necesitaremos al menos una CPU a 500 MHz y 64MB de RAM. El requerimiento depende del tipo de medio que vayamos a grabar. El fabricante especifica 9GB para grabación de DVD. Los 50MB de disco duro que ocupa propiamente el software es algo casi insignificante. Oficialmente, Nero soporta las versiones 32bit de las siguientes distribuciones Linux:

WWW.LINUX- MAGAZINE.ES

Número 14

27


EVALUACIÓN • Nero

• Suse Linux Versión 8.0 o superior • Red Hat Linux Versión 7.2 o superior • Fedora Core 1 hasta 4 • Debian GNU/Linux Versión 3.0 o superior con kernel versión 2.4.x o 2.6.x (Debian Woody instala un kernel 2.2.x por defecto). Aunque no está en la lista oficial, Nero también se ejecutará en Mandriva Linux 10.1. Los usuarios de distribuciones basadas en Debian encontrarán un paquete en formato Debian en la página de descargas. Y hay un paquete RPM para usuarios de Suse Linux, Fedora y otras distros basadas en RPM. Antes de arrancar nuestro software de instalación para instalar Nero, se debería validar el archivo descargado usando la suma MD5. Para validarlo, en Suse Linux, por ejemplo, se calcula el hash MD5 para el paquete tecleando el comando md5sum nerolinux-2.0.0.2-x86.rpm y se comparan los resultados con el checksum mostrado en la página de descargas de Nero. Si las dos cadenas coinciden, será seguro instalar el paquete. La rutina de instalación añade una entrada para Nero en el menú de KDE.

Fuego Demoníaco La primera vez que se ejecuta Nero, empieza buscando un dispositivo de grabación. Por algún extraño motivo, el programa se quejó de que no podía acceder a algunos dispositivos SCSI cuando lo ejecutamos en nuestro portátil

de prueba con Suse Linux 9.3, que no tiene nada SCSI (véase Figura 2). Sin embargo, este hecho no tiene mayor efecto en el funcionamiento del programa y si se marca el cuadro que se nos muestra, no volverá a aparecer dicho mensaje en lo sucesivo. Si el programa indica que hay otras aplicaciones que impiden el proceso de grabación, no debemos ignorar el mensaje. Como muestra la Figura 3, Nero está disconforme con susewatcher y suseplugger de Suse. El primero proporciona mensajes de actualizaciones de seguridad, por lo que no parece buena idea deshabilitarlo. suseplugger monitoriza hardware que se conecta en caliente y proporciona acciones específicas ante eventos específicos, como ejecutar Konqueror cuando insertamos un pendrive USB en el ordenador. En nuestros tests, el auto-montado de la unidad de CD-ROM no funcionó correctamente cuando tratamos de ejecutar Nero con suseplugger habilitado.

Rellenar el Depósito Los últimos cambios en Nero han incluido soporte para grabación por capas de DVDR-DL (Doble Capa). Esta característica permite al usuario la posibilidad de llenar DVD-R de doble capa en varias sesiones. El programa escribe en ambas capas del disco alternativamente. Según el fabricante, esto convierte a Nero en el único programa capaz de soportar los todavía poco comunes DVDs de doble capa.

Además, la nueva versión ofrece al usuario la posibilidad de crear discos DVD video y MiniDVD, si los correspondientes directorios VIDEO_TS y AUDIO_TS están disponibles. La versión de Linux no tiene la opción de crear discos de video a partir de archivos de video, a diferencia de la versión de Windows. Sin embargo, podemos imponer opciones específicas ISO, como el tipo de sectores CD, Modo 1 o Modo 2/XA, al igual que Joliet (para nombres de archivo largos en Windows) y RockRidge (para nombres de archivo largos en Linux). Pulsamos en la pestaña ISO Options en el cuadro de configuración para habilitarlas. Otra característica nueva en esta última versión de Nero es la capacidad de mapear señales de audio a eventos del dispositivo de grabación. Ésta sólo es útil para aquellos que, o bien usan OSS, o el antiguo demonio de sonido ESD. Si es el KDE Arts quien tiene el control de nuestro hardware de audio, Nero es incapaz de usar el dispositivo y simplemente se queda callado. Para conmutar entre OSS y ESD y para deshabilitar las señales acústicas, seleccionamos File | Preferences en la pestaña System Configuration. La pestaña Sounds en el mismo cuadro de diálogo nos permite seleccionar los sonidos a reproducir. La última versión de Nero incluye algunas características nuevas, pero el fabricante también ha aprovechado para hacer una buena caza de fallos. Hay un registro de cambios detallado en [2].

Resistente al Fuego No es ningún secreto que Nero para Linux es mucho menos avanzado que la versión Nero para Windows. Pero en comparación con las aplicaciones para Linux como K3b [3], Nero aún deja bastante que desear. El programa no tiene un asistente de proyectos, y aunque el “arrastrar y soltar” funciona en Nero desde y hacia Konqueror,

Figura 1: Recabamos los archivos para la grabación en la ventana principal de Nero.

28

Número 14

WWW.LINUX- MAGAZINE.ES

Figura 2: Nero se queja de no tener acceso a los sistemas SCSI, aunque el portátil usado en el test no tenía ninguno.


Nero • EVALUACIÓN

Utilidades Extra Una de las funciones más interesantes de Nero es la capacidad de convertir formatos de audio. Para poder hacer uso de esta característica cuando se tenga instalado Suse

configuración (Figura 4) tiene una opción para añadir más herramientas y de esta manera ayudar al programa a tratar otros formatos. Cuando se intentó convertir de MP3 a WAV, Nero creó un cierto número de archivos que contenían sólo ruido de nuestro sistema. Un ajuste incorrecto del orden de byte interno tuvo la culpa. Desafortunadamente, Nero se bloqueó esporádicamente cuando tratamos de forzar un ordenamiento little-Endian en el cuadro de codificación de archivos WAV. Tras varios intentos, fuimos capaces al final de convertir un archivo, y el resultado fue bueno, pero la función es tan inestable que su uso para producción se puede descartar.

Editor de Pistas

Figura 3: Nero no funciona con algunas de las características de las distribuciones de Linux más recientes.

9.3 tendremos que añadir los cuatro packs multimedia opcionales (disponibles a través de una actualización online). También se necesitarán estos packs opcionales si se desean reproducir archivos de audio haciendo doble clic en el icono o arrastrándolo hasta la esquina inferior derecha de la ventana de Nero. Como alternativa, se pueden instalar manualmente las herramientas necesarias: mpg123 y/o ogg123. Nero necesita algunas otras herramientas para convertir formatos. Por ejemplo lame para crear archivos MP3, sox para formatos WAV y oggenc para convertir archivos de audio a OggVorbis. La pestaña File Types en el cuadro de

Con Nero se puede usar el editor de pistas para quemar CDs de audio. La manera más rápida de acceder al editor de pistas es presionar [F4]. Se pueden entonces arrastrar los archivos de audio necesarios hasta la lista y soltarlos en ella. En nuestra prueba, Nero sólo soportaba archivos MP3. De hecho, se quejaba de que los archivos WAV que creamos eran demasiado largos. Fue incapaz de determinar la longitud de los archivos OggVorbis debido a que no tenía acceso al programa Oggtst. Desafortunadamente, la herramienta para desarrolladores de OggVorbis ha remplazado Oggtst con Ogginfo. Para configurar el programa para que use la alternativa Ogginfo, es preciso reemplazar la entrada oggtst "$file" con ogginfo "$file" en la línea .ogg del campo Detect Size del cuadro mostrado en la Figura 4. Entoces se reemplaza la siguiente línea del campo Add File Type: strval(regexp("^length=([0-9]U *)"))*44100*4

con strval(regexp("Total data U length: ([0-9]*)"))*12.9

para indicarle que cree CDs de audio a partir de archivos OggVorbis.

Conclusiones El arreglo de fallos en la versión 2.0.0.2 y el hecho de que Nero continúa proporcionando soporte para Linux son dos pasos dados en la dirección correcta. Sin embargo, la versión Linux del programa se encuentra todavía en un estado temprano de desarrollo y aún le queda un largo camino por recorrer para llegar a ser realmente competitiva. Si hacemos caso al fabricante, el punto fuerte de Nero es la capacidad de grabar discos DVD-R-DL. la desventaja es que los controles tienen bastantes carencias en cuanto a su usabilidad, y nadie esperaría encontrar tantos fallos en un producto comercial. Suponiendo que podamos vivir sin necesidad de grabar DVD-R-DL, puede que queramos usar esos 19.99 dólares en ■ otra cosa.

EL AUTOR

tenemos que asegurarnos bien el destino adecuado. El árbol del sistema de archivos en la parte inferior izquierda de la Figura 1 simplemente ignora cualquier intento de soltar archivos y directorios, forzando al usuario a utilizar la lista de archivos a su derecha.

Hagen Höpfner terminó su doctorado en Ciencias de la Computación y es ahora profesor de Sistemas de Información y Bases de Datos en la Universidad Internacional de Bruchsal, Alemania (http:// www.i-u.de). Además de ser un adorable padre, Hagen es co-autor de un libro de texto acerca de bases de datos para móviles y Sistemas de Información. En su tiempo libre, toca la guitarra con una banda de rock llamada “Gute Frage” (http://www.gutefrage.info).

RECURSOS [1] NeroLINUX: http://ww2.nero.com/ enu/NeroLINUX.html [2] Lista de cambios NeroLINUX 2.0.0.2: http://club.cdfreaks.com/showthread. php?t=142046 Figura 4: Este desordenado cuadro permite al usuario asociar el conversor de audio de Nero con otros formatos.

WWW.LINUX- MAGAZINE.ES

[3] Página de K3b: http://www.k3b.org/

Número 14

29


PRÁCTICO • OpenOffice.org Base

Crear Crear una una aplicación aplicación de de base base de de datos datos con con OOo OOo Base Base

LLEGAR A BASE Si necesitamos una solución rápida y sencilla, podemos crear nuestra propia aplicación de base de datos con OpenOffice.org 2.0. POR DMITRI POPOV

O

penOffice.org 2.0 incluye un nuevo módulo de bases de datos, basado en HyperSonic SQL, un motor de bases de datos relacionales escrito en Java. Podemos usar OOo Base para construir desde una simple colección de recetas a una valiosa solución de management. Base es una herramienta poderosa, pero para aquellos que no estén familiarizados con sus características, el simple desarrollo de una base de datos puede resultar insufrible. Este artículo nos guiará a través de los pasos para configurar una simple aplicación de base de datos empresarial con Base.

Planeando la Base de Datos Un Sistema de Gestión de Bases de Datos Relacionales (SGBDR) usualmente se compone de cuatro elementos: *tablas *consultas *formularios *reportes La información de la base de datos se guarda en tablas. Las consultas se usan para extraer, ver y tratar los datos. Pueden recabar los datos de muchas tablas y hacerlos disponibles en forma de formularios y reportes. Los formularios nos permiten ver y editar la información

30

Número 14

de una tabla. Viene a ser algo como la base de datos que lleva la cuenta de los interfaz gráfica de usuario de una base de trabajos, horas trabajadas y clientes para datos. Los reportes se usan para generar un contratista de trabajadores freelance. resultados con un determinado formato La Figura 1 muestra el modelo de nuestra desde las tablas, generalmente para aplicación de ejemplo. Como se puede imprimirlas. apreciar, la estructura consiste en cuatro Como veremos en este artículo, puede pequeñas tablas. Cada tabla consiste a su dividirse la tarea de crear una aplicación vez en series de registros que representan de base de datos en las subtareas de la compañía, el contacto, trabajo o las configurar tablas, consultas y formularios. horas trabajadas, entre otras. Los registros Los reportes son también importantes están enlazados a través de una serie de para algunas aplicaciones, sin embargo no relaciones predefinidas. Las relaciones profundizaremos en ellos en este artículo. permiten a una tabla referenciar la Antes de ejecutar Base, es una buena información de otra tabla. En la Figura 1, idea crear un modelo de base de datos que por ejemplo, cada trabajo está asociado a ayude a visualizar la estructura de la una compañía a la cual se le presta el aplicación. Se pueden bien dibujar el servicio. Esta estructura admite modelo a mano, o bien usar un programa situaciones en las cuales un contratista como OpenOffice.org Draw. Draw incluye tiene varios contratos (trabajos) para una algunas herramientas de diagramas que son útiles para crear esta clase de modelos de bases de datos. La aplicación de ejemplo para el artículo es una sencilla Figura 1: El modelo de base de datos incluye tablas, campos y relaciones.

WWW.LINUX-MAGAZINE.ES


OpenOffice.org Base • PRÁCTICO

misma compañía, o bien Para fijar el campo que tenga varios JobID como clave contactos dentro de la primaria, se pulsa con el compañía. botón derecho en el A través de una serie de puntero de registros (el relaciones mostradas en triángulo verde) y se la Figura 1, una compañía selecciona Primary Key puede asociarse con del menú que aparece varios trabajos y varios (véase Figura 3). La contactos, y cada trabajo clave primaria tiene que puede tener registros Figura 2: La ventana principal de cumplir dos requisitos: temporales. Todas las Base es el punto de partida para no debe estar vacía y relaciones de la Figura 1 definir nuestra base de datos. debe tener un valor son de tipo uno-a-varios. unívoco. Con OOo Base Una relación uno-a-varios se señala con es sencillo asignar esta propiedad a la un 1 (uno) al lado del registro que es uno, clave primaria. Se selecciona Yes de la lista y con una n (varios) en el otro extremo. AutoValue en el panel Field Properties. Así Cada tabla debe tener una clave se asegura que cada vez que se cree un primaria (mostrada en amarillo en la nuevo registro, el sistema insertará un Figura 1). La clave primaria identifica valor unívoco (en nuestro caso, un unívocamente al registro. Una tabla puede número) en el campo JobID. Se añaden los demás campos restantes contener también claves ajenas. En la a la tabla JOBS, y se fijan sus tipos. Antes Figura 1 las claves ajenas se muestran en de guardar la tabla, es necesario cursiva. Nótese que la clave ajena está en asegurarse de que el formato de la fecha el lado “varios” de una relación uno-adel campo Deadline está configurado varios. adecuadamente. Se selecciona el campo Crear Tablas Deadline, y en el panel Field Properties, se Una vez que se ha esbozado el diseño, pulsa en el botón junto al campo Format puede empezarse a desarrollar la base de example. Se seleccionan el formato datos en sí. Se arranca OpenOffice.org 2.0 requerido y el idioma y se pulsa OK. A Base y se pulsa sobre File | New | continuación se guarda la tabla (File | Database. El asistente de bases de datos se Save, o Ctrl+S) y cuando se nos pregunte, usa para crear y guardar un archivo de se proporciona el nombre JOBS para la base de datos. Al pulsar en el botón Finish tabla. del asistente, OOo Base abre la ventana Ahora que se sabe cómo crear tablas y principal. Ésta es la zona de trabajo donde campos, se pueden añadir las tablas se va a crear la base de datos (Figura 2). HOURS, COMPANIES y CONTACTS. Es Lo primero que hay que hacer es crear preciso acordarse de que hay que fijar el las tablas y rellenarlas con los campos. Se formato adecuado para los campos Date, elige Tables en el panel Database, y se TimeUsed y Price de la tabla HOURS. Con pulsa en la opción Create Table de la vista las herramientas de diseño de relaciones diseño. Esta opción creará una tabla incluidas en Base, crear estas relaciones es nueva y vacía, que podrá usarse para tan sencillo como dibujar líneas entre las guardar la información de los trabajos. Se claves primarias y las claves ajenas. Para crea un campo JobID tecleando su nombre definir las relaciones entre las cuatro en la columna Field Name, y se fija su tipo tablas, se pulsa en Tools | Relationships y a Integer [INTEGER]. usando el cuadro Add Table se añaden las OOo Base ofrece un amplio abanico de tablas. tipos de campo. Los tipos numéricos Para establecer una relación entre las incluyen INTEGER (para enteros) y FLOAT tablas COMPANIES y CONTACTS, se (para números en punto flotante). selecciona el campo VARCHAR guarda COMPANIES.CompanyID, cadenas de longitud se pulsa y se mantiene variable. La longitud pulsado el botón puede especificarse en el izquierdo del ratón, se panel Field Properties. arrastra la relación hasta DATE guarda fechas y el campo Figura 3: Cada tabla requiere TIME la hora. CONTACTS.CompanyID y una clave primaria.

WWW.LINUX-MAGAZINE.ES

se suelta el botón. El siguiente paso es definir las propiedades de la relación. Póngase por caso que se dispone de una compañía en la base de datos que ya no es cliente. Si se decide borrarla de la base de datos, el sistema tiene que saber qué hacer con los registros de contacto huérfanos. Lo normal es que se desee eliminarlos también. Se hace doble clic en la relación entre COMPANIES y CONTACTS y en la columna Delete Options, se selecciona la opción Delete cascade y se pulsa OK. Se usará la misma técnica para definir las relaciones entre las tablas COMPANIES y JOBS. Es necesario asegurarse de que la opción de eliminación de la relación está fijada a No action. De otra manera, al borrar un trabajo se borraría la compañía relacionada. Por último, se define una relación entre las tablas JOBS y HOURS, en la que la opción de eliminación está fijada a Delete cascade. Esto asegura que si se borra un trabajo, no existirán fechas huérfanas poblando la base de datos. Una vez que estén definidas las relaciones, se guardan y se cierra el cuadro de diseño de relaciones.

Crear Consultas Ahora que se tienen las tablas ya pueden ser completadas con información. Para ver y tratar la información es necesario crear crear consultas. OOo Base permite crear consultas utilizando bien el asistente de consultas o bien la vista de diseño. Los usuarios familiarizados con SQL pueden usar también el editor SQL interno. En la mayoría de las ocasiones, no obstante, será mejor usar la vista Design View, que permite elaborar consultas usando una interfaz gráfica de usuario. Pongamos por caso que se desea crear una consulta que permita extraer información relevante acerca de un trabajo, como el número de trabajo, cliente, descripción del trabajo, estado, tipo y fecha límite. Se pulsa en Create Query dentro del enlace Design View de la sección Tables. Esto abre la ventana de diseño de consultas y el cuadro para añadir tablas. Se añaden las tablas JOBS y COMPANIES a la consulta usando el botón Add y se cierra pulsando sobre Close. Todo lo que hay que hacer es añadir campos a la consulta. Pueden añadirse campos bien eligiendo los campos de la lista desplegable en las celdas Field, o bien arrastrando los campos desde las tablas hasta las celdas Field.

Número 14

31


PRÁCTICO • OpenOffice.org Base

Este nuevo formulario permite añadir, ver y editar información en la tabla JOBS, Figura 4: Definimos las relaciones con OOo Base. pero puede Por defecto, la consulta usará los incluirse también información de otras nombres de los campos como etiquetas, tablas. Por ejemplo, se podría querer ver y pero pueden cambiarse para hacer la registrar el tiempo empleado en el trabajo consulta más legible. Por ejemplo, se que se está realizando. Puede hacerse puede mostrar el campo JobID con el esto con un subformulario. Como su nombre Job no con sólo teclear esto nombre indica, un subformulario no es último en la celda Alias. Para guardar la otra cosa sino un formulario insertado consulta, se pulsa sobre File Save y se le dentro de otro formulario principal. da un nombre a la consulta. La nueva En la ventana Form Navigator, se pulsa consulta aparece en la sección Query, y sobre Job y se selecciona New | Form. Se puede ser ejecutada haciendo doble clic le da al formulario un nombre descriptivo sobre ella (por ejemplo, Hours), se hace doble clic sobre él y se selecciona Properties. Bajo Fabricar Formularios la pestaña Data, se selecciona Table de la Para completar la aplicación, se lista de tipos de contenido, y HOURS de necesita construir una interfaz basada la lista de contenido. Pueden añadirse en formularios. Si se quiere crear un ahora controles al subformulario. Como formulario que pueda ser usado para existen varios registros en la tabla HOURS mostrar, editar y añadir registros de que está enlazada a un trabajo particular, trabajos. Se cambia a la sección Forms puede que se desee verlo como una tabla con pulsar el botón Forms, y luego se en el formulario Job. Con este propósito, pulsa en Create Form dentro de la vista OOo Base proporciona el Table Control. diseño. Al hacer esto se abre una Hay que asegurarse de que el ventana vacía. Se Pulsa sobre el botón subformulario Hours está seleccionado Form Navigator en la barra de en el Form Navigator, se pulsa en el herramientas Form Design. En el Form botón Table Control y se dibuja una Navigator, se pulsa con el botón tabla. Cuando aparece el asistente Table derecho del ratón en el directorio Forms Element, se seleccionan los campos y se selecciona New | Form. Se le da al deseados y se pulsa Finish. formulario un nombre suficientemente Cuando se haya terminado de crear el descriptivo (por ejemplo, Job), se pulsa formulario, se guarda y se cierra el Form con el botón derecho y se selecciona Designer. Se hace doble clic en el Properties. Bajo la pestaña Data, se formulario para abrirlo y usarlo. Para selecciona Table de la lista Content Type explorar, añadir y editar registros, se usa y JOBS de la lista Content. la barra de herramientas Form Para añadir el campo de texto Navigation (View | Toolbars | Form Description (que contiene la descripción Navigation). Tabién puede usarse del trabajo), se pulsa en el botón con un también para ordenar y filtrar los cuadro de texto en la barra de registros. herramientas Form Controls, y se dibuja Importar Información un cuadro de texto en el formulario. A continuación se hace doble clic en el Con el uso de los formularios, pueden cuadro de texto. Bajo la pestaña Data, crearse fácilmente nuevos trabajos y se selecciona Description from the Data clientes, y añadir contactos. ¿Y si ya se field list. De la misma manera, pueden tiene la información en una hoja de añadirse otros campos como Status, cálculo? En muchas ocasiones, Type y Deadline. Mediante la ventana simplemente se desea importar la Properties, se pueden añadir pequeños información existente en la base de textos de ayuda para los controles. Para datos. Por ejemplo, supongamos que se ello, se pulsa en la pestaña General, y se tiene un archivo de Calc que contiene teclea el texto de ayuda en el campo una lista de contactos y se quiere Help Text. importar a la tabla CONTACTS.

32

Número 14

WWW.LINUX-MAGAZINE.ES

Ya que una fuente de datos con un formato adecuado puede simplificar enormemente el proceso de importación, merece la pena perder algo de tiempo en preparar esta tarea. Lo primero que se hace es modificar la estructura de la hoja de cálculo para que sea idéntica a la estructura de la tabla CONTACTS. Es preciso asegurarse que la primera fila contiene los mismos nombres de campo que los de la tabla de la base de datos. Idealmente, deberían estar también en el mismo orden. Hay que asegurase de que todos los bloques de datos están colocados en las columnas adecuadas. A continuación se seleccionan los datos de la hoja de cálculo y se copian al portapapeles (Edit | Copy o Ctrl+C). Se abre la base de datos, se pulsa en el botón Tables, y se selecciona la tabla CONTACTS. Se pulsa con el botón derecho sobre ella y se selecciona “Paste”. En el cuadro Copy, se teclea exactamente el nombre de la tabla objetivo en el campo Table name, y se selecciona la opción Attach data. En el cuadro de asignación de columnas, se verifica que todos los campos de la ventana de tabla origen están seleccionados y alineados con los campos respectivos de la ventana de tabla destino. Para alinear los campos, se usan las flechas azules. Por último, se pulsa en Create para importar los datos.

Figura 5: Base proporciona una interfaz gráfica para crear consultas.

Conclusión Este artículo debería servir para iniciarnos en el nuevo módulo de base de datos OpenOffice.org Base. Una vez que nos acostumbremos a su uso, podremos aplicar fácilmente estás técnicas para nuestras propias aplicaciones de bases de datos. ■


Taskjuggler • PRÁCTICO

Gestión de Proyectos con Taskjuggler

EL ARTE DEL MALABARISMO Taskjuggler es una herramienta práctica para la gestión de proyectos, ya sean pequeños o enormes. Vamos a mostrar cómo organizar un trabajo simple de remodelado con Taskjuggler. POR UWE IRMER

S

i no tiene muy buena memoria, puede ser que fácilmente le pierda la pista a las tareas complejas. Un paso importante es tener por escrito una lista de las cosas que hay que hacer, pero una herramienta software adecuada, puede ayudar a planear el proyecto. Este artículo guía al lector a través de un simple trabajo de remodelado para demostrar el uso de la herramienta de gestión de proyectos Taskjuggler [1]. Imagínese que por fin se decide a remodelar su cuarto de baño, un proyecto que probablemente lleve posponiendo desde hace años. Como gestor del proyecto, tendrá que saber qué tareas tienen que llevarse acabo, en qué momento realizarlas, qué clase de ayuda necesitará y lo más importante de todo, cuando se podrá dar un baño en su nueva bañera. Nuestro soft-

ware de gestión de proyectos es Taskjuggler [1] de Chris Schläger y Klaas Freitag. Taskjuggler es una herramienta de código abierto distribuida con licencia GNU GPL.

El Plan Los diagramas de Gantt (nombre recibido de su inventor, el ingeniero norteamericano Henry Laurence Gantt (1861--1919) llegaron a ser el estándar de facto en la gestión de proyectos hace bastantes años. El diagrama visualiza las tareas, con los puntos de comienzo y finalización bien definidos como barras de tiempo y, adicionalmente, indicando las dependencias entre las tareas. Un diagrama de Gantt resalta el denominado camino crítico, es decir, las tareas que deciden si el proyecto se completará dentro del período de tiempo establecido o no.

WWW.LINUX- MAGAZINE.ES

El diagrama de Gantt proporciona a los gestores de proyectos un resumen gráfico, permitiéndoles seguirle la pista al progreso del proyecto, su estado actual y las posibles desviaciones con respecto a la agenda del mismo. El resumen muestra claramente las dependencias entre las tareas individuales. Esto hace que sea fácil paralelizar las tareas individuales, es decir, permitir que se realicen al mismo tiempo (condiciones startstart). De una manera similar, también es

Tareas Básicas Tareas para la reforma del cuarto de baño: 1. Preparar los accesorios a reemplazar. 2. Quitar los accesorios antiguos. 3. Instalar los accesorios nuevos. 4. Poner en funcionamiento los acceso rios nuevos y finalizar el proyecto.

Número 14

33


PRÁCTICO • Taskjuggler

posible planear un proceso de modo que coincida con la finalización de otro proceso del que depende (condición endend). La paralelización posee la ventaja de reducir el tiempo total requerido para el proyecto, suponiendo que múltiples procesos puedan darse al mismo tiempo. Además, también ayuda a distribuir los recursos. Los recursos requeridos para la remodelación del cuarto de baño incluyen la mano de obra, además de las herramientas y posiblemente el espacio. Si tiene éxito asignando los recursos a las tareas individuales en la fase de planificación, le resultará bastante sencillo ver qué clase de ayuda va a necesitar y en qué fase del proyecto. El diagrama de Gantt hace referencia a una serie de puntos intermedios importantes que se van completando a lo largo del proyecto. A estos puntos los denomina hitos. Los hitos marcan los puntos del tiempo donde han de concluir las tareas específicas. Para comenzar, hay que hacer una lista de las tareas que deben llevarse a cabo en el proyecto de remodelación del cuarto de baño. El cuadro titulado “Tareas Básicas” proporciona una primera versión de la lista de tareas. Una vez que se tiene esta primera lista, se puede tomar cada una de las tareas y especificarlas con mayor detalle, subdividiendo cada una de ellas en subtareas diferentes, como se muestra en el cuadro “Tareas Detalladas”. En este punto, conscientemente, se evita pensar en el orden en el que las tareas básicas deben ser realizadas. En vez de ello, hay que concentrarse en definir el mayor número posible de tareas. Esto se puede llevar al nivel de detalle que se

Figura 1: El editor de Taskjuggler se usa para introducir los datos del proyecto.

desee, aunque generalmente, se debería adecuar al nivel de detalle que hemos escogido aquí. En la última fase de la preparación del proyecto, habrá que decidir quién va a realizar las tareas individuales. En nuestro ejemplo, vamos a realizar el trabajo de limpieza nosotros mismos. Los materiales serán proporcionados por los proveedores de materiales de construcción y se dispone de dos profesionales que nos van a ayudar: un fontanero cualificado para los trabajos de desinstalación de la antigua bañera y la instalación de la nueva y un electricista cualificado para la instalación eléctrica. Y por último, disponemos de nuestra propia familia para ayudarnos a deshacernos de los escombros. Vamos a utilizar Taskjuggler para asignar los recursos humanos a las tareas individuales y crear el programa de trabajo.

La herramienta La herramienta de gestión de proyectos Taskjuggler es realmente una colección de bibliotecas y una herramienta de línea de comandos con una interfaz de usuario gráfica para KDE. Taskjuggler planifica de forma autónoma las tareas individuales y resuelve las situaciones conflictivas, por

Tareas Detalladas Preparar los accesorios a reemplazar 1. Comprobar las tuberías del agua 2. Comprobar el calentador 3. Realizar las reparaciones 4. Quitar los accesorios a reemplazar Quitar los accesorios antiguos 1. Cortar el agua 2. Quitar los muebles 3. Quitar la bañera 4. Quitar la ducha 5. Quitar los azulejos 6. Quitar las lozas del suelo

34

Número 14

Instalación El código fuente de Taskjuggler está disponible para descargarse desde el sitio web [1]. Para compilar el programa, se necesitan las bibliotecas de KDE (kdelibs-dev, kdelibs-devel, o algo similar). El paquete está comprimido con bzip2, por ello se necesita la opción -j de tar para poder descomprimirlo: tar xfj taskjuggler-2.1.tar.bz2 En el directorio taskjuggler-2.1, hay que ejecutar ./configure. A continuación con make y su -c 'make install' se compila e instala el programa.

WWW.LINUX- MAGAZINE.ES

ejemplo, si existe una dependencia entre la finalización de una tarea y el comienzo de otra. Taskjuggler proporciona suficiente margen para definir las horas de trabajo, las horas de ocio e incluso los descansos en el diagrama de Gantt. Los recursos se pueden asignar a grupos para facilitar la gestión, pero esto es algo que no necesitamos para el proyecto de reparación del cuarto de baño. Taskjuggler permite asignar los costes a los recursos individuales y definir los costes iniciales y finales para el proyecto. Esto significa que puede presupuestar la reforma del cuarto de baño y gestionar los gastos de modo que pueda tener previsto un retraso. El programa proporciona valiosos informes organizados por categorías como tareas individuales, progresos o costes. El diagrama de Gantt visualiza planos progresivos y muestra como han sido asignados los recursos a las tareas. Taskjuggler facilita un resumen de los recursos humanos, incluyendo datos de disponibilidad, carga y costes. El calendario de recursos muestra qué recursos están disponibles, el momento en el que lo están y cuáles precisan ampliarse. Taskjuggler es una herramienta muy potente capaz de manejar proyectos profesionales y proporciona un conjunto completo de características temporales, recursos y gestión de costes. La entrada de datos y la gestión son ambas intuitivas y la herramienta dispone de diversos tipos de informes que visualizan el estado actual del proyecto basándose en los parámetros de tiempo, coste y recursos utilizados.

Planificando El siguiente paso consiste en introducir las tareas individuales en Taskjuggler. El programa tiene su propio editor para introducir las tareas (Figura 1). Cuando defina un proyecto nuevo, primero debe usar el editor para definir los datos del programa como el ProjectID (una descripción del proyecto que incluye información del marco temporal de trabajo), la fecha actual, el formato de la hora y la moneda. Las entradas para nuestro proyecto de reforma del cuarto de baño son las siguientes: project bare "Reforma Baño" "1.0" 2005-07-01 2005-08-30 { now 2005-07-11


Taskjuggler • PRÁCTICO

timeformat "%Y-%m-%d" currency "EUR" scenario plan "Plan" { scenario delayed "Retraso" } }

Listado 1: Subtareas del Editor Taskjuggler 01 task Bare "Reforma Baño" { 02 task repfit "Reemplazar accesorios" 03 task chkwat "Comprobar tuberías de agua" 04 task chkhtg "Comprobar calentador" 05 task rep "Reparar" 06 task cln "Limpiar" 07 } 08 task oldfit "Quitar accesorios antiguos" 09 task newfit "Instalar accesorios nuevos" 10 task fini "Terminado" 11 }

Costes Una de las principales ventajas de Taskjuggler es la habilidad de manejar costes y realizar cálculos sobre los costes. Esto permite controlar el presupuesto durante el proyecto de la reforma del cuarto de baño y proporciona la posibilidad de recalcular el proyecto cuando sea necesario. El siguiente paso es definir los factores de coste introduciendo rate 120.0. Esta entrada define el salario diario del trabajador más caro. Taskjuggler dispone de una solución elegante para asignar los factores de coste basado en macros que pueden ser asignados posteriormente. Esta solución ahorra tiempo a la hora de introducir los datos. La macro para nuestro proyecto tiene el siguiente aspecto: macro allocate_workers [ allocate wo1 allocate wo2 { load 0.5 } allocate wo3 ]

Una única macro cubre las manos de obra desde wo1 a wo3. La entrada load 0.5 muestra que el salario diario para la etiqueta wo2 es tan sólo la mitad de las

otras (factor 0.5). Posteriormente se puede ejecutar esta macro en el contexto de una subtarea entrando ${allocate_workers}. En el siguiente paso vamos a definir los recursos del proyecto: flags team resource wo "Mano de obra" { resource wo1 "fontanero" resource wo2 "yo" resource wo3 "electricista" flags team }

Esto agrupa las manos de obra para crear un equipo, mientras que al mismo tiempo asigna a la gente a las etiquetas wo1 a wo3. Si se necesitan añadir más detalles para los miembros de las manos de obra, simplemente pueden añadirse estos datos a la línea de la persona implicada. Por ejemplo, nuestro electricista está de vacaciones desde el 1/8/05 al 10/ 8/05.

Listado 2: Subdividiendo las tareas 01 task repfit "Reemplazar accesorios" { 02 task chkwat "Comprobar tuberías de agua" { 03 effort 1d 04 allocate wo2 05 } 06 task chkhtg "Comprobar calentador" { 07 effort 1d 08 allocate wo2 09 } 10 task rep "Reparar" { 11 effort 2d 12 allocate wo1, wo3 13 } 14 task cln "Limpiar" { 15 effort 1d 16 allocate wo2 17 } 18 }

resource wo3 U "electricista" { vacation U 2005-08-01 - 2005-08-10 }

Supongamos que el fontanero tiene que pensarse de nuevo la oferta que hizo y pide un sueldo diario algo mayor; se puede introducir el sueldo diario individualmente como sigue:

WWW.LINUX- MAGAZINE.ES

Figura 2: Un diagrama de Gantt muestra la progresión cronológica de las tareas y las subtareas.

resource wo1 "fontanero" { rate 100.0 }

Después de terminar con esta preparación, finalmente, se pueden introducir y planificar las tareas individuales: task Bare "Reforma Baño" { task repfit U "Reemplazar accesorios" task oldfit U "Quitar accesorios antiguos" task newfit U "Instalar accesorios nuevos" task fini "Terminado" }

En el lenguaje del editor de Taskjuggler, la palabra reservada task identifica una tarea. Cada tarea comprende un identificador, por ejemplo Bare y una descripción como “Reforma Baño”. Las subtareas de una tarea se ponen entre llaves. Basándonos en nuestra especificación original para el proyecto de la reforma, la cuarta subtarea para la tarea principal “Reforma Baño” corresponde a las siguientes: "Reemplazar accesorios", "Quitar accesorios antiguos", "Instalar accesorios nuevos" and "Terminado" zu.

Ahora se pueden refinar las subtareas. En el Listado 1 se detallan las subtareas para la subtarea “Reemplazar accesorios”. Hay que repetir esto mismo para cada subtarea. Para completar la agenda del proyecto, aún necesitamos unos cuantos detalles más, como el tiempo necesario para cada tarea y el trabajador que la llevará a cabo.

Número 14

35


PRÁCTICO • Taskjuggler

Fecha Tope Empecemos con el primero de estos elementos. “¿Cuánto tiempo dura cada tarea?”. El editor de Taskjuggler tiene una palabra reservada especial para esto, por ejemplo, effort especifica el número de hombres-días, seguido de las asignaciones de la mano de obra (recurso) para la tarea. La palabra reservada length define la duración de la tarea en días de trabajo y duration realiza lo mismo pero para los días del calendario. Supongamos que se les ha pedido al fontanero y al electricista que envíen sus ofertas de trabajo y que estimen el tiempo previsto de duración de cada parte de la reforma. Los detalles para la tarea “Reemplazar accesorios” podrían parecerse al ejemplo del Listado 2. ¿Se acuerda de los identificadores de la mano de obra? wo1 es el fontanero, wo2 es usted y wo3 es el electricista. La tarea “Comprobar tuberías del agua”, que se la ha asignado a usted mismo, le llevará un día. Y lo mismo es aplicable a la tarea “Comprobar calentador”. También se le han asignado dos días al fontanero y al electricista para que realicen sus trabajos. Cuando estén hechos, deberán volver para terminar con las tareas de ajuste y limpieza del cuarto de baño; de nuevo, esto le llevará un día. La palabra reservada depends especifica el orden cronológico y define las dependencias entre las tareas. Como queremos que Taskjuggler calcule la duración, vamos a utilizar especificaciones de tiempos relativos: “La Tarea 2 podrá empezar cuando la Tarea 1 haya finalizado”. Echémosle un vistazo a la tarea “Reemplazar accesorios” para una mejor comprensión del principio subyacente. El orden cronológico es el siguiente: La tarea “Comprobar tuberías del agua” es el punto de partida del proyecto. Ésta va seguida de “Comprobar calentador”. Las reparaciones pueden empezar cuando las dos tareas precedentes “Comprobar tuberías del agua” y “Comprobar calentador” hayan sido terminadas. Y la limpieza no puede comenzar hasta que las reparaciones hayan sido completadas. En el editor de Taskjuggler esto se parecerá al Listado 3. Bare.start es el punto de partida para el proyecto de la reforma del cuarto de baño. Su parámetro .start fue creado automáticamente por Taskjuggler. Las entradas restantes describen puntos temporales relativos, que Taskjuggler evaluará automáti-

36

Número 14

camente. Por ejemplo, !chkwat es el punto final de la tarea “Comprobar tuberías del agua”. Un signo de exclamación indica un punto temporal relativo dentro de una tarea (la tarea “Reemplazar accesorios” en este caso). Dos signos de exclamación definen un punto temporal relativo dentro del proyecto total, es decir, de la tarea principal. Basándonos en esto, se pueden introducir las dependencias cronológicas para todas las subtareas y para las tareas principales. Cuando haya finalizado, hay que presionar F9 para terminar con las entradas. Taskjuggler comprueba los datos para ver si son sintácticamente correctos antes de continuar con los cálculos del proyecto. Luego podrán verse las interdependencias de las tareas en el diagrama de Gantt, que muestra el instante en el que empiezan y acaban las tareas. Un ejemplo del diagrama de Gantt se muestra en la Figura 2.

De Hombres y Ratones Incluso la mejor planificación puede salir mal y una herramienta de gestión de proyectos que no permita realizar cambios para reflejar la situación actual sería inútil. Un ejemplo de cambio podría ser una escasez de recursos imprevista, por

Listado 3:Especificando el orden cronológico 01 task repfit "Reemplazar accesorios" { 02 task chkwat "Comprobar tuberías de agua" { 03 effort 1d 04 allocate wo2 05 depends Bare.start 06 } 07 task chkhtg "Comprobar calentador" { 08 effort 1d 09 allocate wo2 10 depends !chkwat 11 } 12 task rep "Reparar" { 13 effort 2d 14 allocate wo1, wo3 15 depends !chkwat, !chkhtg 16 } 17 task cln "Limpiar" { 18 effort 1d 19 allocate wo2 20 depends !rep 21 } 22 }

WWW.LINUX- MAGAZINE.ES

Figura 3: Taskjuggler calcula el coste de un proyecto basándose en los datos de entrada, como las horas asignadas a cada trabajador.

ejemplo, si un trabajador se pone enfermo. Una tarea debería finalizar lo más rápidamente posible desde que se tenga prevista. Por ejemplo, cuando compruebe las tuberías del agua y el calentador, podría encontrarse que todo está correcto. Se puede usar el editor de Taskjuggler para modificar la agenda y reflejar el estado actual. Hay que extender el parámetro de tiempo para compensar la falta del trabajador por culpa de la enfermedad. Si resulta que la reparación es innecesaria, simplemente se puede borrar la tarea. Hay que añadir cualquier cambio de los parámetros de los recursos, del tiempo y del coste usando el editor, y decirle a Taskjuggler que recalcule el proyecto completo. Como se han utilizado conscientemente tiempos relativos, Taskjuggler no tendrá problemas para recalcular la agenda del proyecto. Pero si borra una tarea de la que otras dependen, habrá que eliminar estas dependencias manualmente para conseguir que funcione.

Conclusiones El editor intuitivo de Taskjuggler proporciona a los usuarios la posibilidad de describir un proyecto y todas sus tareas componentes. Taskjuggler ayuda a visualizar las entradas en forma de diagrama de Gantt y facilita una colección de informes de costes muy útil y de los recursos planificados. Este ejemplo simple de reformar un cuarto de baño demuestra los elementos más críticos de la planificación de un proyecto y muestra cómo Taskjuggler está bien equipado para ■ manejar proyectos a gran escala.

Tareas Básicas [1] Taskjuggler: http://www.taskjuggler.org


Wlassistant • PRÁCTICO

Wlassistant nos ayuda a conectarnos a redes WLAN

EL MAYORDOMO INALÁMBRICO Los usuarios de ordenadores portátiles que se mueven entre redes inalámbricas necesitan una herramienta simple y práctica para conectarse. Una herramienta de KDE llamada Wlassistant ayudará a encontrar la señal. POR MARCEL HILZINGER

redes inalámbricas y nos proporciona una lista. Podemos pulsar para seleccionar nuestra red preferida. El asistente se encarga de establecer la conexión, y ya tenemos vía libre.

Instalación y Configuración

L

a tarea de configurar el acceso a una red inalámbrica no es algo trivial, incluso para los usuarios de las grandes distribuciones. Aún en el caso de que intentemos conectarnos a nuestra propia WLAN pueden sobrevenirnos problemas. ¿Qué ocurre si nuestra configuración de red cambia o tenemos que acceder a otra red inalámbrica con una configuración diferente? En un mundo lleno de hotspots en aeropuertos y cibercafés, los usuarios de redes inalámbricas necesitan un método sencillo para conectarse a redes nuevas. En casos como este, la herramienta KDE Wlassistant puede ser de gran ayuda. Wlassistant busca la señal de

Wlassistant es un programa relativamente nuevo que no se encuentra disponible en la mayoría de las grandes distribuciones. Pero no hay de qué preocuparse. Si nuestra distro no incluye Wlassistant, podemos navegar hasta [1] para bajarnos la última versión desde Internet. La primera vez que se ejecuta el programa, presionando [Alt+F2] y tecleando wlassistant, se abrirá una ventana para indicar que un usuario normal no está autorizado para ejecutar los programas necesarios (véase Figura 1). Puede pulsarse sobre Yes para indicarle a Wlassistant que pida la contraseña de root y configure automáticamente los permisos de acceso. El programa entonces fija el bit setuid para las herramientas dhcpcd, ifconfig, iwconfig y

WWW.LINUX- MAGAZINE.ES

iwlist. El bit setuid permite a un usuario normal la ejecución de programas con privilegios de root. Si se quiere evitar tener que otorgar estos permisos, puede ejecutarse el programa como root tecleando kdesu wlassistant. Los usuarios de Suse Linux verán un mensaje de error señalando que Wlassistant no ha encontrado los programas adecuados (véase la Figura 2). Para resolver este problema, se selecciona Configure | Paths y se introducen las siguientes rutas para iwconfig e iwlist: */usr/ sbin/ iwconfig */usr/ sbin/ iwlist Si se dispone de Fedora Core 3 o Mandriva 10.2, también será necesario modificar las rutas para los archivos del

Figura 1: La primera vez que se ejecuta, Wlassistant puede asignar permisos para los programas necesarios.

Figura 2: Puede que sea necesario algo de configuración extra. En Suse Linux, Wlassistant falla a la hora de encontrar los comandos necesarios para configurar la conexión.

Número 14

37


PRÁCTICO • Wlassistant

Administración de Claves La administración de claves es uno de los puntos fuertes de Wlassistant. Muchos puntos de acceso públicos usan claves WEP para proteger su red de accesos no autorizados. Si se selecciona una conexión Figura 3: Wlassistant muestra las redes que ha locaencriptada, aparece un cuadro lizado y su intensidad de señal. El candado indica una pidiendo que se introduzca la conexión encriptada. clave WEP de la conexión. Tras introducirla se pulsa el botón programa. Se selecciona Configure | OK. Si lo habitual es moverse por distinPaths si hay que ejecutar el programa tas redes encriptadas, puede que quecomo usuario root. En este caso, se camramos guardar las claves de las redes que bia Dhcpcd a /sbin/dhclient. Sin embarvisitamos. Para guardar una clave, se go, el método que sugiere Wlassistant es pulsa en Configure | WEP Keys. mucho más fácil, por lo que puede que Es preciso asignar un nombre a cada simplemente se prefiera dejar que el clave. El nombre de cada red WLAN (su asistente inalámbrico se ocupe de conESSID) es una buena opción para asigfigurar los permisos de acceso. narlo. Wlassistant usa automáticamente la clave con el mismo nombre para Buscar y Conectar acceder a la red. Los nombres y las Tras terminar con la configuración claves deben estas separados por un necesaria, se puede pulsar sobre doble dos puntos (véase la Figura 4). Las Rescan para indicarle a Wlassistant que claves usan normalmente un formato muestre las redes WLAN que ha descuhexadecimal (por ejemplo, bierto (véase la Figura 3). Si el prograHOTSPOT::3BFA1658F26F65BB101502224 ma ha encontrado varias redes, debería 9 para una clave de 128 bits). Si se ha de elegirse la red con mayor nivel de introducir una clave en formato ASCII, señal. Wlassistant usa estrellas amarise teclea s: antes de la clave. Por ejempllas para indicar la calidad de señal. lo: HOME::s:secret1234567. Cuantas más estrellas tenga un red, Wlassistant verifica la sintaxis de más calidad tendrá su señal. nuestras claves. Dicha verificación hace La encriptación es otro criterio de imposible, teóricamente, introducir una selección de punto de acceso. La heclave con formato incorrecto. Se usa rramienta de KDE muestra un candado Default WEP mode para especificar el en la columna WEP para las conemodo de autenticación, que en principio xiones encriptadas. Será necesaria la está en modo Open. Si se selecciona clave adecuada para acceder a estas Restricted, la interfaz WLAN sólo acepredes. tará conexiones encriptadas y autentiLa columna Mode indica si la red es cadas. Como este método es fácil de Managed o Ad-Hoc. Las redes del tipo hackear, no tiene demasiado sentido Managed soportan accesos simultáneos cambiar la opción Open por defecto. por múltiples máquinas, mientras que la conexión ad-hoc se realiza sólo entre dos máquinas. Para conectarse a un punto de acceso o a otra máquina, se pulsa obre ella. De esta manera Wlassistant inicia la conexión. El programa muestra un mensaje en la parte inferior de la ventana para informar del estado de la conexión. Si la conexión funciona, el mensaje será Connection with "nombre_red" successfully established, sienFigura 4: Este asistente para redes inalámdo “nombre_red” el nombre ESSID de bricas tiene buenas características de la red seleccionada. administración de claves.

38

Número 14

WWW.LINUX- MAGAZINE.ES

En nuestros tests, tuvimos algunos problemas con la encriptación WEP, y Wlassistant no lograba establecer la conexión. Pero, después de introducir la siguiente orden como root: iwconfig eth0 enc key

para configurar la encriptación, el asistente wireless no tuvo el menor problema en establecer la conexión. Un pequeño rodeo a través de la línea de comandos también nos ayudó a configurar las claves hexadecimales. Si se ha de ejecutar este comando, se reemplaza eth0 con la entrada que muestra Wlassistant en la columna Device de la ventana principal, y se teclea la clave WEP correcta en lugar de key, por ejemplo s:secret1234567 para una clave ASCII.

Redes Problemáticas Wlassistant ejecuta un cliente DHCP cuando establece una conexión. El cliente DHCP intenta obtener una dirección IP del otro extremo de la conexión. Si simplemente se está configurando una conexión a un ordenador de un amigo con WLAN, no puede esperarse que él tenga un servidor DHCP. En este caso, será preciso configurar el modo ad-hoc. Wlassistant no muestra este tipo de conexiones por defecto. Para indicarle que muestre todas las redes adhoc, es necesario seleccionar Configure | General y desmarcar Do not list Ad-Hoc networks. Una vez se haya hecho esto, pueden configurarse la dirección IP, máscara de red y dirección de difusión en Configure | Interface. Wlassistant presenta también problemas con tarjetas WLAN que necesitan las herramientas Linux Wlan [2]. Esto incluye la mayoría de los sticks USB. Debido a que estas intefaces no pueden controlarse con comandos iwconfig, la herramienta de KDE es incapaz de advertirla. Hay que destacar, sin embargo, que el soporte para este tipo de interfaces está en la lista to-do del autor del programa. ■

RECURSOS [1] Página del proyecto: http:// wlassistant.sourceforge.net [2] Wlan Tools: http://www.linux-wlan.org


PRÁCTICO • LMMS

Crear música con Linux Multimedia Studio

EL COMPOSITOR

Linux ha empezado a competir de verdad con Windows y MacOS como plataforma para programas de sonido profesional. Linux Multimedia Studio (LMMS) es una herramienta de sonido que engloba una gran variedad de impresionantes características en un estupendo paquete. POR TOBIAS DOERFFEL

H

ace relativamente poco tiempo, multimedia y Linux eran mundos completamente separados, pero gracias a Dios, la situación ha cambiado por completo. Linux ya no flaquea tras Windows y MacOS ni incluso en el mundo de la producción musical: Audacity proporciona edición de sonido a Linux, Rosegarden trata los archivos Midi e Hydrogen nos permite conjuntar los sonidos y los ritmos. Por último, pero no menos importante, Csound proporciona software personalizado de síntesis y efectos. Como se habrá dado cuenta, existe una herramienta diferente para cada tarea, cuando la mayoría de los usuarios preferirían un sistema integrado en lugar de componentes individuales para potenciar el trabajo creativo. Esto ha llevado al lanzamiento de Linux Multimedia Studio (LMMS) en la primavera del año pasado. LMMS combina toda la funcionalidad de los programas que acabamos de mencionar con una única interfaz parecida a la de Fruity Loops en Windows.

40

Número 14

Instalación y Configuración de LMMS Los paquetes binarios para las principales distros se encuentran en la página Web de LMMS [1]. Los usuarios de otras distros tendrán que compilar el código fuente para instalarlo. Puede comenzarse con la descarga del código fuente desde [1]. Debido a que LMMS es un programa en tiempo real que necesita bastante potencia de procesador, deberían habilitarse todas las opciones de optimización. El cuadro “Principales

Figura 1: Dentro de LMMS, podemos situar los beats juntos con unos pocos clics. El programa incluye una colección de muestras que podemos usar con nuestras propias canciones.

WWW.LINUX-MAGAZINE.ES

Opciones de Optimización” lista las opciones más importantes de compilación para la plataforma Intel. Pueden usarse las opciones de configure para deshabilitar algunas características de LMMS y conseguir que funcione incluso más rápido. Por ejemplo, no tiene mucho sentido compilar sonido envolvente si nuestra tarjeta de sonido no soporta esta opción. Sin sonido envolvente, LMMS sólo necesita tratar la mitad del volumen de datos en ciertos casos, y esto se traduce en un rendimiento mucho mayor. Se puede deshabilitar el sonido envolvente especificando --disable-surround ab. Y si se puede vivir sin tiempo real verdadero, porque no se disponga de un teclado midi, puede especificarse --with-latency=VALOR, donde VALOR es una potencia de 2, esto es, 64, 128 o 256. El valor por defecto es 256, que proporciona un tiempo de latencia (retraso entre un evento y la salida del sonido) de 6 milisegundos. Cuanto menor es el valor, menor es la latencia y más cerca del tiempo real se estará.


LMMS • PRÁCTICO

Figura 2: Usamos el Piano Roll para editar líneas de bajos. Pulsamos para añadir, eliminar o cambiar el valor de las notas.

Para especificar todas estas opciones para la compilación, puede configurarse el código fuente con el siguiente comando: ./configure -prefix=/usr CXXFLAGS="-O2" [--disable-surround] [--with-latency=VALOR]. A continuación se ejecuta make para compilar un binario LMMS y make install para instalar los archivos requeridos en el sistema. make rpm proporciona un paquete RPM, usualmente en /usr/src/. Ya se puede instalar el paquete tecleando rpm -i FILE.rpm. Sin embargo, esto deshabilita las opciones que se han fijado en el paso configure. En su lugar, será necesario habilitar la variable RPM_OPT_FLAGS. Después de compilar e instalar, se puede teclear lmms para iniciar el programa. Esto arranca un asistente que ayuda en la configuración inicial.

Primeros Pasos La primera vez que se ejecuta el programa, la interfaz de LMMS aparece con las siguientes áreas y ventanas. La ventana más importante, el Song Editor, contiene la lista de reproducción con las diferentes pistas y un cuadro de herramientas. El Beat + Bassline Editor ayuda a crear beats y líneas de bajos, que podrán arrastrarse hasta el editor más tarde. La ventana Project Notes es el lugar donde se pueden añadir las notas para describir el proyecto. La parte izquierda es una barra con varias zonas de tareas, como el explorador de proyectos y samples. Se comenzará creando una percusión simple. Para ello, se abre el Sample Browser (My Samples), así como el directorio drums y se hace doble clic en el archivo kick_hiphop01.ogg. Aparece una nueva pista en el Beat+Bassline Editor, junto con un canal que contiene la

muestra seleccionada. El plug-in AudioFileProcessor, visible desde la misma ventana, se usa para cargar muestras. AudioFileProcessor permite configurar diferentes parámetros de salida. Ahora es un buen momento para probar el teclado del piano virtual, para ver si se está consiguiendo buen sonido de salida y si LMMS ha cargado satisfactoriamente la muestra. Si es posible escuchar unas cuantas percusiones en este punto, será señal de que está todo correcto y se podrá cerrar la ventana del canal. A continuación ha llegado el momento de comenzar con los primeros compases. Para crear un compás se pulsan los botones grises, según el patrón correspondiente, en el editor Beat+Bassline. Esto cambia los botones grises a verdes. Puede pulsarse ahora el botón de reproducción situado encima de las pistas para escuchar los primeros resultados. Claro que el sonido de una sola percusión puede llegar a ser monótono. Puede hacerse doble clic para añadir tambores, platillos y demás elementos. La Figura 1 muestra un ejemplo de un ritmo completo.

Momentos Melódicos Se desea que LMMS proporcione algo de música real en lugar de simplemente un par de tambores. Afortunadamente tiene su propio software de síntesis, llamado Triple Oscillator, que comprende tres osciladores, filtros, sobres y osciladores de baja frecuencia (LFO’s). Los principiantes se sienten a menudo abrumados por esta cantidad de posibilidades. Por ello LMMS define algunos valores prefijados. Estos archivos contienen configuraciones específicas para un único canal. Guardan información del plug-in en uso (como Triple Oscillator o Audio File Processor), la configuración en sí y los filtros y envolventes. Al cargar unos valores evitamos la necesidad de lidiar con unos complejos parámetros de generación de sonido. Al mismo tiempo, son el punto de comienzo ideal para nuestros propios sonidos. Es posible girar los botones hasta situarlos adecuadamente. Para acceder al explorador de valores prefijados, debe pulsarse sobre el asterisco amarillo en la parte izquierda. Cada plug-in se ubica en su propio directorio.

WWW.LINUX-MAGAZINE.ES

Antes de continuar, va a configurarse una nueva línea de bajos. Para ello, se pulsa sobre el botón Add Beat/Bassline en el cuadro Song Editor, y después abrir el conjunto de valores prefijados Rough! para este ejemplo. Como no sólo se crearán beats con estos valores, será preciso editar el patrón en el teclado de piano. Se hace doble clic en el patrón (arriba o abajo de los botones de los pasos) en el Beat+Bassline Editor para abrir el teclado de piano. Una vez en el Piano Roll (Figura 2), simplemente puede pulsarse para añadir notas, cambiar sus posiciones o cambiar su longitud. Se arrastra el borde de la nota para hacer esto. Pulsamos con el botón derecho del ratón para eliminar notas individuales. En el Song Editor, ya es posible enlazar el nuevo beat y la recién creada línea de bajos. Se pulsa con el botón izquierdo para crear una lista de reproducción de

Principales Opciones de Compilador • -O2 o -O3: Esta opción especifica el nivel de optimización que debería usar el compilador. Para los nuevos procesadores con mucha caché, podemos probar a usar -O3. • -mcpu=IHRECPU: Indica al compilador para qué procesador debería optimizar el código. Los valores posibles para YOURCPU son: pentium2, pentium3, pentium4, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-4 y athlon-xp. La página man de GCC tiene algunas otras opciones. Podemos mirar en /proc/cpuinfo para averiguar qué CPU tenemos. • -msse, -msse2: Esto le indica al compilador que use los comandos SSE para operaciones en punto flotante. Las considerables mejoras de rendimiento en LMMS, sin embargo, sólo se aprecian en los procesadores AMD e Intel (Pentium 3 o superior) que soporten estos comandos. • -mfpmath=sse,387: Si nuestro procesador soporta instrucciones SSE, podemos usar esta opción para habilitar la unidad SSE y el co-procesador interno. Los lectores más aventurados que quieran más rendimiento pueden probar Acovea [2], que usa algoritmos genéticos para descubrir las opciones de ajuste óptimas.

Número 14

41


PRÁCTICO • LMMS

objetos que definen cuándo y durante cuánto tiempo se va a reproducir un beat o una línea de bajos. Como se muestra en la Figura 3, la lista de reproducción puede comprender también canales (se muestra en la Figura el Triple Oscillator). Esto tiene sentido si nuestros patrones no contienen líneas de bajos que se repiten continuamente, sino melodías individuales que se reproducen sólo una vez a lo largo de la canción. Puede pulsarse el botón izquierdo sobre una pista para crear un patrón de este tipo, y luego hacer doble clic para editarlo.

Pistas de Muestra Además de las pistas de canal y de beats/lineas de bajos, LMMS también soporta pistas de muestra. Pueden ser usadas para crear muestras mayores como raps o solos de guitarra que se hayan grabado. La tecnología completa de pistas de muestra está aún en desarrollo, y su funcionalidad, en el momento de escribir este artículo, está restringida a cargar muestras. Próximamente, LMMS tendrá funcionalidades de grabación y edición simple.

Envolventes, LFO’s, Filtros, Acordes La ventana Channel (Figura 4) tiene más de un solo plug-in: además de la pestaña Plugin, existen las pestañas Envelopes/LFO/Filter y Arp/Chord. Envelopes/LFO/Filter (Figura 4) nos permite definir un filtro para un canal activo y fijar parámetros como la frecuencia de corte y la resonancia. Podemos controlar estos dos parámetros usando las envolventes y los osciladores de baja frecuencia (LFO’s). Las envolventes representan la progresión temporal del valor en cuestión, por ejemplo, una aparición súbita y un decaimiento lento. Cuanto más grande pongamos el valor del botón Amount, más efecto tendrá la envolvente sobre el valor original. Un oscilador de baja frecuencia cambia el valor periódicamente. Será pre-

Figura 3: El Song Editor combina los beats y líneas de bajos para formar una lista de reproducción.

42

Número 14

Grandes Planes ciso experimentar con esta tecnología para acostumbrarnos a los efectos que se La hoja de ruta de LMMS está llena de pueden crear. importantes extensiones al programa. La pestaña Arp/Chord ayuda a definir la Por ejemplo, LMMS no proporciona configuración para arpegios y acordes ninguna opción para aplicar efectos automáticos. Si se selecciona un acorde (reverberación, eco, distorsiones, mayor y un rango de dos coros, ecualización y octavas por tono, LMMS filtros, sólo por nompuede añadir automáticabrar algunos). Las tarmente el acorde mayor eas para la adminiscoincidente sobre un rango tración de efectos están de dos octavas. La función programadas para la de arpegio permite reproversión 0.1.0, e ducir las notas individincluirán una interfaz uales del acorde secuenLADSPA entre otras cialmente. cosas. LADSPA (Linux El bloqueo de patrones Audio Developers Simpermite al usuario crear ple Plugin API) proporcomplejas canciones ciona a los desarrolpolifónicas incluso si nuesladores de software de tra CPU no tiene suficiente audio una interfaz potencia para reproducirestandarizada para los las en vivo. Al pulsar sobre plugins de efectos y sinFigura 4: Cada canal puede Freeze en el menú de un tetizadores. controlarse usando envolpatrón se indica a LMMS De igual importancia ventes, osciladores de baja que reproduzca el patrón será un sistema que frecuencia y filtros. una vez de manera interna permita a los usuarios y guarde los resultados en controlar todos los un búfer. botones y conmutadores de LMMS de Cuando se reproduce la canción en vivo, forma dinámica. Sus desarrolladores el programa no intenta recalcular la inforestán buscando en estos momentos el mación de este patrón. En su lugar simplemodo de proporcionar a los usuarios la mente lee el búfer y lo parchea en el búfer capacidad de modificar las frecuencias de salida. Los cambios en el patrón blode corte de un filtro con dibujar una queado no se implementan hasta que no curva. Además, debería ser posible desbloqueen y se vuelvan a bloquear. controlar el desacople periódico de un También es posible contolar LMMS a oscilador con la aplicación de un LFO. través de un teclado midi. Al pulsar sobre Como LMMS tiene aún un espectro el teclado, se le está indicando que toque la de sonido bastante limitado, se están nota correspondiente en el canal en uso. planeando más plugins para el futuro. Además de esto, puede mapearse cualquier Además del cliente de plugins LADSPA, botón de LMMS al control de pitch del se está trabajando en un cliente VST, teclado con sólo seleccionar Map to MIDI que permitirá usar plugins VST. device en el menú del botón. Tras esto, el El proyecto de LMMS está aún en botón responde a las órdenes de la rueda desarrollo, y la hoja de ruta de las carde pitch, pero es necesario asegurarse de acterísticas mencionadas es algo que el rango de pitch se encuentra al máxiimprecisa. Por contra, se está progremo en el teclado. sando a buen ritmo en el editor de Tras concluir una canción, podemos notas tradicional. LMMS ya es capaz exportar el resultado final a un archivo Wav de importar archivos midi, y parece u Ogg. Para ello, seleccionamos Project | seguro que será capaz de importar Export o presionamos [Ctrl]+[E]. Tras otros tipos de archivos en un futuro ■ introducir un nombre de archivo y especiinmediato. ficar el formato, aparece una ventana con opciones para exportar la canción. RECURSOS Pulsamos en Export para indicarle a LMMS [1] Página de LMMS: http://lmms. que guarde la canción al archivo de salida, sourceforge.net el cual podemos ya grabar en un CD o [2] Acovea: http://www.coyotegulch.com reproducir un nuestro equipo de sonido.

WWW.LINUX-MAGAZINE.ES


Mono y DotGNU • DESARROLLO

Comparamos las implementaciones libres de .NET: Mono y DotGNU

MULTITUD DE PUNTOS

Los proyectos de software libre Mono y DotGNU abren la plataforma .NET de Microsoft a los desarrolladores de Linux. Este artículo investiga lo bien adaptadas que se encuentran estas implementaciones alternativas para la programación de sencillas aplicaciones GUI. POR MICHAEL TSCHATER

E

n 2002, Microsoft lanzó un nuevo sistema para el desarrollo independiente de la plataforma, denominado .NET (pronunciado “punto net”). El proyecto .NET está orientado a simplificar el desarrollo de aplicaciones en red y para Internet. Soporta programación orientada a objetos y proporciona una única librería de clases capaz de ser usada por múltiples lenguajes, tales como por ejemplo: C# y VB.NET. Con el lanzamiento de .NET, Microsoft ha suspendido el respaldo a su primer favorito: la librería MFC para Visual C++. Todos los productos futuros de Microsoft se basarán en esta nueva tecnología.

¿.NET libre? A pesar de la orientación independiente de la plataforma del framework .NET, Microsoft difícilmente va a distribuir una implementación para Linux, y esta falta de soporte para Linux ha hecho que dos proyectos den el salto para cubrir este hueco: el proyecto Mono [1] esponsorizado por Novell y el proyecto de código libre DotGNU [2]. Tanto Mono como DotGNU pretenden proporcionar una implementación .NET tan completa como sea posible. El objetivo de ambos proyectos es el de permitir a los desarrolladores el intercambio de software saltando las barreras de los diferentes sistemas operativos.

WWW.LINUX- MAGAZINE.ES

Además de una funcionalidad básica, como la capacidad para manipular cadenas, la mayoría de los proyectos necesitan de componentes para los interfaces gráficos de usuario, para ayudar a estos a hacer frente a sus tareas diarias. Microsoft proporciona la librería System.Windows.Forms para éste propósito. Esta librería contiene objetos GUI, tales como MainMenu, TollBar, Combobox, o Button. El Listado 1 contiene un pequeño programa de ejemplo. Para comparar las implementaciones Mono y DotGNU, usaremos un programa escrito inicialmente en Windows. Este pequeño ejemplo hace uso de los principales componentes GUI, ver la Figura 1.

Número 14

43


DESARROLLO • Mono y DotGNU

Figura 1: Esta aplicación demostrativa incluye los principales componentes GUI de la librería System.Windows.Forms de .NET. Esta figura muestra la versión de Windows.

El código fuente está disponible en la web de Linux Magazine[3]. La única funcionalidad que realmente proporciona el código es la de registrar la entrada del usuario en una ventana diseñada especialmente para esto.

El Original de Microsoft Una forma de conseguir la implementación .NET original de Microsoft es con la descarga del entorno de ejecución de .NET gratuito y el SDK (Software Development Kit). La versión de descarga nos proporciona todas las herramientas en línea de comandos necesarias para el desarrollo de software en Windows, tal y como sucede con el SDK de Java. El comando csc nos permite compilar la aplicación. El resultado sólo puede ser ejecutado directamente en el sistema operativo Windows. El entorno integrado de desarrollo (IDE) Visual Studio .NET es una alternativa comercial para el desarrollo en .NET que incluye un depurador y un editor de

Figura 2: Visual Studio .NET mostrando el código del proyecto de ejemplo descrito en este artículo. El código de la figura dibuja los elementos gráficos.

ventanas de diálogo (Figura 2). Este paquete instala automáticamente el SDK .NET. El entorno de desarrollo libre Sharpdevelop[4], es una buena alternativa al paquete Visual Studio .NET. Sharpdevelop proporciona un potente IDE al que sólo le falta un depurador integrado. Pero entre las características incluidas se encuentran la capacidad de cambiar entre los entornos de ejecución de Microsoft y Mono, y la de importar los proyectos de Visual Studio .NET.

La Alternativa: Mono El entorno Mono[5] está disponible bajo Linux, Windows y Mac OS. Además de la librería de clases estándar de .NET, Mono proporciona una serie de extensiones, tales como una serie de librerías de Gnome. La máquina virtual incorpora las técnicas de compilación just-in-time (JIT) y ahead-of-time para mejorar la velocidad de ejecución de nuestros programas. Mono usa GTK# (también disponible bajo Windows) para la real-

Listado 1: GUI con System.Windows.Forms 01 using System; 02 using System.Windows.Forms; 03 04 namespace LinuxMagazin.FirstApp 05 { 06 public class FirstApp : System.Windows.Forms.Form 07 { 08 public static void Main() 09 {

44

Número 14

10 11 12 13 14 15 16 17

Application.Run(new FirstApp()); } public FirstApp() : base() { this.Text = "First Application with GUI"; } } }

WWW.LINUX- MAGAZINE.ES

ización de interfaces gráficas de usuario. GTK# se basa en GTK+, que constituye la base del Desktop Gnome en Linux.

GUI con Windows.Forms La librería System.Windows.Forms está principalmente implementada en C# y dibuja sus propios controles[6]. La librería requiere de un driver para cada sistema operativo: los controladores para X11 y Windows ya estaban disponibles a la hora de escribir este artículo. El proyecto DotGNU ha adoptado este diseño tras deshacerse de una implementación basada en Wine, por ser impracticable. Aparte del compilador mcs y del entorno en tiempo de ejecución mono, la versión en Linux contiene el entorno de desarrollo monodevelop, basado en un port a Linux de Sharpdevelop. El navegador de ayuda, monodoc, contiene la útil característica de permitir a los programadores actualizar su documentación desde un repositorio de Mono en Internet. Además de los binarios específicos de la distribución, disponemos de un instalador ejecutable que se encargará de configurar todos los paquetes que se necesitan. Tras descargar un paquete de 50MB, un asistente nos guiará a través del procedimiento de la instalación, que sólo involucra unos pocos pasos. Gracias al asistente, los problemas de instalación que una vez afectaron a distribuciones que antes estaban explícitamente soportadas, pero no en la actualidad (como Fedora), son ahora cosa del pasado.


Mono y DotGNU • DESARROLLO

el nuevo proyecto. La ayuda contextual que aparece cuando editamos el código fuente es una de esas funcionalidades de la que daremos rápidamente cuenta en el entorno de desarrollo, pero por desgracia el entorno carece, por ahora, de un diseñador de GUIs. Figura 3: La aplicación de ejemplo ejecutándose en Mono con Linux Cuando intentiene dificultades en el dibujado de los botones de arriba y en las cajas tamos compilar de selección de la derecha. el código con el comando mcs Algunas distribuciones, cómo Suse 9.3, -r:System.Windows.Forms.dll incluyen Mono en su instalación por sourcefile, el control estándar Sysdefecto, pero distribuciones como Red tem.Windows .Forms.NumericUpHat y Fedora tienden a desplazar su Down causa un problema, ya que aún interés a la plataforma Java. no está completamente implementado Hay un número de sitios web, como el en Mono. Tras eliminar el trozo de que se encuentra en [5], que documencódigo que produce el error, podremos tan en detalle el progreso del proyecto compilar la aplicación y ejecutarla Mono. Por ejemplo, podemos encontrar dentro de entorno en tiempo de ejecuuna descripción de los controles de la ción mono (Figura 3). librería System.Windows.Forms en [6]. Ocurren varios errores: por ejemplo, el mecanismo de actualización, que Una Aplicación de maneja el redibujado de la aplicación, Ejemplo en Mono no funciona correctamente cuando Los proyectos existentes en Visual Stuésta es ocultada por otra aplicación. dio .NET, tales como nuestro programa Adicionalmente, el mecanismo de de ejemplo, pueden ser importados eventos presenta algunos problemas directamente a Monodevelop. Pero no con los controles RadioButton y Comolvidemos ajustar las referencias para boBox.

El Contrincante: DotGNU De acuerdo con el número de versión asignado al proyecto, 0.7, podemos decir que DotGNU es algo menos maduro que Mono. El componente central de DotGNU se denomina Portable .NET. Comprende tres componentes principales: treecc (una herramienta para la programación orientada a aspectos), pnet (entorno en tiempo de ejecución, compilador C#, herramientas de programación) y pnetlib (librería de sistema de C# con librerías de clase críticas de C#). El código fuente y el paquete RPM están disponible en la página web de DotGNU. La versión en RPM no requiere ningún ajuste para que nos proporcione un entorno completamente funcional; todas las herramientas funcionaron a la primera. Las distribuciones actuales, tales cómo Debian 3.1 hacen las cosas aún más fáciles, incluyendo el entorno DotGNU por defecto (en el paquete pnet). Los comandos siguientes compilan y ejecutan la aplicación HelloWorld: cscc -o HelloWorld.exe U HelloWorld.cs ilrun HelloWorld.exe

La siguiente secuencia de comandos construye un proyecto más complejo con interfaz gráfico. Los ficheros con el código fuente se encuentran en el subdirectorio src: cscc -winforms -o U Application.exe src/*.cs ilrun Application.exe

Tabla 1: Comparando Implementacion Proyecto

DotGNU

Mono

Versión Actual Licencia Sistemas Operativos

0.7.0 LGPL Linux, Mac OS X, Windows

1.1.8 GPL o propietaria (seleccionable) Linux, Mac OS X, Windows

Paquete estándar con Debian Los bytecodes originales de windows ser ejecutados sin modificaciones

Paquete estándar con Suse 9.3 Soportado por desarrolladores a tiempo puede completo de Novell

System.Windows.Form no implementado completamente Errores en el manejo de eventos No tiene entorno de desarrollo

System.Windows.Form no implementado completamente Errores en el manejo de eventos El asistente de instalación no está completamente probado; por ejemplo, el entorno de desarrollo falta en Mono 1.1.7

Ventajas

Desventajas

WWW.LINUX- MAGAZINE.ES

Número 14

45


DESARROLLO • Mono y DotGNU

cionó de ninguna manera y no se mostró correctamente. El control GroupBox cambia de color para indicar que contiene el foco de la aplicación. Este comportamiento no es conforme al estándar. El control ImageList impide que sea mostrada la aplicación. DotGNU Figura 4: La aplicación .NET con GUI tiene algunos problemas cuando es capaz de prese ejecuta en DotGNU; por ejemplo, los botones circulares lanzan sentarnos los ejeeventos múltiples veces. cutables creados con Mono, pero La implementación de la librería Syslos iconos del control de la barra de tem.Windows.Forms no se basa en una botones no son los correctos. librería gráfica cómo GTK, sino que Una claúsula en la licencia de dibuja los controles por sí mismo, tal y Microsoft .NET prohíbe la publicación como sucede en la librería Swing de de comparativas de rendimiento para Java. DotGNU no tiene implementado las implementaciones de .NET. Sin por sí mismo un IDE. embargo, el proyecto DotGNU proporciona la herramienta PNetmark [7] El Proyecto de Ejemplo en para ayudar a aquellos interesados en DotGNU mediciones de rendimiento, poder crear sus propios test de rendimiento. DotGNU ejecuta los bytecodes generaPara más información sobre cómo dos en Windows sin necesidad de crear estas pruebas, podemos consulmodificarlos. Sin embargo, pulsando tar la Sección 1.4 en el FAQ de Doten los controles RadioButton se inicia GNU. la rutina de eventos múltiples veces. Esto no cambia cuando recompilamos Resumen los fuentes usando DotGNU: cscc --winforms -o DemoApp.exe *.cs. El framework .NET de Microsoft nos Además tenemos que eliminar el proporciona una aproximación interecódigo manejador de ImageList para sante a la programación independiente lograr que la aplicación termine de compilar. Nuestras pruebas lograron descubrir otro error en la versión compilada con DotGNU (Figura 4). También indicaron que el mecanismo de eventos no funcionaba correctamente: el componente GUI RadioButton lanzaba eventos duplicados. NumerFigura 5: Aplicación sencilla corriendo con System.Windows.Form.dll icUpDown no fun-

46

Número 14

WWW.LINUX- MAGAZINE.ES

de la plataforma. El lenguaje de programación C# es muy similar a los lenguajes de programación Java y C++, y simplifica el aprendizaje de C# a los programadores que conocen estos lenguajes de programación. Otra ventaja que nos proporciona C# es su estandarización en ECMA. Las dos implementaciones libres de la plataforma .NET, Mono y DotGNU, contienen características muy interesantes, pero también presentan algunas asperezas que hay que limar. Los desarrolladores de ambas herramientas aún tienen que recorrer un largo camino antes de lograr una completa compatibilidad. Dicho esto, tanto DotGNU como Mono logran proveer de soporte al desarrollo de software en .NET en Linux. Los principales problemas experimentados se han dado en el uso de la librería System.Windows.Forms, que provee a las aplicaciones gráficas en Windows. En otras palabras, aún no es posible migrar software .NET con GUIs basadas en Windows a Linux de manera sencilla. Como alternativa a la migración directa de software .NET con GUIs basadas en Windows a Linux, podemos usar librerías GUI tales como GTK#, Qt# o WX#. Puesto que todas estas librerías están también disponibles en la plataforma Windows, las aplicaciones multiplataformas son posible dentro de unos límites dados, sin embargo estas aplicaciones no llegarán a ser compati■ bles .NET.

RECURSOS [1] Mono: http://www.mono-project.com [2] DotGNU: http://www.dotgnu.org [3] Listados online: http://www. linux-magazine.com/Magazine/ Downloads/2005/12/dotNET/ [4] Página de Sharpdevelop: http://www. icsharpcode.net [5] Estado del desarrollo de Mono: http:// www.go-mono.com/mono-roadmap. html [6] Estado del desarrollo de System.Windows.Forms en Mono: http://svn. myrealbox.com/mwf/owners.html [7] PNetmark: http://www. southern-storm.com.au/pnet_faq. html#q1_4


Perl • DESARROLLO

Herramientas Perl para tests de regresión

HERRAMIENTAS DE TESTEO Con un banco de pruebas se pueden corregir errores y añadir nuevas funcionalidades sin arruinar la base de código ya existente. POR MICHAEL SCHILLI

U

n programa que funcione correctamente a la primera es tan poco común como para que nos haga sospechar. En el desarrollo dirigido por tests, el desarrollador define primero las pruebas de ensayo antes de implementar la nueva funcionalidad. Inevitablemente, el test fallará al principio, pero tan pronto como esta funcionalidad esté implementada, el banco de pruebas nos dará su aprobación. Esta técnica motiva a los desarrolladores a través del ciclo de vida del desarrollo; cada nuevo test implementado se añade al banco de pruebas y será ejecutado una y otra vez mientras el proyecto emerge. Con la suma de pequeños

pasos se logrará un banco de pruebas con un nivel de detalle que ningún departamento de calidad en el mundo podría ser capaz de conseguir. En caso de un desarrollo ya en marcha o de una refactorización de código, siempre existe el riesgo de realizar un cambio que introduzca efectos colaterales no deseados. Tener la capacidad de ejecutar cientos de pruebas sin coste alguno hace que nos podamos despreocupar al tener que reemplazar partes de un sistema. Los desarrolladores pueden publicar nuevas versiones de manera regular y aun así poder dormir tranquilos y sin preocupaciones. No es necesario ser un entusiasta de la Programación Extrema para ver los beneficios.

WWW.LINUX- MAGAZINE.ES

Conjunto Estándar Agradezcamos que la comunidad Perl tenga la calidad suficiente para añadir un conjunto de pruebas que verifican las funciones críticas de casi todos los módulos CPAN. Pero ¿qué sucede si estamos desarrollando un pequeño script en vez de un módulo? Con el paso de los años he llegado a la conclusión de que los scripts sólo deberían parsear los parámetros de la línea de comandos y mostrar textos de ayuda. Uso módulos para el resto de la funcionalidad. Esto permite a otros scripts reutilizar estos módulos. Y, por supuesto, cada módulo viene acompañado de la documentación y de una serie de tests, ¿verdad? El protocolo TAP (del original en ingles Test Anything Protocol) se ha convertido en el estándar de-facto para los tests de regresión en

Número 14

47


DESARROLLO • Perl

Figura 1: Salida del script de pruebas simple.t.

Perl. TAP normalmente muestra primero una cabecera para indicar el número de pruebas que se van a realizar; ésta es seguida de una línea por cada test, donde mostrará ok si el test se ha realizado con éxito, y not ok en caso contrario: 1..3 ok 1 not ok 2 ok 3

Naturalmente este tipo de salidas no son precisamente fáciles de leer si estamos llevando a cabo cientos de pruebas. Para cambiarlo, un test de aprovechamiento global nos proporciona un resumen que dice si todo ha sido comprobado, o el número de pruebas que se han fallado. El Listado 1 muestra un ejemplo. Tradicionalmente, los scripts de pruebas en Perl suelen tener la extensión *.t y se encuentran en el directorio t de la distribución del módulo. Puesto que las pruebas de ensayo con frecuencia comprueban cosas similares, y realizan acciones parecidas, hay algunos módulos de pruebas especiales, tales cómo Test::More, que simplifican el proceso y nos ayudan a evitar la escritura de código de pruebas redundante. Después de todo, el mismo principio de diseño se

Listado 1: 01 02 03 04 05 06 07 08 09 10 11 12

48

#!/usr/bin/perl use strict; use warnings; use Test::More tests => 4; BEGIN { use_ok("Config::Patch"); } my $p = Config::Patch->new(

Número 14

debe aplicar tanto al Tabla 1: Utilidades para Pruebas código de pruebas Módulo Función cómo al código de la Test::Simple Utilidad de pruebas común, incluye aplicación. Test::More En el script de ejemplo Test::Deep Compara estructuras anidadas se comprueba el módulo Test::Pod Valida documentación POD Config::Patch de CPAN, Test::Pod::CoverageComprueba que todas las funciones estén éste parchea ficheros de documentadas configuración de manera Test::NoWarnings Alertas en alarmas reversible. Test::More Test::Exception Comprueba si alguna excepción ha sido lanzada establece primero tests Test::Warn Comprueba si las alarmas son correcta=> 4 para indicar que mente emitidas se realizarán exactaTest::Differences Muestra gráficamente las desviaciones mente cuatro pruebas. Test::LongString Comprueba cadenas largas Esto es importante: si el Test::Output Cachea la salida a STDERR/STDOUT conjunto de pruebas terTest::Output::Tie Cachea la salida a manejadores de ficheros mina antes de lo debido, Test::DatabaseRow Comprueba los resultados de la consulta a es algo que deberíamos la base de datos conocer. Algunos desaTest::MockModule Simula módulos adicionales rrolladores, mientras Test::MockObject Simula objetos adicionales están ocupados extendiendo el conjunto de pruebas, de Test::More, en vez de ok(), en caso suavizan el test con Test::More de que necesitemos comparar cosas. Si qw(no_plan). Sin embargo las buenas algo va mal, el script de test no sólo prácticas dictan fijar el número de muestra el comentario de la prueba y el pruebas que se van a realizar de antenúmero de línea, sino que además mano. muestra las diferencias entre el valor Nuestro script de pruebas simple.t obtenido y el esperado. La línea 19 del llama primero a use_ok() (exportado por Listado 1 causa un error, sólo para Test::More) para comprobar si el módulo propósitos demostrativos. Para conConfig::Patch realmente ha cargado. seguir una salida con sentido con is(), Entonces, el constructor new (con será necesario pasar el valor devuelto suerte) devolverá un objeto. La sigucomo primer parámetro y el valor que iente función, ok(), también de se esperaba como segundo parámetro. Test::More, escribe ok 2 por la salida La función like() usada en la cuarta estándar si el objeto contiene algún prueba, espera como segundo arguvalor, y not ok 2 en caso contrario. Un mento una expresión regular que debe segundo parámetro, que puede ser pasacasar con el primer parámetro, en vez do a ok() opcionalmente, establece un de un valor comparativo. Si la exprecomentario que se imprimirá a continsión regular no coincide, se mostrará uación del resultado de la prueba. La un detallado mensaje de error de maFigura 1 nos muestra la salida del script. nera similar a is(). Finalmente, La tercera prueba muestra cómo de Test::More muestra un educado “Parece útil puede ser el uso de la función is() que ha fallado 1 test de 4”. Es importante ser correctos: nadie quiere ser regañado por uno de los puntillosos simple.t del departamento del Control de 13 key => "foo"); Calidad. 14 El script prove, que es parte del 15 # #1 verdadero módulo CPAN Test::Harness, ejecuta 16 ok($p, "New object"); uno o varios scripts de tests. La versión 17 de Test:Harness que viene con Perl 5.8 18 # #1 igual #2 no incluye este programa, así que es 19 is($p->key, "Waaah!", necesario asegurarse de que se ha 20 "Retrieve key"); descargado la última versión desde 21 CPAN. Al ejecutar prove con un script 22 # #1 coincide #2 de pruebas se obtendrá la siguiente 23 like($p->key(), qr/^f/, salida, en el caso de que todas las 24 "Key starts with 'f'"); pruebas sean pasadas con éxito:

WWW.LINUX- MAGAZINE.ES


Perl • DESARROLLO

Figura 3: Funciones y métodos cubiertos en el script de pruebas coverme.t.

Los módulos CPAN usan make test antes de la instalación Figura 2: Prueba de cobertura: no todos los métodos han sido llamados. para hacer lo que hace prove en línea de comandos. El módulo ExtUtils::Makeprove ./simple.t Maker, que provee de esta funcionalidad, ./simple....ok se añade al camino de inclusión de las All tests successful. librerías Perl, @INC, para permitir al Files=1, Tests=4, U banco de pruebas ejecutar módulos que 0 wallclock secs hasta el momento no han sido instala(0.08 cusr + 0.01 csys = U dos. Los módulos nuevos vienen con el 0.09 CPU) módulo Module::Build, que provee de una funcionalidad similar, pero más Si se está interesado en un análisis de los avanzada. resultados, ejecute prove con la opción -v En Profundidad (de verbose) para mostrar individualmente la líneas ok y not ok generadas además de Además de Test:More, CPAN tiene innusus comentarios. Si se está ejecutando un merables módulos de utilidad que facilitan programa de pruebas desde la distribución crear código para pruebas sin la necesidad de un módulo sin estar éste instalado, el de reescribir las mismas líneas de código parámetro -b será de utilidad, puesto que una y otra vez. Test:Deep, que compara hará uso de los ficheros del módulo que estructuras profundamente anidadas, es make deja en el directorio blib. un ejemplo de estos módulos. El Listado 2 muestra un pequeño programa de prueTabla 2: Herramientas para el Análisis bas que llama a la función de Tests get_mp3tags() del módulo Módulo Función MP3::Info. Si el fichero MP3 Test::Harness Aprovechamiento estándar contiene un conjunto adeTest::Builder Base para las nuevas utilidades de cuado de etiquetas, la funpruebas ción devuelve una referencia Test::Builder::Tester Tests para las nuevas utilidades de a un hash, el cual contiene pruebas una serie de claves, tales Test::Harness::Straps Base para el desarrollo de un nuevo test de aprovechamiento cómo ARTIST, ALBUM. En Devel::Cover Análisis y muestra del test de cober vez de comprobar si el valor tura devuelto apunta realmente a Test::Distribution Comprueba la completitud de los un hash, y entonces recomódulos rrerlo por medio de las claves

WWW.LINUX- MAGAZINE.ES

hash que se requieran, la función cmp_deeply hace todo esto de un solo golpe. cmp_deeply espera una referencia a un array o a un hash como sus primeros dos parámetros, realiza una comprobación en profundidad, y compara los elementos subyacentes. Por tanto, la llamada cmp_deeply($ref1, $ref2) devuelve verdadero si $ref1 y $ref2 apuntan a dos estructuras de datos equivalentes. Pero esto no es todo: esta comparación directa puede ser manipulada usando una serie de funciones adicionales. Por ejemplo, puede comprobarse si un elemento de una estructura de datos coincide con algún elemento de otra estructura usando una expresión regular. La función encargada de eso es re(). O, si un elemento de la estructura contiene una referencia a un hash, superhashof() permitirá indicar que el primer hash sólo necesita contener un subconjunto de las claves del segundo hash. Aprovechando esta funcionalidad, en el Listado 2 se comprueban varias cosas al mismo tiempo: que $tag sea una referencia a un hash, por ejemplo, y que el hash al que apunta contiene las claves YEAR y ARTIST; además, el Listado 2 comprueba cuándo los valores almacenados bajo esas claves en el hash coinciden con una expresión regular dada: texto con espacios en blanco para la etiqueta ARTIST y un número para YEAR. Además Test::Deep contiene una serie de funciones auxiliares útiles que permiten comprobar subárboles de la estructura de datos pasada a cmp_deeply sin la

Número 14

49


DESARROLLO • Perl

#!/usr/bin/perl use warnings; use strict; use Test::More tests => 1; use Test::Deep; use MP3::Info; my $tag = get_mp3tag( "Gimme_Shelter.mp3");

necesidad de recurrir a bucles for. Por ejemplo, array_each() requiere que un nodo contenga un puntero a un array y permite ejecutar un test (que se pasa como parámetro, por ejemplo, re()) a cada elemento del array. Además de superhashof(), se dispone de subhashof() para gestionar escenarios en los que la referencia al hash contenga elementos opcionales. set() y bag() ayuda a descubrir cuándo un array contiene una serie de elementos con un orden dado, con y sin repeticiones. La contrapartida en array a las funciones hash para elementos opcionales son subbagof(), superbagof(), subsetof() y supersetof().

Prueba finalizada En el Listado 3 se observa la definición de

Listado 3: coverme.t 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21

50

#!/usr/bin/perl -w use strict; package Foo; sub new { my ($class) = @_; bless {}, $class; } sub foo { print "foo!\n"; } package main; use Test::More tests => 1; my $t = Foo->new(); isa_ok($t, "Foo", "New Foo object");

Número 14

12 13 cmp_deeply( 14 $tag, 15 superhashof( 16 { 17 YEAR => re(qr(^\d+$)), 18 ARTIST => 19 re(qr(^[\s\w]+$)), 20 } 21 ) 22 );

la clase Foo y el script de pruebas que se ejecutaría; se llama al constructor de clase y se usa isa_ok() para comprobar si un objeto de la clase Foo es, efectivamente, devuelto. Pero este conjunto de pruebas tiene un punto débil: nunca ejecuta el método foo() de Foo; se nos podría haber colado algún error de tiempo de ejecución, y el conjunto de pruebas no tendría noticias de ello. En el caso de proyectos pequeños, un desarrollador podría darse cuenta pronto de esta problema; para proyectos largos, el módulo CPAN Devel::Cover realiza por nosotros el trabajo pesado; comprueba cuantos posibles caminos de ejecución están siendo cubiertos por las pruebas. Puede llamarse a éste script de la siguiente manera: perl -MDevel::Cover coverme.t

Este comando almacena datos de la cobertura en el recién creado directorio cover_db. La subsiguiente llamada a cover analiza estos datos y proporcionará una salida gráfica (cover es un script ejecutable que es instalado con Devel::Cover). Si se carga el fichero cover_db/coverage.html desde el navegador, se conseguirá una sencilla visión general de los datos de cobertura, tal y como se muestra en la Figura 2. La Figura 3 muestra la cobertura para el fichero script de pruebas coverme.t; la salida está disponible en cover_db/coverme-t.html. Devel::Cover no sólo comprueba todas las funciones y métodos, sino que además comprueba la cobertura de todas las ramas de ejecución de los if, else, y demás condiciones. Aunque puede ser imposible cubrir todas las ramas en un proyecto grande, es útil saber dónde merece la pena poner algún esfuerzo extra para mejorar la cobertura de ejecución.

WWW.LINUX- MAGAZINE.ES

Maquetado Uno de los principales requisitos para un conjunto de pruebas es que éstas sean rápidas y fáciles de ejecutar, sin que se requiera que el desarrollador tenga que instalar aplicaciones extra o termine involucrado en configuraciones maratonianas. Sin embargo muchas aplicaciones acceden a bases de datos complejas o necesitan de una conexión a Internet y a un servidor específico. Para sortear este tipo de requisitos en la fase de testeo, las utilidades de maquetado, Test::MockModule y Test::MockObject, nos permiten simular de manera realista un servidor de Internet o de base de datos. Naturalmente, herramientas de análisis tales cómo Test::Harness están diseñadas para clases genéricas, y es decisión del desarrollador cuándo usar las utilidades genéricas o diseñar sus propias herramientas de análisis para suplir unos requisitos más específicos. Pero para eliminar la necesidad de reinventar esa funcionalidad básica, tal como el parseo de la salida del protocolo TAP una y otra vez, Test:Harness::Straps provee de una clase base, la cual puede ser extendida por los desarrolladores para sus pruebas privadas. Si se necesita más información sobre los test en Perl, puedo recomendar un excelente libro[2] de reciente publicación que contiene información detallada de todos los módulos vistos aquí y muchos más tru■ cos para las pruebas.

RECURSOS [1] Listados del artículo: http://www. linux-magazine.com/Magazine/ Downloads/61/Perl [2] Perl Testing Ian Langworth & Shane Warden, O’Reilly 2005.

EL AUTOR

Listado 2: mp3.t 01 02 03 04 05 06 07 08 09 10 11

Michael Schilli trabaja como desarrollador de software en Yahoo!, Sunnyvale, California. Es el autor de “Perl Power” de la editorial Addison-Wesley y se le puede contactar en mschilli@perlmeister.com. Su página está en http:// perlmeister.com


Python • DESARROLLO

Un script pequeño y útil

MAYORDOMO PYTHON Mucha gente habla de Python como el sustituto normal de Perl, pero siempre lo vemos en grandes programas. Hoy vamos a demostrar lo fácil que es crear un script potente y sencillo en Python. POR JOSÉ MARÍA RUIZ

M

uchas tareas cotidianas pueden automatizarse gracias a los lenguajes script. Siempre se ha dicho que Linux fomenta la creación de pequeños script que ahorran grandes cantidades de tiempo. Pero con el paso de éste las actividades que se han desarrollado en los sistemas Linux han ido cambiando. Si antes la mayor parte del trabajo consistía en gestionar centenares o miles de cuentas de usuarios individuales, actualmente existen cientos de directorios con miles de ficheros que se acumulan en nuestros equipos. Y siempre se desea guardarlos, pero es una tarea complicada, aburrida y monótona. ¡Además hay que pensar! ¿Dónde colocar los ficheros y cómo hacerlo? A continuación se verá cómo crear un script Python que facilitará esta tarea: se pasará una ruta y una cantidad de espacio (por ejemplo el tamaño de un DVD o CDROM, y él cogerá todos los ficheros de esa ruta y los guardará en directorios de manera que ninguno de ellos sobrepase el tamaño que se les dió. ¿Uso? Pues el más evidente, dar una primera idea de cómo poder

guardar toda esa información… un primer paso para poder almacenar todos esos datos antes de que se tenga que lamentar.

Diseño del programa Será preciso pensar ahora en lo que se va a necesitar. Como se dispone de una ruta y de una cantidad de espacio expresado de alguna manera (digamos Megabytes), lo primero que habrá que hacer es acceder a dicha ruta. Para ello se harán uso de las funciones de las librerías os y os.path. Una vez en la ruta deben recorrerse todos los directorios y subdirectorios que se encuentran en ella, registrando el

nombre de los ficheros y su tamaño. Esto se hará con una función que además generará una estructura de datos para almacenar esa información. Con la estructura de datos ya en la mano se pasará a la toma de decisiones. ¿De qué manera se van a guardar los datos en los directorios? Para ello se empleará otra función, que devolverá otra estructura de datos en la que se almacenarán los distintos ficheros clasificados por directorios, con la condición de que ninguno de esos directorios tenga un número tal de ficheros como para sobrepasar el límite de tamaño que se proporció. Esta es la parte dura. Con la nueva estructura de datos en la mano ya sólo queda crear los directorios y mover los ficheros a ellos, y listo.

Recolección de los datos ¿Cómo se pueden recorrer todos los subdirectorios de un árbol de

WWW.LINUX- MAGAZINE.ES

Número 14

51


DESARROLLO • Python

ficheros de la manera más simple posible? El truco es emplear la recursividad. Una función es recursiva cuando se invoca a sí misma dentro de su código. Esta técnica suele provocar dolores de cabeza, pero es más sencilla de lo que pudiese aparentar en un primer momento. Sólo tenemos que seguir dos reglas: • que al llamar a la misma función de nuevo se le pasen menos datos que a la original. • que exista una cláusula IF que no ejecute la llamada a la misma función. Dicho así suena raro, por eso vamos a verlo en la práctica, ver Listado 1. La función recoge dos parámetros, ruta y hash. Como su nombre indica, se emplearán un hash o diccionario para almacenar el nombre y el tamaño de los ficheros que se vayan encontrando. A través de la función os.listdir() se consigue una lista con los ficheros y directorios que existen en la ruta que se pase. Así que se recorre esa lista, pero las cadenas de la lista sólo contienen el nombre de los ficheros y directorios, no

Listado 1: función «recorre» 01 def recorre(ruta,hash): 02 entradas = os.listdir(ruta) 03 04 for entrada in entradas: 05 06 ruta_entrada = ruta + "/" + entrada 07 08 if os.path.isfile(ruta_entrada): 09 hash[ruta_entrada] = os.path.getsize(ruta_entrada) 10 elif os.path.isdir(ruta_entrada): 11 recorre(ruta_entrada, hash) 12 else: 13 print "ERROR"

su ruta. Por eso se vuelve a generar la ruta usando la variable ruta_entrada para contenerla. Es ahora cuando viene lo «difícil». No se sabe la clase de objeto que se tiene entre manos, así que se emplean las funciones os.path.isfile() y os.path.isdir() para ver con qué nos

52

Número 14

Listado 2: ejecución recursiva - se ejecuta recorrido("/tmp",{}) - se procesa hola.txt - se ejecuta recorrido("/tmp/uno",{'/tmp/hola.txt' : 123}) - se procesa uno.txt - se vuelve - se ejecuta recorrido("/tmp/dos",{'/tmp/hola.txt' : 123, '/tmp/uno/uno.txt' : 431}) - se procesa dos.txt - se vuelve - se vuelve

enfrentamos. En caso de que sea un fichero se usa como entrada en el hash su ruta, y el tamaño del fichero como valor, que se consigue a través de la función os.path.getsize(). ¿Y qué pasa si es un directorio? ¡Pues que se invoca a recorre() de nuevo! Pero esta vez se pasa la ruta de este subdirectorio. De esta manera, se vuelve a invocar recorre() para cada subdirectorio que se encuentre. Llegará un momento que no se encuentren más subdirectorios, sólo ficheros. Es entonces cuando se detiene la recursión. Imaginemos que se tiene /tmp/ y en su interior el fichero hola.txt y los subdirectorios uno y dos con los ficheros uno.txt y dos.txt respectivamente. Entonces la ejecución sería como la mostrada en el Listado 2. El resultado final sería que el hash contendría los datos: {'/tmp/hola.txt' : 123,U '/tmp/uno/uno.txt' : 431,U '/tmp/dos/dos.txt' : 3234 }

La cláusula else: se ha puesto para poder capturar errores, cosa que no debería pasar nunca. La recursividad, cuando se escapa de la mano, es muy complicada de controlar, pero su buen uso crea código muy sencillo.

El trabajo duro Es aquí cuando hay que emplear un poco de lógica. Existen muchas maneras de solucionar este problema, pero no tiene mucho sentido emplear las más eficientes. Es preciso repartir los

WWW.LINUX- MAGAZINE.ES

ficheros entre contenedores de tamaños iguales especificados por el usuario, o sea, por nosotros mismos. Los mejores algoritmos conseguirán un aprovechamiento óptimo de los contenedores, pero … ¿vale la pena? Creo que la mayor parte de la gente diría que no. ¿Por qué? Pues debido a que muchas veces gran parte de los ficheros están relacionados entre sí. No suele ser buena idea meter en un CDROM un fichero grande correspondiente a un capítulo de alguna serie y cientos de ficheros pequeños no relacionados, mientras que el segundo capítulo de la serie va en otro CDROM. El algoritmo óptimo es el que emplea Programación Dinámica, una técnica muy usada para resolver problemas de este tipo. Nosotros emplearemos uno más sencillo y adecuado, un Algoritmo Voraz. Realmente no tiene mucha historia: comienza por los ficheros más grandes, e intenta meter tantos como puedas en uno de los contenedores. Cuando no se pueda introducir el siguiente fichero que toque, se salta al siguiente contenedor. De esta manera, los ficheros que se encuentren en el mismo subdirectorio tenderán a ir en grupos en los mismos contenedores. La función encargada de esta tarea es organiza(), que podemos ver en el Listado 3. Esta función hace uso de una característica que no se suele encontrar en otros lenguajes, las funciones Lambda. Una función Lambda es una función anónima, sin nombre. Se puede crear en cualquier momento, y lo que es más importante, almacenarlas en variables. Como están asociadas a una variable pueden ser pasadas como parámetros en las funciones. Y la función sort() admite 2 funciones como parámetro, de las cuales sólo se hace uso de la primera. ¿Por qué se necesita pasar una función Lambda? sort() ordena listas, pero la estructura de datos listado no es una lista simple. Es una lista que contiene listas de dos elementos. El primero es el nombre del fichero, y el segundo el tamaño. Si se desean ordenar los ficheros por tamaño será necesario decirle a sort() que se fije en el segundo miembro de la lista, que es cada elemento de listado. Y eso es, justamente, lo que hace la función Lambda. El primer parámetro de sort() es una función que se usa para comparar dos


Python • DESARROLLO

Listado 3: código del programa 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015

#!/usr/local/bin/python

054 055 056

import os import os.path

def recorre(ruta,hash): entradas = os.listdir(ruta) for entrada in entradas: ruta_entrada = ruta + "/" + entrada if os.path.isfile(ruta_entrada): hash[ruta_entrada] = os.path.getsize(ruta_entrada) elif os.path.isdir(ruta_entrada): recorre(ruta_entrada, hash) else: print "ERROR"

016 017 018 019 020 021 def organiza(hash, cantidad): 022 # genera una lista de hash con la cantidad óptima de ficheros para 023 # de manera que cada hash no puede contener más de esa cantidad. 024 025 listado = hash.items() 026 027 compara = (lambda x,y: cmp(x[1],y[1])) 028 029 listado.sort(compara, reverse=True) 030 contador = 0 031 n = 0 032 directorios = {} 033 034 for entrada in listado: 035 if (contador + entrada[1] <= cantidad): 036 if not n in directorios.keys(): 037 directorios[n] = [] 038 directorios[n].append(entrada) 039 contador += entrada[1] 040 else: 041 n += 1 042 directorios[n] = [] 043 directorios[n].append(entrada) 044 contador = entrada[1] 045 046 return directorios 047 048 def print_directorio(dir, cantidad): 049 050 for llave in dir.keys(): 051 052 cont = 0; 053 print_caja("Directorio " + str(llave))

for fichero in dir[llave]: print " %12d \t\t\t %s" % (fichero[1], fichero[0]) 057 cont += fichero[1] 058 059 print "\nTotal: " + str(cont) + "/"+str(cantidad) 060 print "\n" 061 062 def print_caja(texto): 063 texto = " | " + texto + " |" 064 print " ."+ ((len(texto) - 3)*"-") + "." 065 print texto 066 print " `"+ ((len(texto) - 3)*"-") + "'" 067 068 def genera_dirs(ruta,datos): 069 070 for llave in datos.keys(): 071 072 cont = 0; 073 074 ruta_dir = ruta + "/dir-"+ str(llave) 075 076 if (os.path.exists(ruta_dir)): 077 print "Error, "+ruta_dir+" ¡¡ya existe!!" 078 print "Elimine el directorio y vuelva a ejecutar el programa" 079 exit(-1) 080 081 os.mkdir(ruta_dir) 082 083 for fichero in datos[llave]: 084 ruta_ant = fichero[0] 085 ruta_nueva = ruta_dir + ruta_ant.split(ruta)[1] 086 os.renames(fichero[0],ruta_nueva) 087 088 def vuelca_indice(ruta, datos): 089 texto = "<?xml version=1.0>\n" 090 texto += "<coleccion>\n" 091 092 for llave in datos.keys(): 093 texto += "<contenedor id=\""+str(llave)+"\">\n" 094 ruta_dir = ruta + "/dir-"+ str(llave) 095 for fichero in datos[llave]: 096 texto +="<fichero>"+ ruta_dir + fichero[0].split(ruta)[1] + "</fichero>\n" 097 texto += "</contenedor>\n" 098 099 texto += "</coleccion>\n" 100 101 fich = open(ruta+"/indice.xml","w+") 102 fich.write(texto)

WWW.LINUX- MAGAZINE.ES

Número 14

53


DESARROLLO • Python

Figura 1: Estado original de los directorios antes de correr el script. Tenemos un directorio inmenso de 1GB. Figura 2: El script nos parte el directorio original en directorios más

103 fich.close() 104 105 if __name__ == '__main__': 106 107 hash = {} 108 ruta = "/usr/local/datos" 109 cantidad = 60000000 #en bytes 110 111 recorre(ruta,hash) 112 113 d = organiza(hash,cantidad) 114 print_directorio(d, cantidad) 115 116 genera_dirs(ruta,d) 117 118 vuelca_indice(ruta,d)

elementos, y que devuelve -1, 0 y 1. Esa función ya existe y se llama cmp(). Se creó una función Lambda que se aplica a los segundos miembros de las dos listas que admite como parámetro. Veamos su uso: >>> a = (lambda x,y:U cmp(x[1],y[1]) ... ) >>> a <function <lambda> at 0x81a5dcc> >>> a([0,1],[0,1]) 0 >>> a([0,2],[0,1]) 1 >>>

es importante fijarse como a pasa a convertirse en un función como cualquier otra.

54

Número 14

04

Movimiento de ficheros Ya sólo nos queda recorrer la estructura de datos con genera_dirs(), que genera los directorios y mueve los ficheros a su nueva localización. Cabe resaltar la función os.path.split() que separa una ruta de fichero en dos, la primera parte de la ruta hasta el nombre del fichero y el nombre del fichero en sí mismo. Aquí se usa para generar una nueva ruta. Para ello se emplea la función os.renames() que equivale a mover ficheros, pero también crea los directorios que estén en la ruta de destino y no existan.

La guinda del pastel Como somos grandes hackers y estamos a la última se ha incorporado al programa una última función. La función vuelca_indice() genera un fichero XML con el índice de contenedores y ficheros. El objetivo es que quien quiera crear un programa que grabe estos contenidos podrá facilitarse mucho la tarea leyendo este índice en lugar de tener que escanear los directorios. Una de las grandes ventajas del XML es que resulta muy sencillo generarlo. La estructura de nuestro fichero es bien simple: • Colección • Contenedor • Fichero

WWW.LINUX- MAGAZINE.ES

<fichero>/usr/local/datos/dir0/videos/rubyonrails.mov</fich ero> 05 </contenedor> 06 <contenedor id="1"> 07 <fichero>/usr/local/datos/dir1/ase2001-gfkf.ps</fichero> 08 <fichero>/usr/local/datos/dir1/icse2002-gk.ps</fichero> 09 <fichero>/usr/local/datos/dir1/esop2003-gfkf.ps</fichero> 10 <fichero>/usr/local/datos/dir1/continuations.ps</fichero> 11 <fichero>/usr/local/datos/dir1/esop2001-gkvf.ps</fichero> 12 </contenedor> 13 </coleccion>

EL AUTOR

Listado 3: código del programa (continuación)

El siguiente paso pequeños y manejables. consiste en generar una estructura consistente en un dicSe puede ver un ejemplo en el Listado 4. ■ cionario o hash, donde la llave es un número y el contenido una lista de ficheros Listado 4: fichero de índice y sus tamaños. Este hash representa cada uno de los contenedores que usaremos. 01 <?xml version=1.0> Cuando se llena uno pasamos a crear el 02 <coleccion> siguiente y así hasta quedarnos sin 03 <contenedor id="0"> ficheros.

José María Ruiz actualmente está realizando el Proyecto Fin de Carrera de Ingeniería Técnica en Informática de Sistemas. Lleva 8 años usando y desarrollando software libre y, desde hace dos, se está especializando en FreeBSD.


La Columna de Charly • ADMINISTRACIÓN

El Día a Día del Administrador de Sistemas: Sarg

LAS HERRAMIENTAS DE PEDRO Un servidor proxy ocupado es algo que ningún administrador debería permitir. El analizador de los ficheros de registro del Squid, denominado Sarg por su autor, le ayuda a mantener su servidor Squid actualizado. POR CHARLY KÜHNAST

L

o pasé bien navegando en sitios como Sourceforge o Freshmeat buscando paquetes de software interesantes. Desde luego, los paquetes con nombres sugerentes me llaman más la atención. No pude evitar fijarme en la herramienta del desarrollador de software brasileño, Pedro Orso. Estoy seguro que Pedro no era consciente de las connotaciones de su Generador de Informes de Análisis de Squid (Squid Analysis Report Generator, Sarg) para los usuarios alemanes de Linux. (Sarg en alemán significa ataúd). Pero esto no me desanimó en lo más mínimo, y menos mal, porque Sarg es exactamente la clase de herramienta que me gusta: eficiente y rápida. Realiza de manera muy eficiente la tarea para la que fue ideado: crear informes basados en los ficheros de registro de Squid.

SYSADMIN El Taller del Administrador: NTP.......66 El Network Time Protocol (NTP) proporciona la hora exacta a través de la red.

El código fuente de Sarg y los paquetes binarios para varias distribuciones Linux, *BSD, MacOS e incluso OS/2 están disponibles en [1]. Sarg toma los ficheros de registro de Squid y utiliza los datos para generar un resumen estadístico muy útil, como el mostrado en la Figura 1. Pero al contrario que la utilidad Calamaris de Squid, Sarg genera una estadística específica de usuario. Puede pasar los parámetros más importantes para Sarg en la línea de comandos; el fichero de configuración sarg.conf, (Sarg trae un ejemplo), le proporciona más opciones, como modificar el diseño de la salida. Obviamente Pedro piensa en lo que la mayoría de los usuarios esperan de la herramienta Sarg y ha proporcionado los ajustes por defecto necesarios. Esto significa que para generar un informe, simplemente se especifica el archivo de origen, es decir, el fichero access.log de Squid y el directorio objetivo donde le gustaría que Sarg pusiera los resultados. sarg -l U /var/log/squid/access.log U -o /www/sarg/

Programación Segura………..…..... 69 Asegure su servidor aprendiendo a pensar como un atacante. El Taller del Administrador: NTP.......66 El Network Time Protocol (NTP) proporciona la hora exacta a través de la red. Programación Segura………..…..... 69 Asegure su servidor aprendiendo a pensar como un atacante.

Sarg y DNS Para mayor conveniencia, Sarg tiene la opción de la línea de comandos -n que permite al DNS resolver las direcciones. Esto está bien para un Squid pequeño que cuente sólo con unos cuantos usuarios, pero si tiene una gran caché que procesa miles de millones de respuestas al día, no es conveniente dejar que Sarg lleve a cabo la resolución

WWW.LINUX-MAGAZINE.ES

de nombres, ya que el análisis le llevará todo el día. Aparte de esto, la mayoría de los administradores de DNS no estarían demasiado contentos con el estrés involuntario al que serían sometidos sus servidores. Otra característica útil es el poder restringir el análisis a un período de tiempo específico, para ello utilice la opción -d TT/MM/YYYY-TT/MM/YYYY. El tiempo ha sido siempre un problema para Squid, que lo almacena en segundos a partir de la era en su archivo access.log, con una resolución de una milésima de segundo. Aunque puede evitarse que Squid haga esto indicándole que utilice el formato del fichero de registros común, si bien se perderá alguna información en el proceso. Sarg puede ser de gran ayuda aquí. Introduciendo: sarg -convert U /var/log/squid/access.log

se mostrará el fichero de registro en STDOUT y lo proporciona en un formato legible con fecha. Un valor como 1126705707.537 se transforma en 09/14/2005 14:48:27. La pérdida del milisegundo no es en absoluto preocupante. Gracias por la aplicación, Pedro, hacía tiempo que no me divertía tanto, pero debería replantearse las siglas en beneficio de todos aquellos hackers alemanes ■ de Linux.

RECURSOS [1] Sarg: http://sarg.sourceforge.net/sarg. php

Número 14

55


ADMINISTRACIÓN • Squid

Implementar un proxy casero con Squid

PUERTO SEGURO

Un servidor proxy proporciona una navegación más segura y eficiente. Aunque existen soluciones proxy comerciales disponibles, todo lo que realmente necesitamos es Linux y un viejo PC en el desván. POR GEERT VAN PAMEL

T

engo una red casera desde hace bastantes años. Empecé con un router usando Windows XP con ICS (Internet Connection Sharing) y una tarjeta Ethernet con varias interfaces de red. Las principales desventajas eran la inestabilidad, bajo rendimiento y falta

total de seguridad. Solucionar los problemas era totalmente imposible. La configuración del firewall quedaba a merced de usuarios inexpertos, que podían pulsar aleatoriamente sobre la configuración de seguridad como el que juega a la ruleta rusa.

Finalmente migré a Linux y configuré un firewall con iptables en un Pentium II que hacía de router. El firewall mantiene a los atacantes fuera de mi red, y registra el tráfico entrante y saliente. Además del firewall iptables, también configuré un servidor proxy

Tabla1: Hardware recomendado Componentes Necesarios Intel Pentium II CPU, o superior (¿Por qué no un Alpha Server sobrante?) 80 - 100 MB de memoria mínimo 1 ó más discos duros IDE (podemos reutilizar 2 viejos discos duros: uno con 1GB del sistema y el swap y el otro con 3GB de caché, más el directorio /home) 2 tarjetas Ethernet, minihub, modem fast Ethernet y router wireless o hub CDROM, lector DVD

56

Número 14

Especificaciones 350 Mhz Cuanto más, mejor 4GB mínimo 100 Mbit/s si es posible El software se distribuye principalmente por DVD

WWW.LINUX-MAGAZINE.ES


Squid • ADMINISTRACIÓN

Squid para mejorar el rendimiento de Internet, filtrar los molestos popups y bloquear URLs peligrosas. Un servidor proxy Squid filtra el tráfico Web y cachea los archivos a los que se accede frecuentemente. También limita el uso del ancho de banda, acelera el acceso a Web y nos permite filtrar URLs. El bloqueo centralizado de publicidad y descargas peligrosas es rentable y transparente para el usuario final. Squid es una implementación completa en software libre y de alto rendimiento de un servidor proxy. Proporciona amplios controles de acceso y se integra con facilidad con el firewall iptables. En mi caso, el servidor proxy Squid y el firewall iptables trabajan juntos para proteger mi red de intrusos y HTML peligrosos. Encontraremos abundantes artículos acerca de firewalls en libros, revistas y páginas Web. (Véanse [1] y [2], por ejemplo). El servidor proxy Squid, por otro lado, no está bien documentado del todo, especialmente cuando hablamos de pequeñas redes caseras como la mía. En este artículo, vamos a mostrar cómo configurar Squid.

de la casa usando cable UTP estándar o una conexión wireless. La tabla 1 muestra el hardware recomendado para la máquina firewall. Suponiendo que el firewall esté ya funcionando, el siguiente paso es configurar Squid. Se encuentra disponible en Internet en [3] o en uno de los mirrors [4] como tar.gz (compilado desde las fuentes). Puede instalarse fácilmente usando uno de los siguientes comandos:

Comenzamos

Una vez que ha sido instalado, será necesario configurarlo. Squid tiene un archivo de configuración centralizado. Cada vez que cambia este archivo, la configuración debe recargarse con el comando /sbin/ init.d/ squid reload. Es posible editar el archivo de configuración con un editor de textos. Existe una descripción detallada de la configuración en el archivo squid.conf, aunque la explicación a veces es algo técnica y complicada de entender. Esta sección resume algunas configuraciones importantes del archivo squid.conf. En primer lugar, se habrá de evitar que ciertos metadatos relacionados con la con-

El primer paso es encontrar el hardware necesario. La Figura 1 muestra la configuración de red del Pentium II que se ha utilizado como firewall y servidor proxy. Este sistema firewall debería operar con una mínima intervención humana, por lo que tras la configuración del sistema, se pueden desconectar el ratón, teclado y monitor. Puede que tengamos que ajustar la configuración de la BIOS para que el ordenador pueda trabajar sin el teclado. El objetivo es poder colocar todo el sistema en el desván, donde ni lo oigamos. Desde el minihub mostrado en la Figura 1, se pueden “bajar las escaleras” hasta la red

rpm -i /cdrom/RedHat/RPMS/U squid-2.4.STABLE7-4.i386.rpmU # Red Hat 8 rpm -i /cdrom/Fedora/RPMS/U squid-2.5.STABLE6-3.i386.rpm U # Fedora Core 3 rpm -i /cdrom/.../U squid-2.5.STABLE6-6.i586.rpmU # SuSE 9.2

En el momento de escribir estas líneas, la versión estable de Squid es la 2.5.

Configurar Squid

figuración lleguen al mundo exterior cuando se navegue por la Web: vi /etc/squid/squid.conf ... anonymize_headers deny U From Server Via User-Agent forwarded_for off strip_query_terms on

Nótese que no pueden hacerse anónimos Referer y WWW-Authenticate ya que de lo contrario, los mecanismos de autenticación y control de acceso no funcionarán. forwarded_for off significa que la dirección IP del servidor proxy no será enviada al exterior. Con strip_query_terms on no se registran en el log los parámetros de las URL más allá del signo ?. Cuando este parámetro está en off, se registra la URL completa en los archivos log de Squid. Esta característica puede ayudar a depurar fallos en los filtros de Quid, pero también puede violar las reglas de privacidad. La siguiente configuración identifica el host de Squid, el dominio (interno) donde opera la máquina y el nombre de usuario responsable del servidor. Nótese el punto delante del dominio. Más adelante, encontramos el nombre del servidor local de DNS y el número de nombres de dominio a cachear en el servidor Squid. visible_hostname squid append_domain .mshome.net cache_mgr sysman dns_nameservers 192.168.0.1 dns_testnames router.mshome.net fqdncache_size 1024 http_port 80 icp_port 0


ADMINISTRACIÓN • Squid

http_port es el puerto usado por el servidor proxy. Se puede elegir cualquiera, siempre que la configuración no entre en conflicto con otros puertos de nuestro router. Una elección común es la 8080 o la 80. El puerto por defecto de Squid, el 3128, no es especialmente fácil de recordar. No se está usando cp_port, por lo que lo fijamos a 0. Esta configuración sincroniza los servidores proxy. Con log_mime_hdrs on, es posible hacer visibles las cabeceras mime en el archivo access.log.

Evitar Bloqueos Squid necesita guardar su caché en algún lugar del disco duro. La caché es un árbol de directorios. Con la opción cache_dir en el archivo squid.conf, se puede especificar la configuración con características como las siguientes: • mecanismo de I/O del disco – aufs • ubicación de la caché en el disco – /var/cache/squid • cantidad de espacio en disco que puede ser usado por el servidor proxy – 2.5 GB • número de directorios principales – 16 • subdirectorios – 256 Por ejemplo: Las opciones para métodos de acceso a disco son las siguientes: • ufs – acceso a disco clásico (demasiada I/O puede ralentizar el servidor Squid) • aufs – UFS asíncrona con hilos, menos riesgo de conflictos de acceso al disco • diskd – demonio diskd, evita también el peligro de conflicto de acceso al disco pero usando más memoria. UFS es el sistema de I/O de archivos clásico de UNIX. Se recomienda usar aufs para evitar cuellos de botella. (Al usar aufs, van a existir menos procesos). # ls -ld /var/cache/squid lrwxrwxrwx 1 root rootU 19 Nov 22 00:42 U /var/cache/squid -> U /volset/cache/squid

E s re c o m e n d a b l e m a n t e n e r l a u b i c a c i ó n e s t á n d a r p a ra l a c a c h é en /var/cache/squid, y de allí c re a r u n e n l a c e s i m b ó l i c o a l d i re c t o r i o re a l d e c a c h é . S i s e m u eve a o t ro d i s c o p o r m o t i vo s d e re n d i m i e n t o o d e c a p a c i d a d , sólo será necesario modificar el enlace simbólico.

58

Número 14

Figura 1: Configuración básica de una LAN Ethernet.

El espacio en disco se distribuye por todos los directorios. Normalmente se esperaría una distribución pareja a lo largo de los directorios, pero en la práctica, se acepta una cierta variación en la distribución. Es posible encontrar configuraciones más complejas utilizando múltiples discos, pero para el uso casero, una estructura de directorios es suficiente.

Sustitución de la Caché El servidor proxy usa un algoritmo LRU (Least Recently Used). Estudios detallados de HP Laboratories [6] han revelado que un algoritmo LRU no es siempre la opción más inteligente. La configuración GDSF mantiene pequeños objetos populares en la caché, mientras que elimina los más grandes y menos usados, incrementando de esta manera el rendimiento global. cache_replacement_policyU heap GDSF memory_replacement_policyU heap GDSF

Los objetos grandes requeridos una sola vez pueden colocar fuera muchos objetos pequeños, por lo que será conveniente que limitemos el tamaño máximo de objeto para la caché: cache_mem 20 MB maximum_object_sizeU 16384 KB maximum_object_sizeU _in_memory 2048 KB

WWW.LINUX-MAGAZINE.ES

Especificación del Formato de Log Puede elegirse entre el formato de log de Squid y el formato estándar de servidor Web usando el parámetro emulate_httpd_log. Cuando el parámetro se fija a on, se usa el formato de Web. Si se fija a off, obtendremos más detalles con el formato Squid. Ver [7] para mayor información acerca del análisis de archivos log de Squid.

Jerarquía Proxy El proxy Squid puede trabajar de manera jerárquica. Si se desea evitar el proxy padre para algunos destinos, se puede habilitar una resolución directa. ¡El navegador usará aún nuestro proxy local! acl direct-domain U dstdomain .turboline.be always_direct allow U direct-domain acl direct-path urlpath_regexU -i "/etc/squid/direct-path.reg" always_direct allow direct-path

Algunos ISPs permiten usar su servidor proxy para visitar sus propias páginas Web incluso aunque no se sea cliente. Esto puede ayudar a acelerar las visitas a sus páginas. Cuanto más cercano esté el proxy a las páginas originales, más probabilidad hay de que la página se cachee. Debido a que nuestro propio ISP es más lejano, el ISP tenderá menos a cachear los contenidos de su competidor…


Squid • ADMINISTRACIÓN

cache_peer proxy.tiscali.beU parent 3128 3130 U no-query default cache_peer_domain U proxy.tiscali.be .tiscali.be

no-query significa que no usamos, o no podemos usar, ICP (Internet Caching Protocol), véase [8]. Puede obtenerse la misma funcionalidad usando expresiones regulares, pero esto proporciona cache_peer proxy.tiscali.beU parent 3128 3130 U no-query default acl tiscali-proxy U dstdom_regex -i U \.tiscali\.be$ cache_peer_access U proxy.tiscali.be allow U tiscali-proxy

mayor libertad. El ACL puede incluir también una expresión regular (regex para abreviar) con la URL usando una construcción url_regex.

Para Squid, las expresiones regulares pueden especificarse inmediatamente, o pueden estar en un nombre de fichero entre dobles comillas, en cuyo caso el archivo debería contener una expresión regex por línea, sin líneas vacías. La -i (ignorar mayúsculas) significa que se usarán comparaciones sin diferenciación entre mayúsculas y minúsculas. Si se está configurando un sistema con múltiples proxys, es posible especificar un round-robin para acelerar la resolución de las páginas y minimizar el retraso cuando uno de los servidores no esté disponible. Recordemos que la mayoría de los navegadores establecen conexiones en paralelo para obtener todos los elementos de una página. Si se usan múltiples servidores proxy para obtener estos elementos, la respuesta debería ser más rápida. Los archivos FTP se descargan normalmente una sola vez, por lo que generalmente no se deseará cachearlos, excepto cuando se descarguen repetidamente. Así mismo, las páginas locales no se cachean normalmente, debido a que ya residen en nuestra red:

Listado 1: Bloqueando páginas no buscadas 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18

acl block-ip dst "/etc/squid/block-ip.reg" deny_info filter_spam block-ip http_access deny block-ip acl block-hosts dstdom_regex -i "/etc/squid/block-hosts.reg" deny_info filter_spam block-hosts http_access deny block-hosts acl noblock-url url_regex -i "/etc/squid/noblock-url.reg" http_access allow noblock-url Safe_ports block-path urlpath_regex -i "/etc/squid/block-path.reg" deny_info filter_spam block-path http_access deny block-path acl block-url url_regex -i "/etc/squid/block-url.reg" deny_info filter_spam block-url http_access deny block-url

cache_peer 80.200.248.199 U parent 8080 7 U no-query round-robin cache_peer 80.200.248.200 U parent 8080 7 U no-query round-robin ... cache_peer 80.200.248.207U parent 8080 7 U no-query round-robin

Filtrado con Squid En las secciones precedentes se han comentado algunas configuraciones importantes de Squid. También se ha dicho que las listas ACL (Access Control Lists) pueden usarse para permitir acceso directo a las páginas sin usar el proxy padre. En esta sección, se examinará cómo usar las listas ACL para un control más detallado al acceso a Internet.

WWW.LINUX-MAGAZINE.ES

acl FTP proto FTP always_direct allow FTP acl local-domain dstdomain U .mshome.net always_direct allow U local-domain acl localnet-dst dst U 192.168.0.0/24 always_direct allow U localnet-dst

Tabla 2:Guía para ACL • el orden de las reglas es importante • primero se listan todas las reglas de denegación • se ejecuta la primera regla coincidente • el resto de las reglas se ignora • la última regla debería ser permite todo

La tabla 2 proporciona una guía para la creación de listas ACL. Puede ser una buena idea permitir la navegación WYSIWYG (lo-que-ves-es-lo-que-tienes). Si no se quieren ver ciertas páginas o marcos, se pueden bloquear automáticamente las correspondientes URLs en el servidor proxy. Es posible filtrar por: • dominios de cliente o servidor • subredes IP del cliente o servidor • ruta URL • URLs completas, incluyendo parámetros • palabras clave • protocolos: HTTP, FTP • métodos: GET, POST, HEAD, CONNECT • día y hora • tipo de navegador • nombre de usuario El Listado 1 muestra ejemplos de comandos que bloquean páginas no deseadas. El script del Listado 2 hará invisibles las páginas no deseadas. Cada vez que Squid ejecuta la etiqueta deny_info, envía el archivo /etc/squid/errors/filter_spam al navegador en lugar de a la página Web… filtrando efectivamente los objetos no deseados. La marca <!-- esconde cualquier otro mensaje de error de Squid en el cuerpo del texto.

Número 14

59


ADMINISTRACIÓN • Squid

Listado 2: Hacer Invisible una Página 01 vi /etc/squid/errors/filter_spam 02 ... 03 <script language="JavaScript" type="text/javascript"> 04 <!-05 window.status="Filter " + document.location; //.pathname; 06 // --> 07 </script> 08 <noscript><plaintext><!--

Squid nos permite bloquear contenidos por subred IP. Por ejemplo, se pueden bloquear páginas con contenido sexual explícito. Pueden usarse whois [9] para ayudarnos a identificar las subredes y luego añadir las subredes al archivo /etc/squid/block-ip.reg: vi /etc/squid/block-ip.reg ... 64.255.160.0/19 64.57.64.0/19 64.7.192.0/19 66.115.128.0/18 66.152.64.0/19 66.230.128.0/18

Para bloquear anuncios o páginas con contenido sexual por el nombre de dominio, es posible listar expresiones regulares describiendo las páginas en el archivo /etc/squid/block-hosts.reg, como se muestra en el Listado 3. También puede ser una buena idea bloquear ciertos tipos de archivos. Por ejemplo, puede que no queramos permitir los archivos .exe, dado que a veces son archivos zip ejecutables que instalan software. Squid permite bloquear archivos por ruta, nombre de archivo o extensión del archivo, tal y como se muestra en el Listado 4. acl SSL_ports port 443 563 acl SSL_ports port 1863 U # Microsoft Messenger acl SSL_ports port 6346-6353 U # Limewire http_access allow U CONNECT SSL_ports http_access deny U CONNECT

60

Número 14

Squid también permite filtrar por expresiones regulares usadas en la URL. Por supuesto, nuestro filtro puede ocasionalmente provocar un falso positivo. Pueden añadirse expresiones regulares para las URL que específicamente no queramos bloquear en /etc/squid/noblock-url.reg. vi /etc/squid/noblock-url.reg ... ^http://ads\.com\.com/

Proteger los Puertos Por razones de seguridad, se deberían deshabilitar todos los puertos y habilitar sólo los puertos Web usando la sintaxis mostrada en en Listado 5. Lo mismo puede hacerse con los puertos con conexión. Pueden habilitarse los puertos SSL cuando se esté conectado, y denegarlo en otro caso. Es importante recordar que el protocolo normal HTTP es sin conexión. El cliente y el navegador establecen una nueva conexión para cada página visitada.

Habilitando al Resto Para habilitar únicamente los protocolos y métodos que se deseen: acl localhost src U 127.0.0.1/255.255.255.255 acl localnet-src src U 192.168.0.0/24 http_access deny !localnet-src

La última regla debería permitirlo todo, ya que la regla anterior era una prohibición… No debemos olvidar reiniciar el servidor Squid cada vez que cambiemos los parámetros, tecleando el siguiente http_access allow all

comando: Para SuSE el directorio /sbin/init.d es estándar. Para Fedora, se creará un enlace simbólico: cd /sbin ln -s /etc/init.d

Listado 3:Bloqueo por Nombre de Dominio 01 02 03 04 05 06 07 08 09 10 11 12 13 14

vi /etc/squid/block-hosts.reg ... ^a\. ^ad\. ^adfarm\. ^ads\. ^ads1\. ^al\. ^as\. \.msads\.net$ ^ss\. ^sa\. ^sc\. ^sm6\.

¡Debe impedirse que desconocidos hagan mal uso de nuestra caché! Se desea que sólo se use en la propia intranet. Los usuarios externos en Internet no deberían poder acceder a nuestra caché:

acl allow-proto proto HTTP http_access deny !allow-proto acl allow-method U method GET POST http_access deny U !allow-method

WWW.LINUX-MAGAZINE.ES

15 16 17 18 19 20 21 22 23 24 25 26 27 28

^tracking\. adserver.adtech.de \.belstat\.be$ \.doubleclick\.net$ \.insites\.be$ ^metrics\. \.metriweb\...$ \.metriweb\....$ \.playboy\.com$ \.hln\.be$ side6 www.whitehouse.com

Una vez que se haya finalizado la configuración, se usará setup (Fedora), yast2 (SuSE) o una herramienta equivalente para activar el servicio Squid. Tras recargar, si algo no funciona como se esperaba, puede buscare la razón en el archivo log en var/log/squid/cache.log.

/sbin/init.d/squid reload


Squid • ADMINISTRACIÓN

Listado 4:Bloqueo por Ruta o Extensión

RECURSOS [1] Presentación para el grupo de usuarios de HP-Interex en Belgica el 17/03/ 2005, titulada “Implementing a home Router, Firewall, Proxy server, and DNS Caching Server using Linux”: http://users.belgacombusiness. net/ linuxug/pub/router/ linux-router-firewall-proxy.zip [2] Firewalls: http://www.linux-magazine. com/issue/40/ Checkpoint_FW1_Firewall_Builder.pdf http://www.linux-magazine.com/issue/ 34/IPtables_Firewalling.pdf [3] Acerca de Squid en general: http:// www.squid-cache.org http:// squid-docs.sourceforge.net/latest/ book-full.html#AEN1685 http://www. squid-cache.org/FAQ/FAQ-10.html [4] Servidores mirror de Squid: http:// www1.de.squid-cache.org http:// www1.fr.squid-cache.org http:// www1.nl.squid-cache.org http:// www1.uk.squid-cache.org [5] Suse 9.2 Professional – Distribución en DVD http://www.linux-magazine. es/issue/07/DVD.pdf [6] Para mayor información acerca de las políticas de remplazamiento de caché GDSF y LFUDA, véase: http://www. hpl.hp.com/techreports/1999/ HPL-1999-69.html http://fog.hpl. external.hp.com/techreports/98/ HPL-98-173.html [7] Reporte y análisis de los archivos log de Squid: http://www.linux-magazine. com/issue/36/Charly_Column.pdf [8] ICP – Internet Caching Protocol: http:// en.wikipedia.org/wiki/ Internet_Cache_Protocol [9] La base de datos whois: http://www. ripe.net/db/other-whois.html [10] Expresiones Regulares: http://www. python.org/doc/current/lib/ module-re.html [11] Ejemplos de archivos de configuración para Squid: http://members. lycos.nl/geertivp/pub/squid

Conclusiones Este artículo es el resultado de una presentación para la organización Belgium HPInterex. Las diapositivas están disponibles en [1], donde aparecen más detalles acerca de la configuración del firewall iptables, el router, el servidor de cacheo de DNS, el servidor DHCP y el servidor NTP.

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15

vi /etc/squid/block-path.reg ... \.ad[ep](\?.*)?$ \.ba[st](\?.*)?$ \.chm(\?.*)?$ \.cmd(\?.*)?$ \.com(\?.*)?$ \.cpl(\?.*)?$ \.crt(\?.*)?$ \.dbx(\?.*)?$ \.hlp(\?.*)?$ \.hta(\?.*)?$ \.in[fs](\?.*)?$ \.isp(\?.*)?$ \.lnk(\?.*)?$

16 17 18 19 20 21 22 23 24 25 26 27 28 29

\.md[abetwz](\?.*)? \.ms[cpt](\?.*)?$ \.nch(\?.*)?$ \.ops(\?.*)?$ \.pcd(\?.*)?$ \.p[ir]f(\?.*)?$ \.reg(\?.*)?$ \.sc[frt](\?.*)?$ \.sh[bs](\?.*)?$ \.url(\?.*)?$ \.vb([e])?(\?.*)?$ \.vir(\?.*)?$ \.wm[sz](\?.*)?$ \.ws[cfh](\?.*)?$

Imposición del Control Paterno y Bloqueo de Spyware Deberíamos configurar nuestro firewall iptables de manera que bloquee todo el tráfico HTTP saliente a menos de que se use el servidor proxy. Dado que el proxy esta en la red local, permite todas las peticiones entrantes desde los navegadores locales. Cualquier intento de saltarse los filtros Squid se bloquea por la regla FORWARD del firewall que corta el tráfico HTTP saliente. Los programas de Spyware usan generalmente el protocolo HTTP (recordatorio: puerto 80) para las conexiones salientes, pero parece que el Spyware raramente usa el proxy (da la impresion de que los creadores de Spyware son demasiado perezosos como para inspeccionar la configuración). De esta manera el Spyware queda bloqueado por las reglas del firewall.

Listado 5: Protección de Puertos 01 acl Safe_ports port 80 # http 02 acl Safe_ports port 21 # ftp 03 acl Safe_ports port 2020 # BeOne Radio 04 acl Safe_ports port 2002 # Servidor Local 05 acl Safe_ports port 8044 # Tiscali 06 acl Safe_ports port 8080 # Escaneo puertos Turboline 07 acl Safe_ports port 8081 # Prentice Hall 08 09 # Denegar peticiones a puertos desconocidos 10 http_access deny !Safe_ports

Si se está buscando un mejor rendimiento, una navegación más segura y una manera de bloquear el acceso a contenido peligroso, se debería intentar colocar un servidor proxy en el desván. Para los que se preocupan por el consumo: un Pentium II con-

WWW.LINUX-MAGAZINE.ES

sume unos 11 kWh/semana. Debería evaluarse este gasto frente a la mayor seguridad y la disminución de los quebraderos de cabeza al operar nuestro propio fire■ wall con proxy Squid.

EL AUTOR Geert Van Pamel ha trabajado como jefe de proyectos en Belgacom, Bélgica, desde 1997. Miembro de DECUS desde 1985 y miembro de la directiva de HP-Interex desde 2002. Aprendió UNIX en un sistema PDP en 1982, y trabaja en la actualidad con Linux en un entorno compartido con otros servidores como Tru64 UNIX, HP-UX, OpenVMS, NonStop Tandem, SUN y NCR Teradata.

Número 14

61


ADMINISTRACIÓN • OpenVPN

Taller: Un Túnel Privado Rápido y Sencillo con OpenVPN

EL TÚNEL DE DATOS Los cortafuegos a veces prohiben todo el tráfico excepto la navegación por la web, impidiendo que los usuarios puedan utilizar los servicios de IRC o los servidores de difusión, a menos que se utilice una red privada virtual como OpenVPN. POR MIRKO DÖLLE

U

na configuración típica del cortafuegos consiste en denegar todo lo que no sea estrictamente necesario para el trabajo diario. Incluso herramientas relativamente inofensivas como una webcam o un servidor personal de IRC no funcionarán a través del cortafuegos. Aparte de rogarle al administrador que cambie las reglas, la única solución que queda es abrir un túnel privado a través del cortafuegos con OpenVPN.

En este artículo describimos cómo realizar ese túnel con una conexión VPN. Suponemos que el software de OpenVPN ya está instalado en la máquina Linux o que los lectores saben cómo obtenerlo e instalarlo. OpenVPN es una aplicación muy común que se incluye en la mayoría de las distribuciones Linux populares. Véase la documentación para saber más sobre cómo configurar OpenVPN.

Minando el Cortafuegos OpenVPN no requiere los privilegios de root para establecer una VPN. Sólo con que el programa tenga acceso a los dispositivos virtuales TUN/TAP, es suficiente para funcionar con los privilegios del usuario. En un escenario simple, todo lo que se necesita son unos cuantos parámetros para configurar la VPN. El único fichero que se necesita es el que contiene la clave secreta, que se puede

Listado 1: openvpn-server.sh 01 02 03 04 05 06 07 08 09 10 11

62

#!/bin/bash DEVICE="tun0" PORT="1194" LOCALIP="192.168.8.1" REMOTEIP="192.168.8.128" KEYFILE="/etc/openvpn/shared.key" MAXRATE="16000" /usr/sbin/openvpn -daemon --dev $DEVICE \ --proto tcp-server -port $PORT \

Número 14

12 13 14 15 16 17 18 19 20 21

--ifconfig $LOCALIP $REMOTEIP \ --secret $KEYFILE --persist-tun --ping 30 \ --ping-restart 180 -shaper $MAXRATE \ --writepid /var/run/openvpn-${DEVICE}.pid while true; do if [ ! -e /var/run/openvpn-${DEVICE}.pid ]; then break fi done

WWW.LINUX- MAGAZINE.ES


OpenVPN • ADMINISTRACIÓN

Figura 1: Utilizando TCP los clientes configuran una conexión encriptada al servidor OpenVPN y transmiten por el túnel cualquier otro protocolo hacia el servidor.

crear en la máquina cliente con el comando openvpn --genkey --secret secret.key para posteriormente copiarlo en el servidor. Un protocolo no orientado a la conexión, como UDP, es la mejor opción para realizar el túnel con TCP/IP: esto evita que se dé el escenario en el que pueda producirse un timeout simultáneo entre OpenVPN y la conexión TCP, que podría ocasionar una avalancha de paquetes de reintento. Desafortunadamente, la mayoría de los cortafuegos y los routers de las empresas o de los cibercafés no permiten que los clientes puedan recibir paquetes UDP desde Internet. La única alternativa en este caso es optar por una conexión TCP. Esto implica que el servidor, para que el cliente pueda establecer la conexión VPN, ha de estar escuchando en un puerto determinado a la espera de conexiones entrantes.

Una Configuración Simple Los Listados 1 y 2 muestran dos scripts para el servidor y para el cliente. OpenVPN no requiere ficheros de configuración, por lo que, la mejor opción para el establecimiento de la configuración del túnel se realiza a través de la línea de comandos mediante sus parámetros. Al principio de los Listados 1 y 2 se muestran algunas opciones que los usuarios tienen que cambiar para adaptarlo a sus necesidades.

El servidor no necesita mucha información: OpenVPN requiere la dirección IP del servidor (LOCALIP) y de la máquina cliente (REMOTEIP) de las interfaces VPN, el dispositivo del túnel, el número del puerto y el fichero con la clave. La variable MAXRATE tan sólo es necesaria para controlar el tráfico y establecer la tasa de transferencia máxima para la transmisión de paquetes medida en bytes por segundos.

Controlando el Tráfico Si el script del servidor se está ejecutando en un servidor raíz, por ejemplo, puede que al principio no tenga mucho sentido el control de tráfico, a menos que se sea partidario de mantener un perfil bajo y esconder el túnel en el tráfico general de la red. La principal ventaja para el control del tráfico se encuentra en las pequeñas redes con una conexión DSL. Como el ancho de banda de subida es normalmente mucho más bajo que el ancho de banda de bajada en las líneas DSL, el resto de conexiones a Internet diferentes del túnel se pueden ver afectadas. Yo suelo usar un límite de 16 kbps, como se muestra en el Listado 1, para una conexión DSL con un ancho de banda máximo de subida de 256KBits/s, estableciendo este límite me permite disponer casi de la mitad del ancho de banda para otros servicios como Apache o simplemente para navegar por la red.

WWW.LINUX- MAGAZINE.ES

La sintaxis de OpenVPN desde las líneas 10 a la 15 hace uso de las variables definidas al principio. Los parámetros críticos aquí son --daemon, --proto tcpserver y --persist-tun. --daemon ejecuta OpenVPN en modo servicio, permitiendo al script del servidor continuar su ejecución. Esto no es importante en el Listado 1, ya que el bucle que va desde la línea 17 a la 21 impide que finalice el script antes de que finalice OpenVPN. Sin embargo, si necesita abrir el cortafuegos o cambiar los parámetros del router, las líneas desde la 15 a la 17 son el mejor lugar para realizarlo. Se puede añadir cualquier comando al final del script si se quiere ejecutar alguna acción final.

Protocolos del Cliente y del Servidor El parámetro --proto tcp-server habilita OpenVPN en el servidor y le indica que se ponga a la escucha de las conexiones TCP entrantes. El servicio del cliente usa el protocolo tcp-client, como se muestra en la línea 13 del Listado 2. Sin --persist-tun, el interfaz TUN estaría cerrado y sería reabierto cada vez que el túnel fuera interrumpido, lo que implicaría la pérdida de las entradas de enrutamiento del túnel y la pérdida de todas las conexiones. El bucle de las líneas 17 a 21 del Listado 1 es una versión simplificada si se compara con el bucle del script del listado en [2]; carece del mecanismo de

Número 14

63


ADMINISTRACIÓN • OpenVPN

Listado 2: openvpn-client.sh 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21

#!/bin/bash DEVICE="tun0" REMOTE="athome.dyndns.org" GATEWAY="192.168.1.254" PORT="1194" LOCALIP="192.168.8.128" REMOTEIP="192.168.8.1" REMOTENET="192.168.42.0/24" KEYFILE="/etc/openvpn/shared.key" MAXRATE="16000" /usr/sbin/openvpn -daemon --dev $DEVICE \ --remote $REMOTE -proto tcp-client \ --port $PORT -ifconfig $LOCALIP $REMOTEIP \ --secret $KEYFILE --persist-tun --ping 30 \ --ping-restart 180 \ --writepid /var/run/openvpn-${DEVICE}.pid for ((i=0; i<10; i=$[$i+1])); do ifconfig $DEVICE >/dev/null 2>/dev/null if [ "$?" -eq 0 ]; then

control de fallos que verifica si OpenVPN está aún ejecutándose. En el caso de que el bucle finalice el script procesará el código final de limpieza tras la línea 21. openvpn-server.sh puede ser invocado fácilmente usando una entrada en init en /etc/inittab. El script cliente para OpenVPN del Listado 2 es el doble de largo que el script del servidor, ya que tiene que configurar el entorno del router de la máquina cliente después de llamar a OpenVPN en las líneas 12 a 17. Esto supone que OpenVPN ha de establecer el dispositivo de red, que se verifica comprobando el estado de salida de ifconfig en las líneas 20 y 21. Ahora que el dispositivo del túnel está operativo, la línea 22 establece una ruta estática al servidor OpenVPN. La conexión VPN depende ahora de la ruta por defecto, así que la línea 24 del

22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

route add $REMOTE gw $GATEWAY if [ "$?" -eq 0 ]; then route del default gw $GATEWAY route add -net $REMOTENET gw $REMOTEIP route add default gw $REMOTEIP ping -c 1 $REMOTEIP >/dev/null 2>/dev/null & break fi fi sleep 5 done while true; do if [ ! -e /var/run/openvpn-${DEVICE}.pid ]; then break fi done route del $REMOTE gw $GATEWAY route add default gw $GATEWAY

script puede borrar dicha ruta, que posteriormente vuelve a establecerse en la línea 26 usando la puerta de enlace del servidor OpenVPN. A partir de este punto, cualquier conexión de red nueva será enrutada a través de la VPN hacia el servidor (Figura 1). OpenVPN acaba de abrir ahora una brecha en el cortafuego de la empresa y la máquina cliente dispone desde este momento de un acceso a Internet oculta y sin restricciones. El comando ping de la línea 27 abre un túnel VPN, que se ha configurado pero que aún permanece cerrado en este punto.

Enrutado Individual Para impedir que el script cliente sea obstruido por problemas de enrutamiento, los comandos de enrutado en el bucle desde las líneas 19 a 32 se repiten diez veces como mucho.

El bucle en las líneas 34 a 38 está reducido como ocurre en el script del servidor del Listado 1, aunque esto no tiene efecto en la funcionalidad: espera que OpenVPN termine. Las líneas 40 y 41 borran después la ruta estática al servidor OpenVPN y reestablecen la puerta de enlace por defecto. La solución para establecer un túnel OpenVPN mostrado en este artículo requiere un servidor para cada cliente VPN. Este requerimiento podría quedar fuera de control fácilmente si se necesitan soportar múltiples clientes o si la red engloba varias oficinas de la empresa. Para los usuarios que consideren requerimientos mayores, OpenVPN versión 2.0 o posterior proporcionan infraestructura de Clave Pública, CAs y soporte para múltiples clientes para escenarios más avanzados. Pero para un servidor personal de IRC o para una webcam, una configuración simple basada en la línea de comandos tal como la descrita en este artículo, es ■ suficiente.

RECURSOS [1] OpenVPN: http://openvpn.net [2] Scripts OpenVPN: http://www. mirko-doelle.de/linux/openvpn-server.sh y ... / openvpn-client.sh

64

Número 14

WWW.LINUX- MAGAZINE.ES


Taller del Administrador • ADMINISTRACIÓN

Trucos: El Sistema de Ficheros de Unix

ORGANICÉMONOS

Las máquinas Unix organizan los archivos en un sistema de ficheros en forma de árbol con estructura jerárquica. Un sistema de nombres convencional definido en el Filesystem Hierarchy Standard (FHS) ayuda a los administradores a encontrar el camino. POR MARC ANDRÉ SELIG

I

ncluso una instalación mínima de Linux escribe miles de archivos y directorios en el disco. El aumento de distintos dialectos de Unix llevó a un número de diseños completamente diferentes para organizar archivos de un modo significativo en el disco. Por ejemplo, algunos administradores denominan sus directorios home de usuarios como /usr/home/Nombre, mientras que otros prefieren /users/Nombre. Un buzón podría estar en /usr/mail/Nombre en una máquina y en otra podría encontrarse en /var/spool/mail/Nombre. En este caso, la diversidad es una desventaja. Al contrario que Windows, por ejemplo, el diseño modular de Unix requiere que los administradores seleccionen un

único programa para cada tarea de entre varios posibles y tienen que reemplazarlo con uno compatible con versiones anteriores si aparece una actualización. Por ejemplo, si un administrador necesita reemplazar el Agente de Transferencia de Correo (MTA), la nueva versión debería ser capaz de localizar y manejar los mensajes existentes. A menos que quiera definir las rutas por sí mismo, lo habitual es conformarse con los estándares. La estructura de directorios estandarizados también simplifica el intercambio de ficheros entre máquinas diferentes. Algunos administradores hacen su tarea más cómoda realizando las principales instalaciones de software una sola vez. Todas las

WWW.LINUX-MAGAZINE.ES

máquinas de la LAN usan un sistema de ficheros en red como NFS para montar los directorios de los programas. Por supuesto, esto sólo funciona si los programas críticos y los ficheros están en el mismo lugar en cada máquina. La comunidad de Linux comenzó a trabajar formalmente en la estandarización del sistema de archivos en el otoño del 1993 (antes de que el kernel 1.0 se desarrollara en Marzo de 1994). La idea detrás de la estandarización del sistema de archivos era la de portar el software de cualquier variante Unix a cualquier distribución de Linux con el menor esfuerzo posible. El proyecto FSSTND (Filesystem Standard) siguió al FHS (Filesystem Hierarchy Stan-

Número 14

65


ADMINISTRACIÓN • Taller del Administrador

dard) [1], que aún hoy en día es el estándar para todas las distribuciones. Aunque las especificaciones de FHS provocan argumentos en muchos casos, el mero hecho de que existieran causaron la estandarización que muchas distribuciones Linux han venido confirmando.

ración para el cargador (Grub o Lilo) se almacenan aquí. Aunque estos ficheros son parte del núcleo del sistema Linux, no necesitan residir en la partición con el sistema de ficheros raíz. Después de todo, al cargador no le importa el sistema de ficheros mientras carga el kernel.

Básico

Recursos

Cada ordenador con Linux/Unix necesita un número de ficheros principales y directorios. Incluso si el ordenador obtiene algo más de la red, este grupo principal de ficheros debe estar disponible desde el exterior. En el caso que el sistema disponga de múltiples particiones físicas, estos ficheros residen en la partición boot. (Cuando un ordenador arranca, puede obtener los ficheros desde un servidor, pero esto tiene que suceder antes de que se ejecute init e inicialice el sistema). El sistema de ficheros raíz contiene un sistema Unix completamente funcional y ofrece de este modo muchas ventajas: si el controlador de la tarjeta del interfaz de red falla tras una actualización del kernel, sería imposible activar partes del sistema de ficheros. El administrador necesita acceder al sistema de ficheros raíz donde se encuentran las herramientas para resolver los problemas. Lo mismo es aplicable en el caso de restaurar ficheros dañados desde una copia de seguridad: todo lo que necesita un administrador debería residir en la zona root. El kit de herramientas debe incluir la shell favorita del usuario y las bibliotecas necesarias, un editor de texto y software para acceder a otras partes del sistema como fdisk, el familiar mkfs y mount. La especificación del Filesystem Hierarchy Standard [1] tiene un completo listado. Junto al directorio raiz /, el área del sistema de ficheros raíz incluye en directorio /etc con sus ficheros de configuración, /bin y sbin con la mayoría de los programas importantes, /lib para bibliotecas dinámicas y módulos del kernel y /dev para los ficheros de dispositivos. El directorio home del usuario root, /root, también se encuentra a menudo en esta partición. /boot juega un papel especial; en un sistema moderno Linux, el kernel, una imagen de disco ram con módulos críticos del kernel y ficheros de configu-

Los usuarios finales pocas veces cambian los programas de la partición raíz, ya que la mayoría de las aplicaciones software se encuentran en /usr. Quienes están familiarizados con Unix leerán usr como “Unix System Resources”, recursos del sistema Unix, aunque normalmente se conozca como el directorio “user”. /usr también tiene muchos subdirectorios disponibles en el sistema de ficheros raíz. Hay un /usr/bin que coincide con /bin; los programas del sistema se encuentran tanto en /sbin como en /usr/ sbin y hay un /usr/lib para las bibliotecas dinámicas. De acuerdo con las reglas de FHS, no debería haber un /usr/etc. Los datos de configuración para los programas de /usr deben estar en /etc. /usr también tiene un número de subdirectorios adicionales: el código fuente se almacena en /usr/src, /usr/include almacena los ficheros include para varios lenguajes de programación y /usr/share/ doc, /usr/share/man y /usr/share/info almacenan los ficheros de documentación para los paquetes de software instalados. Para que FHS sea más amigable, el

66

Número 14

Listado 1: Cambiando fuera /usr/share 01 02 03 04 05 06 07 08 09 10

11 12

#!/bin/sh mke3fs /dev/sdc1 mount /dev/sdc1 /mnt cd /usr/share tar cf - . | (cd /mnt && tar xpf -) umount /mnt mount -o remount,rw /usr # falls /usr read-only ist rm -rf /usr/share/* mount -o remount,rw / # falls / read-only ist echo '/dev/sdc1 /usr/share ext3 defaults 1 3' >>/etc/fstab mount /usr/share exit

WWW.LINUX-MAGAZINE.ES

software adicional puede almacenarse tanto en /usr como en /opt. Mientras que /usr organiza los ficheros por funciones (los binarios se almacenan en /usr/bin, las bibliotecas en /usr/lib), en /opt se organizan los ficheros por vendedor o por paquetes de software. Solaris es un ejemplo extremo de este convenio multiplataforma con su colección de paquetes en /opt/SUNW*. Linux a menudo tiene instalaciones en /opt/kde3 o /opt/gnome. Pero para usar paquetes que han sido instalados en /opt en la shell, necesitará establecer su variable PATH. Los ficheros de /usr y /opt son bastante estáticos por naturaleza. Tiene sentido montar estos dos directorios como sólo lectura después de iniciar el sistema, evitando modificaciones accidentales o intencionadas. Y aunque es importante tener una copia de seguridad completa, normalmente puede hacerlo sin una copia de seguridad de una partición estática [2]. /usr tiende a llenarse con datos especialmente en los ordenadores antiguos, en este caso los administradores deberían considerar el mover los subdirectorios de /usr a otras particiones, como se muestra en el Listado 1. El script crea un sistema de ficheros en una partición vacía, /dev/sdc1 y luego mueve el contenido de /usr/share a esta partición.

Hogar, Dulce Hogar Los directorios home de los sistemas basados en BSD tradicionalmente se encuentran bajo /usr/home. Linux usa /home. En redes locales, los administradores utilizan muy a menudo un automontador para mapear /home a un directorio de red, que se monta dinámicamente desde el servidor de ficheros cuando un usuario se autentifica. Los directorios de datos de los servicios al igual que los servidores HTTP o FTP también son asignados a sus propios directorios. Las distribuciones tienen soluciones diferentes para los puntos de montaje, aunque el FHS estipula que estos datos residan bajo el directorio /srv. Actualmente Suse hace esto, permitiendo al directorio raíz de los documentos de Apache apuntar a /srv/www. Muchos administradores encuentran esto complicado de usar. Por ejemplo, Debian está bastante orgullosa de ser compatible a FHS, aunque usa /var/


Taller del Administrador • ADMINISTRACIÓN

Figura 1:El sistema de ficheros típico de una máquina Linux. Para una mejor representación y flexibilidad, los administradores deberían distribuir los datos en varias particiones en el disco duro.

www como directorio raíz de los documentos; Red Hat Enterprise Linux adopta una solución parecida. El directorio de datos para el demonio FTP normalmente está bajo /home/ftp.

Compilando Software Si compila e instala su propio software en un sistema Linux, no debería usar ninguno de los directorios que hemos mencionado anteriormente. Para ello utilice el directorio /usr/local. Los scripts o programas que ha desarrollado deberían encontrarse bajo /usr/local/bin, mientras que la documentación debería estar en usr/local/man. Puede decidir si quiere poner el código fuente en /usr/ local/src para que todo el mundo pueda leerlo o guardarlo en su directorio home. También tiene sentido poner /usr/local y /home en particiones separadas. Si se cambia a otra distribución, un simple comando mount o una nueva entrada en /etc/fstab le proporcionará las copias de seguridad de sus ficheros la próxima vez. Si prefiere evitar crear muchas particiones, podría crear una partición para /home y usar un enlace simbólico a /home/local en /usr/local.

Datos Estáticos y Variables Un sistema Unix en ejecución produce un gran número de cambios en los ficheros que se encuentran en el directorio /var (datos variables). Hay dos ventajas en esta solución: primera, separa los datos volátiles de los datos de sólo lectura de la partición /usr. Además, los ficheros de log pueden crecer a un tamaño considerable, dependiendo de la cantidad de uso que se le dé al sistema. En caso de una carga inesperadamente pesada, los ficheros de registros de Apache o del cortafuegos crecerán desorbitadamente. Si el fichero de registros llena la partición root, el sistema comenzará a hacer cosas raras porque muchos programas no serán capaces de escribir en los ficheros temporales. En otras palabras, es buena idea poner /var en un directorio separado. Un subdirectorio de /var que es extremadamente importante es /var/log (este es el lugar donde los ficheros de registro se almacenan); /var/mail mantiene los buzones de correo de los usuarios, aunque los sistemas Linux más antiguos usan /var/spool/mail. /var/run tiene los ficheros PID con los identifi-

WWW.LINUX-MAGAZINE.ES

RECURSOS [1] Filesystem Hierarchy Standard: http:// www.pathname.com/fhs/ [2] Marc André Selig, “Backups”:Linux Magazine 07, p. 66.

cadores de proceso de los servicios activos para las comunicaciones interproceso (IPC) que los programas utilizan. /var/empty es un directorio home vacío para una parte privilegiada del servicio SSH, por ejemplo.

El Resto El sistema de ficheros raíz también tiene puntos de montaje para otros sistemas de ficheros, incluyendo /proc, un sistema de ficheros virtual que proporciona un número de núcleos variables. Los dispositivos externos utilizan subdirectorios bajo /media, tal como /media/floppy o /media/cdrom. De acuerdo con el estándar, /mnt solo debería ser usado para montar sistemas de ficheros para uso temporal, por ejemplo, para resolver problemas de la máquina o para acceso al sistema de ficheros de red durante un ■ período breve de tiempo.

Número 14

67


ADMINISTRACIÓN • DM-Crypt

Encriptación del Disco Duro con DM-Crypt, LUKS y Crypsetup

MENSAJES SECRETOS Si se toma en serio la seguridad, pruebe la encriptación del disco duro con DM-Crypt y LUKS. POR CLEMENS FRUHWIRTH Y MARKUS SCHUSTER

L LOS AUTORES

a encriptación de ficheros es un medio popular para asegurarse la privacidad y la seguridad de los datos a nivel de ficheros. Un intruso que logre colarse a través del cortafuegos no

68

Clemens Fruhwirth es el autor de LUKS y del papel blanco titulado “New Methods in Hard Disk Encryption”, que definen la teoría subyacente. Clemens también es el inventor de ESSIV y el implementador de LRW-AES y EME para Linux. Markus Schuster es un integrador de sistemas con Bits & Bytes (un proveedor de servicios IT de Bavaria); se define a sí mismo como un fanático del software libre. Ha estado usando LUKS desde su creación.

Número 14

será capaz de leer los ficheros privados si están encriptados, ¿cierto? En realidad, la encriptación selectiva de ficheros proporcionada por utilidades tales como GnuPG cubre alguna de sus huellas, pero no todas. Un intruso puede aún aprender sobre su sistema… y quizás incluso reconstruir algunos de los ficheros de datos fisgoneando los ficheros secretos, los temporales, los datos de configuración y el historial de comandos. El directorio /var/spool/cups, por ejemplo, podría proporcionar datos de ficheros que se hayan imprimido anteriormente y herramientas como Gnome Thumbnail Factory podrían estar almacenando una copia desencriptada de las imágenes encriptadas. En vez de seguir cada acción realizada sobre cada fichero para eliminar

W WWWW. LWI N . LUI N XU -M XA -M GA G Z IANZEI .NEES. E S

cualquier rastro dejado, los usuarios de Linux pueden elegir encriptar los datos a un mayor nivel usando DM-Crypt. El módulo del kernel dm-crypt trabaja al nivel del dispositivo de bloques, permitiendo a los usuarios encriptar particiones completas. El proceso es transparente a la aplicación, permitiendo el acceso al usuario que haya sido validado en el sistema. DM-Crypt encripta el denominado dispositivo de respaldo (el disco físico) y hace uso de un dispositivo de bloque virtual para proporcionar acceso al contenido en claro bajo /dev/mapper. Los usuarios pueden acceder a este dispositivo de bloques para configurar y montar el sistema de ficheros. Este artículo examina la tecnología subyacente a DM-Crypt y la nueva herramienta de gestión LUKS (Linux Unified Key Setup).


DM-Crypt • ADMINISTRACIÓN

La Configuración DM-Crypt se instala en una capa flexible conocida como dispositivo mapper. Los módulos del dispositivo mapper se configuran a través de las denominadas tablas DM, ficheros de texto simples que especifican cómo debe manejar el dispositivo mapper los accesos a las zonas del disco virtual. El programa dmsetup procesa estos ficheros de texto y utiliza las llamadas a ioctl() para pasar los detalles al kernel. El formato de las tablas DM para DMCrypt es muy pesado para usarlo a diario. El software espera que la clave sea una cadena hexadecimal de tamaño fijo. El módulo utiliza la clave para encriptar los datos del dispositivo de bloques. Sin embargo, almacenar la clave de forma permanente en los ficheros de las tablas DM es como dejar la llave colgando del pomo de la puerta. Por ello, la clave hay que introducirla en el momento de montar el dispositivo. Teclear hasta 32 caracteres hexadecimales de memoria puede que no sea fácil, pero cryptsetup puede ayudar. cryptsetup es una herramienta que genera una clave criptográfica desde (más simple) una fase de paso, y luego le pasa la clave al kernel. La Figura 1 muestra el entorno cryptsetup.

Se pueden parametrizar dos características importantes de cryptsetup: la generación de claves y la encriptación. La primera especifica cómo generará cryptsetup las claves desde una contraseña proporcionada por el usuario. Por defecto usa un algoritmo hash, que proporciona al usuario la libertad de seleccionar una contraseña de cualquier longitud. El código hash comprimirá la información para proporcionar un número fijo de bytes. La Figura 1 muestra a cryptsetup usando los valores por defecto: el hash Ripemd-160 genera una clave de 256 bits. Hay que seleccionar dos parámetros para el proceso de encriptación: el algoritmo y el modo. Cryptsetup pasa estos parámetros y la clave obtenida al kernel y el módulo DM-Crypt coordina el procedimiento, usando el API Crypto para manejar la encriptación.

Utiliza la Fuerza, LUKS Desafortunadamente, cryptsetup tiene un lado negativo. Separa los detalles de lo que hay que hacer con un conjunto de información encriptada de la información encriptada. La mayoría de los parámetros de cryptsetup se encuentran en scripts o en ficheros de configuración que, obviamente, no pueden estar en las

Figura 1: cryptsetup (arriba) pide al usuario una contraseña y utiliza una función hash para crear una clave de longitud fija, que es pasada al kernel (centro). DM-crypt (abajo) utiliza la clave para encriptar y desencriptar los datos del disco duro (o los dispositivos de bloques de respaldo).

particiones encriptadas. Si se pierden estos ficheros o no puede recordar la configuración de un disco portable, se perderá el acceso a los datos encriptados. LUKS (Linux Unified Key Setup) elimina esta segregación. LUKS es un estándar formal [3], implementado por la herramienta cryptsetupLUKS [4] (Figura 2). Este último es una versión del cryptsetup original. LUKS define una cabecera para las particiones DM-Crypt (Figura 3); la cabecera incluye toda la información para la generación segura de la clave. Como es parte de la partición encriptada, la configuración está siempre disponible justo allí donde se necesita. Cryptsetup-LUKS y el cryptsetup original también difieren con respecto a la forma en la que generan las claves desde una frase de paso (Figura 2). La gestión de claves de LUKS está basada en tres conceptos: jerarquía de claves, PBDKDF2 y almacenamiento de información antiforense.

Gestión Seguras

de

Contraseñas

La aplicación cryptsetup pasa la clave, que se genera desde la contraseña, directamente al kernel. La mayor pega a esta solución es que el software necesita

Figura 2: cryptsetup-LUKS almacena los parámetros de la partición encriptada en la cabecera de la partición del dispositivo de bloques de respaldo (arriba a la izquierda). La clave obtenida protege la clave maestra que encripta los datos en la partición.

WWW.LINUX-MAGAZINE.ES

Número 14

69


ADMINISTRACIÓN • DM-Crypt

reencriptar todos los datos cada vez que la contraseña se modifica. CryptsetupLUKS presenta una capa de gestión de contraseñas adicional para eliminar este problema. La jerarquía de claves inserta una capa de encriptación extra entre la clave derivada y la clave usada por el kernel para proteger los datos de la partición. Además, la clave derivada tan sólo protege la denominada clave maestra, que encripta los datos de la partición (Figura 2). Para cambiar la contraseña, cryptsetup-LUKS desencripta la clave maestra usando la contraseña antigua, reencripta la clave usando la nueva contraseña y sobrescribe la copia de la antigua clave maestra con el valor nuevo. Como los datos no se ven afectados por la clave maestra, la partición encriptada permanece segura. Esto podría ahorrarle medio día de trabajo duro en el caso de que tenga que desencriptar 120GBytes; la jerarquía de claves reduce el tiempo necesario para cambiar una contraseña a unos pocos segundos. LUKS almacena la clave maestra encriptada en la cabecera de la partición sin imponer una restricción de copia simple. Para soportar múltiples contraseñas para una misma partición, LUKS puede almacenar múltiples copias equivalentes de la clave maestra y encriptar cada una de ellas con una cadena diferente. Cada una de estas contraseñas proporciona al usuario acceso al contenido del disco en claro. Esto es particularmente útil si se desea almacenar

una contraseña de contingencia o proporcionar múltiples credenciales diferentes a los usuarios. LUKS reserva hasta ocho huecos para contraseñas en la cabecera (Figura 3).

Mejor que un Hash

Como cryptsetup, LUKS necesita un algoritmo hash para convertir una contraseña de longitud arbitraria en un número fijo de bytes. Para ello, utiliza la solución genérica PBKDF2 (PasswordBased Key Derive Function, Version 2). PBKDF2 es un componente PKCS#5 (Public Key Cryptography Standard 5). PKCS#5 fue especificado en RFC 2898 [5]. Entre otras cosas, PBKDF2 hace uso del estiramiento y la dispersión para impedir los ataques basados en diccionarios. Los usuarios prefieren usar contraseñas cortas y fácilmente recordables. Fechas de nacimiento y nombres de mascotas son mucho más comunes que cadenas aleatorias de 22 caracteres. Desafortunadamente, se necesitan al menos 22 caracteres para representar una clave de 128-bits. Pero no hay mucha gente que tenga la capacidad de recordar o incluso teclear Sq5woq7501VUE5irAXau.a cada día. Una función de derivación satisface ambos requerimientos: el usuario puede teclear una contraseña fácilmente recordable y la función genera una clave más compleja. Un algoritmo que genera una clave de 128 bits a partir de una contraseña más corta tiene que rellenar el espacio entrópico, es decir, el espacio entre el grado de aleatoriedad en el domino de la contraseña y el dominio de la clave. Un simple rellenado produciría una clave mayor, pero no sería más aleatorio que la propia contraseña y sería fácilmente adivinable. Imaginemos que Figura 3: LUKS añade los parámetros que necesita cryptsetup- un usuario introduLUKS para generar la clave desde una contraseña introducida por el jera solamente pausuario a la cabecera de la partición encriptada. Cada clave con- labras inglesas; esto el tiene una copia encriptada de la clave maestra que DM-Crypt utiliza restringiría alcance del dominio para proteger los datos.

70

Número 14

WWW.LINUX-MAGAZINE.ES

de la contraseña y no proporcionaría la suficiente entropía. Un atacante podría simplemente ejecutar un ataque basado en diccionario en vez de intentar las 2128 claves posibles que proporciona una clave de 128 bits. Un diccionario inglés, por ejemplo, podría tener menos de 220 entradas. 220 es una potencia 108 veces menor que el espacio de la clave completo; una reducción fatal, ya que casi cualquiera podría atacar una clave de 20 bits. Para salvar este problema, PBKDF2 utiliza deliberadamente una función compleja para derivar una clave a partir de la contraseña. Aunque esto tarda un poco, el usuario no lo apreciará, ya que la operación sólo se realiza una vez. Un atacante tendría que intentar 220 frases. Si cada una puede consumir un segundo, le llevaría 12 días (220 segundos). Si el usuario combina dos palabras para formar una contraseña, el ataque podría llevar 30.000 años (240 segundos). Esta barrera artificial se conoce como estiramiento. PBKDF2 usa una función de estiramiento que implica un esfuerzo computacional infinitamente variable.

Dispersión y Estiramientos Pero esto no es suficiente para frenar a un hacker determinado. Un atacante podría crear una tabla enorme que contuviera las entradas y las salidas de la función de estiramiento para eliminar la necesidad de repetir entradas en ataques futuros. Para impedir que pueda suceder esto, PBKDF2 añade una cadena seleccionada aleatoriamente a la contraseña antes de generar la clave. LUKS almacena la versión en claro en la cabecera de la partición. Ahora, el atacante necesita añadir el valor hash PBKDF2 para cada palabra del diccionario. De hecho, el atacante necesitaría los valores hash de cada palabra del diccionario junto con cada combinación de posibles cadenas añadidas. Cuanto mayor sea la dispersión, mayor tendría que ser la tabla que necesitaría. PBKDF2 aumenta el tamaño de la tabla a una escala inimaginable. El universo tiene menos átomos que el número de entradas que debería contener un diccionario universal para contener cada combinación PBKDF2. Los atacantes se ven forzados a reducir el número de intentos con esperanza de acertar. El mecanismo de con-


DM-Crypt • ADMINISTRACIÓN

traseñas de UNIX utiliza una solución parecida: sin embargo, la dispersión es mucho menor en este caso (12 bits almacenados en los dos primeros dígitos).

Triturando Como se mencionó antes, es muy difícil deshacerse de los datos en un dispositivo de almacenamiento magnético [2]. Para cambiar efectivamente o borrar la contraseña de la jerarquía de claves, es de vital importancia destruir completamente la copia antigua de la clave maestra. Con un poco de suerte, un usuario podría escribir el sector correcto del disco duro después de unos pocos intentos y sobrescribir físicamente la antigua clave maestra. Pero la suerte es algo en lo que los usuarios y los criptógrafos raramente confían. El firmware del disco duro está continuamente combatiendo la destrucción de datos, ya que lo que intenta por todos los medios es justo lo contrario, salvarlos. Una de las formas en las que el disco duro proporciona mayor seguridad es reasignando los bloques dañados, una técnica simple para detectar sectores que son difíciles de leer. El firmware automáticamente copia estos sectores a un área del disco especialmente reservada para este propósito y redirecciona cualquier operación de lectura o escritura posterior del sector original a la copia. El sector original no puede ser borrado desde este punto en adelante, ya que el firmware redireccionará cualquier intento de escritura a la zona reservada. Desafortunadamente, esto podría dejar fragmentos de la clave en el disco duro, lo que implicaría que un experto en recuperación de datos o un hacker determinado, podría aún acceder y recuperar los fragmentos usando un firmware modificado. Esto es un problema grave para las claves maestras de LUKS, que son muy pequeñas en comparación con el tamaño de los sectores (128, 192 o 256 bits para AES) y por ello es fácil que se encuentren dentro de un sector. Todo ello si sucediera que el firmware decidiera mover el sector en cuestión a la zona reservada cuando la contraseña antigua aún siguiera activa. Ni los discos SCSI ni IDE disponen de comandos que proporcionen acceso al sector original.

Figura 4: El modo de encriptación ECB (Electronic Code Book) encripta cada bloque de texto en claro independientemente de cada bloque. Esto significa que la misma entrada Pi a la función de encriptación E resultará idéntica a la salida Ci.

Neutralización de Expertos en Recuperación de Datos El autor de LUKS introdujo fragmentos de información antiforense (AF Splitter) para confundir a los expertos en recuperación. Para reducir la probabilidad estadística de seguirle la traza a los ficheros borrados que hayan sobrevivido en el medio de almacenamiento magnético, AF Splitter expande los datos en un factor de cuatro mil. Los datos expandidos no son redundantes; el registro completo es siempre necesario para recuperar la clave maestra. La operación contraria consiste en reunir de nuevo en memoria estos datos para borrarlos fácilmente. AF Splitter distribuye los datos originales (Variable x) basado en la fórmula x= a1 + a2 + a3 + … + a4000. El algoritmo genera las variables a1 hasta a3999 aleatoriamente y calcula a4000 para balancear la ecuación. El combinador suma los elementos ai y para ello precisa cada uno de ellos individualmente, no hay redundancia. Si desaparece un elemento, la ecuación no se puede resolver y no se puede calcular x. Para destruir los datos, tan sólo hay que borrar alguno de los 4000 sectores implicados en el proceso, ya que la operación de combinación necesita el registro completo. Desde luego, es mucho más fácil sobrescribir uno de los 4000 sectores. Las estadísticas muestran que esto funciona bastante bien, tal y como se puede leer en [1]. Gracias a AF Splitter, las contraseñas pueden ser cambiadas sin dejar ningún rastro detrás. En combinación con la jerarquía de claves y PBKDF2, esto proporciona al usuario

WWW.LINUX-MAGAZINE.ES

Figura 5: En el modo de encriptación CBC (Cipher Block Chaining) realiza la operación de XOR con los resultados de una vuelta de encriptación XOR con el siguiente bloque. Esto asegura que los bloques idénticos de texto en claro producirán distintos textos cifrados.

una gestión de claves con calidad para las particiones encriptadas con DMCrypt.

Salvando el Medio Almacenamiento

de

Lo que los usuarios principalmente esperan de un disco encriptado es la encriptación. DM-Crypt proporciona dos modos de cifrado: ECB (Electronic Code Book) y CBC (Cipher Block Chaining). Ambos modos están sujetos a unas pocas vulnerabilides, todas ellas se resuelven por el candidato más prometedor del momento LRW-AES [6][7] (LRW: Liskov, Rivest, Wagner; AES: Advanced Encryption Standard). ECB (Figura 4) no se merece realmente el nombre de Modo de Cifrado: Almacena cada bloque individual cifrado resultante sin realizar ningún cálculo adicional. Esto significa que para cada clave, el texto en claro siempre se convertirá en el mismo texto cifrado. Expresado matemáticamente, ECB es una función biyectiva de texto en claro a texto cifrado. Esto es peligroso si el atacante conoce el texto en claro de un bloque encriptado, lo que puede averiguar a partir de las cabeceras estandarizadas del sistema de ficheros, por ejemplo. Si el atacante sabe que el primer sector de la partición encriptada empieza con una serie de ceros, sabrá cómo se encriptan los ceros. No necesita una clave para ello, y simplemente puede comparar todos los bloques de texto cifrado con el comienzo de la partición. Si el atacante descubre bloques idénticos, sabrá que la desencriptación de estos bloques se corresponde con ceros. El mismo principio Número 14

71


ADMINISTRACIÓN • DM-Crypt

ESSIV Para generar una marca de agua, el atacante necesita crear dos sectores idénticos en el disco. El objetivo es manipular el mecanismo de encriptación de forma que proporcione dos resultados idénticos para Figura 6a: El tradiencriptar dos seccional CBC tores en el disco. comienza encripEn la Figura 5 se tando mediante puede ver que el XOR-ing la IV con atacante puede el primer bloque de identificar todos texto en claro. los valores de entrada para Pi, pero no el IV. Éste es el valor usado para modificar el primer texto en claro, como se mues-

tra en la Figura 6a. Las marcas de agua abren una brecha aplicando P i -

puede ser compensado restando 1 de P 1 (Figura 6b). Si el atacante configura todas las subsecuencias Pi como el primer sector, los textos cifrados son idénticos. ESSIV (Encrypted Salt Sector IV) resuelve este Figura 6b: Las marFigura 6c: ESSIV impide que problema. Pasa el cas de agua compenel posible atacante calcule el número del sector a san el cambio de IV IV porque no conoce la clave una función, el resulpor el inverso del secreta K. tado de ello depende cambio en P1. de la clave secreta (Figura 6c). El atacante no puede manipular P 1 en el 1 en vez de Pi al segundo sector. El IV sector dos para compensar por la para el sector dos es algo mayor que diferencia IV. Tampoco tiene la clave el IV del sector uno. Este incremento necesaria para calcular los IVs.

se puede aplicar a cualquier bloque de texto en claro.

dos de texto cifrado.

Ocultar y Buscar

Una de las características de esta clase de recursión es que la primera ronda de encriptación produce un efecto en las

Hay dos formas básicas de ocultar esta redundancia del texto en claro. Una solución es añadir otro componente al proceso de encriptación; este componente necesita ser único para cada localización del disco, por ejemplo la posición en el disco duro. Esto significaría que bloques idénticos de texto en claro en posiciones diferentes proporcionarían resultados diferentes tras su encriptación. La segunda solución utiliza un modo de encriptación que tiene en cuenta los bloques ya encriptados. La forma más sencilla de implementarlo es haciendo uso de la recursión. CBC (Cipher Block Chaining) puede ser simple, pero produce un sistema de encriptación recursiva efectiva. Realiza una operación de XOR entre el texto del bloque cifrado anteriormente con el texto en claro actual. CBC entonces encripta el texto en claro modificado y aplica el resultado al siguiente bloque de texto en claro. Échese un vistazo a la Figura 5 para ver cómo funciona CBC. Incluso si varios bloques de texto en claro contiguos son idénticos, la recursión produce un efecto de bola de nieve. Esto significa que bloques de texto en claro idénticos son modificados usando diferentes resulta-

72

Número 14

Efecto de Bola de Nieve

Figura 7: El modo de encriptación LRW no utiliza recursión. Evitar el tipo de ataque ECB (Figura 4) añadiendo blancos. El factor de blanqueo se calcula haciendo referencia a la posición en el disco duro de n y a la clave secreta K.

WWW.LINUX-MAGAZINE.ES

subsecuentes rondas. Esto no es útil para la encriptación de los discos duros, donde toda la partición tendría que ser reencriptada si el contenido del primer sector se ve modificado. La respuesta típica aquí es que hay que ver cada sector como el resultado de una función recursiva y hay que procesar cada sector independientemente del resto. Esto lleva a un problema familiar: dos sectores con idéntico texto en claro dan como resultado el mismo texto cifrado. Aunque los sectores son mucho mayores que los bloques, en un cifrado de bloques, el contenido aun podría permanecer idéntico: imagínese un usuario creando múltiples copias de un mismo fichero, por ejemplo. Aquí es donde se aplica el primer truco: el número de sector cambia la encriptación especificando el vector de inicialización (IV, Figura 5). Dos modificaciones diferentes del primer texto en claro dispararán diferentes efectos de bola de nieve y conducirán a diferentes textos cifrados. La variante estándar de DM-Crypt aplica el número de sector directamente como en IV. Esto está referido a una generación plana IV. Desafortunadamente, esta solución es vulnerable a los ataques de marcas de agua, donde un atacante introduce datos para que posteriormente pueda redescubrir dichos datos sin tener que conocer la clave.


DM-Crypt • ADMINISTRACIÓN

Figura 8: El dispositivo mapper se localiza bajo Device Drivers | Multi-device support (RAID and LVM) | Device mapper support en la configuración del kernel. Para DM-Crypt se requiere crypt.

Las marcas de agua pueden contener hasta 5 bits de información [1]. Un atacante podría añadir marcas de agua a un correo electrónico, que posteriormente se lo enviaría a la víctima para averiguar dónde almacena los mensajes. Las marcas de agua también podrían ser añadidas a ficheros MP3, imágenes u otros ficheros que podrían enviarse a los miembros de una empresa. Esto haría posible atacar la privacidad de un usuario. Sin tener que desencriptar, el espía podría acceder a la información del disco de la víctima. El generador ESSIV (Encripted SaltSector IV) IV impide esto. Las marcas de agua suponen una relación simple entre los IVs de dos sectores contiguos. Esto es verdad en el caso simple; el IV para el sector n es seguido por el IV n + 1 para el siguiente sector. ESSIV añade complejidad a la secuencia, haciendo imposible para un atacante calcular la secuencia sin saber al menos parte de la clave secreta (véase el cuadro “ESSIV”).

Blanqueo de Datos Seguro que se estará preguntando por qué MD-Crypt utiliza una mezcla de recursión y manipulación basada en la posición del disco duro, cuando ésta última sería suficiente por sí misma. Hay una razón histórica para utilizar CBC: es una solución probada y comprobada y sus propiedades han sido investigadas por muchísima gente. Las alternativas, que recaen por completo en el número de bloque, son jóvenes en términos criptográficos. LRW es un modo de encriptación que integra el número de bloque en una rutina de encriptación de un modo sencillo y eficaz. Primero, LRW calcula un factor de blancura basado en la clave secreta y

en el número de bloque. Luego añade el factor de blancura al texto en claro y encripta la suma, antes de añadir el factor de blancura de nuevo (Figura 7). Estos dos pasos son conocidos como preblanqueado y postblanqueado. Ligan el texto cifrado con su posición en el disco duro para obtener resultados de encriptación diferentes para textos en claro idénticos almacenados en diferentes partes del disco. LRW elimina las vulnerabilidades conocidas asociadas con CBC mientras mejora el rendimiento. Como CBC no se adapta bien en entornos multiprocesadores, ya que cada paso recursivo está basado en los resultados de paso previo, LRW no puede utilizar múltiples procesadores paralelos. El autor de LUKS, que también es el coautor de este artículo, Clemens Fruhwirth, ha implementado y comprobado LRW para DM-Crypt, y su publicación es inminente.

Frustrado por el Kernel Actualmente, LRW no está disponible para DM-Crypt. El diseño de gestión de la memoria alta/baja de Linux hace que el módulo del kernel procese más de dos áreas altas de memoria. La implementación LRW está basada en un intento genérico de reimplementación de Scatterwalk (parte de la Crypto-API), que sería capaz de acceder a un número arbitrario de áreas de la memoria alta simultáneamente. Debido a las restric-

ciones actuales a dos áreas de memoria, una implementación genérica no conseguiría lo que el autor pretende y esto lo habría llevado a abandonarlo por frustación [8]. Por ahora, DM-Crypt es el modo de cifrado más seguro implementado de CBC-ESSIV, al menos hasta que alguien que no le interese en exceso las interminables e inútiles discusiones de la lista de correo del kernel [9] avance y desarrolle una variante adecuada de Scatterwalk. Los autores de este artículo estarán encantados de verlo. Los trabajos matemáticos para LRW han sido completados e implementados para ajustarse a los estándares.

La Instalación Para utilizar DM-Crypt, cryptsetup y LUKS se necesitan unos cuantos módulos del kernel y algunas herramientas. Las opciones para DM-Crypt están ocultas en Device Drivers | Multi-device support | Device mapper support en la configuración del kernel y bajo Crypt target support (Figura 8) en la misma sección. Téngase en cuenta que es necesario seleccionar Prompt for development and/ or incomplete code/drivers bajo Code maturity level options, de otro modo Crypt-Target permanecerá oculto. Como DM-Crypt se basa en las funciones de Crypto-API, hay que seleccionar al menos un algoritmo en Cryptographic options | Cryptographic

Listado 1: cryptsetup-LUKS 01 $ dd if=/dev/zero of=verysecret.loop bs=52428800 count=1 02 1+0 records in 03 1+0 records out 04 $ losetup /dev/loop0 verysecret.loop 05 $ cryptsetup -c aes-cbc-essiv: sha256 -y -s 256 luksFormat /dev/loop0 06 07 WARNING! 08 ======== 09 This will overwrite data on /dev/loop0 irrevocably. 10 11 Are you sure? (Type uppercase< yes): YES 12 Enter LUKS passphrase: ****** 13 Verify passphrase: ****** 14 $ cryptsetup luksOpen

WWW.LINUX-MAGAZINE.ES

15 16 17 18 19 20 21 22 23 24 25 26 27

/dev/loop0 verysecret Enter LUKS passphrase: ****** key slot 0 unlocked. $ mkfs.xfs /dev/mapper/ verysecret amount /dev/mapper/verysecret /mnt $ umount /mnt $ cryptsetup luksClose verysecret $ cryptsetup luksAddKey /dev/loop0 Enter any LUKS passphrase:****** key slot 0 unlocked. Enter new passphrase for key slot: ****** $ cryptsetup luksDelKey /dev/loop0 0 losetup -d /dev/loop0

Número 14

73


ADMINISTRACIÓN • DM-Crypt

Figura 9: Como DM-Crypt se basa en CryptoAPI para la encriptación, necesita seleccionar al menos un algoritmo en Cryptographic options | Cryptographic API. La mejor opción por ahora es el algoritmo AES.

API (Figura 9). Los autores recomiendan AES. Lo único que se necesita es un algoritmo de encriptación; la herramienta cryptsetup-LUKS maneja las operaciones, como el código hash para generar la clave a partir de la contraseña. La mayoría de las distribuciones Linux establecen estas opciones por defecto. Se puede introducir modprobe dm-crypt para probar. El comando debería funcionar bien. DM-Crypt será un componente oficial de Linux con el kernel 2.6.4; el generador ESSIV IV necesita al menos la versión del kernel 2.6.10. Los componentes de LUKS están disponibles para descargarse desde [4]. Hay paquetes para Debian, Gentoo, Suse y Red Hat; cryptsetup-luks es un componente estándar de Fedora 4. Los usuarios con otras distribuciones pueden seguir el procedimiento estándar, ./configure && make && make install para compilarlo e instalarlo, suponiendo que Libpopt, Libgcrypt (Versión 1.1.42 o posterior) y Libdevmapper estén instaladas.

cryptsetup-LUKS cryptsetup soporta varias acciones. Corresponde al tipo de herramientas que permiten a los administradores de Linux asignar sistemas de ficheros a dispositivos de bloques y montar estos sistemas de ficheros. El Listado 1 muestra un ejemplo. Para mantenerlo lo menos invasivo que sea posible, la llamada a dd en la línea 1 crea un contenedor de 50 MByte, que se habilita como un dispositivo de bloques usando el bucle de la línea 4. Inicialmente, la acción más importante de cryptsetup es luksFormat, que prepara el dispositivo de bloques (en nuestro caso el dispositivo loopback) para ser usado para la encriptación. Este es también el paso donde hay que decidirse por un

74

Número 14

algoritmo de encriptación en concreto. Para realizar el formateo es necesario el dispositivo de bloques y opcionalmente un fichero, cuyo contenido se usará como contraseña. LUKS hace referencia a este fichero como el fichero de clave. Los siguientes parámetros son útiles: • -c especifica el algoritmo y para las versiones recientes del kernel, el modo de encadenamiento y el generador IV. Estos tres parámetros deben ser separados por guiones (por defecto: aes-cbc-plain). La variante más segura actualmente es aes-cbcessiv:sha256. • -y le indica a cryptsetup que pida dos veces la contraseña para evitar errores tipográficos. Este parámetro no tiene sentido con un fichero de claves. • -s especifica la longitud del la clave de encriptación. En la línea 5 del Listado 1, se puede observar la llamada completa. Tecleando YES en la línea 11, el usuario confirma que los datos existentes podrían perderse. Luego tendrá que establecer la primera contraseña (línea 12).

Correspondencias con Sistema de Ficheros

el

Para usar el sistemas de ficheros que se acaba de preparar, cryptsetup-LUKS tiene que establecer una correspondencia entre el dispositivo físico de bloques y el dispositivo virtual de bloques. La acción luksOpen se encarga de esto (línea 14). Si la contraseña está almacenada en un fichero (véase luksformat), cryptsetup necesita el parámetro -d seguido del nombre del fichero de la clave. En nuestro ejemplo, el usuario teclea una contraseña (línea 15). Cryptsetup-LUKS crea automáticamente el dispositivo de bloques con el nombre específico de verysecret en /dev/mapper/. La llamada a mkfs.xfs en la línea 17 pone un sistema de ficheros XFS en el dispositivo. El resultado puede ser montado como se muestra en la línea 19. No hay que olvidarse de desmontar la partición antes de aplicar los cambios (línea 20).

Limpiando Después de concluir el trabajo, habría que deshacer la correspondencia para evitar tener abierta una puerta a los atacantes y espías. La acción luksClose se encarga de esto.

WWW.LINUX-MAGAZINE.ES

Como se mencionó anteriormente, cryptsetup-LUKS puede manipular múltiples contraseñas por dispositivo de bloques. Esto facilita el cambio de una contraseña comprometida sin tener que reencriptar los datos. La luksAdd Key espera el dispositivo físico de bloques como parámetro (Listado 1, línea 22). Tras teclear cualquier contraseña actual, la herramienta solicita una nueva contraseña adicional. También se puede especificar un fichero de claves. La acción luksDelKey (línea 26) elimina una contraseña existente. Espera como parámetros el dispositivo físico de bloques y la posición de la clave que va a ser eliminada. Esta última es donde se encuentra almacenada la clave. Como cryptsetup-LUKS gestiona hasta ocho contraseñas por defecto, las posiciones de las claves van desde 0 hasta 7. El programa solicitará la posición donde se va a almacenar la contraseña cuando se invoque a luksOpen (línea 16) o luksAddKey (línea 24). ■

RECURSOS [1] Clemens Fruhwirth, “New Methods in Hard Disk Encryption”: http://clemens. endorphin.org/publications [2] Peter Gutmann, “Secure Deletion of Data from Magnetic and Solid-State Memory”: http://www.cs.auckland.ac. nz/~pgut001/pubs/secure_del.html [3] Clemens Fruhwirth, “LUKS On-Disk Format Specification”: http://luks. endorphin.org/LUKS-on-disk-format. pdf [4] Software LUKS: http://luks.endorphin. org [5] RFC 2898, “PKCS #5: Password-Based Cryptography Specification Version 2.0”: http://rfc.net/rfc2898.html [6] Moses Liskov, Ronald L. Rivest y David Wagner, “Tweakable Block Ciphers”: http://www.cs.berkeley.edu/ ~daw/papers/tweak-crypto02.pdf [7] IEEE, “Draft Proposal for Tweakable Narrow-block Encryption”: http:// www.siswg.org/docs/ LRW-AES-10-19-2004.pdf [8] Clemens Fruhwirth, “LRW for Linux is dead”: http://grouper.ieee.org/groups/ 1619/email/msg00253.html [9] Discusión de ls lista de correo del kernel sobre los cambios de Scatterwalk: http://lkml.org/lkml/2005/1/24/54


Bienvenidos a Linux User Ésta 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.

Yammi

76

La base de datos musical Yammi para KDE (Versión 3.2 o superior) es un buen sustituto de un tocadiscos.

Desktopía

78

Trayer aporta una útil bandeja donde depositar iconos de applets de uso frecuente. De gran utilidad para aquellos que no disponen de KDE o GNOME.

Evince

80

Evince se está convirtiendo en el visor estándar de GNOME para PDFs y otros formatos de documentos.

Educación

82

En nuestra segunda entrega sobre moodle, vemos como utilizar la plataforma como profesores y alumnos y examinamos ejemplos en el entorno de clases pre senciales.

Línea de comandos

86

Un escueto comando es todo lo que se necesita para empaquetar los datos o extraerlos de un archivo.

WWW.LINUX- MAGAZINE.COM

ISSUE 52 MARCH 2005

73


LINUX USER • KTools: Yammi

Búsquedas rápidas y divertidas fiestas con la base de datos de música Yammi

CAJA DE MÚSICA

La base de datos musical Yammi [1] para KDE (Versión 3.2 o superior) es un buen sustituto de un tocadiscos. POR FRANK WIEDUWILT

L

a base de datos de música Yammi puede administrar incluso la mayor de las colecciones de canciones y ofrece una arquitectura flexible que permite a sus usuarios aprovechar el poder de los reproductores de medios. La página de inicio de Yammi solamente tiene el código fuente para la versión actual, yammi1.2.2.tar.gz. Tambien se necesitan la librería Taglib [2] y los paquetes de desarrollo para los reproductores Xmms [3], Noatum [4] y Gstreamer[5]. Tras la instalación de las librerías y de los reproductores de medios, se hace preciso desempaquetar el archivo código fuente Yammi introduciendo tar -xzvf yammi-1.2.2.tar.gz, cambiar al nuevo directorio del código fuente (cd

Figura 1: Yammi lee las canciones de un directorio.

76

Número 14

yammi-1.2.2), e introducir el comando ./configure para crear los ficheros. Posteriormente, hay que introducir make para comenzar a compilar el código fuente. Cuando el proceso se ha completado, hay que introducir su -c "make install" y escribir la contraseña de root para instalar el programa en un sitio adecuado en el árbol del sistema de ficheros. Seguidamente puede arrancarse Yammi introduciendo el nombre del programa en una ventana terminal.

¡Qué no pare la música! Cuando se arranca por primera vez el programa, pregunta por el directorio con las pistas. Yammi soporta canciones en formato MP3, OGG y WAV (Figura 1). La lectura de la información de la pista puede llevarle un tiempo. Nuestro ordenador de 1.2 GHz tardó unos dos minutos en leer unos 1000 títulos. El software almacena luego los datos de los títulos en un fichero formateado en XML, ~/.kde/share/apps/ yammi/songdb.xml. Tras leer los datos de los títulos, Yammi presenta un interfaz de programa bien definido con una barra de herramientas en la parte superior de la pantalla que contiene el campo de búsqueda y los controles

WWW.LINUX- MAGAZINE.ES

de reproducción. La lista se localiza en la parte izquierda de la ventana y el área Quick Browser, situada inmediatamente debajo, presenta una vista de árbol de todas las pistas clasificadas según distintos criterios, como artista, álbum, género y año. La lista de las pistas seleccionadas ocupa la mayor parte de la ventana del programa. Para oir una canción es necesario decirle a Yammi qué reproductor usar. Settings | Configure Yammi | MediaPlayer nos lleva hasta la opción necesaria. El autor de los programas describe al soporte para Gstreamer como experimental, aunque en nuestras pruebas funcionó correctamente. Los otros candidatos son Xmms, Noatum y ArtsPlayer. Tras seleccionar el reproductor preferido, hacemos click en el botón play de la barra de tareas para que comience a sonar la música. Presionando [F1] arranca el reproductor especificado.

KTools En esta sección examinamos herramientas que, mes a mes, nos han sido útiles trabajando con KDE, nos han resuelto un problema que de otra manera hubiera seguido sin resolver, o simplemente nos han hecho la vida más agradable. Si necesitas saber qué aplicación hace qué en KDE, KTools es tu sección.


KTools: Yammi • LINUX USER

artista, las pistas del mismo álbum o canciones con el mismo nombre. El programa resalta en verde las canciones que ya se han reproFigura 2: El programa presenta las pistas que emparejan la búsqueda actual ducido, con las mejores coincidencias primero. mientras que la [F2] salta a la pista siguiente, [F3] hacia selección actual se resalta en rojo. Esto atrás y [F4] detiene la reproducción. hace que sea más fácil seguir la pista a las Yammi tiene una característica de canciones en una fiesta. autoreproducción muy interesante: De Yammi también lee pistas de CDs que no se encuentran en la base de datos. Si se forma similar a los iPods de Apple, el proselecciona Database | Scan removable grama reproduce pistas aleatoriamente Media…, el programa pedirá una ruta al desde una lista, sacando las viejas y olviCD y añadirá todas las pistas del disco a la dadas melodias de una colección. base de datos. Si más tarde se desea reproSiempre muestra la ultima pista y las ducir una de esas pistas, el software pedirá cuatro siguientes en la lista de reproducque se introduzca el CD. ción. Si se prefiere no escuchar una de esas pistas, se presiona [F8] para eliminarla.

Ordenadito y limpio

Busca y Encuentra Presionando la tecla [Esc] permite buscar en la base de datos de música Yammi. Esto lleva al cursor al campo de búsqueda de la parte superior izquierda de la ventana del programa y elimina el contenido actual. Mientras se está escribiendo, el programa parte como un rayo hacia adelante para mostrar cualquier entrada que coincida con la búsqueda. La búsqueda usa lógica borrosa y devolverá un nombre de un grupo tal como Housemartins incluso si se teclea algo como Housmartins. EL programa muestra los resultados de la búsqueda en la parte derecha de la ventana, situando las mejores coincidencias para la clave de búsqueda en la parte superior de la lista (Figura 2). Presionando [F5] se añade la pista seleccionada al final de la lista de reproducción; [F6] lo coloca para hacer que sea el siguiente en reproducirse; y haciendo doble click sobre la pista, se reproduce de inmediato. El menú contextual para cada pista contiene unas cuantas opciones para seleccionar más pistas que coincidan con la selección actual. El botón Search for similar… ofrece una lista con todas las canciones del mismo

Si se necesita leer o editar la información de una pista, la seleccionamos de la lista y presionamos [I]. Esto hace que aparezca un diálogo en el que pueden editarse el artista, título, álbum y género. Al mismo tiempo, Yammi informa de la última vez que se reprodujo la pista. El programa no almacena esta información en la pista en sí misma, sino almacena los datos históricos en una base de datos separada.

Personalización Yammi puede personalizarse para que refleje las preferencias de cada usuario, permitiendo, además, añadirle funcionalidades mediante la inclusión de plugins. Por ejemplo, si no nos gusta la disposición de la lista de reproducción, puede seleccionarse Settings | Configure Yammi | Playqueue Theme. La lista de reproducción es un documento formateado bajo HTML que puede editarse suponiendo que se posean los conocimientos necesarios. Los plugins y los scripts extienden la funcionalidad del programa. Yammi viene con un número de plugins para la grabación de pistas seleccionadas a CD que funciona en conjunción con el software de grabación K3b. También existe un

WWW.LINUX- MAGAZINE.ES

plugin para el diseño de las cubiertas del CD usando la herramienta Cdlabelgen [6]. Algunos plugins se localizan en Settings | Configure Yammi | Plugins. Haciendo click sobre Placeholders, se abre una lista de campos para pasar datos a programas externos. Los scripts que acompañan al programa son un buen punto de comienzo para el trabajo de desarrollo personal.

De Fiesta Como Yammi puede ser controlado usando el teclado, y como no tiene problemas para utilizar medios externos, es una buena elección como sustituto de un tocadiscos para fiestas. Una segunda tarjeta de sonido en el ordenador permite oir una pista mientras otra se está reproduciendo sin interrumpir el programa. De nuevo son necesarias tres funciones: [F9] reproduce el comienzo, [F10] reproduce la sección central y [F11] el final de la pista seleccionada.

Conclusiones Yammi cumple lo prometido: es simple y compacto. Los controles del programa parecen estar bien diseñados y son intuitivos para los nuevos usuarios. Una función de búsqueda madura ayuda a los usuarios a encontrar pistas que no se encuentran en la lista actual. El programa, además, es muy estable. Estuve usándolo diariamente durante un período de algunos meses sin que el software se colgara ni una sola vez. Es, por tanto, una buena elección para aquellos que encuentran que el gran número de características de Amarok [7], por poner un ejemplo, es algo excesivo, pero que siguen necesitando algo más que ■ un simple reproductor de medios.

RECURSOS [1] Página de inicio de Yammi: http:// yammi.sourceforge.net [2] Taglib: http://developer.kde.org/ ~wheeler/taglib.html. [3] Xmms: http://www.xmms.org [4] Noatun: http://noatum.kde.org [5] Gstreamer: http://gstreamer. freedesktop.org [6] Cdlabelgen: http://www.aczoom.com/ tools/cdinsert [7] Amarok: http://amarok.kde.org

Número 14

77


LINUX USER • Desktopia

Trayer Trayer

BANDEJA DE ENTRADA Algunos applets depositan iconos en la barra de tareas de la bandeja del sistema de KDE o GNOME. Si no se utilizan ninguno de estos dos administradores de ventanas, pero se quiere disponer de esta funcionalidad, tal vez Trayer sea la respuesta. POR HAGEN HÖPFNER

L

os administradores de ventanas tales como Fluxbox [1] ofrecen sus propias interfaces para applets KDE o GNOME. Estos pequeños programas se sitúan en la bandeja del sistema de la barra de tareas, añadiendo así todo tipo de funciones prácticas. Por ejemplo, el demonio de alarma de KDE le sigue la pista a sus citas, el applet de KMail controla su buzón de correo, y algunos programas, que incluso no forman parte de las distribuciones principales de escritorio, añaden sus propios applets de acceso rápido.

Trayer podría ser muy útil si se desean mantener esas caracteristicas tan ventajosas, incluso en el caso de que se use un administrador de ventanas alternativo. Esta herramienta permite añadir una barra de tareas en cualquier parte del escritorio, ofreciendo un espacio considerable para depositar los applets de bandeja. El programa está basado en fbpanel de Anatoly Asviyan [2]. Maciel Delmanowsky extrajo los componentes de bandeja del programa de arranque y desarrolló una aplicación independiente.

Instalación

Figura 1: Los applets de Gnome y KDE residen en la bandeja.

78

Número 14

Si se está interesado en probar Trayer y no se usa Debian, será imprescindible compilar el código fuente. Tanto el código fuente para Trayer como el paquete Debian preconstruído se encuentran disponibles en [3]. Suponiendo que se ha instalado el gtk2, gdk-pixbuff y los paquetes de desarrollo respectivos, se puede construir e instalar la aplicación introduciendo make && su -c "make install". Obsérvese que make install no copia el binario a /usr/bin. Si se prefiere instalar en /usr/local/bin, es preferible omitir el comando de instalación y copiar manualmente el fichero trayer a la carpeta en la que se almacenan los binarios compilados manualmente.

WWW.LINUX- MAGAZINE.ES

Los usuarios con Suse Linux 9.3 pueden sufrir algunas dificultades en la construcción de los binarios, como ocurre con los ficheros de encabezamiento desde los paquetes de desarrollo que, con esta distribución ya, no contienen las definiciones requeridas [3]. Para remediarlo, es necesario actualizar la librería GTK2. Suse Linux almacena la librería en un paquete adicional de

Añadidos para Suse 9.3 Algunos paquetes de programa de Suse añaden versiones actualizadas de unas cuantas aplicaciones a la distribución. Para instalar, es necesario añadir una nueva fuente de instalación a YaST. Los paquetes GTK2 actualizados se encuentran disponibles en el servidor en ftp-stud-fht-esslingen.de. Especifique el directorio /pub/Mirrors/ftp.suse.com/pub/suse/7i38 6/suplementary/GNOME/update_for_9.3/ yast-source/. Tras añadir el código de instalación, los nuevos paquetes se encontrarán disponibles en el módulo de admnistración de software de YaST. Se selecciona el paquete gtk2-devel para la instalación. Entonces YaST resolverá automáticamente cualquier dependencia. Para volver a la versión GTK2 previa sin ningún problema, deshabilite las fuentes añadidas. YaST accederá luego a los paquetes originales.


Desktopia • LINUX USER

Figura 2: Las opciones de la línea de comandos ayudan a los usuarios a especificar la posición en la pantalla y el modo de transparencia de Trayer.

Figura 3: Trayer también funciona con Blackbox, tal y como puede apreciarse si se observa la esquina izquierda inferior de la pantalla.

GNOME para la versión 2.7.5. Tras actualizar el sistema (ver el cuadro titulado Añadidos de Suse 9.3), debería ser posible la coompilación de Trayer. Después de haberlo hecho, es una idea excelente sustituir otra vez las librerías GTK2 con las versiones originales. En nuestra máquina de laboratorio, la nueva versión nos causó innumerables problemas con aplicaciones basadas en GTK, tales como Thunderbird, Firefox y Gimp. A continuación puede arrancarse el programa mediante el comando trayer para que se puedan insertar en la nueva bandeja los applets de KDE y Gnome, tal y como se aprecia con el applet de Skype mostrado en la Figura 1.

Posición, Escala, Modificación Uno de los principales beneficios de Trayer es que puede situarse la bandeja en cualquier lugar que se desee. Esta es una característica muy útil, así se evita que oculte cualquier elemento del administrador de ventanas. Si el administrador de ventanas posee una barra de tareas en la parte inferior de la pantalla, puede colocarse Trayer en la parte superior o a un lado. Si se usa WindowMaker, el cual sitúa los docks y clips en las esquinas de la pantalla, el espacio entre ambos es un buen lugar para Trayer. Las opciones de la línea de comandos le dicen al programa en qué parte del escritorio se desea que Trayer “acampe” y qué tipo de apariencia se prefiere. Por ejemplo, la Figura 2 muestra el efecto de introducir el comando trayer

--transparent true --edge top --distance 5 --widthtype pixel --width 100 en WindowMaker. Los parámetros --distance 5 y edge top envían a Trayer a un lugar a cinco pixels desde el borde superior de la pantalla. transparent true significa que Trayer permitirá que se vea el fondo de la pantalla del escritorio a su través, y los dos últimos parámetros widthtype pixel --width 100 crean una bandeja de programa con un ancho de 100 pixels. Los valores left, right y bottom para el parámetro edge envían a Trayer a la izquierda, derecha o a la parte inferior de la pantalla respectivamente. Si se desea que Trayer esté en la esquina izquierda de la parte inferior de la pantalla, hay que usar las siguientes opciones: --edge bottom--align left (Figura 3). Si se prefiere mover la barra a la derecha, se pone --align=right. Si no se especifica nada, Trayer se situará en el centro, lo cual, evidentemente hace que la opción --align=center sea redundante. En lugar de especificar un valor para el ancho en pixels, puede especificarse un porcentaje del ancho de la pantalla. Para hacerlo, el programa ofrece la opción widthtype percent. Usándola en combinación con width 50 se le está indicando a Trayer que ocupe la mitad del ancho de la pantalla. La opción --widthtype request ofrece una solución más elegante para la definición de la anchura. Dicha opción le dice que ocupe exactamente la cantidad de espacio que necesita para presentar los applets que se están ejecutando. Sin embargo, las opciones relativas a la altura se limitan a valores en pixels

WWW.LINUX- MAGAZINE.ES

para el parámetro --height. Para establecer el espacio vacío interior entre el borde de la caja de Trayer y el primer icono de la bandeja, se deberá usar la opción --padding en combinación con un valor determinado en pixels. Puede usarse un método similar para modificar la apariencia de Trayer. La opción de transparencia, junto con las opciones --alpha y --tint, juegan un papel muy importante. La primera opción define el grado de transparencia; pueden especificarse valores entre 0 y 255. --tint seguido de un nombre de color, por ejemplo --tint blue pinta el fondo del escritorio con el color seleccionado. El comando trayer -h presenta una lista completa de parámetros. También se dispone de más ayuda en el fichero README, el cual se proporciona con el código fuente. Este fichero ofrece descripciones incluso más detalladas de las opciones individuales.

Conclusiones Trayer le permite disponer de los applets de KDE y de GNOME en casi cualquier administrador de ventanas que se elija. Desafortunadamente, Trayer no funciona con todos los administradores de ventanas. Funcionó bien con WindowMaker y IceWM, pero aunque fuimos capaces de insertar el icono de la bandeja de Skype sobre QVWM y Blackbox, algunas aplicaciones de KDE como el icono de bandeja del plugin Licq de KDE no funcionaron. Los administradores de ventanas que dibujan marcos alrededor de cada ventana (TWM, por citar un ejemplo) son teóricamente idóneas para usarlas con Trayer, aunque un marco alrededor de la bandeja no es la idea que tienen ■ algunos de una aspecto elegante.

RECURSOS [1] fbpanel: http://fbpanel.sourceforge. net/ [2] Trayer: http://developer.berlios.de/ projects/showfiles. php?group_id=1595 [3] Suse Linx y GTK modificado: http:// lists.gnu.org/archive/html/ emacs-pretest-bug/2005-07/ msg00066.html

Número 14

79


LINUX USER • Evince

El Visor de Documentos Evince

VISOR VERSÁTIL

Evince se está convirtiendo en el visor estándar de GNOME para PDFs y otros formatos de documentos. POR MATTHIAS WARKUS

D

EL AUTOR

e todas las visiones de futuro, la de una oficina en la que cada vez haya menos papeles es la que más está tardando en llegar. Los montones de papeles sobre los escritorios de los despachos no parece que vayan a disminuir. Sin embargo, queda aún alguna esperanza: determinados libros, especialmente documentación técnica, se encuentran actualmente disponibles en formato electrónico, alternativamente o exclusivamente, según sea el caso. Documentos en Portable Document Format (PDF)[2], un formato desarrollado por Adobe [1], tienen el mismo aspecto, sin importar el sistema operativo que se use, y esto implica una verdadera compatibilidad de diseño de

80

Después de trabajar como traductor en varios proyectos, Matthias Markus encontró su lugar como relaciones públicas en Gnome. También escribió el manual de desarrollo de Gnome 2. Durante los dos últimos años ha estado explorando los efectos del cambio de personalidad que se producen al estudiar filosofía.

Número 14

documentos entre diversas plataformas. En el mundo de Linux y Unix, otros formatos tales como PostScript y DVI juegan papeles importantes. Existen un determinado número de visores de documentos basados en Linux. Gnome incluye actualmente como visor estándar para esos ficheros Evince (Figura 1) [3], una com- Figura 1: El GUI de Evince presenta las necesidades más pleta utilidad. También básicas. puede manejar formatos gráficos tales como TIFF y DjVu, los Evince implementa características de cuales típicamente son el resultado de usabilidad realizando sus tareas de madocumentos de texto escaneados. nera conveniente y eficiente, en vez de confundir al usuario con una sobredosis El Programa de opciones. En la ventana del programa Si se usa Evince como visor, lo más hay una caja de herramientas junto al común es arrancar el programa en el menú con botones, permitiendo al contexto de un fichero que se necesita usuario desplazarse a través del fichero o visionar. Lo habitual es arrancar aumentar la presentación. El documento Evince mediante clicks en un adminocupa la mayor parte de la ventana del istrador de ficheros, antes que introprograma. Una columna en el margen duciendo evince, seguido por el nomizquierdo de la pantalla ofrece una persbre del fichero, desde la línea de pectiva basada en miniaturas de las págicomando. nas en el documento (Figura 2).

WWW.LINUX- MAGAZINE.ES


Evince • LINUX USER

Figura 2: Evince presenta miniaturas para las páginas del documento.

Si es necesario, la barra de tareas puede presentar la estructura del documento como un árbol expandible. Ambas opciones suponen que el documento contiene de hecho esta información. Puede deshabilitarse la vista para tener más espacio para la ventana principal. Esto es especialmente útil si se está presentando una página doble. Adicionalmente, el modo de pantalla completa ofrece un juego completo de controles, a excepción de los cuadros de desplazamento. Las ayudas a la navegación se encuentran ocultas completamente en el modo presentación, donde las páginas aparecen sobre un fondo negro y solamente permanecen los controles de teclado. Evince ha introducido recientemente la posibilidad de representar presentaciones simples en el formato Power Point. No importa el modo en el que se esté trabajando, ya que Evince permite desplazar y aumentar incluso documentos

Figura 3: Al igual que Firefox, Evince tiene un cuadro de búsqueda integrado en la parte inferior de la pantalla.

Figura 4: Evince soporta características PDF tales como protección con contraseña.

orientados gráficamente de muy rápidamente. La calidad de la presentación es comparable a la herramienta propietaria de Adobe, el Adobe Reader. Evince usa el interfaz de impresión Gnome estándar para copias impresas, lo cual significa que pueden usarse las configuraciones y funciones de impresión (tales como el modo dúplex) sin ningún problema. Sin embargo, no ofrece una visión previa de la impresión que muestre tal y como debería ser exactamente la salida por impresora.

Herramientas Aunque la mayoría de los ficheros PDF están orientados a texto, la presentación basada en pixel complica la busqueda para palabras y cadenas. En vez de esto, Evince tiene una función de búsqueda comparable a la función que posee Adobe Reader. El diálogo “Search” no presenta una ventana, sino un cuadro en la parte inferior de la pantalla, de un modo similar a como ocurre en Firefox Browser (Figura 3). Esta variante está en la línea de las directivas de usabilidad de Gnome, a las cuales se espera se adhieran todas las aplicaciones Gnome en un futuro próximo. La caja de herramientas es otro buen ejemplo de amigabilidad para el usuario. El editor presenta todos los iconos que pueden añadirse a la caja de herramientas usando arrastrar y soltar. Para deshacerse de un botón, se arrastra fuera de la caja de herramientas con el ratón. De nuevo, la manipulación directa, así como el tipo de característica a la que se refiere. es parte integrante de las directivas de Gnome.

WWW.LINUX- MAGAZINE.ES

Conclusiones Con Evince, Gnome dispone de un visor de documentos útil integrado totalmente con el escritorio. Evince es el sucesor designado para Ggv (Gnome Ghostview) para PostScript, Gpdf para ficheros con formato PDF y Eog (Eye of Gnome) para imágenes. Posee un buen número de ventajas en comparación con Adobe Reader: arranca más rápidamente y es más intuitivo. Al mismo tiempo, necesita 5 Mbytes de memoria (compárese con la masiva cantidad de 100 MBytes que precisa Adobe Reader). Los programas están a la par cuando tienen que presentar documentos, sin embargo, si se necesitan especialmente funciones PDF, tales como anotaciones editables, no hay más alternativa que optar por el complicado Adobe Reader. Se ha creado algún debate sobre el papel que Evince jugará en el futuro. Algunos desarrolladores desearían verlo presentando ficheros MS Word y OpenOffice Writer, eliminando así la necesidad que tiene el usuario de arrancar una gran suite de oficina para ■ poder ver un simple documento.

RECURSOS [1] Adobe: http://www.adobe.com [2] PDF: http://en.wikipedia.org/wiki/PDF [3] Evince: http://www.gnome.org/ projects/evince/

Número 14

81


LINUX USER • Educación

La La plataforma plataforma educativa educativa Moodle Moodle

CLASES VIRTUALES, CLASES REALES En nuestra segunda entrega sobre moodle, vamos a aprender a utilizar la plataforma como profesores y alumnos; examinaremos también varios ejemplos prácticos de explotación en el entorno de clases presenciales. POR JUAN RAFAEL FERNÁNDEZ GARCÍA

E

n el número anterior hicimos una primera presentación de la plataforma educativa libre moodle, de su historia y de las teorías constructivistas sobre el aprendizaje en las que se fundamenta. Expusimos también que nuestro modelo de enseñanza es el presencial y que abogamos por el uso de las aulas virtuales como si fueran aulas reales y no al contrario (si la de enseñanza/aprendizaje es siempre una relación personal, la herramienta que nos interesa estará enfocada a favorecer esta relación y a crear conocimiento, individual y colectivo, no a compartimentarlo; ver el cuadro). Es verdad, la escritura se inventó para romper las limitaciones de la memoria (¿alguien recuerda la cita de Platón del artículo del número 6 sobre accesibilidad?), para que los dueños pudieran recordar el número de sus ovejas y de sus sacos de trigo, pero permitió a Sócrates examinar y criticar las teorías de Anaxágoras (Fedón, 97c ss.). Y es que podemos decir que la tecnología tiene efectos colaterales inesperados: la consecuencia secundaria de la escritura fue que se creó un mundo humano intemporal, en el que era y es posible el diálogo con los sabios de todos los tiempos, con

82

Número 14

Aristóteles y Kant y Euclides y Newton. La informática globalizada que nos ha traído internet tiene sus orígenes en lo militar y ha sido invadida por los mercaderes, pero tiene consecuencias sociológicas imprevistas. Por lo que respecta a la escuela, rompe de nuevo sus límites; que sepamos sacar partido de una escuela que está inmersa en el mundo es una tarea que nos corresponde a nosotros los educadores. La tecnología cambia la forma en que vivimos la realidad, pero no lleva inherente una dimensión ética: somos nosotros como ciudadanos libres, como sujetos autónomos, los que debemos plantearnos un uso ético y educativo. ¿Qué queremos hacer con esta tecnología que introducimos en nuestras aulas? Intentar dar una respuesta puede ser muy bien el hilo conductor de nuestros artículos.

Usos en una clase real constructiva ¿Hasta qué punto es útil una plataforma en un centro educativo? Lo diré pronto y de manera directa: más allá que cualquier herramienta especializada, al mismo nivel que el editor de textos y el navegador, la plataforma es nuestra prin-

WWW.LINUX- MAGAZINE.ES

cipal baza en un aula. Saber sacarle partido a nuestro LMS, con recursos adaptados a los nuevos medios y en contacto con una comunidad de usuarios que comparten sus aportaciones, será un gran paso adelante en una nueva forma de enfocar la enseñanza y la educación. Es sorprendentemente fácil hablar de usos reales. Debo reconocer humildemente lo evidente, esta sección ya ha sido esbozada de forma magistral y sencilla por amigos como Joan Queralt Gil (que publicó en [1] Los diez deseos) o Aníbal de la Torre (en diversos fragmentos de su blog [2] y de sus participaciones en numerosas listas de distribución). Como me han permitido amablemente reproducirlos, me limito a enriquecer mi modesto artículo con sus citas. Sigo el hilo de los diez deseos de Joan Queralt, aunque no su orden. Empezaremos por las herramientas más constructivas: foros y wikis. 1.- El tercer deseo de Joan Queralt era: Quiero que los estudiantes discutan [por escrito] sobre un tema propuesto. Su solución: «Tienes que montar un foro de discusión. Puedes hacer que sólo el profe pueda plantear temas y los estudiantes los contesten, o que cada estudiante inicie un tema y los conteste quien


Educación • LINUX USER

Figura 1: Cómo encontrar más cursos alojados.

quiera o, el caso más común, que todo el mundo pueda iniciar y contestar temas. Hay la posibilidad de adjuntar archivos a las aportaciones (los archivos de imagen se muestran, los de texto quedan indicados con un icono). Los foros también se pueden usar para hacer presentaciones personales, opiniones sobre un tema, para

exponer trabajos, etc.» ¿Y cómo se hace esto? ¿nos ponemos manos a la obra? Dejábamos en el artículo primero de esta serie nuestra exploración de moodle cuando nos habían inscrito en una actividad (ya sabemos que aunque se llamen cursos por su origen puede tratarse de cualquier

Figura 2: Listado completo de cursos.

tipo de actividad: grupos de trabajo o discusión, etc.). Aquí se produce una curiosa paradoja: un invitado ve el listado completo de cursos, pero cuando nos identificamos, el sistema nos presenta únicamente las actividades en las que estamos inscritos. La plataforma puede alojar actividades de libre acceso, en las que podemos autoinscribirnos. ¿Cómo se encuentran? Existe, y se encuentra frecuentemente en el diseño

de las páginas principales de cada curso, la presencia de un bloque cursos que lista los cursos en los que el usuario está inscrito pero que presenta además un enlace a Todos los cursos (figura 1). Pulsamos en él y nos aparecerá el listado completo (figura 2). Seleccionamos el curso de nuestro interés y si es una actividad abierta, (señalada por la ausencia de una llave), nos pedirá (figura 3) que confirmemos nuestro deseo de darnos de alta. ¿Cómo se crea un foro de discusión? Muy sencillo, si estamos dados de alta como profesores de la actividad, nos aparecerá en la página principal el botón «Activar edición». Lo pulsamos y la apariencia de la página cambia por completo: podemos añadir bloques, recursos (páginas de texto y html, ficheros o enlaces a otras páginas o a directorios) y actividades (wikis, foros, consultas, cuestionarios…), cambiarlos de sitio, borrarlos, etc. Para añadir un foro pulsamos en agregar actividad y seleccionamos «Foro». Nos aparecerá la página de configuración del foro (figura 4), con ayuda contextual para cada punto. Como estamos haciendo un artículo práctico daremos algunos consejos prácticos. En un curso es conveniente tener un foro de inscripción obligatoria para noticias y novedades y al menos otro (más tiene que estar justificado porque es fácil caer en la dispersión) de debate abierto; en el primero sólo los profesores podrán crear nuevos hilos («debates» en la terminología de moodle), en el abierto todo el mundo podrá crearlos, pero es conveniente enfatizar que el exceso de hilos lleva también a la dispersión, y de ahí a la muerte del foro, sólo hay un paso; «inscripción obligatoria» se refiere a si los mensajes van a ir acompañados de una copia de correo a los inscritos, lo que tiene sentido si el tráfico no es excesivo y queremos estar seguros de que los participantes reciben la información y las nuevas aportaciones. Otro detalle interesante es el de los canales RSS (para saber más sobre este estándar cada vez más utilizado leer [3]). Nos permite generar noticias que podrán ser leídas desde cualquier agregador; en la figura 5 vemos cómo liferea nos presenta las noticias generadas

WWW.LINUX- MAGAZINE.ES

Figura 3: Autoinscripción en un curso abierto.

desde un foro moodle. ¿Que para qué sirve esto? Para no tener que ir sitio por sitio buscando las noticias (o artículos de blog…) que nos interesen: ahora las podemos recoger (agregar) en una página. ¿Cómo se participa? Como si participáramos en una conversación escrita, se pueden crear nuevos debates o responder a los mensajes ya enviados (figura 6). También tenemos un tiempo para modificar un mensaje que hemos creado (normalmente una media hora) y podremos borrar nuestros mensajes si nadie ha respondido a ellos. ¿Quiénes participan? Aquellos que puedan acceder al servidor de la plataforma (todo el mundo, si está en internet) y estén dados de alta en la actividad. Es decir, no tiene que ser una discusión en el interior de una clase que se está viendo presencialmente, sino que puede tratarse de una puesta en común entre dos grupos de centros diferentes que han hecho una investigación común, o intercambios entre alumnos de distintos países que practican un idioma. En la solución propuesta por Joan se está enfatizando el momento de la discusión; si lo que se busca es que se llegue a conclusiones, se puede acompañar de un wiki; los veremos en un momento. 2.- (Quinto deseo de Joan) Quiero que los estudiantes trabajen en grupo pequeño y acaben haciendo un documento común. Su solución: «Tienes que montar tantos foros como equipos quieras [foros por grupos]. Vale la pena asignar a qué grupo va cada participante y aclararles mucho qué trabajo tienen que hacer y qué proceso tienen que seguir. Por ejemplo, cinco estudiantes tienen que recoger información sobre las temperaturas máximas y mínimas de treinta ciudades europeas durante una semana y hacer un gráfico. Se le asignan seis ciudades a cada uno y, cuando tienen los datos, los cuelgan en el foro de su grupo. Entonces, con todas los datos a la vista, cada estudiante hace su gráfico en una hoja de cálculo y lo mues-

Número 14

83


LINUX USER • Educación

Figura 4: Configuración de un foro de discusión.

tra. El grupo puede escoger el mejor de todos y presentarlo al profe.» Quizás tenga sentido el foro como momento de la discusión, pero posteriormente debe crearse el documento, o bien como wiki o bien como taller. 3.- (deseo séptimo) Quiero que los estudiantes creen un vocabulario/ fichero de conceptos específico del tema. Solución de Joan: «Tienes que montar un glosario. En un glosario los estudiantes podrán escribir definiciones que el profe puede (o no) revisar y publicar. Después las «fichas» quedan a la vista de todo el mundo para ser consultadas y se podrán adjuntar ficheros de imágenes. Por ejemplo, queremos reunir biografías de poetas de la generación del 56: cada estudiante busca información sobre un/a poeta y lo escribe en una entrada del glosario y añade una foto digital (encontrada en internet), el profe las revisa y, si son correctos, acepta la publicación. Los estudiantes pueden consultarlas por orden de creación, por orden alfabético y por categorías.» La creatividad de los alumnos hace que un glosario pocas veces sea un glosario. Puede ser desde un diccionario inglés-español hasta un embrión de wikipedia. ¿Por qué no?

El cuaderno del estudiante Un segundo uso se centra en el seguimiento del trabajo individual de los alumnos. 4.- (Era el primer deseo de Joan) Quiero que los estudiantes hagan una redacción sobre un tema que les propongo, que me la envíen y yo voy a devolverles un comentario. Su solución: «Tienes que hacer un diario [Nota: en las nuevas versiones de

84

Número 14

moodle el diario se ha convertido en una modalidad de la tarea, como Tarea de texto en línea]. Se podrán hacer tantos diarios como queramos, pero cada uno de ellos tiene que pedir sólo una cosa (p.ej.: explica qué es la fotosíntesis, di qué te parece nuestro sistema parlamentario, haz una redacción con el tema: «Recuerdos de la niñez»). El estudiante escribirá en una pantalla y sólo con un clic lo dejará en el sistema a disposición del profesor/a que se lo leerá, le hará comentarios (no una corrección esmerada) y lo puntuará (8/10). Aquí sólo el estudiante ve la corrección, pero no puede ver los trabajos de los compañeros ni las otras correcciones.» Joan destaca correctamente una característica de estas tareas de texto en línea: cada tarea sólo es vista por el autor y el profesor. Por el contrario es posible realizarla de forma abierta mediante uno de los tipos de wiki. Aníbal [4] profundiza en el tema del cuaderno personal del alumno y expone el siguiente ejemplo de uso del wiki de estudiantes: «(…) durante todo el curso, mis alumnos y alumnas han estado usando un wiki, pero de forma personal, como cuadernos de clase o portfolios: • Cada alumno ha tenido en Moodle un wiki de acceso personal y restringido. • Moodle les incorpora un editor HTML por lo que no se deben preocupar demasiado por la sintaxis wiki [ni html]. • La única sintaxis específica que aprendieron en un ratito fue la de crear nuevas páginas dentro del wiki. Es decir, desde el primer día ya crearon una página inicial desde donde iban creando y enlazando otras nuevas. • A partir de ahí, durante todo el curso, cada vez que les planteaba una nueva actividad individual, ellos ya sabían que debían crear una nueva página en el wiki donde escribirían los resultados obtenidos. • Lo mejor de todo este experimento es que yo he podido realizar un seguimiento continuo de su actividad sin más que ir revisando el wiki de cada alumno. Y ellos tienen también centralizado todo su trabajo; incluso desde la página principal de su wiki han podido en cada momento saber qué tienen hecho y qué no. • Además he escrito anotaciones de corrección en alguna página de actividad creadas por ellos, usando un color distinto para resaltar mi aportación.»

WWW.LINUX- MAGAZINE.ES

No creo que los lectores de nuestra revista tengan necesidad de que se les explique qué es un wiki (se ha tratado en varios de los números). Recordaremos que es un recurso que permite crear documentos de forma cooperativa, es decir, que todos tienen permiso para modificar un texto que se ha creado en la plataforma. La documentación de moodle, [5], nos lista otros posibles usos de un wiki en una clase (toma colectiva de apuntes, tormenta de ideas…). Un wiki se crea del mismo modo que se creaba un foro. Se usa (figura 7) pul-

Figura 5: Un agregador recoge las noticias de las plataformas.

sando en la pestaña «Edición» y utilizando el editor integrado para añadir, modificar o borrar partes del documento. La pestaña «Historial» nos muestra quién ha participado en la creación y qué ha hecho. Una opción adicional (y ya van tres) sería crear un taller, para que tanto la redacción como los comentarios sobre ella fueran compartidos (ver [6]). Por cierto, además (cuatro) moodle 1.6 incluirá un nuevo módulo blogs, con dos ventajas importantes: la experiencia dice que los usuarios disfrutan de disponer de un espacio «de su propiedad», donde pueden escribir de forma libre; estos blogs son otra interesante posibilidad a la hora de plantearnos el desarrollo de un portfolio electrónico. 5.- (el segundo deseo) Quiero que los estudiantes hagan un documento (de texto con un editor, o un gráfico en hoja de cálculo, o un dibujo, etc.) y me lo envíen para que sólo yo lo mire y lo puntúe. No habrá ningún otro retorno. Solución de Joan: «Tienes que crear una tarea. El estudiante sabe las tareas que tiene pendientes, tiene las instrucciones por hacer el trabajo y la hace con


Educación • LINUX USER

Pizarra, periódico y libro Otro tipo de recursos tiene que ver con la posibilidad de presentar a los alumnos materiales o apuntes, textos, gráficos, etc.

Figura 6: Escribiendo en un wiki.

un programa aparte (OOWriter, OOCalc, Gimp, etc.) y la guarda en su ordenador. Cuando considera que la tiene acabada sólo tiene que pulsar el botón «Explorar» para localizarla en su disco duro y con el botón «Enviar» dejarla en el sistema a disposición del profe. Éste la abre, la mira y la valora (correcto, bien, 7, etc.). Esta valoración es el único retorno que encuentra el estudiante. Hay la posibilidad, aun así, de enviarle un email.» Bueno, como moodle avanza, ha surgido un nuevo medio de comunicación: ahora es posible enviar mensajes de persona a persona (figura 8) sin salir de la plataforma. 6.- (cuarto deseo) Quiero que los estudiantes hagan un documento (de texto, o un gráfico en hoja de cálculo, o un dibujo, etc) y lo muestren a todo el mundo (a los otros estudiantes y al profe) para poderlo mirar y puntuar (los otros estudiantes también). Solución de Joan: «Tienes que montar un foro. Los foros permiten adjuntar ficheros, de tal modo que un estudiante hace el trabajo encomendado con un programa aparte (OOWriter, OOCalc, Gimp, etc) y lo guarda en su ordenador. Cuando lo tiene hecho va al foro y hace una intervención del tipo: «este es mi trabajo, a ver qué os parece» y adjunta su fichero sólo pulsando los botones «Explorar» y «Enviar». Este archivo adjunto queda a la vista de todos los participantes que le podrán responder con críticas o ideas. El profe, si así lo desea, le puede devolver el archivo totalmente corregido adjuntándolo también en su respuesta.» Una alternativa es que los estudiantes envíen sus tareas y el profesor las cuelgue en una carpeta como recursos. O bien crear un taller.

7.- (deseo noveno) Quiero que los estudiantes lean un texto [o vean un video, escuchen una grabación…] que les he preparado. Solución de Joan: «Ante todo tienes que subir el fichero al sistema, (preferible en formato PDF [se refiere a un formato que pueda ser reconocido por cualquier sistema operativo y que garantice la estabilidad del contenido]), a través de la opción «Ficheros» (…) Cuando clicas verás qué ficheros o archivos tienes guardados en el sistema dentro de tu curso; si no hay ningún fichero puedes subirlos pulsando el botón «Enviar un fichero» que abre un cuadro para localizarlo en tu ordenador. Cuando lo tengas a la vista selecciónalo con un clic y pulsa «Abrir», aparecerá el nombre y la ruta en pantalla, si es correcto pulsa «Enviar» y se enviará al sistema. Una vez esté en moodle ya podrás crear un recurso de tipo fichero que, te permitirá escoger entre los diferentes ficheros de tu curso. Cuando esté preparado el estudiante, haciendo un clic sobre este recurso, accederá al contenido en la parte inferior de la ventana del curso, de manera que sin salir de él podrá leer tu texto. Recuerda, no obstante, que los humanos sólo retenemos en la memoria un 10% de lo que leemos frente al 90% de lo que hacemos (si lo habías leído antes es probable que ya lo hubieras olvidado, verdad? =:-)» Una alternativa sería crear los documentos en formato html directamente con el editor integrado. Mucho más elaborado sería el uso de los módulos lección (una lección se compone de un número de páginas y, opcionalmente, tablas de rama o de contenidos, cada página contiene algún tipo de contenido y, por lo general, termina con una pregunta, los alumnos acceden a las diferentes páginas de la lección sólo cuando han contestando a las preguntas previas) y libro.

En el próximo número…

bles ejemplos de uso pedagógico de la plataforma hasta el siguiente número; en él exploraremos el estado de moodle con respecto a los recursos multimedia, o cómo se integran varias herramientas de trabajo (por ejemplo el módulo para HotPotatoes o para Webquest) y de seguimiento del progreso de los alumnos (hablaremos de

Figura 7: Ejemplo de debate en un foro.

la integración con LAMS). También nos falta ver cómo se importan nuevos cursos de otros gestores de contenidos educativos (el módulo scorms). Estos dos últimos items nos llevarán a analizar hasta qué punto avanza moodle en el cumplimiento de los estándares educativos. Creo que los temas son interesantes, nos vemos el mes ■ que viene.

RECURSOS [1] Los diez deseos de Joan Queralt Gil: http://moodle.org/mod/forum/ discuss.php?d=6699 [2] Blog de Aníbal de la Torre: http:// www.adelat.org [3] Formatos de canales RSS: http://es. wikipedia.org/wiki/RSS_(formato) [4] Aníbal de la Torre y el cuaderno personal del alumno: http://www.adelat. org/index. php?title=el_wikicuaderno&more=1& c=1&tb=1&pb=1 [5] Otros usos de un wiki: http://moodle. org/mod/wiki/view. php?id=4628&page=Wiki [6] Taller compartido moodle: http:// moodle.org/mod/wiki/view. php?id=4628&page=Taller

El espacio nos ha obligado a posponer la conclusión de este repaso a los posi-

WWW.LINUX- MAGAZINE.ES

Número 14

85


LINUX USER • Línea de Comandos

gzip, bzip2 y tar

PAQUE-EXPRESS Un escueto comando es todo lo que se necesita para empaquetar los datos o extraerlos de un archivo. POR HEIKE JURZIK

E

l empaquetar y comprimir ficheros reporta numerosos beneficios. El empaquetado y la compresión de ficheros ocupa menos espacio en el disco y requiere menos ancho de banda de Internet. Linux posee programas a tal efecto basados en GUI, como son File Roller o Ark, así como herramientas de la línea de comandos para crear y empaquetar varios tipos de archivo. Este artículo examina algunas herramientas de la shell para el archivado de ficheros y demuestra el tipo de empaquetado experto que las inteligentes combinaciones de los comandos de Linux ofrecen al usuario de la línea de comandos.

Línea de Comandos A pesar de que los GUIs como KDE y GNOME son útiles para muchas tareas, si quieres sacar el máximo partido de tu instalación Linux, tendrás que volver a la vieja y fiable línea de comandos de vez en cuando. Además, habrá ocasiones cuando te enfrentes a situaciones en las que un conocimiento práctico de las instrucciones del shell puede ahorrarte tiempo o sacarte de un apuro. Esta sección pretende ser tu guía en la jungla de instrucciones de los terminales de texto.

86

Número 14

Empaquetado “gzip”

fino

con

El programa gzip (GNU Zip) es el empaquetador por defecto de Linux. Comprime ficheros simples, pero no crea directorios de archivos completos. En su forma más simple, el comando gzip tiene el siguiente aspecto: gzip fichero

gzip sustituye el fichero original con una versión comprimida añadiendo la extensión .gz. Las propiedades del fichero, como el acceso y la marca del tiempo de modificación se guardan en el proceso de empaquetado. Si se prefiere usar una extensión diferente, puede establecerse el parámetro -S (sufijo) para especificarlo. Por ejemplo, el comando gzip -S .z imagen.bmp

crea un fichero comprimido llamado image.bmp.z El tamaño del fichero comprimido depende de la distribución de entradas idénticas en el fichero original. gzip comprimirá un fichero de manera más eficiente si contiene patrones que se repiten frecuentemente. No funciona bien para

WWW.LINUX- MAGAZINE.ES

los ficheros comprimidos que usan formatos comprimidos para el original, como es el caso de MP3 o JPEG. La lista 1 muestra la diferencia en la compresión entre un fichero bitmap y un fichero JPEG. Adicionalmente puede especificarse un factor de compresión entre 1 y 9 para influenciar la compresión: gzip -1 es rápido y gzip -9 es lento pero tiene un índice de compresión superior. El predeterminado es -6. Si se quiere cambiar

Listado 1: Compresión Comparada 01 $ <B>ls -l<B> 02 -rw-r--r-- 1 daisy daisy 2313894 Sep 3 22:47 screenie.bmp 03 -rw-r--r-- 1 daisy daisy 169862 Sep 5 12:41 screenie.jpg 04 $ <B>gzip screenie*<B> 05 $ <B>ls -l<B> 06 -rw-r--r-- 1 daisy daisy 9547 Sep 3 22:47 screenie.bmp.gz 07 -rw-r--r-- 1 daisy daisy 130524 Sep 5 12:41 screenie.jpg.gz


Línea de Comandos • LINUX USER

este último puede hacerse configurando la variable de entorno gzip en el fichero ~/.bashrc export GZIP="-9"

Un fichero puede desempaquetarse usando bien gunzip o bien gzip -d. Si la herramienta descubre un fichero del mismo nombre en el directorio de trabajo, informa al usuario para asegurarse de que se sepa que se está sobreescribiendo este fichero: gunzip screenie.jpg.gz gunzip: screenie.jpg U already exists: do you wishU to overwrite (y or n)?

Si se dice [n], gzip aborta la operación. Si no interesa el chequeo de seguridad, puede deshabilitarse configurando la opción -f (por “force”). El parámetro tiene un efecto colateral adicional: por defecto, gzip se niega a comprimir enlaces simbólicos. Pero si se configura el parámetro -f antes de apuntar gzip al symlink, la herramienta comprimirá el fichero al cual apunta el enlace y asigna el nombre del symlink (más la extensión normal). Cuando se desempaqueta el fichero, no ofrece un symlink sino un fichero normal (Figura 1). No es necesario desempaquetar ficheros de texto comprimidos, tales como los HOWTOs localizados en /usr/ share/doc/, antes de usar los paginadores less o more para verlos. Corriendo gzip con la opción -c (que da una salida a stdout) y redireccionando la salida a un paginador es mucho más rápido, por ejemplo:

peración. En la compresión, la herramienta divide los ficheros en bloques individuales. Si un fichero está dañado, puede ser posible rescatar los otros ficheros no dañados. Para hacerlo, hay que correr bzip2recover para desempaquetar los elementos no dañados. Aparte de estas pocas diferencias menores, la mayoría de las opciones bzip2 son como las de su equivalente gzip. De nuevo, hay que especificar simplemente el nombre del fichero para comprimirlo: bzip2 fichero

El fichero comprimido tendrá después del evento una extensión .bz2 y guarda las propiedades del fichero original, al igual que en la compresión con gzip. En contraste con gzip, bzip2 tiene una opción para crear una copia del original. Para hacerlo, simplemente se especifica el parámetro -k (por “keep” – guardar): bzip2 -k file

Para hacer lo mismo con gzip, se tendría que sacar el fichero comprimido a una salida estándar, para redireccionar luego la salida a un nuevo fichero: gzip -c file > file.gz. Sin embargo, la versión comprimida del fichero no guardará en este caso las propiedades del fichero original. Al igual que con gzip,los parámetros 1 a -9 (valor por defecto) le dicen a bzip2 el nivel de compresión a usar.

Listado 2: gzip y bzip2 Comparados 01 $ <B>ls -l bild.bmp*<B> 02 -rw-r--r-- 1 daisy daisy 2313894 Sep 5 13:35 image.bmp 03 -rw-r--r-- 1 daisy daisy 2534 Sep 5 13:35 image.bmp.bz2 04 -rw-r--r-- 1 daisy daisy 9547 Sep 5 13:35 image.bmp.gz

Para cambiar el predeterminado, se configura nuevamente la variable de entorno BZIP2 añadiendo a ~/.bashrc lo siguiente export BZIP2="-6"

Para desempaquetar un fichero comprimido, hay que establecer el parámetro -d de bzip2 o usar la herramienta especial de desempaquetado bunzip2. Al igual que gzip, bzip2 ofrece alguna protección contra la sobreescritura que inadvertidamente se produce en los ficheros existentes, pero en contraposición con gzip, esta herramienta no ofrece libertad de elección. En su lugar, presenta el siguiente mensaje y sale de la operación: $ bunzip2 peggy.jpg.bz2 bunzip2: Output fileU peggy.jpg already exists.

El parámetro -f deshabilita este comportamiento.

gzip -dc /usr/share/doc/U iptables/README:Debian.gz | less

Puede abreviarse, aún más usando zless file.gz. Este comando, de hecho, es un pequeño script que ofrece un resultado similar pero con menos tecleos.

Nuevo, bzip2

Rápido,

Mejor:

La herramienta bzip2 emplea un algorito de compresión diferente, lo que hace que comprima los ficheros más efectivamente. El listado 2 muestra una comparativa entre gzip y bzip2. Adicionalmente, bzip2 posee un modo de recu-

Figura 1:Hay que tener cuidado cuando se comprimen enlaces simbólicos. Puede usarse el parámetro -f para forzar esta operación, pero desempaquetando el fichero, no se obtendrá un enlace simbólico.

WWW.LINUX- MAGAZINE.ES

Número 14

87


LINUX USER • Línea de Comandos

Cuando tar incluye el nombre de la carpeta, pueden manejarse directorios y subdirectorios completos de la misma manera, en lugar de especificar

backup_2005_10_05.tar). Este backup incluirá todos los directorios desde el root/ , pero sin el directorio /proc, el cual no contiene ningún dato real.

¡Todos Juntos! Como se ha mencionado previamente, tar dispone de un número de parámetros para crear archivos comprimidos gzip o bzip2 de una vez. La sintaxis para la variante del comando tar es: tar -cvzf archive.tar.gzU fichero(s)

En el Archivo El programa tar almacena múltiples ficheros en un archivo. El nombre del programa (tar es la forma reducida para “tape archiver”) indica su original uso para la administración de archivos de grabación. Pero tar puede hacer más que concatenar ficheros; tiene opciones para comprimir archivos directamente usando gzip o bzip2 y esto es lo que ofrece los nombres de los archivos tar.gz y tar.bz2. Para colocar múltiples ficheros en un archivo, escribimos tar -cvf archivo.tar fichero1U fichero2

por ejemplo. Las opciones -c, -v y -f, las cuales se encuentran en su forma corta en este comando, le dicen a tar que cree el archivo (“c” por “crear”), que informe de lo que está ocurriendo por detrás (“v” por “verboso”) y que interprete el primer argumento (archive.tar) como el nombre del archivo (“f” por “fichero”). Si se nos ha olvidado de incluir algún fichero, no es necesrio rehacer el archivo completo. Se puede simplemente concatenar al fichero usando la opción -r.

Si se prefiere usar bzip2 en lugar de gzip con tar, reemplazar la opción -z en el comando precedente con -j:

nombres de ficheros individuales: $ tar -cvf archivo.tar carpeta/ test/ test/screenie.bmp test/link.bmp test/new/ test/new/screenie.jpg test/new/new/ ...

Puede tener sentido excluir algunos directorios del archivo, especialmente si se está usando tar para backups. El parámetro --exclude ofrece esta posibilidad. El parámetro --rsh-command también resulta útil en este contexto, ya que sirve para decirle a tar que use SSH para enviar el backup a otra máquina. El comando completo podría ser algo como:

tar -cvjf U archive.tar.bz2 fichero(s)

Pueden establecerse los parámetros -z y -j apropiadamente cuando se desempaqueta el archivo para evitar un paso extra. Por ejemplo, en lugar de bunzip2 archive.tar.bz2 tar -xvf archive.tar

se puede escribir tar -xvjf archive.tar.bz2

para invocar la opción -j para desempa■ quetar un archivo bzip2.

PAaa desempaquetar un archivo, se realiza con la opción -x (“x” por “extraer”): tar -xvf archivo.tar

Para asegurarse de que tar no sobreescriba ficheros existentes con contenido desde el archivo, es una buena idea desempaquetar el archivo en un directorio temporal, o usar -t en vez de -x para ver el proceso de prueba (“t” por “trial”) y ver los ficheros y directorios que contiene el archivo.

88

Número 14

tar -cvf user@host:/scratchU /tmp/backup_$U (date '+%Y_%m_%d').tar U --rsh-command=/usr/bin/ssh U --exclude=/proc /

Este extenso comando da las siguientes instrucciones: usar SSH para crear una copia de backup en el directorio /scratch/ tmp/ en la máquina host, basando el nombre del archivo en el prefijo del backup, la fecha actual y en la extensión .tar (por ejemplo,

WWW.LINUX- MAGAZINE.ES

LA AUTORA

tar -rf archivo.tar file Heike Jurzik estudió alemán, inglés y Ciencia Informática en la Universidad de Colonia, Alemania. Descubrió Linux en 1996 y desde entonces ha estado fascinada con la línea de comando de Linux. En su tiempo libre se le puede encontrar en sesiones de folk irlandés o visitando Irlanda.


Entrevista Klaus Knopper • COMUNIDAD

El mundo según el creador de Knoppix, Klaus Knopper

KLAUS KNOPPER Klaus Knopper tiene aún grandes ideas para la pequeña distribución que ha engendrado numerosos derivados y ha cambiado la manera de pensar respecto a Linux. Hablamos con Klaus acerca del pasado, presente y futuro de Knoppix. POR JOE CASAD

LM Cuéntanos, ¿a qué te dedicas cuando no estás trabajando en Knoppix? ¿Y qué era lo qué hacías antes de que todo esto empezara? KK Me gradué como ingeniero eléctrico en la Universidad de Kaiserslautern, Alemania, y he trabajado en la administración de sistemas Unix desde que dejé la escuela. Mientras estudiaba, también trabajé como consultor independiente. Fui profesor, desarrollador software y, salvo por la parte de administración a la que ya no me dedico, el resto sigue más o menos igual. Además de mi trabajo como consultor y los diversos proyectos en los que estoy implicado, imparto clases de informática (básica y desarrollo de software Linux) en la Universidad de Ciencias Aplicadas en Zweibrücken. LM ¿Cómo empezó Knoppix? KK Knoppix arrancó en torno a 1999, cuando recibí una de esos CD’s de rescate del tamaño de una tarjeta de visita que se regalaban como promoción en el CeBit. Por pura curiosidad y siguiendo la filosofía del Software Libre, investigué el sistema de arranque para ver cómo funcionaba. Más tarde creé un CD auto-arrancable con los programas que usaba con frecuencia. A este proyecto que surgió como un entre-

namiento en el trabajo, le llamé Knoppix, a falta de un nombre mejor. Se publicó por primera vez en el año 2000 en el Atlanta Linux Showcase como caso de estudio. Más tarde hice de Knoppix un proyecto público con varios servidores de descarga para poder sacar un cierto feedback de los entornos hardware y peticiones de características. LM ¿Cómo decides qué incluyes en Knoppix? KK El contenido está altamente influenciado por lo que realmente necesito para un trabajo de formación o de consultoría. Incluyo también herramientas que encuentro útiles o interesantes. Recibo correo a diario de gente pidiendo alguna aplicación o característica. Algunas de estas sugerencias pueden implementarse y asumirse en Knoppix, pero otras no, principalmente por motivos de licencias o patentes, o simplemente por falta de espacio físico. LM ¿Dispones de un equipo de ayudantes, como otros proyectos de Software Libre? ¿O por el contrario trabajas más bien en solitario? KK Debo admitir que usualmente trabajo solo, simplemente debido a mis extrañas horas de trabajo y al hecho de

WWW.LINUX-MAGAZINE.ES

que tiendo a enfrascarme demasiado (soy bastante testarudo) en lo que hago, por lo que no presto demasiada atención a preguntas no relacionadas o sugerencias. Pero hay de 3 a 5 personas que regularmente ayudan a mejorar partes de Knoppix, eso sin contar los cientos de desarrolladores de software libre que crean los paquetes Debian y el software de usuario en que está basado Knoppix. Así mismo, el trabajo de otras distribuciones basadas en Knoppix a menudo retorna a la edición descargable de ésta, siempre que sea legal y técnicamente posible. LM La nueva versión DVD de Knoppix ofrece mucho mayor espacio. ¿En qué se está usando este espacio adicional? ¿Cuáles son algunas de las cosas que se incluyen en Knoppix 4 que no cabían en versiones anteriores? KK El espacio era siempre la última frontera de la edición en CD, que trataba de mantener desde herramientas de rescate en consola de comandos hasta IDEs de desarrollo en un único CD. Con los siempre crecientes KDE y Open-Office, la división entre una edición CD “light” y una DVD “maxi” tenía que llegar tarde o temprano. Ahora trato de clasificar el software en lo mejor del escritorio y herramientas de rescate para el CD, y todo

Número 14

89


COMUNIDAD · Entrevista Klaus Knopper

lo demás para el DVD. Iremos encontrando menos software de desarrollo en el CD en el futuro. El DVD contendrá más software de desarrollo por tanto, además de otros paquetes que se han vuelto demasiado grandes para el CD, incluyendo material innecesario como juegos libres. Un caso a mencionar es el sistema de procesamiento de textos científicos LaTeX. Tuve que quitarlo del CD, pero ahora ha vuelto al DVD. Aunque personalmente prefiero LaTeX a cualquier otro procesador de textos basado en interfaz gráfica, OpenOffice era simplemente más importante a la hora de mostrar las cualidades ofimáticas de Knoppix. LM Knoppix tiene que estar al corriente de diferentes tipos de hardware. ¿Trabajas en ocasiones directamente con HP, Intel y otras grandes compañías? KK Me gustaría que fuese así, sin embargo, las grandes compañías no suelen ser demasiado cooperativas y a veces parecen estar esperando hasta que alguien reinventa la rueda y escribe un driver mediante ingeniería inversa, o que simplemente se comprueba que funciona surgiendo de la nada. Hay que añadir a esto la gran cantidad de hardware barato defectuoso por fallos de diseño que encontramos hoy día. Esto hace que el kernel de Linux esté engordando a base de apaños para BIOS y placas base defectuosas, lo cual es muy triste. Sería fantástico tener estándares de diseño hardware aceptados de manera general, pero aparentemente, sobre todo cuando se habla de los fabricantes de tarjetas gráficas, esto no se tiene en cuenta. Parece que ser incompatibles con los productos actuales es la misión de la compañía según algunos diseñadores. Aún así, uso el kernel básico que se publica en kernel.org, y algunos módulos adicionales para ciertos componentes hardware más nuevos que aún no han entrado en la rama principal del kernel. Con esto, afortunadamente, mandamos como mensaje a los fabricantes de hardware que deberían tratar de seguir los estándares abiertos y documentar sus productos adecuadamente. De manera que podrán estar adecuadamente soportados en el siguiente lanzamiento del kernel, en lugar de sacar por su cuenta un módulo propietario, inseguro y no distribuible, para el kernel.

90

Número 14

Existe un gran problema, en mi opinión, con las tarjetas gráficas. Por algún motivo, se ha convertido en una especie de deporte para los fabricantes de tarjetas gráficas el lanzar drivers semi-propietarios, con licencias restrictivas en mayor o menor medida, pero que no pueden ser consideradas “de libre distribución”. Tratar de imaginar qué es lo que hace el driver, o incluso mejorarlo o portarlo, está estrictamente prohibido en la mayoría de los casos. Algunos pensarán que el motivo de estas licencias es ocultar ciertas cosas, como optimizaciones especiales para benchmarks específicos que hacen que la gente compre estas tarjetas. Para mí, la mayoría de estas licencias son inaceptables. Son inseguras porque nunca podrás saber si existe alguna puerta trasera en estos drivers que se ejecutan a nivel de kernel, y son incompatibles con la licencia de distribución de Knoppix. Por tanto, no las incluyo. Uso los drivers libres, aunque sin aceleración, de estas tarjetas. Otros derivados de Knoppix, sin embargo, son menos delicados en cuanto a temas de licencias y a veces incluyen estos drivers propietarios. LM ¿Cuál es la postura de estas grandes compañías de hardware respecto a tu labor? KK A día de hoy, sólo prestan algo de apoyo en el sentido de que algunas usan a veces Knoppix (o algún derivado) como una especie de proclama para decir que su hardware es x por ciento compatible con Linux. Desafortunadamente, a algunos fabricantes les parece inaceptable que deban seguir algún estándar en el desarrollo de su hardware. En su lugar, creen que Linux debería modificarse para poder soportar mejor su hardware no-estándar. En mi opinión, están equivocados. Por supuesto hay excepciones. Algunos fabricantes son reconocidos por hacer hardware 100% soportado por Linux. Sin embargo, muy poca gente pregunta por ellos al comprar hardware nuevo. La presión del mercado no es todavía suficiente para lograr que los fabricantes dejen de hacer hardware que sólo funciona con una arquitectura cerrada dependiente de un driver propietario. Mi consejo es simplemente devolver hardware que no funcione con el kernel

WWW.LINUX-MAGAZINE.ES

de Linux sin modificar, directamente al lugar donde se compró y pedir que le devuelvan el dinero. Si mucha gente reclama su derecho a comprar hardware que simplemente funcione sin problemas con CUALQUIER sistema operativo, esto quizás podría cambiar la actitud de algunos fabricantes. LM ¿A dónde se dirige? Colocar Knoppix en un DVD parece un cambio realmente grande. ¿Tiene otros cambios en mente para el futuro? KK Le estoy dando vueltas a añadir algunas herramientas a Knoppix para que pueda arrancar desde otros dispositivos, como memory sticks o discos flash. Ya existen algunos derivados de Knoppix con este objetivo, pero pienso que debería ser posible crearse uno mismo su propia versión de Knoppix-on-stick desde el menú de un Knoppix CD o desde una instalación en disco duro. Continuar con el desarrollo para el hardware actual y añadir nuevo e interesante software puede ser un trabajo a jornada completa. Pero estoy tratando de bajar un poco el ritmo de los lanzamientos debido a que estoy también involucrado en otros proyectos. LM ¿En qué ocupas la mayor parte del tiempo con Knoppix? ¿Puedes comentarnos brevemente un ciclo de actualización típico? ¿Qué tiene que ocurrir para que edites una nueva versión de Knoppix? KK No se necesita mucho tiempo para correcciones menores y actualizaciones de software, debido al sencillo sistema de actualización de Debian. A veces, cuando aparece una nueva versión de KDE o una nueva tecnología como unionfs, nos ponen las cosas más fáciles (fundamentalmente a mi). Aunque se necesita un mayor tiempo para alcanzar un estado estable después de una actualización. Siempre que aparece un bug grave que afecta a la estabilidad, aparece una nueva versión tan pronto como es posible (a veces incluso al día siguiente), pero afortunadamente, esto no ha sido necesario muchas veces. Para cambios de envergadura, suelo tomarme un tiempo y lanzo la nueva versión cuando está completamente lista. Cuando tengo encargo de pago para una edición especial de Knoppix, puedo


Entrevista Klaus Knopper • COMUNIDAD

dedicar más tiempo y esfuerzo para sacar la edición dentro de un cierto calendario. En la mayoría de los casos, las funcionalidades especiales programadas para esta versión específica aparecen más tarde para su descarga pública. LM Cuéntanos algo más acerca de estas ediciones especiales de pago. ¿Quién encarga estas ediciones y por qué? KK Como pasa con la mayoría de los proyectos de Software Libre, la mayor parte del trabajo de Knoppix lo hago en mi tiempo libre y fundamentalmente para satisfacer mi curiosidad o para adquirir experiencia y conocimiento de software nuevo. Pero en ocasiones algún cliente requiere una versión de Knoppix personalizada para algún propósito especial, y esto por supuesto es trabajo que ha de pagarse como cualquier otro proyecto de software comercial. El trabajo suele licenciarse bajo las condiciones GNU. (Debe ser así, ya que se basa en Software Libre). Los clientes que piden una versión comercial de Knoppix suelen ser revistas de informática que quieren incluir un CD o DVD arrancable con un número, o que quieren vender algo que aún no está disponible todavía. Por ejemplo, un editor puede pedir un antivirus basado en Linux que arranque desde un miniCD, o un servidor SAMBA en CD o tal vez una edición especial con juegos. Otros clientes pueden ser organismos oficiales que quieren tener una plataforma estandarizada para su propio software, escuelas, entidades de formación o científicas, universidades o incluso proyectos internacionales relacionados con la educación o la ciencia. Debido a la flexibilidad de GNU/Linux, existen numerosos propósitos para Live CD’s especializados, y siempre es bueno tener una plataforma que sabemos cómo funciona, independientemente de los diferentes ordenadores donde se ejecute. Por supuesto, Knoppix no es el único live CD apropiado como base de estos proyectos, pero es más fácil usar Knoppix que las distribuciones live que contienen software propietario o de demostración que no es “libremente distribuible incluso de forma modificada, tanto para usos no comerciales como para comerciales”. Es una de las razones por las que soy tan cuidadoso con las

licencias del software que incluyo en Knoppix. LM Knoppix es miembro de la nueva Debian Common Core Alliance (DCCA). ¿Cómo afectará esto a tu trabajo con Knoppix? ¿Asumirá esta alianza algunas tareas que estás haciendo en la actualidad? KK La alianza está tratando de establecer interoperabilidad y compatibilidad de paquetes entre varias distribuciones basadas en Debian, de manera que sin importar qué marca de Debian uses, puedas actualizar o ampliar una distribución con software de otra. Knoppix ya es al 99% compatible con Linux Standard Base (LSB),sin embargo, al haber sido diseñado históricamente para ser ejecutado desde un medio de sólo lectura, hay algunos cambios en la rama principal de Debian que deberían, a largo plazo, tratarse de manera diferente. Ya es posible instalar Knoppix en disco duro y actualizarlo desde los repositorios de Debian, pero en algunos casos, debemos tener cuidado con problemas con las versiones de KDE y las librerías del sistema, por ejemplo, o con versiones parcheadas del software Debian (como sysvinit-knoppix). Al adoptar Knoppix la lista de paquetes principal de DCCA e integrar los cambios específicos de Knoppix como paquetes separados, esto ayudará a facilitar las cosas tras una instalación en disco duro. Knoppix se comportará de manera más parecida a un sistema Debian estándar (con extensiones) que ahora. LM ¿Quién está decidiendo esta lista de paquetes principal de la DCCA? ¿Eres parte del comité que vota qué incluir en la lista principal? KK Al igual que la mayoría de proyectos de Software Libre, la DCCA ha puesto en marcha una lista de correo de desarrolladores donde todo el mundo puede mandar sus sugerencias y discutir qué paquetes deberían incluirse en el grupo principal de paquetes. De momento ha habido muy pocas disputas al respecto. Probablemente debido a que la gente de formación técnica tiene bastante claro qué componentes son absolutamente necesarios y cuales son opcionales. Debemos tener

WWW.LINUX-MAGAZINE.ES

en mente que la DCCA no está tratando de cambiar la manera de trabajar o desarrollar de Debian. Sólo trata de encontrar y establecer una base común entre las distribuciones comerciales basadas en Debian que usan el software disponible al público desde Debian. Hasta el momento, no existe un sistema de votación o jerarquía estrictos, ya que la mayoría de los asuntos se deciden por consenso o se resuelven fácilmente con soluciones técnicas y metapaquetes. En estos momentos, estamos discutiendo asuntos relacionados con los paquetes del kernel, lo cual no es tan sencillo como las cuestiones de conformidad con LSB. En caso de que haya recomendaciones de nuevos paquetes o cambios de dependencias, se procederá siguiendo los cauces usuales en Debian para hacer una propuesta (en forma de un parche, por ejemplo) a los mantenedores de paquetes. LM Con la gran cantidad de distribuciones live de Linux que existen en el mundo, ¿qué hace a Knoppix diferente? Dicho de otra forma, ¿cuál es la razón del éxito de Knoppix? KK Knoppix se diseñó como un sistema live (principalmente conmigo mismo como usuario destino) para desarrollar trabajo de verdad y productivo en ordenadores extraños, basado en sistema Linux pre-instalado con una rápida auto-configuración y gran facilidad de uso. Knoppix no es un mero disco de demostración o una herramienta de hackers. Otras distribuciones tienen sus versiones live CD que muestran (de manera simulada) el proceso de instalación y parecen, y se comportan, como una distribución de verdad de las que se venden en una caja. Pero estos discos de evaluación no están pensados para ejecutarse permanentemente. El software incluido en Knoppix es usualmente utilizado en varias distribuciones, aunque he intentado incluir una mezcla de programas útiles tanto para el novato como para el usuario experto. Para el enorme número de descargas diarias y las 20.000 visitas diarias al mirror de la página web de Knoppix, la verdad es que no tengo una verdadera ■ explicación.

Número 14

91


¡Hazte con tus ejemplares atrasados! #1

¡pídelos ya!

#2

#5

#8

¡pídelos ya!

#3

#6

o d a t o g a

#9

¡pídelos ya!

#4

#7

#10

W W W. L I N U X - M A G A Z I N E . E S


¡No esperes a que se agoten! ¡pídelos ya! #12

#13

#11

el REPOSITORIO de conocimientos LINUX más COMPLETO

atrasados@linux-magazine.es


EVENTOS

OSWC 2005 Fecha: 15-17 Febrero

LinuxWorld Conf. & Expo México

Fecha: 10-23 Abril

Ciudad: Málaga, España

Fecha: 14-17 Febrero

Ciudad: Málaga, España

Sitio Web: http://www.opensourceworldconference.com

Calendario de Eventos Evento Linux Asia Conference & Expo Southern California Linux Expo LinuxWorld Conference & Expo México OSWC 2005 PyCon 2006 O'Reilly Emerging Technology Conference UKUUG Spring Conference 2006 LinuxWorld Conference & Expo Australia LinuxWorld Conference & Expo Boston Festival Digital de Andalucía 7º Fórum Internacional Software Libre III Jorn. Soft. Libre Univ. Cádiz LinuxWorld & NetworkWorld Canada LinuxWorld Conference & Expo Italy LinuxWorld Conference & Expo SA LinuxWorld Conference & Expo Brazil LinuxWorld Conference & Expo Japan 6º Fórum Internacional Software Livre LinuxWorld Conference & Expo

Ciudad: Ciudad de México. Sitio Web: www.linuxworldexpo.com

Fecha 08-10 Febrero 06 11-12 Febrero 06 14-17 Febrero 06 15-17 Febrero 06 24-26 Febrero 06 06-06 Marzo 06 22-23 Marzo 06 28-30 Marzo 06 3-6 Abril 06 10-23 Abril 06 19-22 Abril 06 20-21 Abril 06 24-26 Abril 06 9-10 Mayo 06 16-19 Mayo 06 23-25 Mayo 06 31 Mayo - 6 Junio 06 4-6 Junio 06 5-7 Junio 06

Ciudad Nueva Delhi, India Los Angeles, CA, EE.UU Ciudad de México, M. Málaga, España Addison,Texas, EE.UU. San Diego, CA, EE.UU. Durham, Reino Unido Sydney, Australia Boston, MA, EE.UU Málaga, España Porto Alegre, Brasil Cádiz, España Toronto, Canada Milan, Italia ohanesburgo, S. África Sao Paulo, Brasil Tokio, Japón Porto Alegre, Brazil Korea Seúl, Korea

Festival Digital de Andalucía

Sitio Web: http://www.festivaldigital.org

Sitio Web www.technetra.com/linuxasia2006 www.socallinuxexpo.org www.linuxworldexpo.com. www.opensourceworldconference.com www.python.org/pycon/2006 http://conferences.oreillynet.com/etech www.ukuug.org/events/spring2006 www.linuxworldexpo.com.au www.linuxworldexpo.com http://www.festivaldigital.org http://fisl.softwarelivre.org http://osl.uca.es/jornadas/ www.lwnwexpo.plumcom.ca www.linuxworldexpo.it www.linuxworldexpo.co.za www.linuxworldexpo.com www.linuxworldexpo.com http://fisl.softwarelivre.org www.linuxworldkorea.com

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 Francisco Fernández

Traductores Paqui Martín Vergara, Paul C. Brown, Antonio Rueda, Víctor Tienda.

Subscripciones: www.linux-magazine.es/ magazine/subs

Maquetación Francisco Fernández Diseño de Portada Pinball info@pinball-werbeagentur.de Publicidad www.linux-magazine.es/pub/ Para España Expresando Comunicaciones info@exprecom.com Tel.: (+ 34) 952 216 406 Fax.: (+ 34) 952 217 115 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 14

Precios Subscripción España: Europa: Resto del Mundo - Euros: Resto del Mundo - Dólares U.S.A.:

49,50 € 59,90 € 79,90 € $ 94,90

Tel.: (+34) 951 010 556 Fax.: (+34) 951 010 516 subs@linux-magazine.es Linux Magazine Linux New Media Spain, S.L. Avda. Juan López Peñalver, 21 29590 - Campanillas Málaga ESPAÑA info@linuxnewmedia.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 © 2004 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 tu 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

7 8

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



Exprecom

info@exprecom.com

www.exprecom.com

      

Empresa

Correo-e

Web

1

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



Cataluña Logo

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 14

97


PRÓXIMO NÚMERO

Abril 2006: Número 15

PRÓXIMO NÚMERO CAZADORES DE VIRUS “Algunos dicen que un ataque es inminente y otros que no hay de qué preocuparse, pero… ¿Cuál es la verdad tras los virus en Linux?” Ésta es la pregunta que se plantea Tomasz Kojm en nuestro primer artículo de portada del número 15 de Linux Magazine. Para todos aquellos que se sentían muy seguros con Linux, Kojm de inmediato pasa a explicar cómo crear un hipotético virus en Linux e ilustra cómo se propagaría por un sistema. Si esta perspectiva te pone nervioso/a, siempre puedes echarle un vistazo a nuestros siguientes artículos: en “Antivirus Linux” evaluamos una buena selección de los antivirus disponibles en el mercado para Linux. En “Klamming Up” echamos un vistazo a la mejor y más famosa de las soluciones de código abierto: KlamAV. Y, finalmente, en nuestro artículo sobre Amavisd-new examinamos cómo proteger toda una red de spam y virus a nivel de servidor de correo.

ANIMACIÓN 3D

PLAN 9

En En “Mundos “Mundos Virtuales” Virtuales” repasamos repasamos cómo cómo está está el el panorama panorama del del software software para para la la generación generación de de imágenes imágenes tridimensionales con tridimensionales con aplicaciones de código aplicaciones de código abierto. abierto. Imprescindible Imprescindible para para diseñadores diseñadores yy creadores creadores de de juegos. juegos.

Si Si piensas piensas que que “Plan “Plan 9” 9” es es una una película película cutre cutre de de los los años años cincuenta, cincuenta, piensa piensa de de nuevo. nuevo. El El equipo equipo de de desarrolladores desarrolladores que que creó creó el el primer primer Unix, Unix, el el sistema sistema “papá” “papá” de de Linux, Linux, no no ha ha permanecido permanecido inmóvil inmóvil todos todos estos estos años años yy ha ha creado creado “Plan “Plan 9”, 9”, un un innovador innovador sistema sistema operativo operativo que que poco poco tiene tiene que que ver ver con con Unix Unix yy que que recientemente se ha recientemente se ha empezado empezado aa distribuir distribuir bajo bajo una una licencia licencia libre. libre. Aprende Aprende lo lo

que que has has de de saber saber de este fascinante fascinante sistema sistema en en el el número número 15 15 de de Linux Linux Magazine. Magazine.

KONSULTORIO Estrenamos Estrenamos sección: sección: “El “El Konsultorio Konsultorio de de Klaus”. Klaus”. En En ella. ella. Klaus Klaus Knopper, Knopper, el el creador creador de de Knoppix, Knoppix, contesta contesta aa las las preguntas preguntas planteadas planteadas por por los los lectores.Todo lectores.Todo esto esto yy mucho mucho más más en en el el número número 15 15 de de LINUX LINUX MAGAZINE MAGAZINE

A LA VENTA: MARZO 2006 98

Número 14

WWW.LINUX- MAGAZINE.ES



Linux Magazine - Edición en Castellano, Nº 14