linux magazine - edición en castellano, nº 14

100
Fotografía Digital Edición Fotográfica imgSeek TaskJuggler Linux Multimedia Studio Configuración Squid Konsultorio de Klaus .Net Programación Mono y DotGNU p43 Evince El visualizador de documentos de GNOME p80 NeroLINUX ¿Está Nero listo para LINUX? p27 NÚMERO 14 P.V.P 5,95 LMMS La edición profesional de música llega a Linux WWW.LINUX - MAGAZINE.ES LINUX MAGAZINE NÚMERO 14 Edición en Castellano FOTOS DIGITALES Administra imágenes digitales en Linux Trucos JPEG sin pérdidas p24 Búsqueda con imgSeek p15 Xnview: Visor versátil p18 Técnicas de edición para expertos p11 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 OOo Base El mejor sustituto de MS Access de OpenOffice p30 EDICIÓN ESPECIAL Más de 150 juegos completos Últimos drivers de vídeo y audio Software educativo incluido juega LinEx juega

Upload: linux-new-media-spain-sl

Post on 06-Mar-2016

312 views

Category:

Documents


45 download

DESCRIPTION

Puesto a la venta febrero 2006. Tema de Portada: Fotografía Digital. DVD: JuegaLinEX - Edición Especial Linux Magazine.

TRANSCRIPT

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

Foto

gra

fía D

igita

lE

dic

ión

Foto

grá

fica

img

Se

ek

Task

Ju

gg

ler Lin

ux

Mu

ltime

dia

Stu

dio

Co

nfig

ura

ció

n S

qu

id K

on

sulto

rio d

e K

lau

s

.NetProgramación

Mono y DotGNU p43

EvinceEl visualizador de documentos

de GNOME p80

NeroLINUX¿Está Nero listopara LINUX? p27

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

LMMSLa edición profesional demúsica llega a Linux

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

LIN

UX M

AGAZIN

E

NÚMERO 14

Edición enCastellano

FOTOSDIGITALES

Administra imágenes digitales en Linux

Trucos JPEG sin pérdidas p24

Búsqueda con imgSeek p15

Xnview: Visor versátil p18

Técnicas de edición para

expertos p11

Encriptación de datosProtección de discos duros con DM-Crypt p68

WlassistantAcceso a red para portátiles p37

OpenVPNRedes virtuales privadas p62

OOo BaseEl mejor sustituto de MS Access

de OpenOffice p30

E D I C I Ó N E S P E C I A L

Más de 150juegoscompletos

Últimos driversde vídeo y audio

Softwareeducativoincluido

juegaLinExjuega

Page 2: Linux Magazine - Edición en Castellano, Nº 14
Page 3: Linux Magazine - Edición en Castellano, Nº 14

Para

cuando

esto se

publique, las

Navidades, el fin

de año y los

Reyes probable-

mente 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 ejerci-

cio echar cuentas. Y por otro, ya se

sabe que el pueblo que olvida su his-

toria se condena a repetirla y en este

pasado año hubieron algunos ver-

daderos 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 prece-

dido 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 encon-

traban 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 capri-

chos 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

del proyecto SAMBA metiera el

remo y precipitase los aconte-

cimientos) 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 ameri-

canas (y alguna que otra díscola euro-

pea 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 diciem-

bre del 2005 sufrieron una seria der-

rota a manos de los dos partidos ma-

yoritarios: 290 votos en contra y sólo

15 votos a favor. ¿Las razones esgrimi-

das? Las de siempre: que si el software

libre es inseguro (= es anti-ameri-

cano) por que se le conocen sus tri-

pas; 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 anti-

americano). 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 investi-

gación. Pero, volviendo al tema: todos

estos motivos al lector familiarizado

con el mundillo del mercadeo del soft-

ware le resultarán curiosamente fami-

liares. Exacto: están calcados (¡oh,

coincidencia!) de las campañas pu-

blicitarias anti-software libre de cier-

tas empresas que todos conocemos

bien y que una y otra vez se han refu-

tado 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.

3

EDITORIAL

3Número 14W W W . L I N U X - M A G A Z I N E . E S

Estimado Lector de Linux MagazineNos sentimos orgullosos de nuestrosorígenes como publicación, que seremonta a los primero días de la revo-lución Linux.Nuestra revista hermana,la publicación alemana Linux Maga-zin, fundada en 1994, fue la primerarevista dedicada a Linux en Europa.Desde aquellas tempranas fechashasta hoy, nuestra red y experienciahan crecido y se han expandido a lapar que la comunidad Linux a lo anchoy largo del mundo. Como lector deLinux Magazine, te unes a una red deinformación dedicada a la distribucióndel conocimiento y experiencia téc-nica. No nos limitamos a informarsobre el movimiento Linux y de Soft-ware Libre, sino que somos parteintegral de él.

2005

Paul C. Brown

Director

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

4 Número 14

CONTENIDOS • Linux Magazine nº 14

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

27 Nero

¿Supera Nero en capacidad a los progra-

mas nativos de grabación de CDs de

código abierto de Linux? ¿O se le quedan

las tostadas por hacer?

30 OOBaseSi 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

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

Los usuarios de ordenadores portátiles

que se mueven entre redes inalámbricas

necesitan una herramienta simple y prác-

tica para conectarse. Wlassistant ayuda a

encontrar la señal.

40 LMMS

Linux Multimedia Studio (LMMS) es una

herramienta de sonido que engloba una

gran variedad de impresionantes caracte-

rísticas en un estupendo paquete.

PORTADA

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 alter-

nativas para la programación de sencillas

aplicaciones GUI.

47 Perl: Bancos de Pruebas

Con un banco de pruebas se pueden

corregir errores y añadir nuevas funcio-

nalidades 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 sen-

cillo en Python.

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.

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.

ADMINISTRACIÓN

11 Especial Foto Digital

El entorno Linux incluye algunas podero-

sas herramientas para editar, manipular y

escanear imágenes digitales. Las vemos

en nuestra sección de portada.

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.

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áge-

nes como los escáneres. Se puede mane-

jar un escáner con soporte Sane desde

Linux con la interfaz de usuario XSane.

24 Exif

Es posible renombrar y modificar archi-

vos JPEG sin alterar los gráficos modifi-

cando las cabeceras del archivo. Veamos

cómo.

DESARROLLO

LINUX MAGAZINE

3 Editorial

6 DVD Linux Magazine

8 Inseguridades

10 Correo

94 Eventos

94 Información de Contacto

95 Subscripciones

97 Linux Local

98 Próximo Número

EVALUACIÓN

PRÁCTICO

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

5Número 14W W W . L I N U X - M A G A Z I N E . E S

76 KTools

La base de datos musical Yammi para

KDE (Versión 3.2 o superior) es un buen

sustituto de un tocadiscos.

78 DeskTopia

Trayer aporta una útil bandeja donde

depositar iconos de applets de uso fre-

cuente. De gran utilidad para aquellos

que no dispongan de KDE o GNOME.

80 Evince

Evince se está convirtiendo en el visor

estándar de GNOME para PDFs y otros

formatos de documentos.

82 Educación

En nuestra segunda entrega sobre moo-

dle, vemos como pueden profesores y

alumnos utilizar la plataforma y exami-

naremos 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.

89 Entrevista

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.

LINUX USER

COMUNIDAD

62 OpenVPN

Los cortafuegos a veces prohiben todo el

tráfico excepto la navegación por la web,

impidiendo que los usuarios puedan utili-

zar los servicios de IRC o los servidores

de difusión. ¿La solución? OpenVPN.

65 Sistema de Ficheros

Las máquinas Unix organizan los

archivos en un sistema de ficheros en

forma de árbol con estructura jerár-

quica. Un sistema de nombres ayuda a

los administradores a encontrar el

camino.

68 Encriptación

Si se toma en serio la seguridad, prue-

be la encriptación del disco duro con

DM-Crypt y LUKS.

EDICIÓN ESPECIALLINUX MAGAZINE

� Más de 150 juegos completos

� Los últimos Drivers de vídeo ysonido optimizados

� Instalación gráfica conAnaconda

� Software educativo

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

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

DVD LINUX MAGAZINE

6 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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 demues-

tra andando, la experiencia extremeña

demuestra que las reservas políticas ante

la migración de la administración al soft-

ware libre están basadas en miedos sin

fundamentar. Y prueba de ello es la cele-

bridad que ha alcanzado Extremadura,

haciendo que una región considerada

hasta ahora una de la más improbables

como referente tecnológico, se consti-

tuya en la autonomía hacia la que se

vuelven todas las miradas cuando se

plantea una migración.

Las Caras de LinExEl equipo al cargo de la producción de

LinEx es consciente desde hace tiempo

de que no se puede crear una distribu-

ción que sea todo para todo el mundo.

Por ello, aparte de su producto paraguas,

LinEx [1], el equipo de desarrollo ha ido

creando desde distribuciones derivadas

especializadas para satisfacer las necesi-

dades de las empresas extremeñas con

LinEx Empresas [2], hasta infraestruc-

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 impul-

sores de LinEx

aparte de la

propia necesi-

dad, era que se

Mucho se ha hablado estos últi-

mos meses de Munich y sus

muy cacareados planes de

migrar 14.000 escritorios a Linux. Tam-

bién, y dentro de las noticias rela-

cionadas con el sector, hemos podido oir

la propuesta del gobierno de Massachu-

sets de vetar toda documentación admin-

istrativa que no se encuentre en un for-

mato abierto. Pero los planes de

migración previstos en la capital Bávara

para el 2005 todavía no se han material-

izado y lo último que sabemos de Massa-

chusets es que las presiones de ya-se-

sabe-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, estudi-

adas estrategias y advertidos anteproyec-

tos para implantar software y formatos

libres a diversos niveles en las adminis-

traciones públicas. Estos estupendos

propósitos, tal y como viene siendo

habitual, puede que acaben en agua de

borrajas ¿Por qué? No son lo suficiente-

mente atrevidos. No le echan el sufi-

ciente valor.

Sin embargo, en España sabemos que

hay una administración que, al modo de

cierto poblado galo de comic, se ha des-

marcado de la “prudencia” y de los pon-

derados estudios interminables y, habi-

utilizara a nivel institucional y

en las pequeñas y medi-

anas empresas de la

región, que se pop-

ulizara a nivel

doméstico. Sólo

así se con-

seguiría la

masa crítica

necesaria

para que se

alcanzaran

los objetivos

de alfa-

betismo digi-

tal marcados

por la Junta de

Extremadura.

Y no hay mejor

manera de popu-

larizar 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 fabu-

losos juegos de estrategia, simulación y

arcade.

Edición especial LinuxMagazineLa versión especial Linux Magazine, creada

por Dario Rapisardi, incluye, además de un

mayor número de juegos a cada cual más

espectacular, actualizaciones y correc-

ciones de drivers de vídeo y sonido para

ofrecer al jugador la mejor experiencia de

juego posible en un sistema Linux.

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ú supe-

rior para acceso más cómodo a juegos.

Instalación: Gráfica con Anaconda.

Sistema gráfico: Free86 4.3.0 de Debian

Sarge.

JuegaLinex EdiciónEspecial Linux Magazine

Y en el DVD…

JUEGALINEXEdición Especial Linux Magazine

Figura 1: JuegaLinEx ibcluye una gran variedad de software educativo,

como, por ejemplo, el entorno de desarrollo para niños Squeak.

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

cias en el aula.

Por ejemplo: Junto con juegos de car-

reras 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ésti-

cas 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 obje-

tos. GCompris, otro de los paquetes

incluidos, es una suite de juegos educa-

tivos facilmente expandible que cuenta

con un número cada vez mayor de apli-

caciones y actividades y que abarca la

enseñanza de matemáticas, vocabu-

lario, conocimiento del medio, física y

un largo etcétera.

Por todo ello, JuegaLinEx es la dis-

tribución ideal para el entretenimiento

y educación familiar.

InstalaciónPara empezar la instalación, habremos

de configurar la BIOS para arrancar

desde el DVD. Rearrancaremos el orde-

nador con el DVD insertado en el lector y

empezará el proceso de instalación.

JuegaLinEx viene con el avanzado sis-

tema 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, selec-

ció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 prob-

lema para tener en poco tiempo el sis-

tema listo para funcionar.

¡Instálalo ya!

DVD LINUX MAGAZINE

7Número 14W W W . L I N U X - M A G A Z I N E . E S

JuegaLinEx cuenta con

dos modalidades de

instalación: una espe-

cial para niños,

donde se omiten

los juegos más

violentos y

otra dirigida

a adultos

que gusten

de las emo-

ciones

fuertes.

Otro

punto fuerte

de Juega-

LinEx es la

inclusión de

juegos y utili-

dades educativas.

La distribución se ha

creado trabajando muy

estrechamente con la Con-

sejerí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 progra-

mas didácticos en base a sus experien-

[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

Recursos

Más de 150 juegos divididos en las sigu-

ientes 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 Bub-

ble, etc.

Rompecabezas

Xwelltriss, MirrorMagic, Frozen Bubble,

etc.

Simuladores

BilliardGL, Bzflag, Gl-117, FlightGear,

etc.

Tablero

KMahJongg, Atlantik, Go, Reversi, etc.

Los Juegos

Figura 2: Shooter en 1ª persona Nexuiz, que

utiliza el motor Quake.

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

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

Distribuidor Fuente Seguridad ComentarioDebian Info:http://www.debian.org/security/ Los avisos de seguridad actuales se in-

Lista:http://www.debian.org/debian-security-announce/ cluyen en la página de inicio. Los avisos

Referencia:DSA-…1) se proveen como páginas HTML con

enlaces a los parches. Los avisos también

incluyen una referencia a la lista de

correo.

Gentoo 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.

Mandrake 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.

Red Hat 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.

Slackware 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.

Suse 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.

POLITICAS DE SEGURIDAD DE LAS DISTRIBUCIONES MAYORITARIAS

8

INSEGURIDADES

Schlagwort sollte hier stehenLINUX USERINSEGURIDADES

8 Número 14 W W W . L I N U X - M A G A Z I N E . E S

�phpmyadminSe han descubierto algunas vulnera-

bilidades 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 cook-

ies.

• CVE-2005-3300 – Stefan Esser des-

cubrió restricciones de seguridad

perdidas en grap_globals.php que

permitirían a un atacante provocar la

inclusión de un fichero local arbi-

trario en phpmyadmin.

• CVE-2005-3301 – Tobias Klein des-

cubrió vulnerabilidades de sitio

cruzado permitiendo a los atacantes

inyectar HTML o scripting del lado

del cliente.�

Referencia Debian: DSA-880-1 Refer-

encia Gentoo: GLSA 200510-16 Referen-

cia Mandriva: MDKSA-2005:201

�OpenSSLOpenSSL es un juego de herramientas

que implementa los protocolos Secure

Sockets Layer (SSL v2/v3) y Transport

Layer Security (TLS v1), así como una

librería criptográfica de propuesta gene-

ral de potencia industrial.

OpenSSL contiene una solución soft-

ware 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 ofre-

cer soporte para SSL y TLS. Yutaka Oiwa

descubrió que la solución podría permitir

que un atacante actuara como “un hom-

bre 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 Vulne-

rabilities and Exposures o CVE – http://

cve.mitre.org) ha asignado a este prob-

lema el nombre CAN-2005-2969.�

Referencia Debian: DSA-875-1 Referen-

cia Red Hat: RHSA-2005:800-8 Referencia

Slackware: SSA:2005-286-01 Referencia

Suse: SUSE-SA:2005:061.

�UnzipUnzip 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. (CAN-

2005-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 arbi-

trarios del usuario unzip. Esto afecta a

versiones de unzip 5.52 y anteriores

(CAN-2005-2475). Los paquetes actua-

lizados se han parcheado provisional-

mente para evitar estos problemas.�

Referencia Mandriva: MDKSA-2005:197

�WgetGNU Wget es una utilidad de recu-

peración de ficheros que puede usar pro-

tocolos HTTP o FTP.

Se encontró un error en el desbor-

damiento de búfer basado en pila en la

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

INSEGURIDADES

9Número 14W W W . L I N U X - M A G A Z I N E . E S

ciones Comunes (Common Vulnerabili-

ties and Exposures o CVE – http://cve.

mitre.org) ha asignado los nombres CVE-

2005-3241, CVE-2005-3242, CVE-2005-

3243, CVE-2005-3244, CVE-2005-3245,

CVE-2005-3246, CVE-2005-3247, CVE-

2005-3248, CVE-2005-3249 y CVE-2005-

3184 a estos problemas.�

Referencia Gentoo: GLSA 200510-25 Ref-

erencia Red Hat: RHSA-2005:809-6

�SudoSudo (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 eje-

cución de comandos arbitrarios puede

resultar como el usuario alternativo

cuando se ejecuta un script bash. El

Proyecto de Vulnerabilidades y Exposi-

ciones Comunes (Common Vulnerabili-

ties and Exposures o CVE – http://cve.

mitre.org) ha asignado el nombre CAN-

2005-2959 a este problema.�

Referencia Debian: DSA-870-1 Referen-

cia Mandriva: MDKSA-2005:201 Referen-

cia Red Hat: RHSA-2005:527-16

�LynxLynx 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 servi-

dores NNTP (noticias). Un atacante

podría crear una página web que redirec-

cionara a un servidor de noticias mali-

cioso que podría ejecutar código arbi-

trario como si se tratara del usuario que

corre Lynx. El Proyecto de Vulnerabili-

dades y Exposiciones Comunes (Common

Vulnerabilities and Exposures o CVE –

http://cve.mitre.org) ha asignado el nom-

bre CAN-2005-3120 a este problema.�

Referencia Debian: DSA-876-1 Referen-

cia Gentoo: GLSA-200510-15 Referencia

Mandriva: MDKSA:2005:186 Referencia

Red Hat: RHSA-2005:803-4 Referencia

Suse: SUSE-SR:2005:02

implementación de la autenticación

NTLM de wget. Un atacante podría eje-

cutar 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 Vul-

nerabilities and Exposures o CVE –

http://cve.mitre.org) ha asignado el nom-

bre CAN-2005-3185 a este problema.�

Referencia Mandriva:

MDKSA-2005:204 Referencia Red Hat:

RHSA-2005:812-5 Referencia Suse:

SUSE-SA:2005:063

�EtherealEl paquete Ethereal es un programa para

monitorizar el tráfico de la red.

Se han descubierto fallos en este pro-

grama. En un sistema en el que está co-

rriendo Ethereal, un atacante remoto

podría enviar paquetes maliciosos para

desencadenar dichos fallos y hacer que

Ethereal se estropeara o que potencial-

mente ejecutara código arbitrario. El

Proyecto de Vulnerabilidades y Exposi-

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

10

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 trans-

cribir 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 “Soft-

ware” > “Administración de Software”

(la primera vez que lancemos esta apli-

cació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 paque-

tes que necesitaremos para instalar el

compilador.. Procederemos de igual ma-

nera para los restantes paquetes que nos

falten hasta tener el sistema a nuestro

gusto. �

la revista… que contenían información

incorrecta en lo que se refería al DVD.

Desde aquí vaya nuestra más sincera dis-

culpa.

Sin embargo, no hace falta, como pro-

pone Antonio, descargarse toda una iso

del DVD para actualizar el sistema. Con

la utilidad de administración de Yast, bas-

tará. Pulsamos en el botón de “K-menu”

en el ángulo inferior izquierdo de la pan-

talla 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:

Correo del Lector

ACCESO DE ESCRITURA

Schlagwort sollte hier stehenLINUX USERCORREO

10 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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 ver-

sió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 actualiza-

ción. Les invito a que los DVD que rega-

len, o bien estén completos o que avisen

de sus limitaciones.

Saludos

Antonio

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 verdade-

ra distribución. No comprendemos exac-

tamente 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 descu-

brimos el error, los DVDs ya estaban

impresos, al igual que los ejemplares de

LM

Puedes enviar tus comentariosy sugerencias a:

[email protected]

www.alm

ogon.de

Protocolo: HTTP

Servidor: packman.iu-bremen.de

Directorio: suse/10.0

Protocolo: FTP

Servidor: ftp.suse.com

Directorio 32 bits: pub/suse/

i386/9.3

Directorio 64 bits: pub/suse/

x86_64/9.3

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-GM-

Extra4

Protocolo: FTP

Servidor: ftp.rediris.es

Directorio de 32 bits: pub/linux/

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/suser-

drcux/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

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

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.

Tratamiento de imágenes bajo Linux

LA MEJOR IMAGEN

Imagen Digital • PORTADA

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

Las modernas tecnologías de ima-

gen digital ofrecen hoy día solu-

ciones 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 prop-

iciado nuevas posibilidades para el

procesamiento de imágenes.

Todas estas nuevas posibilidades han

conducido a una nueva generación de

herramientas. El entorno Linux propor-

ciona numerosas y excelentes utilidades

para el visionado, edición y proce-

samiento de imágenes digitales, y en

el tema de portada de este mes se

examinan algunas de estas her-

ramientas.

Se comenzará echando un vis-

tazo 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ónLos 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

11

imgSeek...............................................15

Xnview................................................. 18

Xsane................................................... 21

Exif....................................................... 24

TEMA DE PORTADA

El entorno Linux incluye algunas poderosas herramientas para editar, manipular y escanear imágenes digitales.

POR ACHIM SCHEFCZYK Y JOE CASAD

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

por ejemplo. Será preciso recurrir al ma-

nual de la cámara para descubrir qué sig-

nifican en realidad estos términos. Depen-

diendo del fabricante, dichos términos

pueden significar cosas bien distintas.

Habitualmente, JPEG da buenos resul-

tados 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 moder-

nas 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). Desafortu-

nadamente, 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 origi-

nales en un CD o DVD. Luego puede bo-

rrarse cualquiera de ellas que haya

quedado descartada para posterior

procesamiento. Esto puede incluir imá-

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,

PORTADA • Imagen Digital

12 Número 14 W W W . L I N U X - M A G A Z I N E . E S

Tabla 1: ELEGIR UN TAMAÑO DE IMAGEN

Tamaño de la imagen Mega-pixels Aplicaciones recomendadas

640x480 0,3 Sólo útil para Internet

1024x768 0,78 No usar, o sólo para 9 x 13

1280x960 1,2 9x13 hasta 10 x 15

1600x1200 2,0 10x15 hasta 13 x 18

2048x1536 3,1 13x18 hasta 20 x 30

2560x1920 5,0 13x18 hasta tamaño poster

TIFF (Target Image File Format) es el formato

más importante para el intercambio de infor-

mació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 apli-

caciones profesionales. Las imágenes TIFF

usan un formato de compresión sin pérdi-

das. 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 profesio-

nales. Además, una imagen RAW puede

ocupar el triple de espacio a su equivalente

en formato JPEG. Si aún así se quiere traba-

jar con el formato RAW, es preciso asegu-

rarse 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

introdujo el método estandarizado para la

compresión con y sin pérdidas en 1992. En el

proceso de compresión, una ventana se

mueve secuencialmente a lo largo de la ima-

gen 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 demasi-

ado alto. En el peor de los casos puede apare-

cer degradación por compresión como blo-

ques, efecto alias y otros problemas (véase la

Figura 1).

PNG Portable Network Graphics (PNG) se

diseñó como un sustituto libre para el for-

mato 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ér-

didas para guardar los datos.

Desafortunadamente, no todos los nave-

gadores 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 for-

mato PNG.

GIF GIF (Graphics Interchange Format)

puede tratar un máximo de 256 colores dife-

rentes. Este formato se ha quedado algo

anticuado hoy día, aunque GIF aún está bas-

tante bien para gráficos y dibujos. Debido a

su poca profundidad de color, no es ade-

cuado para fotos a color. Las fortalezas de

este formato son su habilidad para mostrar

transparencias y gráficos animados.

Formatos Gráficos Comunes

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

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

genes completamente sobrexpuestas o

fotos con demasiado movimiento de

cámara.

El siguiente paso es ver las fotos, asig-

narles nombres fáciles de recordar y

rotar aquellas que no estén correcta-

mente 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 sim-

ple 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 desti-

natario 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 ima-

gen 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 encon-

trarse en las herramientas que se comen-

tan este mes, las cuales son exactamente

las que se necesitan para hacer las co-

rrecciones precisas. Las siguientes sec-

ciones describen algunos problemas

comunes asociados a las imágenes digi-

tales.

GammaPara 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

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 manipu-

lación de imágenes proporcionan doble

corrección Gamma, una básica para el

monitor y, en segundo lugar, unos con-

troles más precisos para cada archivo

de manera individual. La primera co-

rrecció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 normal-

mente comparando plantillas.

La segunda corrección es parte del

proceso de manipulación de imágenes.

Puede usarse la corrección Gamma

para archivo para rectificar problemas

de color causados por el origen de la

imagen. Muchas cámaras digitales ge-

neran 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ónLos molestos detalles en el borde de

una imagen pueden estropear la impre-

sió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 hori-

zontal. 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 alia-

sing aplicando un giro en sentido

opuesto.

Imagen Digital • PORTADA

13Número 14W W W . L I N U X - M A G A Z I N E . E S

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

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

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

valores

de

saturación.

También se

pueden cambiar

los valores de color o

experimentar con el balance de color.

Más NitidezAlgunas 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 desen-

foque ligero, puede aplicars la he-

rramienta de nitidez (sharpen). Algunos

programas de retoque permiten definir

una máscara donde no se aplica la he-

rramienta, 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 con-

seguirse una especie de efecto 3D apli-

cando 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.

Ojos RojosLos 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 relativa-

mente 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 per-

sona 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 progra-

mas, simplemente tendrá que dibujar

una selección alrededor de los ojos y lan-

zar 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 y Formato deImágenEs difícil escalar una imagen. Obvia-

mente 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ónEn 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é hace-

mos 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. �

ContrasteMuchas 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

PORTADA • Imagen Digital

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

Figura 4: La imagen de la izquierda fue escalado usando el algoritmo Mitchell. La de la

derecha con el método Nearest Neighbor.

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

correspondientes paquetes de desarrollopara permitir a imgSeek que trate losnumerosos formatos gráficos soportadospor esta librería gráfica. Si además seinstala el paquete Python-Imaging,imgSeek también podrá tratar y editar losmetadatos de varios formatos gráficos.

¡Adelante!Tras completar la instalación, sólo seránecesario teclear el comando imgSeek

para arrancar el programa. ¡Ojo con la Smayúscula! La primera vez quearrancamos el programa, no se veráninguna imagen. Si se tiene la colecciónde imágenes en el disco duro, se desearáque la analice justo en este momento.Para ello, se pulsa en la pestaña Add de laventana principal (véase Figura 1).

imgSeek subdivide la base de datos delas imágenes en volúmenes. El volumenestándar incluye cualquier archivo que sehaya añadido en el sistema de archivosLocal filesystem. Si se añaden imágenes

El visor de imágenes imgSeek

BUSCAR LA FORMA

imgSeek • PORTADA

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

La mente humana es capaz de recor-dar imágenes más fácilmente quehechos y cifras. Ésta fue la idea

básica que originó el programa imgSeek(http://imgseek.python-hosting.com), elcual agrupa las imágenes de acuerdo a sumotivo. Por ejemplo, imaginemos que seestán buscando todas las imágenes denuestra colección que muestren unapalmera. Simplemente se puede intro-ducir la imagen de una palmera aimgSeek, y el programa encontrará todaslas que sean similares. Alternativamente,se podría hacer un esbozo de lo que seestá buscando con la herramienta dedibujo integrada, e imgSeek mostrarátodo lo que recuerde a nuestro boceto.

Por supuesto que imgSeek tambiéndispon de la funcionalidad que permiteagrupar las imágenes por nombre dearchivo y directorio, fecha de creación oentradas de metadatos. Además puedeexportar colecciones de imágenes aarchivos HTML para ayudarnos a configu-rar una página Web, o puede llenar un CDpara poderlo visualizar fácilmente con unnavegador.

InstalaciónTanto Suse como Debian incluyenimgSeek, y puede ejecutarse Yast o apt-get

install imgseek para instalar el programa.El paquete está también en el repositoriouniverse de Ubuntu, aunque pueden quese prefiera instalarlo manualmente, ya

que la versión disponible presenta diver-sos problemas que lo hacen casi inutili-zable.

imgSeek es un programa en Python, porlo que no es necesario compilarlo despuésde instalarlo desde el código fuente. Puedeobtenerse el código fuente en la páginaWeb de imgSeek: http://imgseek.

python-hosting.com. Se requieren privile-gios de root para instalar los archivos delpaquete imgSeek-0.8.5.tar.bz2. En primerlugar es preciso descomprimirlo con tar

-xjf imgSeek-0.8.5.tar.bz2 y posteriormentese teclea el comando ./install.

imgSeek requiere el lenguaje de scriptPython y los paquetes de desarrollo, quellevan el nombre de python-dev opython-devel, en función de la distribu-ción, así como dePyQt, también conlos paquetes dedesarrollo (deben lla-marse algo comopyqt o python-qt conla extensión dev odevel). Por último, esimprescindible elpaquete de desa-rrollo de Qt, libqt-dev

o qt-devel, en funciónde nuestra distribu-ción.

Puede ser unabuena idea instalarImageMagick y los

15

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

Figura 1: imgSeek clasifica grandes colecciones de imágenes en

función de criterios como la fecha, nombre de fichero y el motivo.

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

Con Groups también severá una disposición enforma de árbol, pero sepermite una agrupaciónconfigurable por grupos.La configuración pordefecto tiene un grupopor cada fecha de imagenañadida a la colección, yexiste un grupo Orphan

para las imágenes noasignadas a ningúngrupo, por ejemplodebido a que se haya bo-rrado el grupo al que

pertenecían.Al pulsar con el botón derecho en la

ventana de grupos aparece un menú conla opción New group, la cual permite crearun nuevo grupo al que asignar cualquiernombre. Se puede arrastrar y soltar paramover o copiar imágenes o directorioscompletos atrás y adelante a través de losgrupos.

La pestaña System muestra el clásicosistema de archivos sin aplicar ningún cri-terio de clasificación. Puede navegarse porel sistema de archivos a través de la vistaen árbol del mismo modo que concualquier administrador de archivos yexplorar sus ramas.

Con Similarity dentro del área Browse seclasifican las imágenes por nombre dearchivo o fecha. El cuadro de selección By:

permite definir el criterio: Date oFilename. Al pulsar sobre Group se orde-nan las imágenes en la base de datos y semuestra un ejemplo de cada grupo a laizquierda de la ventana imgSeek. Al pul-sar en la imagen de ejemplo se nosmostrarán las miniaturas del resto de imá-genes del grupo.

El campo Threshold define un valorumbral. Cuanto mayor sea el número,más tolerante será imgSeek a las diferen-cias a la hora de agrupar imágenes: estoes, el grupo crecerá en tamaño. El cuadrode herramientas junto al botón Group!

convierte los grupos en grupos lógicos

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

Busca y CapturaLa pestaña Search es el lugar en el que seencuentra la característica más excitantede imgSeek. La pestaña by Image content

tiene dos secciones, Import y Draw. Laprimera nos permite cargar una imagencualquiera. Tras esto, podemos pulsarsobre el botón Start Search para localizarcualquier imagen de la base de datos quetenga un motivo parecido, según el crite-rio de imgSeek. El programa, de hecho,muestra un porcentaje para indicar elgrado de similitud calculado para la ima-gen (véase Figura 2).

El algoritmo de búsqueda evalúa lasformas y figuras para tomar una decisión.Esto significa que el programa puede des-cubrir similitudes entre imágenes que sele escapan al ojo humano. Por ejemplo,podría identificar fondos con colores simi-lares que no son relevantes para la ima-gen en su conjunto.

Pero independientemente de losnumerosos falsos positivos que puedanaparecer, imgSeek suele encontrar la ima-gen que estábamos buscando, ahorrán-donos una buena parte de trabajo, ya quees mucho más rápido descartar los resul-tados falsos que buscar manualmente entoda 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 sonlas de grosor del pincel y el color. Es posi-

de un CD, por ejemplo, puede que que-ramos añadir un nuevo volumen usandoel nombre del CD para mantener estascolecciones en bases de datos separadas.Esto permite trabajar con las imágenes ennuestro sistema de archivos local sin queimgSeek esté intentado acceder a las imá-genes del CD que puede no estar mon-tado en ese momento.

Después de decidirnos por un volu-men, se teclea la ruta (Path:) hasta eldirectorio. Se pulsa el botón Add! paraindicarle a imgSeek que busque las imá-genes de esa ruta. Si se marca recursively,imgSeek también añadirá los archivos delos subdirectorios a la colección.

La pestaña Browse de la ventana prin-cipal tiene un administrador de archivosque permite navegar entre las entradasde la colección de imágenes. Hay cuatropestañas adicionales con las que se apli-can diferentes criterios de organización.La pestaña Files usa una disposición enárbol con los volúmenes en la zonasuperior. Puede expandirse el árbol pordebajo de ese nivel, y se verán las imá-genes individuales que se muestrancomo entradas. Al pulsar en un directo-rio se presentan las miniaturas de losarchivos de ese directorio en la partesuperior derecha de la ventana deimgSeek, y si se pulsa en la miniatura semuestra la imagen original en la parteinferior derecha.

PORTADA • imgSeek

16 Número 14 W W W . L I N U X - M A G A Z I N E . E S

Figura 2: La búsqueda por contenido de la imagen es muy útil,

pero a veces genera resultados sin demasiadas similitudes.

Figura 3: imgSeek localiza las imágenes que

se parecen al boceto dibujado por el usuario.

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

ble dibujar un rápido esbozo y pulsar enStart search para indicar a imgSeek quecomience la comparación en la base dedatos y encuentre imágenes con motivossimilares (véase Figura 3).

Imágenes BatchAl pulsar con el botón derecho en unaminiatura en cualquier modo de vistaaparece un menú. Este menú tiene unaentrada llamada Add to batch que colocala imagen seleccionada en una memoriacaché. Esto permite aplicar las herramien-tas del menú Tools al mismo tiempo a va-rios archivos.

La entrada de menú Tools | Work batch

editor abre un cuadro desde donde puedeeditarse la memoria caché (véase laFigura 4). Si se pulsa con el botón dere-cho se puede desplegar el menú, y selec-cionar Remove this item para borrar laentrada seleccionada. Se selecciona Clear

current batch para borrar toda la pila deimágenes.

El menú desplegable Batch name daacceso a varias cachés. La caché pordefecto se llama Temporary work batch ypuede 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 álbumHTML en una etapa posterior.

Tras seleccionar la caché, se observa queel menú desplegable Action: tiene unascuantas opciones. Extract image metadata

from file lee los metadatos guardados conel archivo, como la fecha de creación, re-solución o tamaño del archivo. Sinembargo, la función sólo transfiere estainformación a la base de datos interna. Enuna próxima versión del programa, serácapaz de exportar estos metadatos parausarlos con otros programas.

Con Slideshow se ejecuta un pase de dia-positivas de las imágenes de la caché. Paraello, el programa pasa a tamaño de pan-talla completa y muestra las imágenes enun bucle infinito. Se pulsa [ESC] para salirdel pase de diapositivas.

Create HTML album usa la caché paracrear una álbum de imágenes que puedevisualizarse en un navegador Web (véasela Figura 5). Existen dos diseños, Acqua ySlides, que se diferencian únicamente enlos esquemas de color. La Figura 6 muestraun ejemplo del diseño Acqua.

VersátilLa entrada Edit metadata del menú desple-gable le indica a imgSeek que muestre lametainformación guardada con la imageny también proporciona una funcionalidadde edición. El menú Tools | Transform

images sólo funciona si se tiene instaladala librería Python-Imaging. En este caso,soporta un tratamiento simple de las imá-genes, incluyendo características comorotación, conversión a otros formatos, oescalado.

Si prefiere usarse la línea de comandospara algunas tareas, imgSeek puede ser degran ayuda. El comando imgSeekCmd

soporta la administración de la base dedatos de imgSeek sin necesidad de unainterfaz gráfica y es útil para hacer scripts.

imgSeekCmd add añade imágenesnuevas o directorios a la base de datos. Elcomando imgSeekCmd browse -F muestraun lista de registros. Los parámetros -G y-V muestran los grupos o volúmenes,respectivamente.

La lista de imágenes contiene la IDinterna de cada imagen. Se puede usar elcomando imgSeekCmd info -m -i ID parasolicitar los metadatos de la imagen. Lalínea de comandos soporta e inclusomejora la búsqueda por contenido: elcomando imgSeek-Cmd query -i ID muestralas IDs internas de las imágenes similares ala especificada con ID. El parámetro -r

seguido por un valor numérico restringe elnúmero de eventos en la búsqueda.

ConclusiónimgSeek supera con facilidad a muchosotros visores de imágenes. A pesar de serconceptualmente brillante, la búsquedabasada en el motivo no es del todo fiabledebido a la complejidad de la tarea. Losresultados, sin embargo, se pueden uti-lizar. Desafortunadamente, los trabajos dedesarrollo en esta función especial no pro-gresan con suficiente rapidez. En los últi-mos 12 meses, las nuevas versiones hansido simples correcciones de fallos. Peroincluso si los desarrolladores no consiguentodo lo que se han propuesto hacer, almenos su trabajo de pioneros servirá deejemplo para otros programadores. �

imgSeek • PORTADA

17Número 14W W W . L I N U X - M A G A Z I N E . E S

Figura 4: Situar imágenes en una memoria

caché nos permite exportar imágenes,

tratarlas o arrancar un pase de diapositivas.

Figura 5: Podemos exportar imágenes a un

álbum con formato HTML para poder verlo

con un navegador Web.

Figura 6: imgSeek tiene dos diseños HTML

de momento, pero los diseñadores Web

pueden modificar los esquemas.

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

18

PORTADA • Xnview

18 Número 14 W W W . L I N U X - M A G A Z I N E . E S

derecha y la previsualización de la imagenabajo. Haciendo clic en el thumbnail semuestra la imagen correspondiente. Elmenú View | Layout permite cambiar laconfiguración del explorador o el tamañodel thumbnail.

El fichero histórico es una ayuda útil denavegación; está accesible mediante elmenú File. Para comprobar el directoriohistórico, hay que hacer clic en el icono dela derecha de la barra de direcciones. Esteicono también tiene la función defavoritos, que permite almacenar las direc-ciones a las que se necesita acceder confrecuencia.

Colecciones de ImágenesXnview ofrece dos características paracrear colecciones de imágenes. Haciendoclic en el botón HTML en la barra de he-rramientas se crea un sitio web con losthumbnails de las imágenes selec-cionadas. Se puede usar el cuadro de diá-logo para especificar parámetros talescomo el tamaño del thumbnail, el númerode columnas y líneas y el espacio entreellas. Para facilitar la organización,Xnview crea dos subcarpetas, una con laimagen original y la otra con los thumb-nails almacenados. Puede actualizarse lavista directamente en el servidor web.

La segunda característica sigue un prin-cipio parecido a la creación de Contact

Sheet. En este caso, Xnview no crea unsitio web sino un nuevo contenedor deimágenes con los thumbnails de los origi-nales seleccionados. Haciendo clic en elicono de la derecha de HTML apareceráun cuadro de diálogo donde se puedeespecificar cómo desea que se muestrenlos ficheros y la información (tamaño delfichero o nombre) que proporcionará lahoja de contacto.

Entrando en DetallesSi las imágenes contienen meta-informa-ción en formato EXIF o IPTC, ésta semostrará en un pequeño cuadro en laesquina inferior derecha del thumbnail.EXIF [2] indica los datos de los parámetrosde la cámara usada para tomar la foto, porejemplo, información sobre el diafragma,el tiempo de exposición o la resolución.IPTC [3] contiene datos como el género, elautor, el origen o las notas de copyright.Dichos datos se usan principalmente parala administración de los archivos.Programas como Imgseek pueden catego-rizar las imágenes basándose en estainformación.

Para leerla, hay que pulsar el thumbnailcon el botón derecho del ratón, y se selec-ciona Properties… del menú desplegable.En la nueva ventana que aparece, hay quepulsar en la solapa con la información quese desee ver en la parte superior de la ima-

Nuestra colección de imágenes digi-tales sigue creciendo, pero aún nodisponemos de la herramienta

adecuada para la gestión y edición dedichas imágenes. Los programas especia-lizados abundan, pero proporcionan másde lo que el usuario necesita y tantosdetalles pueden llevar a la confusión. Si seestá buscando una herramienta prácticapara 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 bas-tante simple para uso personal. Los pre-cios (en Euros) para uso comercial semuestran en la Tabla 1.

Es tanto un explorador de imágenescomo un visor con grandes opciones deedición. El paquete también viene con unconvertidor por lotes, una característica depresentación de fotografías y un generadorde thumbnails, que es útil si se deseahospedar imágenes en un sitio web. Elprograma lee y escribe meta informaciónen formato IPCT y también lee datos EXIF,es decir, la información técnica de unaimagen.

Explorador de ImágenesCuando se ejecuta, Xnview viene con unexplorador de imágenes (Figura 1), queestá dividido en tres marcos: el árbol dedirectorios, los thumbnails, arriba a la

PUNTOS DE VISTAXnview 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

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

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

Todo en unoLas imágenes recién obtenidas de unacámara tienen normalmente nombres tanpoco intuitivos como IMG_0815.JPG.Xnview dispone de una herramienta derenombre por lotes (Figura 2) para asig-nar nombres más significativos. Hay queseleccionar todas las imágenes que sedesean renombrar, luego se pulsa con elbotón derecho del ratón y se seleccionaBatch rename… del menú contextual. Sepuede establecer un prefijo para todas lasimágenes en la parte izquierda del cuadrode diálogo. Usemos Vacaciones# Start:0,

Step:1 como ejemplo. Esto le indica alprograma que renombre todos losficheros basándose en el patrónVacaciones0.jpg, Vacaciones1.jpg,… Si sedesea estandarizar el caso, puedenestablecerse los valores preferidos enFilename case.

Fotografiando la PantallaXnview dispone de una utilidad para cap-turar la pantalla. Pulsando en el símbolode la cámara de la caja de herramientas seobtiene el cuadro de diálogo de captura.Además de las aplicaciones individuales,que se organizan en una lista, se puedecapturar la pantalla completa, que semuestra en el visor. Desafortunadamente,la herramienta no proporciona la habili-dad de ocultar el cuadro de diálogo decaptura y esto hace que sea poco útil.

El Visor de ImágenesHaciendo doble clic en un thumbnail, seabre la imagen correspondiente en elvisor de imágenes (Figura 3). La imagenes una nueva instancia; viene con fun-cionalidades extendidas y con botonesque no aparecen en el navegador. Se

puede entrar directamente en el visua-lizador escribiendo Xnview

nombre_de_fichero en la línea de coman-dos.

Sólo para tus ojosLos botones de las flechas de la caja deherramientas permiten al usuario nave-gar por las imágenes de un directorio. Sepuede seleccionar el tamaño de la ima-gen a mostrar en View | Auto Image Size.El menú proporciona opciones paraescalar la imagen al tamaño de la ven-tana y viceversa. La opción solamenteafecta a la imagen actual. Para escalarcualquier imagen que se muestre en elvisor, hay que seleccionar Tools | Options

para obtener la ventana de configu-ración; luego se pulsa en View en lacolumna de la izquierda y se estableceAuto Image Size: con el valor deseado.

Si se tiene un ratón con rueda, la selec-ción Mouse permite especificar si sedesea utilizar la rueda para hacer scroll opara hacer zoom. Por defecto, los pasosdel zoom son bastante bruscos y puedeser que se desee ajustar este parámetro.Para ello, se pulsa en View en el cuadrode diálogo Options y se habilita Change

zoom in fixed steps. Entonces se intro-duce el valor (en porcentaje) en elcuadro para definir el paso del zoom.

El elemento High zoom quality le indi-ca a Xnview que recalcule la imagen aampliar. Esto hace que se obtengan ma-yores niveles de detalles en factores altosde ampliación. Como punto negativo, esnecesario disponer de un hardwarerazonablemente rápido para beneficiarsede esta característica: una máquina lentapuede tardar unos minutos en recalcularla imagen.

Pulsando en Full Screen de la caja deherramientas o pulsando el atajo deteclado [CTRL+F], pasa el programa apantalla completa. A continuación sepueden utilizar los botones derecho eizquierdo del ratón para navegar a laimagen siguiente o a la anterior. [Esc]cierra la vista a pantalla completa.

Xnview ofrece la posibilidad de realizaruna presentación para poder ver todas lasimágenes en sucesión una tras otra. Paraejecutar la presentación hay que selec-cionar View | Slide Show… y luego, en eldiálogo que aparece, podremos selec-cionar las imágenes o directorios que sedesea queden incluidos.

19

Xnview • PORTADA

19Número 14W W W . L I N U X - M A G A Z I N E . E S

La ayuda Display Color Information

(Mostrar Información del Color) es unacaracterística que los diseñadores web ylos artistas gráficos agradecerán. El ele-mento Display Color Information en View

habilita la característica que muestra losvalores RGB y hexadecimales del color quese encuentran bajo la posición del cursordel ratón. Desafortunadamente, la ventanaes visible a través de cualquier otra ven-tana 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 ponganervioso. No se sabría decir si esta persis-tencia es una característica o es un error.

Retocando las ImágenesEl programa es francamente bueno cuan-do se necesitan retocar imágenes digitales.

Todas la herramientas que se necesitanpara ello se encuentran ocultas en el menúImage y Filter. Como en otras herramien-tas de retoque fotográfico, los elementosde Filter definen operaciones parasuavizar la imagen, mientras que Image

contiene acciones que afectan al tamaño,el contraste o la profundidad de color.

Figura 1: El Navegador de Imágenes muestra

una previsualización del thumbnail actual-

mente seleccionado.

Figura 2: El Batch renombra las característi-

cas permitiendo a los usuarios asignar nom-

bres de archivos significativos a varios

archivos.

Número de Licencias Coste por

Usuario

1 licencia 26.00 EUR

2-9 licencias 23.00 EUR

10-19 licencias 20.00 EUR

20-49 licencias 17.00 EUR

50-99 licencias 9.50 EUR

100-499 licencias 6.00 EUR

500-999 licencias 3.80 EUR

Más de 1000 licencias 3.50 EUR

Tabla 1: Licencias

Comerciales de Xnview

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

Xnview también dispone de una utili-dad para la reducción de los ojos-rojos yretocar las fotografías realizadas conflash. Como la función reduce cualquiertono rojo de la imagen a un tono másoscuro, es necesario especificar de formaprecisa el área donde se desea aplicar laherramienta. Se aconseja trabajar sobrecada ojo por separado y luego seleccionarImage | Edit red eye correction pararealizar los cambios. Si los resultados noson de nuestro agrado, con tan sólo pul-sar el botón Undo se restaurará el estadooriginal.

Procesamiento por LotesSi se necesita aplicar los mismos efectosa varias imágenes, puede ser de granayuda la característica de Xnview deprocesamientos por lotes. Éste ayuda aaplicar todas las funciones de Xnview ysus filtros a múltiples imágenes.

Para modificar el tamaño y el brillo avarias imágenes, hay que empezar selec-cionando Tools | Multi convert… (Figura5), y luego pulsar en Add… para añadirlas imágenes que se quieren procesar. Sidesea almacenar las imágenes en unnuevo directorio, hay que utilizar el

campo Directory para especificar el nom-bre del directorio. Si no se selecciona undirectorio, Xnview escribirá los nuevosficheros en el directorio original.

En Directory se selecciona el formatode imagen deseado del menú desple-gable. El botón Options… permite especi-ficar opciones como el nivel de compre-sión. Ahora se abre el cuadro de diálogode selección de filtros pulsando enAdvanced Operations… En la lista de laizquierda, se selecciona resize yBrightness. Para realizar la selección demúltiples entradas al mismo tiempo hayque pulsar [Ctrl]. Cuando se haya fina-lizado, se pulsa sobre el botón con laflecha hacia la derecha para aplicar laselección.

Para ajustar la operación, hay que pul-sar en la operación de la ventana del ladoderecho. Un cuadro de diálogo apareceen la parte de abajo de la ventana,mostrando las opciones de la operaciónactual. Finalmente, para empezar la con-versió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 almace-nará las opciones seleccionadas pero nolos formatos y los directorios.

ConclusionesMuchas de las características de Xnviewy su soporte para los 400 formatos deimágenes disponibles lo convierten enuna herramienta universal. Por otro lado,el programa carece de una docu-mentación genuina, pero se puede nave-gar sin ningún problema por sus sencil-los, pero poco intuitivos controles.

Contiene algunos fallos menores, comola molesta ventana Display Information

que se muestra por encima de cualquierotra, pero quizás, aún sea más irritanteque la característica Undo tan sólo seacapaz de deshacer la última acción. Elprograma también carece de la posibili-dad de “arrastrar y soltar” que permite alos usuarios mover imágenes desde undirectorio al programa. �

La opción Image | Resize hace exacta-mente lo que se espera de ella. Si se necesi-ta convertir una imagen a un tamaño noestándar, se puede seleccionar un tamañodesde el desplegable Custom. Por otrolado, es posible introducir la altura y laanchura de la imagen en Screen Size en elcuadro de diálogo. Para evitar las distor-siones de la imagen, hay que habilitar laopción Keep ratio.

El programa contiene una selección deocho algoritmos diferentes para modificarel tamaño de la imagen, desde Nearest

Neighbor hasta Lanczos. Ésta es unaopción que no proporcionan programascomo Gimp ni Photoshop.

Para ajustar el brillo y el color, hay queseleccionar Adjust | Brightness/Contrast/

Color Balance en el menú Image (Figura 4).Se pueden utilizar los deslizadores paraajustar los valores. Si se tiene habilitada laopción Auto view al pie de la ventana, sepueden monitorizar los efectos producidospor los cambios.

Para rotar u obtener la imagen especularde las imágenes con formato JPEG, hayque seleccionar JPEG Lossless

Transformations. Los cambios se aplican ala imagen inmediatamente y son sin pérdi-das, lo que implica que se pueden repetirlas acciones múltiples veces sin que se veaafectada la calidad de la imagen.

A excepción de los cambios globalescomo la conversión del color o el escalado,para el retoque de la imagen disponiblepueden aplicarse cualquiera de las her-ramientas, más o menos, a una selecciónde la imagen. Para definir un cuadro con laselección de la imagen deseada será pre-ciso pulsar el botón izquierdo del ratón yarrastrarlo. Los cuadrados en las esquinasde la imagen permiten escalar la selecciónactual. Pulsando en las tijeras de la caja deherramientas se recorta la selección.

PORTADA • Xnview

20 Número 14 W W W . L I N U X - M A G A Z I N E . E S

[1] Página web de Xnview: http://www.

Xnview.com

[2] Especificación de EXIF: http://www.

exif.org/specifications.html

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

iptc.org/IIM/

RECURSOS

Figura 3: Algunos iconos del Image Viewer

no son intuitivos. La falta de documentación

nos lleva a hacer pruebas de ensayo y error.

Figura 4: Ajuste del brillo y contraste en

Xnview.

Figura 5: El convertidor por lotes de Xnview

le permite procesar múltiples imágenes.

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

primero a la ventana Preview (Figura 1).Coloque una fotografía en el escáner ypulse en Acquire preview.

Tras concluir una breve fase decalentamiento, el escáner mostrará unaprevisualización de la imagen en bajaresolución. El objetivo de estaprevisualización es el de ayudar alusuario a definir una sección de laimagen original para escanear y ajustarlos colores.

OpcionesLos cinco iconos lupa de la parte dearriba permiten inspeccionar eldocumento. La lupa con la cruz a laizquierda muestra la imagen completa;la segunda de la derecha permiteaumentar la selección actual.

Para seleccionar un área deldocumento a escanear, hay quemantener pulsado el botón izquierdo delratón mientras se arrastra sobre la zonadeseada. El área a escanear se indica con

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

ESCANEANDO

Xsane • PORTADA

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

La mayoría de las veces un escánerse suministra con una colecciónde programas gratuitos que se

pueden utilizar para manejarlo.Desafortunadamente, casi siempre estesoftware sólo funciona en Windows o(quizás) en Windows y OS X. Si usted esun usuario de Linux y está buscando unGUI para comunicarse con su escáner,pruebe con XSane.

XSane [1] es una interfaz de usuariográfica basada en la interfaz deprogramación Sane [2]. Sane es elacrónimo de Scanner Access Now Easy

(Ahora, Acceso Fácil al Escáner). Lainterfaz de programación Sane estableceun estándar para acceder a losdispositivos de procesamiento deimágenes. Los controladores para losdispositivos de procesamiento deimágenes usados por XSane, incluido losescáneres, reciben el nombre, dentro dela jerga de Sane, de back-ends.

Si Sane dispone de un back-end que

corresponde con el escáner, el procesode instalación es bastante sencillo (véaseel cuadro “Configuración del Escáner”).Las operaciones de Sane son controladaspor los front-ends. XSane es un ejemplode front-end. Otros front-ends para Saneincluyen herramientas como Kooka [3] yQuiteInsane [4]. Este artículo describecómo manejar un escáner desde unordenador Linux usando el front-endXSane.

La ConfiguraciónPara ejecutar XSane, hay que pulsar [Alt-F2] para que aparezca una ventana deacceso rápido, y escribir xsane. Elprograma puede que le solicite eldispositivo gráfico que se desea utilizarantes de abrir varias ventanas.

La ventana principal se identificafácilmente por la etiqueta xsane; elnombre de escáner aparece a la derecha.

El menú Window permite ocultar omostrar varias ventanas. Hay que ir

21

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

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

ESCANEANDO

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

luminoso, habrá queaplicar correccionesmanuales. Para estepropósito se utilizan laventana Histogram, laventana principal y lastres pipetas en laPreview.

Se pueden usar laspipetas para definir unespacio de color para laimagen. Asignando laspipetas (de izquierda aderecha) a los puntosblanco, gris y negro enla imagenprevisualizada. XSanecalcula los valores debrillo para la imagenbasándose en estacorrespondencia.

La ventana Histogram

muestra la distribución del color deforma gráfica (Figura 2). Se puede pulsaren los iconos I, R, G y B para mostrar u

ocultar un color. Paracambiar el brillo de laimagen, hay que moverlos triángulos pequeñoshacia la izquierda ohacia la derecha de labarra.

Para modificar losvalores individuales,hay que abrir la ventanaprincipal y pulsar en elicono coloreado en lafila de botones de laizquierda. De este modose abre un menú decaracterísticasavanzadas para el ajustepreciso del color (Figura3); al mismo tiempo quese muestran en laventana Histogram losselectores del color. Se

puede utilizar el selector junto alsímbolo gamma para la correccióngamma (ésta modifica los valores del

la línea discontinua. Hay tres iconosflecha a la derecha de los iconos lupa;pulsando la flecha de la izquierda se leindica al programa XSane que seleccioneel área de la imagen a escanear de formaautomática. El icono de la derecha de lapantalla selecciona todo el áreadisponible. El icono de la calavera en ellado derecho borra la caché de laprevisualización actual.

Supongamos que se necesitanescanear una serie de imágenesfotográficas de 10 x 15 cm; en este caso,debería seleccionar 10 cm x 15 cm en vezde full size del combo de la izquierda.Esta opción permite escanear un áreamás pequeña y de este modo acelerar elproceso.

Si la foto está al revés después deescanearla, el menú desplegable de laderecha puede servir de ayuda. Laentrada 180 (refiriéndose a 180 grados)permite poner la foto derecha; la entrada000 volteará verticalmente la imagen. Elmenú de la derecha asigna a la selecciónuna relación de aspecto fija.

Corrección de ColorLa gestión del color se realiza en el modode previsualización. Para aplicacionesnormales, se puede optar por uno de losprogramas de selección de colorautomáticos de escaneo sin tener queaplicar correcciones manuales.

Si el original está algo saturado decolor o está demasiado pálido, oscuro o

PORTADA •Xsane

22 Número 14 W W W . L I N U X - M A G A Z I N E . E S

Por lo general, un escaneo correcto

depende de si Xsane dispone de un

back-end para su escáner. Las posibili-

dades 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 nues-

tras 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 pro-

porcionada 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.

Para Ubuntu, necesita ejecutar Apt-get para

instalar Sane, Sane-utils, Xsane, Xsane-

common, Libsane y Libsane-extras. Debian

requiere Xsane, Sane y Libsane. Los usua-

rios de Mandriva 10.2 pueden usar el centro

de control para instalar Sane, Sane-fron-

tends y XSane. Tras completar la insta-

lació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 intro-

duciendo el comando xsane. Los usuarios

con Suse 9.2/9.3 pueden lanzar Yast2 para la

instalación mediante la entrada en la pes-

tañ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.

Configuración del Escáner

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.

Figura 2: El histograma muestra la

distribución de color para la ima-

gen escaneada. Las barras de

desplazamiento le permiten modi-

ficar los valores. Los iconos de la

parte inferior de la ventana habili-

tan o deshabilitan un color.

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

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

Pongámonos SeriosSi se tiene seleccionada un área paraescanear y también se han seleccionado losajustes del color, ya se puede ir a la ventanaprincipal para configurar el resto de losparámetros. En primer lugar, hay quepensar para qué se desea la imagen que seva a escanear, y basándose en esto, esnecesario establecer una resoluciónadecuada usando el cuarto botón de laparte superior. El valor dpi (puntos porpulgada) es importante. Para una buenacalidad de impresión, probablemente deseeal menos 300 dpi, pero hay que tenercuidado, ya que una imagen de tamaño A4a esta resolución ocupará entre 20 y 50MBytes de espacio en disco.

Si se piensa continuar procesando laimagen escaneada, hay que seleccionarprimero el valor por defecto de Viewer en elmenú XSane Mode. Luego se establece lacalidad del escáner: dependiendo de si el

original es un texto, un fax o una fotografíaen color, se selecciona Color, Grayscale oLineart. Para originales positivos serequiere la opción Full color range, pero noes necesario cuando se van a escanearnegativos de fotografías. En este caso, hayque seleccionar el vendedor de la lista.

Pulsando en el segundo icono cuadradode la parte de abajo a la izquierda seinvierte el color de la imagen escaneada.Esto convierte negativos en positivos. Si sepulsa el icono de la derecha, XSanesugerirá una mejora del color. Si lasugerencia no le es de su agrado, se puedepulsar R para volver a la distribuciónoriginal de colores de la imagen escaneada;para guardarla hay que pulsar M. Si lohacemos en el icono de la doble flecha se leindica a XSane que aplique valores mediospara el brillo y el color.

Los números junto al botón Scan

proporcionan la resolución de pantalla delárea seleccionada para escanear, lacantidad de memoria que consumirá laimagen escaneada y la profundidad delcolor. El campo de abajo muestra el tamañodel área a escanear en centímetros.Suponiendo que estos valores son los quese necesitan, se puede comenzar el procesopulsando en Scan.

La imagen escaneada aparece en elViewer (Figura 4). Aquí se puede retocar, sise desea, rotando, obteniendo la imagenespecular o escalándola. Además sepueden eliminar manchas o aplicar unaherramienta de desenfoque. Incluso sepuede ejecutar un Reconocedor Óptico deCaracteres (OCR), pero se precisa tener unsoftware de OCR externo para realizar estatarea.

Inundando la ImagenLa ú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 enXSane mode de la ventana principal. XSaneusa el formato pnm por defecto, pero sepuede utilizar el desplegable Type paraseleccionar un formato de imagendiferente. Se puede elegir una tasa decompresión estándar a la hora de guardarla imagen en Configuration de la ventanaPreferences de XSane.

La solapa Image permite seleccionar quécalidad hay que utilizar en los formatos deimágenes JPEG, PNG y TIFF. Las otrassolapas aquí son Copy, Fax o E-Mail; cadauna de ellas dispone de una serie de

opciones para los programas demanipulación de imágenes externos. Esposible enviar por correo una imagenescaneada, ejecutar una herramienta deOCR, enviarla por fax o imprimirla. Porejemplo, la solapa Copy proporciona laposibilidad de seleccionar la resolución ylos bordes para imprimir las fotos.

Se puede añadir la configuración deSMTP del programa de correo usando laopción E-Mail de XSane. Posteriormentecuando se seleccionen E-Mail, Copy o Fax

como el XSane Mode de la ventanaprincipal, XSane pasará las imágenes alprograma de correo externo. ¡Permitiendo,incluso, enviar esas fotos comprometidasde la fiesta a todos sus amigos!

ConclusiónXSane es un front-end sencillo paramanipular los dispositivos de capturasoportados por la interfaz Sane [5].Encontrará bastante fácil la tarea deescanear documentos en Linux, si suescáner está lo suficientemente “Sano”. �

Xsane • PORTADA

23Número 14W W W . L I N U X - M A G A Z I N E . E S

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

Figura 3: Haciendo click en el símbolo co-

loreado 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.

Figura 4: El Viewer muestra la imagen

escaneada y da a los usuarios varias

opciones para rotar, reflejar o escalar.

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

24

Renombrado de JPEGs y tratamientos sin pérdidas

LA MAGIA EXIF

PORTADA • Proceso de imágenes con EXIF

24 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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

El 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 meta-

informació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

Es posible renombrar y modificar archivos JPEG sin alterar los gráficos modificando las cabeceras del

archivo. Veamos cómo. POR MARTIN STEIGERWALD

Aplicación Soporte EXIF Rotación y simetría sin pérdidas

Digikam 0.7.2, Tratamiento de fotos Cargar, visualizar, pero no guardar En el menú desplegable de la imagen, también automáti

camente en función de la información EXIF

Eye of Gnome 2.8.2, Visor de imágenes Cargar, visualizar y guardar No

Feh 1.3.4, Visor de imágenes No Vía File | Edit en Place. La información EXIF se pierde

Gimp 2.2.7, Tratamiento de imágenes Guardar No

Gqview 2.0.1, Visor de imágenes Cargar y visualizar Vía Edit | Rotate

Gwenview 1.2.0, Visor de imágenes Cargar, visualizar y guardar. Vía Edit y Plugins / Images, basada automáticamente en

Rotación automática en el visor la información EXIF

Kpaint 0.6.2, Programa de dibujo No No

Kolourpaint 1.4.1, Programa de dibujo No No

Kuickshow 0.8.7, Visor de imágenes Cargar, visualizar, rotación automática No

en la visualización, pero no en guardar

Tabla 1: Niveles de Permisos de Ficheros Recomendados

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

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.

Renombrado Automático de

Archivos

Las cámaras digitales son reconocidas

por proporcionar nombres para nada

intuitivos a sus imágenes. Al editar los

datos EXIF, es posible añadir

información de fecha y hora al nombre

de archivo. El programa Jhead [3] ayuda

a hacerlo: jhead

-n%Y-%m-%d_%H-%M-%S *.jpg

renombra las imágenes JPEG del

directorio actual. El formato es flexible y

fácil de modificar, pero hay que

asegurarse de no incluir un espacio en

blanco tras la opción -n.

La opción -nf permite dar a la imagen

un nombre que no esté compuesto

fundamentalmente por números. Las

cámaras digitales usan generalmente un

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

función de la

información EXIF.

25

Proceso de imágenes con EXIF • PORTADA

25Número 14W W W . L I N U X - M A G A Z I N E . E S

Se situan los archivos en la ventana del

programa y se teclea

$-[jpgCreationDate]-[jpgCreationTime],

por ejemplo. También pueden usarse

otras informaciones EXIF y JPEG, como

los comentarios y la calidad del JPEG. Al

pulsar sobre Functions en la pestaña

Filename muestra los campos. Krename

utiliza por defecto el formato de fecha y

hora definido en el KDE Control Center.

Una plantilla como

$-[7-{[jpgCreationDate]}]-[4-5{[jpgCreati

onDate]}]-[1-2{[jpgCreationDate]}]-[jpg

CreationTime] fija el formato a

YYYY-MM-DD para optimizar las

búsquedas (véase Figura 2).

Figura 1: Konqueror muestra la información

EXIF de las fotos.

Figura 3: Jpegtran permite recortar imágenes sin pérdidas. Si la selec-

ción a recortar no se ajusta completamente a un bloque JPEG, Jpeg-

tran escala la selección hasta alcanzar el número de píxeles necesario.

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

programa explica las complicadas plantillas.

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

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”.

Interfaz Gráfica

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. �

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

PORTADA • Proceso de imágenes con EXIF

26 Número 14 W W W . L I N U X - M A G A Z I N E . E S

[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/

RECURSOS

Martin Steigerwald trabaja

como administrador de sis-

temas en team(ix) GmbH en

Nuremberg, Alemania. Ya

instaló Linux en su Amiga 4000

hace años y usa Linux, prefe-

rentemente Debian Linux, en su

portátil IBM Thinkpad.

EL

AU

TO

R

Valor EXIF 1ª fila en la imagen 1ª columna en la imagen Ejemplo

1 superior izquierda

2 superior derecha

3 inferior derecha

4 inferior izquierda

5 izquierda superior

6 derecha superior

7 derecha inferior

8 izquierda inferior

Tabla 2: Orientación de la Imagen

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

Nero es un programa comercialpara la grabación de CDs y DVDsmuy popular en el mundo Win-

dows. Hoy día muchas grabadorasvienen con una versión OEM de Nero, loque la ha ayudado a convertirse en laaplicación estándar para grabación deCDs y DVDs en Windows. A principiosde 2005 se presentó una versión de Neropara Linux, NeroLinux. Esta primera ver-sión no estaba a la altura de la corres-pondiente para Windows. Pero reciente-mente hemos probado NeroLinux 2.0.0.2para ver si se han acortado distanciasentre ambas versiones.

Compra de CombustibleYa podemos comprar NeroLINUX(véase Figura 1) sin necesidad de tenerWindows. Por 19.99 dólares USA sepuede conseguir un número de serieque convierte la versión demo descar-gable desde [1] en la versión completa.Esta demo descargable ofrece alusuario de Linux tiempo suficiente paraprobar las capacidades de tostado deNeroLINUX antes de tomar unadecisión.Nero no es excesivamente exigente enel apartado de requisitos del sistema. Elprograma funciona en sistemas RPM obasados en Debian Linux con kernel2.4.x o superior. La versión 1.2 de lalibrería GTK es necesaria, pero estánormalmente incluida en todas lasprincipales distribuciones de Linux. Encuanto a hardware, necesitaremos almenos una CPU a 500 MHz y 64MB deRAM. El requerimiento depende deltipo de medio que vayamos a grabar. Elfabricante especifica 9GB paragrabación de DVD. Los 50MB de discoduro que ocupa propiamente el soft-ware es algo casi insignificante. Oficial-mente, Nero soporta las versiones 32-bit de las siguientes distribucionesLinux:

Nero • EVALUACIÓN

Número 14W W W . L I N U X - M A G A Z I N E . E S 27

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

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

de prueba con Suse Linux 9.3, que notiene nada SCSI (véase Figura 2). Sinembargo, este hecho no tiene mayorefecto en el funcionamiento del programay si se marca el cuadro que se nos mues-tra, no volverá a aparecer dicho mensajeen lo sucesivo.

Si el programa indica que hay otras apli-caciones que impiden el proceso degrabación, no debemos ignorar el men-saje. Como muestra la Figura 3, Nero estádisconforme con susewatcher y suseplug-

ger de Suse. El primero proporciona men-sajes de actualizaciones de seguridad, porlo que no parece buena idea deshabili-tarlo. suseplugger monitoriza hardwareque se conecta en caliente y proporcionaacciones específicas ante eventos específi-cos, como ejecutar Konqueror cuandoinsertamos un pendrive USB en el orde-nador. En nuestros tests, el auto-montadode la unidad de CD-ROM no funcionó co-rrectamente cuando tratamos de ejecutarNero con suseplugger habilitado.

Rellenar el DepósitoLos últimos cambios en Nero han incluidosoporte para grabación por capas de DVD-R-DL (Doble Capa). Esta característica per-mite al usuario la posibilidad de llenarDVD-R de doble capa en varias sesiones.El programa escribe en ambas capas deldisco alternativamente. Según el fabri-cante, esto convierte a Nero en el únicoprograma capaz de soportar los todavíapoco comunes DVDs de doble capa.

Además, la nueva versión ofrece alusuario la posibilidad de crear discos DVDvideo y MiniDVD, si los correspondientesdirectorios VIDEO_TS y AUDIO_TS estándisponibles. La versión de Linux no tienela opción de crear discos de video a partirde archivos de video, a diferencia de laversión de Windows. Sin embargo,podemos imponer opciones específicasISO, como el tipo de sectores CD, Modo 1o Modo 2/XA, al igual que Joliet (paranombres de archivo largos en Windows) yRockRidge (para nombres de archivo lar-gos en Linux). Pulsamos en la pestaña ISO

Options en el cuadro de configuraciónpara habilitarlas.

Otra característica nueva en esta últimaversión de Nero es la capacidad de mapearseñales de audio a eventos del dispositivode grabación. Ésta sólo es útil para aque-llos que, o bien usan OSS, o el antiguodemonio de sonido ESD. Si es el KDE Artsquien tiene el control de nuestro hardwarede audio, Nero es incapaz de usar el dis-positivo y simplemente se queda callado.

Para conmutar entre OSS y ESD y paradeshabilitar las señales acústicas, selec-cionamos File | Preferences en la pestañaSystem Configuration. La pestaña Sounds

en el mismo cuadro de diálogo nos per-mite seleccionar los sonidos a reproducir.La última versión de Nero incluye algunascaracterísticas nuevas, pero el fabricantetambién ha aprovechado para hacer unabuena caza de fallos. Hay un registro decambios detallado en [2].

Resistente al FuegoNo es ningún secreto que Nero para Linuxes mucho menos avanzado que la versiónNero para Windows. Pero en comparacióncon las aplicaciones para Linux como K3b[3], Nero aún deja bastante que desear. Elprograma no tiene un asistente de proyec-tos, y aunque el “arrastrar y soltar” fun-ciona en Nero desde y hacia Konqueror,

• 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 supe-

rior con kernel versión 2.4.x o 2.6.x(Debian Woody instala un kernel 2.2.xpor defecto).

Aunque no está en la lista oficial, Nerotambién se ejecutará en Mandriva Linux10.1. Los usuarios de distribucionesbasadas en Debian encontrarán unpaquete en formato Debian en la páginade descargas. Y hay un paquete RPM parausuarios de Suse Linux, Fedora y otras dis-tros basadas en RPM.

Antes de arrancar nuestro software deinstalación para instalar Nero, se deberíavalidar el archivo descargado usando lasuma MD5. Para validarlo, en Suse Linux,por ejemplo, se calcula el hash MD5 parael paquete tecleando el comando md5sum

nerolinux-2.0.0.2-x86.rpm y se comparanlos resultados con el checksum mostradoen la página de descargas de Nero. Si lasdos cadenas coinciden, será seguro insta-lar el paquete. La rutina de instalaciónañade una entrada para Nero en el menúde KDE.

Fuego DemoníacoLa primera vez que se ejecuta Nero,empieza buscando un dispositivo degrabación. Por algún extraño motivo, elprograma se quejó de que no podíaacceder a algunos dispositivos SCSIcuando lo ejecutamos en nuestro portátil

EVALUACIÓN • Nero

28 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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

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.

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

tenemos que asegurarnos bien el destinoadecuado. El árbol del sistema de archivosen la parte inferior izquierda de la Figura 1simplemente ignora cualquier intento desoltar archivos y directorios, forzando alusuario a utilizar la lista de archivos a suderecha.

Utilidades ExtraUna de las funciones más interesantes deNero es la capacidad de convertir formatosde audio. Para poder hacer uso de esta car-acterística cuando se tenga instalado Suse

9.3 tendremos que añadir los cuatro packsmultimedia opcionales (disponibles através de una actualización online).

También se necesitarán estos packsopcionales si se desean reproducirarchivos de audio haciendo doble clic en elicono o arrastrándolo hasta la esquina infe-rior derecha de la ventana de Nero. Comoalternativa, se pueden instalar manual-mente las herramientas necesarias:mpg123 y/o ogg123.

Nero necesita algunas otras herramien-tas para convertir formatos. Por ejemplolame para crear archivos MP3, sox paraformatos WAV y oggenc para convertirarchivos de audio a OggVorbis.

La pestaña File Types en el cuadro de

configuración (Figura 4) tiene una opciónpara añadir más herramientas y de estamanera ayudar al programa a tratar otrosformatos.

Cuando se intentó convertir de MP3 aWAV, Nero creó un cierto número dearchivos que contenían sólo ruido de nues-tro sistema. Un ajuste incorrecto del ordende byte interno tuvo la culpa.

Desafortunadamente, Nero se bloqueóesporádicamente cuando tratamos deforzar un ordenamiento little-Endian en elcuadro de codificación de archivos WAV.Tras varios intentos, fuimos capaces alfinal de convertir un archivo, y el resultadofue bueno, pero la función es tan inestableque su uso para producción se puededescartar.

Editor de PistasCon Nero se puede usar el editor de pistaspara quemar CDs de audio. La manera másrápida de acceder al editor de pistas es pre-sionar [F4]. Se pueden entonces arrastrarlos archivos de audio necesarios hasta lalista y soltarlos en ella. En nuestra prueba,Nero sólo soportaba archivos MP3. Dehecho, se quejaba de que los archivos WAVque creamos eran demasiado largos.

Fue incapaz de determinar la longitud delos archivos OggVorbis debido a que notenía acceso al programa Oggtst. Desafortu-nadamente, la herramienta para desarro-lladores de OggVorbis ha remplazadoOggtst con Ogginfo. Para configurar el pro-grama 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 mostradoen la Figura 4. Entoces se reemplaza lasiguiente 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 par-tir de archivos OggVorbis.

ConclusionesEl arreglo de fallos en la versión 2.0.0.2 y elhecho de que Nero continúa proporcio-nando soporte para Linux son dos pasosdados en la dirección correcta. Sinembargo, la versión Linux del programa seencuentra todavía en un estado tempranode desarrollo y aún le queda un largocamino por recorrer para llegar a ser real-mente competitiva.

Si hacemos caso al fabricante, el puntofuerte de Nero es la capacidad de grabardiscos DVD-R-DL. la desventaja es que loscontroles tienen bastantes carencias encuanto a su usabilidad, y nadie esperaríaencontrar tantos fallos en un productocomercial. Suponiendo que podamos vivirsin necesidad de grabar DVD-R-DL, puedeque queramos usar esos 19.99 dólares enotra cosa. �

Nero • EVALUACIÓN

29Número 14W W W . L I N U X - M A G A Z I N E . E S

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

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

Figura 3: Nero no funciona con algunas de

las características de las distribuciones de

Linux más recientes.

Figura 4: Este desordenado cuadro permite al usuario asociar el conversor de audio de Nero

con otros formatos.

Hagen

Höpfner ter-

minó su doc-

torado 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 Infor-

mación. En su tiempo libre,

toca la guitarra con una banda

de rock llamada “Gute Frage”

(http://www.gutefrage.info).

EL

AU

TO

R

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

30

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

LLEGAR A BASECrear una aplicación de base de datos con OOo Base

LLEGAR A BASE

PRÁCTICO • OpenOffice.org Base

30 Número 14 W W W . L I N U X - M A G A Z I N E . E S

de una tabla. Viene a ser algo como lainterfaz gráfica de usuario de una base dedatos. Los reportes se usan para generarresultados con un determinado formatodesde las tablas, generalmente paraimprimirlas.

Como veremos en este artículo, puededividirse la tarea de crear una aplicaciónde base de datos en las subtareas deconfigurar tablas, consultas y formularios.Los reportes son también importantespara algunas aplicaciones, sin embargo noprofundizaremos en ellos en este artículo.

Antes de ejecutar Base, es una buenaidea crear un modelo de base de datos queayude a visualizar la estructura de laaplicación. Se pueden bien dibujar elmodelo a mano, o bien usar un programacomo OpenOffice.org Draw. Draw incluyealgunasherramientasde diagramasque son útilespara crear estaclase demodelos debases de datos.

La aplicaciónde ejemplopara el artículoes una sencilla

base de datos que lleva la cuenta de lostrabajos, horas trabajadas y clientes paraun contratista de trabajadores freelance.La Figura 1 muestra el modelo de nuestraaplicación de ejemplo. Como se puedeapreciar, la estructura consiste en cuatropequeñas tablas. Cada tabla consiste a suvez en series de registros que representanla compañía, el contacto, trabajo o lashoras trabajadas, entre otras. Los registrosestán enlazados a través de una serie derelaciones predefinidas. Las relacionespermiten a una tabla referenciar lainformación de otra tabla. En la Figura 1,por ejemplo, cada trabajo está asociado auna compañía a la cual se le presta elservicio. Esta estructura admitesituaciones en las cuales un contratistatiene varios contratos (trabajos) para una

OpenOffice.org 2.0 incluye unnuevo módulo de bases de datos,basado en HyperSonic SQL, un

motor de bases de datos relacionalesescrito en Java. Podemos usar OOo Basepara construir desde una simple colecciónde recetas a una valiosa solución demanagement. Base es una herramientapoderosa, pero para aquellos que no esténfamiliarizados con sus características, elsimple desarrollo de una base de datospuede resultar insufrible. Este artículo nosguiará a través de los pasos paraconfigurar una simple aplicación de basede datos empresarial con Base.

Planeando la Base de DatosUn Sistema de Gestión de Bases de DatosRelacionales (SGBDR) usualmente secompone de cuatro elementos:

*tablas*consultas*formularios*reportesLa información de la base de datos se

guarda en tablas. Las consultas se usanpara extraer, ver y tratar los datos. Puedenrecabar los datos de muchas tablas yhacerlos disponibles en forma deformularios y reportes. Los formulariosnos permiten ver y editar la información Figura 1: El modelo de base de datos incluye tablas, campos y relaciones.

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

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

misma compañía, o bienque tenga varioscontactos dentro de lacompañía.

A través de una serie derelaciones mostradas enla Figura 1, una compañíapuede asociarse convarios trabajos y varioscontactos, y cada trabajopuede tener registrostemporales. Todas lasrelaciones de la Figura 1son de tipo uno-a-varios.Una relación uno-a-varios se señala conun 1 (uno) al lado del registro que es uno,y con una n (varios) en el otro extremo.

Cada tabla debe tener una claveprimaria (mostrada en amarillo en laFigura 1). La clave primaria identificaunívocamente al registro. Una tabla puedecontener también claves ajenas. En laFigura 1 las claves ajenas se muestran encursiva. Nótese que la clave ajena está enel lado “varios” de una relación uno-a-varios.

Crear TablasUna vez que se ha esbozado el diseño,puede empezarse a desarrollar la base dedatos en sí. Se arranca OpenOffice.org 2.0Base y se pulsa sobre File | New |

Database. El asistente de bases de datos seusa para crear y guardar un archivo debase de datos. Al pulsar en el botón Finish

del asistente, OOo Base abre la ventanaprincipal. Ésta es la zona de trabajo dondese va a crear la base de datos (Figura 2).

Lo primero que hay que hacer es crearlas tablas y rellenarlas con los campos. Seelige Tables en el panel Database, y sepulsa en la opción Create Table de la vistadiseño. Esta opción creará una tablanueva y vacía, que podrá usarse paraguardar la información de los trabajos. Secrea un campo JobID tecleando su nombreen la columna Field Name, y se fija su tipoa Integer [INTEGER].

OOo Base ofrece un amplio abanico detipos de campo. Los tipos numéricosincluyen INTEGER (para enteros) y FLOAT

(para números en punto flotante).VARCHAR guardacadenas de longitudvariable. La longitudpuede especificarse en elpanel Field Properties.DATE guarda fechas yTIME la hora.

Para fijar el campoJobID como claveprimaria, se pulsa con elbotón derecho en elpuntero de registros (eltriángulo verde) y seselecciona Primary Key

del menú que aparece(véase Figura 3). Laclave primaria tiene quecumplir dos requisitos:no debe estar vacía ydebe tener un valorunívoco. Con OOo Base

es sencillo asignar esta propiedad a laclave primaria. Se selecciona Yes de la listaAutoValue en el panel Field Properties. Asíse asegura que cada vez que se cree unnuevo registro, el sistema insertará unvalor unívoco (en nuestro caso, unnúmero) en el campo JobID.

Se añaden los demás campos restantesa la tabla JOBS, y se fijan sus tipos. Antesde guardar la tabla, es necesarioasegurarse de que el formato de la fechadel campo Deadline está configuradoadecuadamente. Se selecciona el campoDeadline, y en el panel Field Properties, sepulsa en el botón junto al campo Format

example. Se seleccionan el formatorequerido y el idioma y se pulsa OK. Acontinuación se guarda la tabla (File |

Save, o Ctrl+S) y cuando se nos pregunte,se proporciona el nombre JOBS para latabla.

Ahora que se sabe cómo crear tablas ycampos, se pueden añadir las tablasHOURS, COMPANIES y CONTACTS. Espreciso acordarse de que hay que fijar elformato adecuado para los campos Date,TimeUsed y Price de la tabla HOURS. Conlas herramientas de diseño de relacionesincluidas en Base, crear estas relaciones estan sencillo como dibujar líneas entre lasclaves primarias y las claves ajenas. Paradefinir las relaciones entre las cuatrotablas, se pulsa en Tools | Relationships yusando el cuadro Add Table se añaden lastablas.

Para establecer una relación entre lastablas COMPANIES y CONTACTS, seselecciona el campo

COMPANIES.CompanyID,se pulsa y se mantienepulsado el botónizquierdo del ratón, searrastra la relación hastael campoCONTACTS.CompanyID y

31

OpenOffice.org Base • PRÁCTICO

31Número 14W W W . L I N U X - M A G A Z I N E . E S

se suelta el botón. El siguiente paso esdefinir las propiedades de la relación.Póngase por caso que se dispone de unacompañía en la base de datos que ya no escliente. Si se decide borrarla de la base dedatos, el sistema tiene que saber quéhacer con los registros de contactohuérfanos. Lo normal es que se deseeeliminarlos también.

Se hace doble clic en la relación entreCOMPANIES y CONTACTS y en la columnaDelete Options, se selecciona la opciónDelete cascade y se pulsa OK.

Se usará la misma técnica para definirlas relaciones entre las tablas COMPANIES

y JOBS. Es necesario asegurarse de que laopción de eliminación de la relación estáfijada a No action. De otra manera, alborrar un trabajo se borraría la compañíarelacionada. Por último, se define unarelación entre las tablas JOBS y HOURS, enla que la opción de eliminación está fijadaa Delete cascade. Esto asegura que si seborra un trabajo, no existirán fechashuérfanas poblando la base de datos. Unavez que estén definidas las relaciones, seguardan y se cierra el cuadro de diseño derelaciones.

Crear ConsultasAhora que se tienen las tablas ya puedenser completadas con información. Para very tratar la información es necesario crearcrear consultas. OOo Base permite crearconsultas utilizando bien el asistente deconsultas o bien la vista de diseño. Losusuarios familiarizados con SQL puedenusar también el editor SQL interno. En lamayoría de las ocasiones, no obstante, serámejor usar la vista Design View, quepermite elaborar consultas usando unainterfaz gráfica de usuario. Pongamos porcaso que se desea crear una consulta quepermita extraer información relevanteacerca de un trabajo, como el número detrabajo, cliente, descripción del trabajo,estado, tipo y fecha límite. Se pulsa enCreate Query dentro del enlace Design View

de la sección Tables. Esto abre la ventanade diseño de consultas y el cuadro paraañadir tablas. Se añaden las tablas JOBS yCOMPANIES a la consulta usando el botónAdd y se cierra pulsando sobre Close.

Todo lo que hay que hacer es añadircampos a la consulta. Pueden añadirsecampos bien eligiendo los campos de lalista desplegable en las celdas Field, o bienarrastrando los campos desde las tablashasta las celdas Field.

Figura 2: La ventana principal de

Base es el punto de partida para

definir nuestra base de datos.

Figura 3: Cada tabla requiere

una clave primaria.

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

Este nuevoformulariopermite añadir,ver y editarinformación enla tabla JOBS,pero puede

incluirse también información de otrastablas. Por ejemplo, se podría querer ver yregistrar el tiempo empleado en el trabajoque se está realizando. Puede hacerseesto con un subformulario. Como sunombre indica, un subformulario no esotra cosa sino un formulario insertadodentro de otro formulario principal.

En la ventana Form Navigator, se pulsasobre Job y se selecciona New | Form. Sele da al formulario un nombre descriptivo(por ejemplo, Hours), se hace doble clicsobre él y se selecciona Properties. Bajola pestaña Data, se selecciona Table de lalista de tipos de contenido, y HOURS dela lista de contenido. Pueden añadirseahora controles al subformulario. Comoexisten varios registros en la tabla HOURS

que está enlazada a un trabajo particular,puede que se desee verlo como una tablaen el formulario Job. Con este propósito,OOo Base proporciona el Table Control.Hay que asegurarse de que elsubformulario Hours está seleccionadoen el Form Navigator, se pulsa en elbotón Table Control y se dibuja unatabla. Cuando aparece el asistente TableElement, se seleccionan los camposdeseados y se pulsa Finish.

Cuando se haya terminado de crear elformulario, se guarda y se cierra el FormDesigner. Se hace doble clic en elformulario para abrirlo y usarlo. Paraexplorar, añadir y editar registros, se usala barra de herramientas FormNavigation (View | Toolbars | Form

Navigation). Tabién puede usarsetambién para ordenar y filtrar losregistros.

Importar InformaciónCon el uso de los formularios, puedencrearse fácilmente nuevos trabajos yclientes, y añadir contactos. ¿Y si ya setiene la información en una hoja decálculo? En muchas ocasiones,simplemente se desea importar lainformación existente en la base dedatos. Por ejemplo, supongamos que setiene un archivo de Calc que contieneuna lista de contactos y se quiereimportar a la tabla CONTACTS.

Ya que una fuente de datos con unformato adecuado puede simplificarenormemente el proceso de importación,merece la pena perder algo de tiempo enpreparar esta tarea. Lo primero que se hacees modificar la estructura de la hoja decálculo para que sea idéntica a laestructura de la tabla CONTACTS. Espreciso asegurarse que la primera filacontiene los mismos nombres de campoque los de la tabla de la base de datos.Idealmente, deberían estar también en elmismo orden. Hay que asegurase de quetodos los bloques de datos están colocadosen las columnas adecuadas.

A continuación se seleccionan los datosde la hoja de cálculo y se copian alportapapeles (Edit | Copy o Ctrl+C). Seabre la base de datos, se pulsa en el botónTables, y se selecciona la tabla CONTACTS.Se pulsa con el botón derecho sobre ella yse selecciona “Paste”. En el cuadro Copy,se teclea exactamente el nombre de latabla objetivo en el campo Table name, yse selecciona la opción Attach data.

En el cuadro de asignación de columnas,se verifica que todos los campos de laventana de tabla origen estánseleccionados y alineados con los camposrespectivos de la ventana de tabla destino.Para alinear los campos, se usan las flechasazules. Por último, se pulsa en Create paraimportar los datos.

ConclusiónEste artículo debería servir para iniciarnosen el nuevo módulo de base de datosOpenOffice.org Base. Una vez que nosacostumbremos a su uso, podremosaplicar fácilmente estás técnicas paranuestras propias aplicaciones de bases dedatos. �

Por defecto, la consulta usará losnombres de los campos como etiquetas,pero pueden cambiarse para hacer laconsulta más legible. Por ejemplo, sepuede mostrar el campo JobID con elnombre Job no con sólo teclear estoúltimo en la celda Alias. Para guardar laconsulta, se pulsa sobre File Save y se leda un nombre a la consulta. La nuevaconsulta aparece en la sección Query, ypuede ser ejecutada haciendo doble clicsobre ella

Fabricar FormulariosPara completar la aplicación, senecesita construir una interfaz basadaen formularios. Si se quiere crear unformulario que pueda ser usado paramostrar, editar y añadir registros detrabajos. Se cambia a la sección Forms

con pulsar el botón Forms, y luego sepulsa en Create Form dentro de la vistadiseño. Al hacer esto se abre unaventana vacía. Se Pulsa sobre el botónForm Navigator en la barra deherramientas Form Design. En el Form

Navigator, se pulsa con el botónderecho del ratón en el directorio Forms

y se selecciona New | Form. Se le da alformulario un nombre suficientementedescriptivo (por ejemplo, Job), se pulsacon el botón derecho y se seleccionaProperties. Bajo la pestaña Data, seselecciona Table de la lista Content Typey JOBS de la lista Content.

Para añadir el campo de textoDescription (que contiene la descripcióndel trabajo), se pulsa en el botón con uncuadro de texto en la barra deherramientas Form Controls, y se dibujaun cuadro de texto en el formulario. Acontinuación se hace doble clic en elcuadro de texto. Bajo la pestaña Data,se selecciona Description from the Data

field list. De la misma manera, puedenañadirse otros campos como Status,Type y Deadline. Mediante la ventanaProperties, se pueden añadir pequeñostextos de ayuda para los controles. Paraello, se pulsa en la pestaña General, y seteclea el texto de ayuda en el campoHelp Text.

PRÁCTICO • OpenOffice.org Base

32 Número 14 W W W . L I N U X - M A G A Z I N E . E S

Figura 4: Definimos las relaciones con OOo Base.

Figura 5: Base proporciona una interfaz grá-

fica para crear consultas.

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

Taskjuggler • PRÁCTICO

33Número 14W W W . L I N U X - M A G A Z I N E . E S 33

Si no tiene muy buena memoria,puede ser que fácilmente le pierdala pista a las tareas complejas. Un

paso importante es tener por escrito unalista de las cosas que hay que hacer, perouna herramienta software adecuada, puedeayudar a planear el proyecto. Este artículoguía al lector a través de un simple trabajode remodelado para demostrar el uso de laherramienta de gestión de proyectosTaskjuggler [1].

Imagínese que por fin se decide a remod-elar su cuarto de baño, un proyecto queprobablemente lleve posponiendo desdehace años. Como gestor del proyecto, ten-drá que saber qué tareas tienen que lle-varse acabo, en qué momento realizarlas,qué clase de ayuda necesitará y lo másimportante de todo, cuando se podrá darun 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ódigoabierto distribuida con licencia GNU GPL.

El PlanLos diagramas de Gantt (nombre recibidode su inventor, el ingeniero norteamericanoHenry Laurence Gantt (1861--1919) lle-garon a ser el estándar de facto en lagestión de proyectos hace bastantes años.El diagrama visualiza las tareas, con lospuntos de comienzo y finalización biendefinidos como barras de tiempo y, adi-cionalmente, indicando las dependenciasentre las tareas. Un diagrama de Ganttresalta el denominado camino crítico, esdecir, las tareas que deciden si el proyectose completará dentro del período de tiempoestablecido o no.

El diagrama de Gantt proporciona a losgestores de proyectos un resumen gráfico,permitiéndoles seguirle la pista al progresodel proyecto, su estado actual y las posiblesdesviaciones con respecto a la agenda delmismo. El resumen muestra claramente lasdependencias entre las tareas individuales.Esto hace que sea fácil paralelizar las tareasindividuales, es decir, permitir que se reali-cen al mismo tiempo (condiciones start-start). De una manera similar, también es

Gestión de Proyectos con Taskjuggler

EL ARTE DELMALABARISMOTaskjuggler 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

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.

Tareas Básicas

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

posible planear un proceso de modo quecoincida con la finalización de otro pro-ceso del que depende (condición end-end).

La paralelización posee la ventaja dereducir el tiempo total requerido para elproyecto, suponiendo que múltiples pro-cesos puedan darse al mismo tiempo.Además, también ayuda a distribuir losrecursos. Los recursos requeridos para laremodelación del cuarto de baño incluyenla mano de obra, además de las her-ramientas y posiblemente el espacio. Sitiene éxito asignando los recursos a las tar-eas individuales en la fase de planifi-cación, le resultará bastante sencillo verqué clase de ayuda va a necesitar y en quéfase del proyecto. El diagrama de Gantthace referencia a una serie de puntosintermedios importantes que se van com-pletando a lo largo del proyecto. A estospuntos los denomina hitos. Los hitos mar-can los puntos del tiempo donde han deconcluir las tareas específicas.

Para comenzar, hay que hacer una listade las tareas que deben llevarse a cabo enel proyecto de remodelación del cuarto debaño. El cuadro titulado “Tareas Básicas”proporciona una primera versión de lalista de tareas.

Una vez que se tiene esta primera lista,se puede tomar cada una de las tareas yespecificarlas con mayor detalle, subdivi-diendo cada una de ellas en subtareasdiferentes, como se muestra en el cuadro“Tareas Detalladas”.

En este punto, conscientemente, seevita pensar en el orden en el que las tar-eas básicas deben ser realizadas. En vezde ello, hay que concentrarse en definir elmayor número posible de tareas. Esto sepuede llevar al nivel de detalle que se

desee, aunque generalmente, se deberíaadecuar al nivel de detalle que hemosescogido aquí.

En la última fase de la preparación delproyecto, habrá que decidir quién va arealizar las tareas individuales. En nuestroejemplo, vamos a realizar el trabajo delimpieza nosotros mismos. Los materialesserán proporcionados por los proveedoresde materiales de construcción y se disponede dos profesionales que nos van a ayudar:un fontanero cualificado para los trabajosde desinstalación de la antigua bañera y lainstalación de la nueva y un electricistacualificado para la instalación eléctrica. Ypor último, disponemos de nuestra propiafamilia para ayudarnos a deshacernos delos escombros.

Vamos a utilizar Taskjuggler para asig-nar los recursos humanos a las tareas indi-viduales y crear el programa de trabajo.

La herramientaLa herramienta de gestión de proyectosTaskjuggler es realmente una colección debibliotecas y una herramienta de línea decomandos con una interfaz de usuario grá-fica para KDE. Taskjuggler planifica deforma autónoma las tareas individuales yresuelve las situaciones conflictivas, por

ejemplo, si existe una dependencia entre lafinalización de una tarea y el comienzo deotra.

Taskjuggler proporciona suficiente mar-gen para definir las horas de trabajo, lashoras de ocio e incluso los descansos en eldiagrama de Gantt. Los recursos se puedenasignar a grupos para facilitar la gestión,pero esto es algo que no necesitamos parael proyecto de reparación del cuarto debaño.

Taskjuggler permite asignar los costes alos recursos individuales y definir loscostes iniciales y finales para el proyecto.Esto significa que puede presupuestar lareforma del cuarto de baño y gestionar losgastos de modo que pueda tener previstoun retraso.

El programa proporciona valiososinformes organizados por categorías comotareas individuales, progresos o costes. Eldiagrama de Gantt visualiza planos progre-sivos y muestra como han sido asignadoslos recursos a las tareas. Taskjugglerfacilita un resumen de los recursoshumanos, incluyendo datos de disponibili-dad, carga y costes. El calendario de recur-sos muestra qué recursos estándisponibles, el momento en el que lo estány cuáles precisan ampliarse.

Taskjuggler es una herramienta muypotente capaz de manejar proyectos profe-sionales y proporciona un conjunto com-pleto de características temporales, recur-sos y gestión de costes. La entrada de datosy la gestión son ambas intuitivas y la her-ramienta dispone de diversos tipos deinformes que visualizan el estado actualdel proyecto basándose en los parámetrosde tiempo, coste y recursos utilizados.

PlanificandoEl siguiente paso consiste en introducir lastareas individuales en Taskjuggler. El pro-grama tiene su propio editor para intro-ducir las tareas (Figura 1).

Cuando defina un proyecto nuevo,primero debe usar el editor para definir losdatos del programa como el ProjectID (unadescripción del proyecto que incluye infor-mación del marco temporal de trabajo), lafecha actual, el formato de la hora y lamoneda. Las entradas para nuestroproyecto de reforma del cuarto de bañoson las siguientes:

project bare "Reforma Baño" "1.0"

2005-07-01 2005-08-30 {

now 2005-07-11

PRÁCTICO • Taskjuggler

34 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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

Tareas Detalladas

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 simi-

lar). 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.

Instalación

Figura 1: El editor de Taskjuggler se usa para

introducir los datos del proyecto.

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

timeformat "%Y-%m-%d"

currency "EUR"

scenario plan "Plan" {

scenario delayed

"Retraso"

}

}

CostesUna de las principales ventajas deTaskjuggler es la habilidad de manejarcostes y realizar cálculos sobre los costes.Esto permite controlar el presupuestodurante el proyecto de la reforma delcuarto de baño y proporciona la posibili-dad de recalcular el proyecto cuando seanecesario. El siguiente paso es definir losfactores de coste introduciendo rate

120.0.Esta entrada define el salario diario del

trabajador más caro. Taskjuggler disponede una solución elegante para asignar losfactores de coste basado en macros quepueden ser asignados posteriormente.Esta solución ahorra tiempo a la hora deintroducir los datos. La macro para nue-stro proyecto tiene el siguiente aspecto:

macro allocate_workers [

allocate wo1

allocate wo2 { load 0.5 }

allocate wo3

]

Una única macro cubre las manos deobra desde wo1 a wo3. La entrada load

0.5 muestra que el salario diario para laetiqueta wo2 es tan sólo la mitad de las

otras (factor 0.5). Posteriormente sepuede ejecutar esta macro en el contextode una subtarea entrando${allocate_workers}. En el siguiente pasovamos 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 crearun equipo, mientras que al mismotiempo asigna a la gente a las etiquetaswo1 a wo3. Si se necesitan añadir másdetalles para los miembros de las manosde obra, simplemente pueden añadirseestos datos a la línea de la persona impli-cada. Por ejemplo, nuestro electricistaestá de vacaciones desde el 1/8/05 al 10/8/05.

resource wo3 U

"electricista" { vacation U

2005-08-01 - 2005-08-10 }

Supongamos que el fontanero tiene quepensarse de nuevo la oferta que hizo ypide un sueldo diario algo mayor; sepuede introducir el sueldo diario individ-ualmente como sigue:

resource wo1 "fontanero"

{ rate 100.0 }

Después de terminar con estapreparación, finalmente, se puedenintroducir y planificar las tareas individ-uales:

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, lapalabra reservada task identifica unatarea. Cada tarea comprende un identifi-cador, por ejemplo Bare y una descripcióncomo “Reforma Baño”. Las subtareas deuna tarea se ponen entre llaves. Basán-donos en nuestra especificación originalpara el proyecto de la reforma, la cuartasubtarea para la tarea principal “ReformaBañ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 subtareaspara la subtarea “Reemplazar acceso-rios”.

Hay que repetir esto mismo para cadasubtarea. Para completar la agenda delproyecto, aún necesitamos unos cuantosdetalles más, como el tiempo necesariopara cada tarea y el trabajador que la lle-vará a cabo.

Taskjuggler • PRÁCTICO

35Número 14W W W . L I N U X - M A G A Z I N E . E S

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 }

Listado 1: Subtareas delEditor Taskjuggler

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 }

Listado 2: Subdividiendolas tareas

Figura 2: Un diagrama de Gantt muestra la

progresión cronológica de las tareas y las

subtareas.

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

camente. Por ejemplo, !chkwat es el puntofinal de la tarea “Comprobar tuberías delagua”. Un signo de exclamación indica unpunto temporal relativo dentro de unatarea (la tarea “Reemplazar accesorios” eneste caso). Dos signos de exclamacióndefinen un punto temporal relativo dentrodel proyecto total, es decir, de la tareaprincipal. Basándonos en esto, se puedenintroducir las dependencias cronológicaspara todas las subtareas y para las tareasprincipales.

Cuando haya finalizado, hay que pre-sionar F9 para terminar con las entradas.Taskjuggler comprueba los datos para versi son sintácticamente correctos antes decontinuar con los cálculos del proyecto.Luego podrán verse las interdependenciasde las tareas en el diagrama de Gantt, quemuestra el instante en el que empiezan yacaban las tareas. Un ejemplo del dia-grama de Gantt se muestra en la Figura 2.

De Hombres y RatonesIncluso la mejor planificación puede salirmal y una herramienta de gestión deproyectos que no permita realizar cam-bios para reflejar la situación actual seríainútil. Un ejemplo de cambio podría seruna escasez de recursos imprevista, por

ejemplo, si un trabajador se poneenfermo. Una tarea debería finalizar lomás rápidamente posible desde que setenga prevista. Por ejemplo, cuando com-pruebe las tuberías del agua y el calenta-dor, podría encontrarse que todo está cor-recto.

Se puede usar el editor de Taskjugglerpara modificar la agenda y reflejar elestado actual. Hay que extender elparámetro de tiempo para compensar lafalta del trabajador por culpa de la enfer-medad. Si resulta que la reparación esinnecesaria, simplemente se puede borrarla tarea. Hay que añadir cualquier cambiode los parámetros de los recursos, deltiempo y del coste usando el editor, ydecirle a Taskjuggler que recalcule elproyecto completo.

Como se han utilizado consciente-mente tiempos relativos, Taskjuggler notendrá problemas para recalcular laagenda del proyecto. Pero si borra unatarea de la que otras dependen, habrá queeliminar estas dependencias manual-mente para conseguir que funcione.

ConclusionesEl editor intuitivo de Taskjuggler propor-ciona a los usuarios la posibilidad dedescribir un proyecto y todas sus tareascomponentes. Taskjuggler ayuda a visu-alizar las entradas en forma de diagramade Gantt y facilita una colección deinformes de costes muy útil y de losrecursos planificados. Este ejemplo sim-ple de reformar un cuarto de bañodemuestra los elementos más críticos dela planificación de un proyecto y muestracómo Taskjuggler está bien equipado paramanejar proyectos a gran escala. �

Fecha TopeEmpecemos con el primero de estos ele-mentos. “¿Cuánto tiempo dura cadatarea?”. El editor de Taskjuggler tiene unapalabra reservada especial para esto, porejemplo, effort especifica el número dehombres-días, seguido de las asignacionesde la mano de obra (recurso) para la tarea.La palabra reservada length define laduración de la tarea en días de trabajo yduration realiza lo mismo pero para losdías del calendario.

Supongamos que se les ha pedido alfontanero y al electricista que envíen susofertas de trabajo y que estimen el tiempoprevisto de duración de cada parte de lareforma. Los detalles para la tarea “Reem-plazar accesorios” podrían parecerse alejemplo del Listado 2.

¿Se acuerda de los identificadores de lamano de obra? wo1 es el fontanero, wo2 esusted y wo3 es el electricista. La tarea“Comprobar tuberías del agua”, que se laha asignado a usted mismo, le llevará undía. Y lo mismo es aplicable a la tarea“Comprobar calentador”. También se lehan asignado dos días al fontanero y alelectricista para que realicen sus trabajos.Cuando estén hechos, deberán volver paraterminar con las tareas de ajuste ylimpieza del cuarto de baño; de nuevo,esto le llevará un día.

La palabra reservada depends especificael orden cronológico y define las depen-dencias entre las tareas. Como queremosque Taskjuggler calcule la duración,vamos a utilizar especificaciones de tiem-pos relativos: “La Tarea 2 podrá empezarcuando la Tarea 1 haya finalizado”. Eché-mosle un vistazo a la tarea “Reemplazaraccesorios” para una mejor comprensióndel principio subyacente. El ordencronológico es el siguiente: La tarea “Com-probar tuberías del agua” es el punto departida del proyecto. Ésta va seguida de“Comprobar calentador”. Las reparacionespueden empezar cuando las dos tareasprecedentes “Comprobar tuberías delagua” y “Comprobar calentador” hayansido terminadas. Y la limpieza no puedecomenzar hasta que las reparacioneshayan sido completadas. En el editor deTaskjuggler esto se parecerá al Listado 3.

Bare.start es el punto de partida para elproyecto de la reforma del cuarto de baño.Su parámetro .start fue creado automáti-camente por Taskjuggler. Las entradasrestantes describen puntos temporales rel-ativos, que Taskjuggler evaluará automáti-

PRÁCTICO • Taskjuggler

36 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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 }

Listado 3:Especificando elorden cronológico

Figura 3: Taskjuggler calcula el coste de un

proyecto basándose en los datos de entrada,

como las horas asignadas a cada trabajador.

[1] Taskjuggler: http://www.taskjuggler.org

Tareas Básicas

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

Wlassistant nos ayuda a conectarnos a redes WLAN

EL MAYORDOMOINALÁMBRICO

Wlassistant • PRÁCTICO

37Número 14W W W . L I N U X - M A G A Z I N E . E S 37

La 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ám-

brica 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

redes inalámbricas y

nos proporciona

una lista.

Podemos

pulsar

para selec-

cionar

nuestra red

preferida. El asistente

se encarga de establecer

la conexión, y ya tene-

mos vía libre.

Instalación yConfiguración

Wlassistant es un programa relativa-

mente nuevo que no se encuentra

disponible en la mayoría de las grandes

distribuciones. Pero no hay de qué preo-

cuparse. 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 pro-

grama, presionando [Alt+F2] y teclean-

do wlassistant, se abrirá una ventana

para indicar que un usuario normal no

está autorizado para ejecutar los progra-

mas 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 he-

rramientas dhcpcd, ifconfig, iwconfig y

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 pro-

grama como root tecleando kdesu wlas-

sistant. 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 selec-

ciona 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

Los usuarios de ordenadores portátiles que se mueven entre

redes inalámbricas necesitan una herramienta simple y prác-

tica para conectarse. Una herramienta de KDE llamada Wlas-

sistant ayudará a encontrar la señal. POR MARCEL

HILZINGER

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, Wlassis-

tant falla a la hora de encontrar los coman-

dos necesarios para configurar la conexión.

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

programa. Se selecciona Configure |

Paths si hay que ejecutar el programa

como usuario root. En este caso, se cam-

bia Dhcpcd a /sbin/dhclient. Sin embar-

go, el método que sugiere Wlassistant es

mucho más fácil, por lo que puede que

simplemente se prefiera dejar que el

asistente inalámbrico se ocupe de con-

figurar los permisos de acceso.

Buscar y ConectarTras terminar con la configuración

necesaria, se puede pulsar sobre

Rescan para indicarle a Wlassistant que

muestre las redes WLAN que ha descu-

bierto (véase la Figura 3). Si el progra-

ma ha encontrado varias redes, debería

elegirse la red con mayor nivel de

señal. Wlassistant usa estrellas amari-

llas para indicar la calidad de señal.

Cuantas más estrellas tenga un red,

más calidad tendrá su señal.

La encriptación es otro criterio de

selección de punto de acceso. La he-

rramienta de KDE muestra un candado

en la columna WEP para las cone-

xiones encriptadas. Será necesaria la

clave adecuada para acceder a estas

redes.

La columna Mode indica si la red es

Managed o Ad-Hoc. Las redes del tipo

Managed soportan accesos simultáneos

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 ven-

tana para informar del estado de la

conexión. Si la conexión funciona, el

mensaje será Connection with "nom-

bre_red" successfully established, sien-

do “nombre_red” el nombre ESSID de

la red seleccionada.

Administración deClavesLa 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

encriptada, aparece un cuadro

pidiendo que se introduzca la

clave WEP de la conexión. Tras

introducirla se pulsa el botón

OK. Si lo habitual es moverse por distin-

tas redes encriptadas, puede que que-

ramos guardar las claves de las redes que

visitamos. Para guardar una clave, se

pulsa en Configure | WEP Keys.

Es preciso asignar un nombre a cada

clave. El nombre de cada red WLAN (su

ESSID) es una buena opción para asig-

narlo. Wlassistant usa automáticamente

la clave con el mismo nombre para

acceder a la red. Los nombres y las

claves deben estas separados por un

doble dos puntos (véase la Figura 4). Las

claves usan normalmente un formato

hexadecimal (por ejemplo,

HOTSPOT::3BFA1658F26F65BB101502224

9 para una clave de 128 bits). Si se ha de

introducir una clave en formato ASCII,

se teclea s: antes de la clave. Por ejemp-

lo: HOME::s:secret1234567.

Wlassistant verifica la sintaxis de

nuestras claves. Dicha verificación hace

imposible, teóricamente, introducir una

clave con formato incorrecto. Se usa

Default WEP mode para especificar el

modo de autenticación, que en principio

está en modo Open. Si se selecciona

Restricted, la interfaz WLAN sólo acep-

tará conexiones encriptadas y autenti-

cadas. Como este método es fácil de

hackear, no tiene demasiado sentido

cambiar la opción Open por defecto.

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 asis-

tente wireless no tuvo el menor proble-

ma en establecer la conexión. Un

pequeño rodeo a través de la línea de

comandos también nos ayudó a configu-

rar 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 ejem-

plo s:secret1234567 para una clave

ASCII.

Redes ProblemáticasWlassistant ejecuta un cliente DHCP

cuando establece una conexión. El

cliente DHCP intenta obtener una direc-

ció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 ad-

hoc, 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ás-

cara de red y dirección de difusión en

Configure | Interface.

Wlassistant presenta también proble-

mas 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 embar-

go, que el soporte para este tipo de

interfaces está en la lista to-do del autor

del programa. �

PRÁCTICO • Wlassistant

38 Número 14 W W W . L I N U X - M A G A Z I N E . E S

[1] Página del proyecto: http://

wlassistant.sourceforge.net

[2] Wlan Tools: http://www.linux-wlan.org

RECURSOS

Figura 3: Wlassistant muestra las redes que ha loca-

lizado y su intensidad de señal. El candado indica una

conexión encriptada.

Figura 4: Este asistente para redes inalám-

bricas tiene buenas características de

administración de claves.

Page 39: Linux Magazine - Edición en Castellano, Nº 14
Page 40: Linux Magazine - Edición en Castellano, Nº 14

40

Crear música con Linux Multimedia Studio

EL COMPOSITOR

PRÁCTICO • LMMS

40 Número 14 W W W . L I N U X - M A G A Z I N E . E S

Instalación y Configuraciónde LMMSLos 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 habil-

itarse todas las opciones de opti-

mización. El cuadro “Principales

Opciones de Optimización” lista las

opciones más importantes de compi-

lación para la plataforma Intel.

Pueden usarse las opciones de con-

figure para deshabilitar algunas carac-

terísticas de LMMS y conseguir que

funcione incluso más rápido. Por ejem-

plo, 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-sur-

round 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á.

Hace 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 propor-

ciona 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 propor-

ciona software personalizado de sínte-

sis y efectos.

Como se habrá dado cuenta, existe

una herramienta diferente para cada

tarea, cuando la mayoría de los usuar-

ios 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 pri-

mavera del año pasado. LMMS com-

bina toda la funcionalidad de los pro-

gramas que acabamos de mencionar

con una única interfaz parecida a la de

Fruity Loops en Windows.

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.

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

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

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 bina-

rio 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 desha-

bilita las opciones que se han fijado en el

paso configure. En su lugar, será nece-

sario habilitar la variable

RPM_OPT_FLAGS.

Después de compilar e instalar, se

puede teclear lmms para iniciar el pro-

grama. Esto arranca un asistente que

ayuda en la configuración inicial.

Primeros PasosLa primera vez que se ejecuta el pro-

grama, la interfaz de LMMS aparece con

las siguientes áreas y ventanas. La ven-

tana más importante, el Song Editor,

contiene la lista de reproducción con las

diferentes pistas y un cuadro de her-

ramientas. 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 proyec-

tos y samples.

Se comenzará creando una percusión

simple. Para ello, se abre el Sample

Browser (My Samples), así como el direc-

torio 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 sal-

ida.

Ahora es un buen momento para pro-

bar el teclado del piano virtual, para ver

si se está consiguiendo buen sonido de

salida y si LMMS ha cargado satisfactori-

amente 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 corre-

spondiente, en el editor Beat+Bassline.

Esto cambia los botones grises a verdes.

Puede pulsarse ahora el botón de repro-

ducción situado encima de las pistas

para escuchar los primeros resultados.

Claro que el sonido de una sola per-

cusió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ódicosSe 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 frecuen-

cia (LFO’s).

Los principiantes se sienten a menudo

abrumados por esta cantidad de posibili-

dades. Por ello LMMS define algunos val-

ores 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 fil-

tros 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 directo-

rio.

41

LMMS • PRÁCTICO

41Número 14W W W . L I N U X - M A G A Z I N E . E S

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 pul-

sarse 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

Figura 2: Usamos el Piano Roll para editar

líneas de bajos. Pulsamos para añadir, elimi-

nar o cambiar el valor de las notas.

• -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 opti-

mizar el código. Los valores posibles

para YOURCPU son: pentium2, pen-

tium3, 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 compi-

lador 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 proce-

sador soporta instrucciones SSE,

podemos usar esta opción para habili-

tar 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éti-

cos para descubrir las opciones de

ajuste óptimas.

Principales Opciones deCompilador

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

ciso experimentar con esta tecnología para

acostumbrarnos a los efectos que se

pueden crear.

La pestaña Arp/Chord ayuda a definir la

configuración para arpegios y acordes

automáticos. Si se selecciona un acorde

mayor y un rango de dos

octavas por tono, LMMS

puede añadir automática-

mente el acorde mayor

coincidente sobre un rango

de dos octavas. La función

de arpegio permite repro-

ducir las notas individ-

uales del acorde secuen-

cialmente.

El bloqueo de patrones

permite al usuario crear

complejas canciones

polifónicas incluso si nues-

tra CPU no tiene suficiente

potencia para reproducir-

las en vivo. Al pulsar sobre

Freeze en el menú de un

patrón se indica a LMMS

que reproduzca el patrón

una vez de manera interna

y guarde los resultados en

un búfer.

Cuando se reproduce la canción en vivo,

el programa no intenta recalcular la infor-

mación de este patrón. En su lugar simple-

mente lee el búfer y lo parchea en el búfer

de salida. Los cambios en el patrón blo-

queado no se implementan hasta que no

desbloqueen y se vuelvan a bloquear.

También es posible contolar LMMS a

través de un teclado midi. Al pulsar sobre

el teclado, se le está indicando que toque la

nota correspondiente en el canal en uso.

Además de esto, puede mapearse cualquier

botón de LMMS al control de pitch del

teclado con sólo seleccionar Map to MIDI

device en el menú del botón. Tras esto, el

botón responde a las órdenes de la rueda

de pitch, pero es necesario asegurarse de

que el rango de pitch se encuentra al máxi-

mo en el teclado.

Tras concluir una canción, podemos

exportar el resultado final a un archivo Wav

u Ogg. Para ello, seleccionamos Project |

Export o presionamos [Ctrl]+[E]. Tras

introducir un nombre de archivo y especi-

ficar el formato, aparece una ventana con

opciones para exportar la canción.

Pulsamos en Export para indicarle a LMMS

que guarde la canción al archivo de salida,

el cual podemos ya grabar en un CD o

reproducir un nuestro equipo de sonido.

Grandes PlanesLa hoja de ruta de LMMS está llena de

importantes extensiones al programa.

Por ejemplo, LMMS no proporciona

ninguna opción para aplicar efectos

(reverberación, eco, distorsiones,

coros, ecualización y

filtros, sólo por nom-

brar algunos). Las tar-

eas para la adminis-

tración de efectos están

programadas para la

versión 0.1.0, e

incluirán una interfaz

LADSPA entre otras

cosas. LADSPA (Linux

Audio Developers Sim-

ple Plugin API) propor-

ciona a los desarrol-

ladores de software de

audio una interfaz

estandarizada para los

plugins de efectos y sin-

tetizadores.

De igual importancia

será un sistema que

permita a los usuarios

controlar todos los

botones y conmutadores de LMMS de

forma dinámica. Sus desarrolladores

están buscando en estos momentos el

modo de proporcionar a los usuarios la

capacidad de modificar las frecuencias

de corte de un filtro con dibujar una

curva. Además, debería ser posible

controlar el desacople periódico de un

oscilador con la aplicación de un LFO.

Como LMMS tiene aún un espectro

de sonido bastante limitado, se están

planeando más plugins para el futuro.

Además del cliente de plugins LADSPA,

se está trabajando en un cliente VST,

que permitirá usar plugins VST.

El proyecto de LMMS está aún en

desarrollo, y la hoja de ruta de las car-

acterísticas mencionadas es algo

imprecisa. Por contra, se está progre-

sando a buen ritmo en el editor de

notas tradicional. LMMS ya es capaz

de importar archivos midi, y parece

seguro que será capaz de importar

otros tipos de archivos en un futuro

inmediato. �

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 tam-

bié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 MuestraAdemá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 per-

mite 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 envol-

ventes y los osciladores de baja frecuencia

(LFO’s).

Las envolventes representan la progre-

sió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-

PRÁCTICO • LMMS

42 Número 14 W W W . L I N U X - M A G A Z I N E . E S

[1] Página de LMMS: http://lmms.

sourceforge.net

[2] Acovea: http://www.coyotegulch.com

RECURSOS

Figura 3: El Song Editor combina los beats y

líneas de bajos para formar una lista de

reproducción.

Figura 4: Cada canal puede

controlarse usando envol-

ventes, osciladores de baja

frecuencia y filtros.

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

Mono y DotGNU • DESARROLLO

43Número 14W W W . L I N U X - M A G A Z I N E . E S

¿.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] espon-

sorizado 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 desarrol-

ladores el intercambio de software

saltando las barreras de los diferentes

sistemas operativos.

Además de una funcionalidad básica,

como la capacidad para manipular cade-

nas, la mayoría de los proyectos necesi-

tan 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 Sys-

tem.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 princi-

pales componentes GUI, ver la Figura 1.

En 2002, Microsoft lanzó un nuevo

sistema para el desarrollo inde-

pendiente 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 progra-

mación orientada a objetos y propor-

ciona 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 tec-

nología.

Comparamos las implementaciones libres de .NET: Mono y DotGNU

MULTITUD DEPUNTOS

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

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

ventanas de diálogo (Figura 2). Este

paquete instala automáticamente el SDK

.NET. El entorno de desarrollo libre

Sharpdevelop[4], es una buena alterna-

tiva 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: MonoEl 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 exten-

siones, 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 pro-

gramas. Mono usa GTK# (también

disponible bajo Windows) para la real-

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.FormsLa librería System.Windows.Forms está

principalmente implementada en C# y

dibuja sus propios controles[6]. La libr-

ería requiere de un driver para cada sis-

tema operativo: los controladores para

X11 y Windows ya estaban disponibles a

la hora de escribir este artículo. El

proyecto DotGNU ha adoptado este dis-

eño tras deshacerse de una imple-

mentació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 naveg-

ador de ayuda, monodoc, contiene la útil

característica de permitir a los progra-

madores actualizar su documentación

desde un repositorio de Mono en Inter-

net. 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 pro-

cedimiento 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 sopor-

tadas, pero no en la actualidad (como

Fedora), son ahora cosa del pasado.

El código fuente está disponible en la

web de Linux Magazine[3]. La única

funcionalidad que realmente propor-

ciona el código es la de registrar la

entrada del usuario en una ventana dis-

eñada especialmente para esto.

El Original de MicrosoftUna forma de conseguir la imple-

mentació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 her-

ramientas en línea de comandos nece-

sarias 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 alterna-

tiva comercial para el desarrollo en .NET

que incluye un depurador y un editor de

DESARROLLO • Mono y DotGNU

44 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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 {

10 Application.Run(new

FirstApp());

11 }

12 public FirstApp() : base()

13 {

14 this.Text = "First

Application with GUI";

15 }

16 }

17 }

Listado 1: GUI con System.Windows.Forms

Figura 1: Esta aplicación demostrativa incluye los principales compo-

nentes GUI de la librería System.Windows.Forms de .NET. Esta figura

muestra la versión de Windows.

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 ele-

mentos gráficos.

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

Algunas distribuciones, cómo Suse 9.3,

incluyen Mono en su instalación por

defecto, pero distribuciones como Red

Hat y Fedora tienden a desplazar su

interés a la plataforma Java.

Hay un número de sitios web, como el

que se encuentra en [5], que documen-

tan en detalle el progreso del proyecto

Mono. Por ejemplo, podemos encontrar

una descripción de los controles de la

librería System.Windows.Forms en [6].

Una Aplicación deEjemplo en MonoLos proyectos existentes en Visual Stu-

dio .NET, tales como nuestro programa

de ejemplo, pueden ser importados

directamente a Monodevelop. Pero no

olvidemos ajustar las referencias para

el nuevo

proyecto. La

ayuda contextual

que aparece

cuando editamos

el código fuente

es una de esas

funcionalidades

de la que dare-

mos rápidamente

cuenta en el

entorno de

desarrollo, pero

por desgracia el

entorno carece,

por ahora, de un

diseñador de

GUIs.

Cuando inten-

tamos compilar

el código con el

comando mcs

-r:System.Windows.Forms.dll

sourcefile, el control estándar Sys-

tem.Windows .Forms.NumericUp-

Down causa un problema, ya que aún

no está completamente implementado

en Mono. Tras eliminar el trozo de

código que produce el error, podremos

compilar la aplicación y ejecutarla

dentro de entorno en tiempo de ejecu-

ción mono (Figura 3).

Ocurren varios errores: por ejemplo,

el mecanismo de actualización, que

maneja el redibujado de la aplicación,

no funciona correctamente cuando

ésta es ocultada por otra aplicación.

Adicionalmente, el mecanismo de

eventos presenta algunos problemas

con los controles RadioButton y Com-

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 cen-

tral de DotGNU se denomina Portable

.NET. Comprende tres componentes

principales: treecc (una herramienta

para la programación orientada a aspec-

tos), pnet (entorno en tiempo de ejecu-

ción, compilador C#, herramientas de

programación) y pnetlib (librería de sis-

tema de C# con librerías de clase críti-

cas 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 fun-

cionaron a la primera. Las distribu-

ciones 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 ejecu-

tan 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 subdi-

rectorio src:

cscc -winforms -o U

Application.exe src/*.cs

ilrun Application.exe

Mono y DotGNU • DESARROLLO

45Número 14W W W . L I N U X - M A G A Z I N E . E S

Figura 3: La aplicación de ejemplo ejecutándose en Mono con Linux

tiene dificultades en el dibujado de los botones de arriba y en las cajas

de selección de la derecha.

Proyecto DotGNU Mono

Versión Actual 0.7.0 1.1.8

Licencia LGPL GPL o propietaria (seleccionable)

Sistemas Operativos Linux, Mac OS X, Windows Linux, Mac OS X, Windows

Ventajas

Paquete estándar con Debian Paquete estándar con Suse 9.3

Los bytecodes originales de windows Soportado por desarrolladores a tiempo puede

ser ejecutados sin modificaciones completo de Novell

Desventajas

System.Windows.Form no implementado System.Windows.Form no implementado

completamente completamente

Errores en el manejo de eventos Errores en el manejo de eventos

No tiene entorno de desarrollo El asistente de instalación no está

completamente probado; por ejemplo, el entorno

de desarrollo falta en Mono 1.1.7

Tabla 1: Comparando Implementacion

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

cionó de ninguna

manera y no se

mostró correcta-

mente.

El control

GroupBox cam-

bia de color para

indicar que con-

tiene el foco de

la aplicación.

Este compor-

tamiento no es

conforme al

estándar. El con-

trol ImageList

impide que sea

mostrada la apli-

cación. DotGNU

es capaz de pre-

sentarnos los eje-

cutables creados

con Mono, pero

los iconos del control de la barra de

botones no son los correctos.

Una claúsula en la licencia de

Microsoft .NET prohíbe la publicación

de comparativas de rendimiento para

las implementaciones de .NET. Sin

embargo, el proyecto DotGNU propor-

ciona la herramienta PNetmark [7]

para ayudar a aquellos interesados en

mediciones de rendimiento, poder

crear sus propios test de rendimiento.

Para más información sobre cómo

crear estas pruebas, podemos consul-

tar la Sección 1.4 en el FAQ de Dot-

GNU.

ResumenEl framework .NET de Microsoft nos

proporciona una aproximación intere-

sante a la programación independiente

de la plataforma. El lenguaje de progra-

mación C# es muy similar a los lengua-

jes de programación Java y C++, y

simplifica el aprendizaje de C# a los

programadores que conocen estos

lenguajes de programación. Otra ven-

taja 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 intere-

santes, pero también presentan algunas

asperezas que hay que limar. Los desar-

rolladores de ambas herramientas aún

tienen que recorrer un largo camino

antes de lograr una completa compati-

bilidad. Dicho esto, tanto DotGNU

como Mono logran proveer de soporte

al desarrollo de software en .NET en

Linux.

Los principales problemas experi-

mentados 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 man-

era 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 libr-

erí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. �

La implementación de la librería Sys-

tem.Windows.Forms no se basa en una

librería gráfica cómo GTK, sino que

dibuja los controles por sí mismo, tal y

como sucede en la librería Swing de

Java. DotGNU no tiene implementado

por sí mismo un IDE.

El Proyecto de Ejemplo enDotGNUDotGNU ejecuta los bytecodes genera-

dos en Windows sin necesidad de

modificarlos. Sin embargo, pulsando

en los controles RadioButton se inicia

la rutina de eventos múltiples veces.

Esto no cambia cuando recompilamos

los fuentes usando DotGNU: cscc

--winforms -o DemoApp.exe *.cs.

Además tenemos que eliminar el

código manejador de ImageList para

lograr que la apli-

cación termine de

compilar.

Nuestras pruebas

lograron descubrir

otro error en la ver-

sión compilada con

DotGNU (Figura 4).

También indicaron

que el mecanismo

de eventos no fun-

cionaba correcta-

mente: el compo-

nente GUI RadioBut-

ton lanzaba eventos

duplicados. Numer-

icUpDown no fun-

DESARROLLO • Mono y DotGNU

46 Número 14 W W W . L I N U X - M A G A Z I N E . E S

[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.Win-

dows.Forms en Mono: http://svn.

myrealbox.com/mwf/owners.html

[7] PNetmark: http://www.

southern-storm.com.au/pnet_faq.

html#q1_4

RECURSOS

Figura 4: La aplicación .NET con GUI tiene algunos problemas cuando

se ejecuta en DotGNU; por ejemplo, los botones circulares lanzan

eventos múltiples veces.

Figura 5: Aplicación sencilla corriendo con System.Windows.Form.dll

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

Perl • DESARROLLO

47Número 14W W W . L I N U X - M A G A Z I N E . E S

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, siem-

pre 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.

Conjunto EstándarAgradezcamos 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 esta-

mos 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

Un programa que funcione correc-

tamente 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 pron-

to como esta funcionalidad esté imple-

mentada, 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 imple-

mentado se añade al banco de pruebas y

será ejecutado una y otra vez mientras el

proyecto emerge. Con la suma de

pequeños

Herramientas Perl para tests de regresión

HERRAMIENTAS DETESTEOCon 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

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

debe aplicar tanto al

código de pruebas

cómo al código de la

aplicación.

En el script de ejemplo

se comprueba el módulo

Config::Patch de CPAN,

éste parchea ficheros de

configuración de manera

reversible. Test::More

establece primero tests

=> 4 para indicar que

se realizarán exacta-

mente cuatro pruebas.

Esto es importante: si el

conjunto de pruebas ter-

mina antes de lo debido,

es algo que deberíamos

conocer. Algunos desa-

rrolladores, mientras

están ocupados exten-

diendo el conjunto de pruebas,

suavizan el test con Test::More

qw(no_plan). Sin embargo las buenas

prácticas dictan fijar el número de

pruebas que se van a realizar de ante-

mano.

Nuestro script de pruebas simple.t

llama primero a use_ok() (exportado por

Test::More) para comprobar si el módulo

Config::Patch realmente ha cargado.

Entonces, el constructor new (con

suerte) devolverá un objeto. La sigu-

iente función, ok(), también de

Test::More, escribe ok 2 por la salida

estándar si el objeto contiene algún

valor, y not ok 2 en caso contrario. Un

segundo parámetro, que puede ser pasa-

do a ok() opcionalmente, establece un

comentario que se imprimirá a contin-

uación del resultado de la prueba. La

Figura 1 nos muestra la salida del script.

La tercera prueba muestra cómo de

útil puede ser el uso de la función is()

de Test::More, en vez de ok(), en caso

de que necesitemos comparar cosas. Si

algo va mal, el script de test no sólo

muestra el comentario de la prueba y el

número de línea, sino que además

muestra las diferencias entre el valor

obtenido y el esperado. La línea 19 del

Listado 1 causa un error, sólo para

propósitos demostrativos. Para con-

seguir una salida con sentido con is(),

será necesario pasar el valor devuelto

como primer parámetro y el valor que

se esperaba como segundo parámetro.

La función like() usada en la cuarta

prueba, espera como segundo argu-

mento una expresión regular que debe

casar con el primer parámetro, en vez

de un valor comparativo. Si la expre-

sión regular no coincide, se mostrará

un detallado mensaje de error de ma-

nera similar a is(). Finalmente,

Test::More muestra un educado “Parece

que ha fallado 1 test de 4”. Es impor-

tante ser correctos: nadie quiere ser

regañado por uno de los puntillosos

del departamento del Control de

Calidad.

El script prove, que es parte del

módulo CPAN Test::Harness, ejecuta

uno o varios scripts de tests. La versión

de Test:Harness que viene con Perl 5.8

no incluye este programa, así que es

necesario asegurarse de que se ha

descargado la última versión desde

CPAN. Al ejecutar prove con un script

de pruebas se obtendrá la siguiente

salida, en el caso de que todas las

pruebas sean pasadas con éxito:

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 esta-

mos llevando a cabo cientos de prue-

bas. Para cambiarlo, un test de

aprovechamiento global nos propor-

ciona un resumen que dice si todo ha

sido comprobado, o el número de prue-

bas que se han fallado.

El Listado 1 muestra un ejemplo.

Tradicionalmente, los scripts de prue-

bas 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 com-

prueban cosas similares, y realizan

acciones parecidas, hay algunos módu-

los de pruebas especiales, tales cómo

Test::More, que simplifican el proceso y

nos ayudan a evitar la escritura de códi-

go de pruebas redundante. Después de

todo, el mismo principio de diseño se

DESARROLLO • Perl

48 Número 14 W W W . L I N U X - M A G A Z I N E . E S

01 #!/usr/bin/perl

02 use strict;

03 use warnings;

04

05 use Test::More tests => 4;

06

07 BEGIN {

08 use_ok("Config::Patch");

09 }

10

11 my $p =

12 Config::Patch->new(

13 key => "foo");

14

15 # #1 verdadero

16 ok($p, "New object");

17

18 # #1 igual #2

19 is($p->key, "Waaah!",

20 "Retrieve key");

21

22 # #1 coincide #2

23 like($p->key(), qr/^f/,

24 "Key starts with 'f'");

Listado 1: simple.t

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

Módulo Función

Test::Simple Utilidad de pruebas común, incluye

Test::More

Test::Deep Compara estructuras anidadas

Test::Pod Valida documentación POD

Test::Pod::CoverageComprueba que todas las funciones estén

documentadas

Test::NoWarnings Alertas en alarmas

Test::Exception Comprueba si alguna excepción ha sido lan-

zada

Test::Warn Comprueba si las alarmas son correcta-

mente emitidas

Test::Differences Muestra gráficamente las desviaciones

Test::LongString Comprueba cadenas largas

Test::Output Cachea la salida a STDERR/STDOUT

Test::Output::Tie Cachea la salida a manejadores de ficheros

Test::DatabaseRow Comprueba los resultados de la consulta a

la base de datos

Test::MockModule Simula módulos adicionales

Test::MockObject Simula objetos adicionales

Tabla 1: Utilidades para Pruebas

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

prove ./simple.t

./simple....ok

All tests successful.

Files=1, Tests=4, U

0 wallclock secs

(0.08 cusr + 0.01 csys = U

0.09 CPU)

Si se está interesado en un análisis de los

resultados, ejecute prove con la opción -v

(de verbose) para mostrar individualmente

la líneas ok y not ok generadas además de

sus comentarios. Si se está ejecutando un

programa de pruebas desde la distribución

de un módulo sin estar éste instalado, el

parámetro -b será de utilidad, puesto que

hará uso de los ficheros del módulo que

make deja en el directorio blib.

Los módulos CPAN

usan make test antes

de la instalación

para hacer lo que

hace prove en línea

de comandos. El módulo ExtUtils::Make-

Maker, que provee de esta funcionalidad,

se añade al camino de inclusión de las

librerías Perl, @INC, para permitir al

banco de pruebas ejecutar módulos que

hasta el momento no han sido instala-

dos. Los módulos nuevos vienen con el

módulo Module::Build, que provee de

una funcionalidad similar, pero más

avanzada.

En ProfundidadAdemás de Test:More, CPAN tiene innu-

merables módulos de utilidad que facilitan

crear código para pruebas sin la necesidad

de reescribir las mismas líneas de código

una y otra vez. Test:Deep, que compara

estructuras profundamente anidadas, es

un ejemplo de estos módulos.

El Listado 2 muestra un

pequeño programa de prue-

bas que llama a la función

get_mp3tags() del módulo

MP3::Info. Si el fichero MP3

contiene un conjunto ade-

cuado de etiquetas, la fun-

ción devuelve una referencia

a un hash, el cual contiene

una serie de claves, tales

cómo ARTIST, ALBUM. En

vez de comprobar si el valor

devuelto apunta realmente a

un hash, y entonces reco-

rrerlo por medio de las claves

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 ver-

dadero 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 ejem-

plo, 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 encarga-

da 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 refe-

rencia 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 almace-

nados bajo esas claves en el hash coinci-

den con una expresión regular dada:

texto con espacios en blanco para la eti-

queta 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

Perl • DESARROLLO

49Número 14W W W . L I N U X - M A G A Z I N E . E S

Figura 2: Prueba de cobertura: no todos los métodos han sido llamados.

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

Módulo Función

Test::Harness Aprovechamiento estándar

Test::Builder Base para las nuevas utilidades de

pruebas

Test::Builder::Tester Tests para las nuevas utilidades de

pruebas

Test::Harness::Straps Base para el desarrollo de un nuevo

test de aprovechamiento

Devel::Cover Análisis y muestra del test de cober

tura

Test::Distribution Comprueba la completitud de los

módulos

Tabla 2:Herramientas para el Análisisde Tests

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

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 cober-

tura 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 sen-

cilla visión general de los datos de cobertu-

ra, tal y como se muestra en la Figura 2. La

Figura 3 muestra la cobertura para el

fichero script de pruebas coverme.t; la sali-

da 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 condi-

ciones. 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 cober-

tura de ejecución.

MaquetadoUno 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 maratonia-

nas. 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 herramien-

tas 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 exce-

lente 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. �

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 ele-

mento del array.

Además de superhashof(), se dispone de

subhashof() para gestionar escenarios en

los que la referencia al hash contenga ele-

mentos 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 finalizadaEn el Listado 3 se observa la definición de

DESARROLLO • Perl

50 Número 14 W W W . L I N U X - M A G A Z I N E . E S

[1] Listados del artículo: http://www.

linux-magazine.com/Magazine/

Downloads/61/Perl

[2] Perl Testing Ian Langworth & Shane

Warden, O’Reilly 2005.

RECURSOS

01 #!/usr/bin/perl -w

02 use strict;

03

04 package Foo;

05

06 sub new {

07 my ($class) = @_;

08 bless {}, $class;

09 }

10

11 sub foo {

12 print "foo!\n";

13 }

14

15 package main;

16

17 use Test::More tests => 1;

18

19 my $t = Foo->new();

20 isa_ok($t, "Foo",

21 "New Foo object");

Listado 3: coverme.t

01 #!/usr/bin/perl

02 use warnings;

03 use strict;

04

05 use Test::More tests => 1;

06 use Test::Deep;

07 use MP3::Info;

08

09 my $tag =

10 get_mp3tag(

11 "Gimme_Shelter.mp3");

12

13 cmp_deeply(

14 $tag,

15 superhashof(

16 {

17 YEAR => re(qr(^\d+$)),

18 ARTIST =>

19 re(qr(^[\s\w]+$)),

20 }

21 )

22 );

Listado 2: mp3.t

Michael Schilli tra-

baja como desa-

rrollador de soft-

ware en Yahoo!,

Sunnyvale,

California. Es el

autor de “Perl

Power” de la edito-

rial Addison-Wesley y se le puede

contactar en mschilli@perlmeis-

ter.com. Su página está en http://

perlmeister.com

EL

AU

TO

R

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

Python • DESARROLLO

51Número 14W W W . L I N U X - M A G A Z I N E . E S

guardar toda esa información… un

primer paso para poder almacenar

todos esos datos antes de que se tenga

que lamentar.

Diseño del programaSerá 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 fun-

ciones 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 deci-

siones. ¿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 estruc-

tura de datos en la

mano ya sólo queda

crear los directorios y

mover los ficheros a

ellos, y listo.

Recolección delos datos¿Cómo se pueden

recorrer todos los sub-

directorios de

un árbol

de

Muchas tareas cotidianas

pueden automatizarse gracias

a los lenguajes script. Siempre

se ha dicho que Linux fomenta la

creación de pequeños script que ahor-

ran 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 nues-

tros 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 canti-

dad 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

Un script pequeño y útil

MAYORDOMOPYTHONMucha 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

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

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 recur-

sión.

Imaginemos que se tiene /tmp/ y en

su interior el fichero hola.txt y los sub-

directorios 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 duroEs aquí cuando hay que emplear un

poco de lógica. Existen muchas ma-

neras de solucionar este problema, pero

no tiene mucho sentido emplear las

más eficientes. Es preciso repartir los

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 con-

tenedores, 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 Lis-

tado 3. Esta función hace uso de una ca-

racterí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, justa-

mente, lo que hace la función Lambda.

El primer parámetro de sort() es una

función que se usa para comparar dos

ficheros de la manera más simple posi-

ble? 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 eje-

cute 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 con-

sigue una lista con los ficheros y direc-

torios 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

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

DESARROLLO • Python

52 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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"

Listado 1: función«recorre»

- 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

Listado 2: ejecuciónrecursiva

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

Python • DESARROLLO

53Número 14W W W . L I N U X - M A G A Z I N E . E S

001 #!/usr/local/bin/python

002

003 import os

004 import os.path

005

006

007 def recorre(ruta,hash):

008 entradas = os.listdir(ruta)

009

010 for entrada in entradas:

011

012 ruta_entrada = ruta + "/" + entrada

013

014 if os.path.isfile(ruta_entrada):

015 hash[ruta_entrada] =

os.path.getsize(ruta_entrada)

016 elif os.path.isdir(ruta_entrada):

017 recorre(ruta_entrada, hash)

018 else:

019 print "ERROR"

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

054

055 for fichero in dir[llave]:

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

Listado 3: código del programa

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

El siguiente paso

consiste en generar

una estructura consistente en un dic-

cionario o hash, donde la llave es un

número y el contenido una lista de ficheros

y sus tamaños. Este hash representa cada

uno de los contenedores que usaremos.

Cuando se llena uno pasamos a crear el

siguiente y así hasta quedarnos sin

ficheros.

Movimiento de ficherosYa 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 pastelComo 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 pro-

grama 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 sim-

ple:

• Colección

• Contenedor

• Fichero

Se puede ver un ejemplo en el Listado 4. �

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 con-

vertirse en un función como cualquier

otra.

DESARROLLO • Python

54 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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 desarro-

llando software libre y, desde

hace dos, se está especializando

en FreeBSD.

EL

AU

TO

R

01 <?xml version=1.0>

02 <coleccion>

03 <contenedor id="0">

04

<fichero>/usr/local/datos/dir-

0/videos/rubyonrails.mov</fich

ero>

05 </contenedor>

06 <contenedor id="1">

07

<fichero>/usr/local/datos/dir-

1/ase2001-gfkf.ps</fichero>

08

<fichero>/usr/local/datos/dir-

1/icse2002-gk.ps</fichero>

09

<fichero>/usr/local/datos/dir-

1/esop2003-gfkf.ps</fichero>

10

<fichero>/usr/local/datos/dir-

1/continuations.ps</fichero>

11

<fichero>/usr/local/datos/dir-

1/esop2001-gkvf.ps</fichero>

12 </contenedor>

13 </coleccion>

Listado 4: fichero de índice

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

pequeños y manejables.

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)

Listado 3: código delprograma (continuación)

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

Lo 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 desarrol-

lador 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 Genera-

tor, 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 her-

ramienta que me gusta: eficiente y ráp-

ida. Realiza de manera muy eficiente la

tarea para la que fue ideado: crear

informes basados en los ficheros de

registro de Squid.

El código fuente de Sarg y los paque-

tes 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ís-

tico muy útil, como el mostrado en la

Figura 1. Pero al contrario que la utili-

dad 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 pro-

porciona 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/

Sarg y DNSPara 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

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 someti-

dos 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 segun-

dos 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 re-

gistros 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 STD-

OUT y lo proporciona en un formato le-

gible con fecha.

Un valor como 1126705707.537 se

transforma en 09/14/2005 14:48:27. La

pérdida del milisegundo no es en abso-

luto preocupante.

Gracias por la aplicación, Pedro, hacía

tiempo que no me divertía tanto, pero

debería replantearse las siglas en benefi-

cio de todos aquellos hackers alemanes

de Linux. �

55

La Columna de Charly • ADMINISTRACIÓN

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

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

php

RECURSOS

El Taller del Administrador: NTP.......66

El Network Time Protocol (NTP) pro-

porciona la hora exacta a través de la

red.

Programación Segura………..…..... 69

Asegure su servidor aprendiendo a

pensar como un atacante.

El Taller del Administrador: NTP.......66

El Network Time Protocol (NTP) pro-

porciona la hora exacta a través de la

red.

Programación Segura………..…..... 69

Asegure su servidor aprendiendo a

pensar como un atacante.

SYSADMIN

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

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

LAS HERRAMIENTAS

DE PEDRO

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

56

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

total de seguridad. Solucionar los pro-

blemas 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.

Tengo 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

Implementar un proxy casero con Squid

PUERTO SEGUROPUERTO SEGURO

ADMINISTRACIÓN • Squid

56 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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

Componentes Necesarios Especificaciones

Intel Pentium II CPU, o superior (¿Por qué no un Alpha Server sobrante?) 350 Mhz

80 - 100 MB de memoria mínimo Cuanto más, mejor

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) 4GB mínimo

2 tarjetas Ethernet, minihub, modem fast Ethernet y router wireless o hub 100 Mbit/s si es posible

CDROM, lector DVD El software se distribuye principalmente por DVD

Tabla1: Hardware recomendado

Implementar un proxy casero con Squid

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

Squid para mejorar el rendimiento de

Internet, filtrar los molestos popups y blo-

quear 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 blo-

queo centralizado de publicidad y descar-

gas 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 facili-

dad 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. Encon-

traremos 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.

ComenzamosEl primer paso es encontrar el hardware

necesario. La Figura 1 muestra la configu-

ración de red del Pentium II que se ha uti-

lizado 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

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 fun-

cionando, 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:

En el momento de escribir estas líneas, la

versión estable de Squid es la 2.5.

Configurar SquidUna vez que ha sido instalado, será nece-

sario 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 configu-

ración con un editor de textos. Existe una

descripción detallada de la configuración

en el archivo squid.conf, aunque la expli-

cación a veces es algo técnica y compli-

cada 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-

figuración lleguen al mundo exterior

cuando se navegue por la Web:

Nótese que no pueden hacerse anónimos

Referer y WWW-Authenticate ya que de

lo contrario, los mecanismos de autenti-

cación y control de acceso no fun-

cionará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 regis-

tran 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 depu-

rar fallos en los filtros de Quid, pero tam-

bién puede violar las reglas de privaci-

dad.

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.

Squid • ADMINISTRACIÓN

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

vi /etc/squid/squid.conf

...

anonymize_headers deny U

From Server Via User-Agent

forwarded_for off

strip_query_terms on

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

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

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ác-

tica, se acepta una cierta variación en la

distribución. Es posible encontrar confi-

guraciones más complejas utilizando

múltiples discos, pero para el uso casero,

una estructura de directorios es sufi-

ciente.

Sustitución de la CachéEl servidor proxy usa un algoritmo LRU

(Least Recently Used). Estudios detalla-

dos 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 popu-

lares en la caché, mientras que elimina

los más grandes y menos usados, incre-

mentando de esta manera el rendimiento

global.

Los objetos grandes requeridos una

sola vez pueden colocar fuera muchos

objetos pequeños, por lo que será conve-

niente que limitemos el tamaño máximo

de objeto para la caché:

Especificación del Formatode 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 ProxyEl 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!

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…

http_port es el puerto usado por el servi-

dor 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 sin-

croniza los servidores proxy.

Con log_mime_hdrs on, es posible

hacer visibles las cabeceras mime en el

archivo access.log.

Evitar BloqueosSquid 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).

Es recomendable mantener la

ubicación estándar para la caché

en /var/cache/squid , y de a l l í

c rear un enlace s imból ico a l

d i rec tor io rea l de caché. S i se

mueve a ot ro d isco por mot ivos

de rendimiento o de capacidad,

só lo será necesar io modi f icar e l

enlace s imbólico.

ADMINISTRACIÓN • Squid

58 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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

# ls -ld /var/cache/squid

lrwxrwxrwx 1 root rootU

19 Nov 22 00:42 U

/var/cache/squid -> U

/volset/cache/squid

cache_replacement_policyU

heap GDSF

memory_replacement_policyU

heap GDSF

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

cache_mem 20 MB

maximum_object_sizeU

16384 KB

maximum_object_sizeU

_in_memory 2048 KB

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

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 naveg-

adores 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 normal-

mente una sola vez, por lo que general-

mente 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:

Filtrado con SquidEn 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.

La tabla 2 proporciona una guía para

la creación de listas ACL. Puede ser una

buena idea permitir la navegación WYSI-

WYG (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, CON-

NECT

• 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/fil-

ter_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.

Squid • ADMINISTRACIÓN

59Número 14W W W . L I N U X - M A G A Z I N E . E S

no-query significa que no usamos, o no

podemos usar, ICP (Internet Caching

Protocol), véase [8]. Puede obtenerse la

misma funcionalidad usando expre-

siones regulares, pero esto proporciona

mayor libertad.

El ACL puede incluir también una

expresión regular (regex para abreviar)

con la URL usando una construcción

url_regex.

• el orden de las reglas es importante

• primero se listan todas las reglas de

denegación

• se ejecuta la primera regla coinci-

dente

• el resto de las reglas se ignora

• la última regla debería ser permite

todo

Tabla 2:Guía para ACL

cache_peer proxy.tiscali.beU

parent 3128 3130 U

no-query default

cache_peer_domain U

proxy.tiscali.be .tiscali.be

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

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

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

01 acl block-ip dst "/etc/squid/block-ip.reg"

02 deny_info filter_spam block-ip

03 http_access deny block-ip

04

05 acl block-hosts dstdom_regex -i "/etc/squid/block-hosts.reg"

06 deny_info filter_spam block-hosts

07 http_access deny block-hosts

08

09 acl noblock-url url_regex -i "/etc/squid/noblock-url.reg"

10 http_access allow noblock-url Safe_ports

11

12 block-path urlpath_regex -i "/etc/squid/block-path.reg"

13 deny_info filter_spam block-path

14 http_access deny block-path

15

16 acl block-url url_regex -i "/etc/squid/block-url.reg"

17 deny_info filter_spam block-url

18 http_access deny block-url

Listado 1: Bloqueando páginas no buscadas

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

Squid también permite filtrar por

expresiones regulares usadas en la URL.

Por supuesto, nuestro filtro puede

ocasionalmente provocar un falso posi-

tivo. Pueden añadirse expresiones regu-

lares para las URL que específicamente

no queramos bloquear en

/etc/squid/noblock-url.reg.

Proteger los PuertosPor 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 habili-

tarse 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 visi-

tada.

¡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é:

Habilitando al RestoPara habilitar únicamente los

protocolos y métodos que se deseen:

La última regla debería permitirlo

todo, ya que la regla anterior era una

prohibición…

No debemos olvidar reiniciar el servi-

dor Squid cada vez que cambiemos los

parámetros, tecleando el siguiente

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

Una vez que se haya finalizado la con-

figuración, se usará setup (Fedora),

yast2 (SuSE) o una herramienta equi-

valente 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.

Squid nos permite bloquear con-

tenidos por subred IP. Por ejemplo, se

pueden bloquear páginas con contenido

sexual explícito. Pueden usarse whois

[9] para ayudarnos a identificar las sub-

redes y luego añadir las subredes al

archivo /etc/squid/block-ip.reg:

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 per-

mitir los archivos .exe, dado que a veces

son archivos zip ejecutables que insta-

lan software. Squid permite bloquear

archivos por ruta, nombre de archivo o

extensión del archivo, tal y como se

muestra en el Listado 4.

ADMINISTRACIÓN • Squid

60 Número 14 W W W . L I N U X - M A G A Z I N E . E S

01 vi /etc/squid/block-hosts.reg

02 ...

03 ^a\.

04 ^ad\.

05 ^adfarm\.

06 ^ads\.

07 ^ads1\.

08 ^al\.

09 ^as\.

10 \.msads\.net$

11 ^ss\.

12 ^sa\.

13 ^sc\.

14 ^sm6\.

15 ^tracking\.

16 adserver.adtech.de

17

18 \.belstat\.be$

19 \.doubleclick\.net$

20 \.insites\.be$

21 ^metrics\.

22 \.metriweb\...$

23 \.metriweb\....$

24

25 \.playboy\.com$

26 \.hln\.be$

27 side6

28 www.whitehouse.com

Listado 3:Bloqueo por Nombre de Dominio

vi /etc/squid/noblock-url.reg

...

^http://ads\.com\.com/

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

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

acl allow-proto proto HTTP

http_access deny !allow-proto

acl allow-method U

method GET POST

http_access deny U

!allow-method

http_access allow all

/sbin/init.d/squid reload

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><!--

Listado 2:

Hacer Invisible una Página

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

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

ConclusionesEste artículo es el resultado de una pre-

sentación para la organización Belgium HP-

Interex. 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.

Si se está buscando un mejor rendimien-

to, una navegación más segura y una man-

era de bloquear el acceso a contenido peli-

groso, se debería intentar colocar un servi-

dor proxy en el desván. Para los que se pre-

ocupan por el consumo: un Pentium II con-

sume unos 11 kWh/semana. Debería eval-

uarse 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. �

Squid • ADMINISTRACIÓN

61Número 14W W W . L I N U X - M A G A Z I N E . E S

01 vi /etc/squid/block-path.reg

02 ...

03 \.ad[ep](\?.*)?$

04 \.ba[st](\?.*)?$

05 \.chm(\?.*)?$

06 \.cmd(\?.*)?$

07 \.com(\?.*)?$

08 \.cpl(\?.*)?$

09 \.crt(\?.*)?$

10 \.dbx(\?.*)?$

11 \.hlp(\?.*)?$

12 \.hta(\?.*)?$

13 \.in[fs](\?.*)?$

14 \.isp(\?.*)?$

15 \.lnk(\?.*)?$

16 \.md[abetwz](\?.*)?

17 \.ms[cpt](\?.*)?$

18 \.nch(\?.*)?$

19 \.ops(\?.*)?$

20 \.pcd(\?.*)?$

21 \.p[ir]f(\?.*)?$

22 \.reg(\?.*)?$

23 \.sc[frt](\?.*)?$

24 \.sh[bs](\?.*)?$

25 \.url(\?.*)?$

26 \.vb([e])?(\?.*)?$

27 \.vir(\?.*)?$

28 \.wm[sz](\?.*)?$

29 \.ws[cfh](\?.*)?$

Listado 4:Bloqueo por Ruta o Extensión

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

Listado 5: Protección dePuertos

[1] Presentación para el grupo de usuar-

ios 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 configu-

ración para Squid: http://members.

lycos.nl/geertivp/pub/squid

RECURSOS

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 fire-

wall 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.

Imposición del Control Paterno y Bloqueo de Spyware

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, Non-

Stop Tandem, SUN y NCR Teradata.

EL AUTOR

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

62 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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

EL TÚNEL DE DATOS

Una configuración típica del corta-

fuegos consiste en denegar todo

lo que no sea estrictamente nece-

sario para el trabajo diario. Incluso he-

rramientas relativamente inofensivas

como una webcam o un servidor personal

de IRC no funcionarán a través del corta-

fuegos. 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 distribu-

ciones Linux populares. Véase la docu-

mentación para saber más sobre cómo

configurar OpenVPN.

Minando el CortafuegosOpenVPN no requiere los privilegios de

root para establecer una VPN. Sólo con

que el programa tenga acceso a los dis-

positivos virtuales TUN/TAP, es sufi-

ciente 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

ADMINISTRACIÓN • 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, a menos que se

utilice una red privada virtual como OpenVPN. POR MIRKO DÖLLE

01 #!/bin/bash

02

03 DEVICE="tun0"

04 PORT="1194"

05 LOCALIP="192.168.8.1"

06 REMOTEIP="192.168.8.128"

07 KEYFILE="/etc/openvpn/shared.key"

08 MAXRATE="16000"

09

10 /usr/sbin/openvpn -daemon --dev $DEVICE \

11 --proto tcp-server -port $PORT \

12 --ifconfig $LOCALIP $REMOTEIP \

13 --secret $KEYFILE --persist-tun --ping 30 \

14 --ping-restart 180 -shaper $MAXRATE \

15 --writepid /var/run/openvpn-${DEVICE}.pid

16

17 while true; do

18 if [ ! -e /var/run/openvpn-${DEVICE}.pid ]; then

19 break

20 fi

21 done

Listado 1: openvpn-server.sh

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

OpenVPN • ADMINISTRACIÓN

63Número 14W W W . L I N U X - M A G A Z I N E . E S

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 cone-

xió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 ma-

yoría de los cortafuegos y los routers de

las empresas o de los cibercafés no per-

miten 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 SimpleLos Listados 1 y 2 muestran dos scripts

para el servidor y para el cliente. Open-

VPN no requiere ficheros de configu-

ració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 mues-

tran algunas opciones que los usuarios

tienen que cambiar para adaptarlo a sus

necesidades.

El servidor no necesita mucha infor-

mació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áficoSi el script del servidor se está ejecu-

tando 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 normal-

mente 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 conex-

ió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.

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 tcp-

server y --persist-tun. --daemon ejecuta

OpenVPN en modo servicio, permitiendo

al script del servidor continuar su ejecu-

ció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 delServidorEl 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 Lis-

tado 1 es una versión simplificada si se

compara con el bucle del script del lis-

tado en [2]; carece del mecanismo de

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

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

script puede borrar dicha ruta, que pos-

teriormente 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 restric-

ciones. El comando ping de la línea 27

abre un túnel VPN, que se ha configu-

rado pero que aún permanece cerrado en

este punto.

Enrutado IndividualPara 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 necesi-

tan soportar múltiples clientes o si la

red engloba varias oficinas de la

empresa. Para los usuarios que consi-

deren requerimientos mayores, Open-

VPN versión 2.0 o posterior proporcio-

nan 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. �

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 Lis-

tado 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

ADMINISTRACIÓN • OpenVPN

64 Número 14 W W W . L I N U X - M A G A Z I N E . E S

[1] OpenVPN: http://openvpn.net

[2] Scripts OpenVPN: http://www.

mirko-doelle.de/linux/openvpn-server.sh

y ... / openvpn-client.sh

RECURSOS

01 #!/bin/bash

02 DEVICE="tun0"

03 REMOTE="athome.dyndns.org"

04 GATEWAY="192.168.1.254"

05 PORT="1194"

06 LOCALIP="192.168.8.128"

07 REMOTEIP="192.168.8.1"

08 REMOTENET="192.168.42.0/24"

09 KEYFILE="/etc/openvpn/shared.key"

10 MAXRATE="16000"

11

12 /usr/sbin/openvpn -daemon --dev $DEVICE \

13 --remote $REMOTE -proto tcp-client \

14 --port $PORT -ifconfig $LOCALIP $REMOTEIP \

15 --secret $KEYFILE --persist-tun --ping 30 \

16 --ping-restart 180 \

17 --writepid /var/run/openvpn-${DEVICE}.pid

18

19 for ((i=0; i<10; i=$[$i+1])); do

20 ifconfig $DEVICE >/dev/null 2>/dev/null

21 if [ "$?" -eq 0 ]; then

22 route add $REMOTE gw $GATEWAY

23 if [ "$?" -eq 0 ]; then

24 route del default gw $GATEWAY

25 route add -net $REMOTENET gw $REMOTEIP

26 route add default gw $REMOTEIP

27 ping -c 1 $REMOTEIP >/dev/null 2>/dev/null &

28 break

29 fi

30 fi

31 sleep 5

32 done

33

34 while true; do

35 if [ ! -e /var/run/openvpn-${DEVICE}.pid ]; then

36 break

37 fi

38 done

39

40 route del $REMOTE gw $GATEWAY

41 route add default gw $GATEWAY

Listado 2: openvpn-client.sh

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

Incluso 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 difer-

entes para organizar archivos de un

modo significativo en el disco. Por ejem-

plo, 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 ejem-

plo, el diseño modular de Unix requiere

que los administradores seleccionen un

único programa para cada tarea de entre

varios posibles y tienen que reem-

plazarlo con uno compatible con ver-

siones anteriores si aparece una actual-

ización. Por ejemplo, si un admin-

istrador 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 sim-

plifica el intercambio de ficheros entre

máquinas diferentes. Algunos admin-

istradores hacen su tarea más cómoda

realizando las principales instalaciones

de software una sola vez. Todas las

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 pro-

gramas 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 ker-

nel 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-

65

Taller del Administrador • ADMINISTRACIÓN

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

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

Trucos: El Sistema de Ficheros de Unix

ORGANICÉMONOS

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

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 sis-

tema de ficheros mientras carga el ker-

nel.

RecursosLos usuarios finales pocas veces cam-

bian 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 subdirecto-

rios 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 bibliote-

cas dinámicas. De acuerdo con las reglas

de FHS, no debería haber un /usr/etc.

Los datos de configuración para los pro-

gramas de /usr deben estar en /etc.

/usr también tiene un número de sub-

directorios 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 docu-

mentación para los paquetes de software

instalados.

Para que FHS sea más amigable, el

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 multi-

plataforma 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 bas-

tante estáticos por naturaleza. Tiene sen-

tido montar estos dos directorios como

sólo lectura después de iniciar el sis-

tema, evitando modificaciones acciden-

tales o intencionadas. Y aunque es

importante tener una copia de seguridad

completa, normalmente puede hacerlo

sin una copia de seguridad de una parti-

ción estática [2].

/usr tiende a llenarse con datos espe-

cialmente en los ordenadores antiguos,

en este caso los administradores

deberían considerar el mover los subdi-

rectorios 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 parti-

ción.

Hogar, Dulce HogarLos directorios home de los sistemas

basados en BSD tradicionalmente se

encuentran bajo /usr/home. Linux usa

/home. En redes locales, los admin-

istradores utilizan muy a menudo un

automontador para mapear /home a un

directorio de red, que se monta dinámi-

camente desde el servidor de ficheros

cuando un usuario se autentifica.

Los directorios de datos de los servi-

cios 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, permi-

tiendo al directorio raíz de los documen-

tos 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/

dard) [1], que aún hoy en día es el están-

dar 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 confir-

mando.

BásicoCada 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 orde-

nador 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 ker-

nel, sería imposible activar partes del sis-

tema de ficheros. El administrador nece-

sita 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 bibliote-

cas necesarias, un editor de texto y soft-

ware para acceder a otras partes del sis-

tema como fdisk, el familiar mkfs y

mount. La especificación del Filesystem

Hierarchy Standard [1] tiene un com-

pleto 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 ker-

nel y /dev para los ficheros de disposi-

tivos. 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íti-

cos del kernel y ficheros de configu-

ADMINISTRACIÓN • Taller del Administrador

66 Número 14 W W W . L I N U X - M A G A Z I N E . E S

01 #!/bin/sh

02 mke3fs /dev/sdc1

03 mount /dev/sdc1 /mnt

04 cd /usr/share

05 tar cf - . | (cd /mnt && tar

xpf -)

06 umount /mnt

07 mount -o remount,rw /usr #

falls /usr read-only ist

08 rm -rf /usr/share/*

09 mount -o remount,rw / # falls

/ read-only ist

10 echo '/dev/sdc1 /usr/share

ext3 defaults 1 3'

>>/etc/fstab

11 mount /usr/share

12 exit

Listado 1: Cambiando fuera/usr/share

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

www como directorio raíz de los docu-

mentos; Red Hat Enterprise Linux adopta

una solución parecida. El directorio de

datos para el demonio FTP normalmente

está bajo /home/ftp.

Compilando SoftwareSi 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 parti-

ciones, podría crear una partición para

/home y usar un enlace simbólico a

/home/local en /usr/local.

Datos Estáticos y VariablesUn sistema Unix en ejecución produce

un gran número de cambios en los

ficheros que se encuentran en el directo-

rio /var (datos variables). Hay dos venta-

jas en esta solución: primera, separa los

datos volátiles de los datos de sólo lec-

tura 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 desor-

bitadamente. Si el fichero de registros

llena la partición root, el sistema comen-

zará a hacer cosas raras porque muchos

programas no serán capaces de escribir

en los ficheros temporales. En otras pal-

abras, 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-

cadores de proceso de los servicios

activos para las comunicaciones inter-

proceso (IPC) que los programas uti-

lizan. /var/empty es un directorio home

vacío para una parte privilegiada del ser-

vicio SSH, por ejemplo.

El RestoEl 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 dispos-

itivos externos utilizan subdirectorios

bajo /media, tal como /media/floppy o

/media/cdrom. De acuerdo con el están-

dar, /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. �

Taller del Administrador • ADMINISTRACIÓN

67Número 14W W W . L I N U X - M A G A Z I N E . E S

[1] Filesystem Hierarchy Standard: http://

www.pathname.com/fhs/

[2] Marc André Selig, “Backups”:Linux

Magazine 07, p. 66.

RECURSOS

Figura 1:El sistema de ficheros típico de una máquina Linux. Para una mejor representación y flexibilidad, los administradores deberían dis-

tribuir los datos en varias particiones en el disco duro.

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

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

MENSAJESSECRETOS

será capaz de leer los ficheros privadossi están encriptados, ¿cierto?

En realidad, la encriptación selectivade ficheros proporcionada por utili-dades tales como GnuPG cubre algunade sus huellas, pero no todas. Un intru-so puede aún aprender sobre su sis-tema… y quizás incluso reconstruiralgunos de los ficheros de datos fis-goneando los ficheros secretos, los tem-porales, los datos de configuración y elhistorial de comandos. El directorio/var/spool/cups, por ejemplo, podríaproporcionar datos de ficheros que sehayan imprimido anteriormente y he-rramientas como Gnome ThumbnailFactory podrían estar almacenando unacopia desencriptada de las imágenesencriptadas.

En vez de seguir cada acción realiza-da sobre cada fichero para eliminar

cualquier rastro dejado, los usuarios deLinux pueden elegir encriptar los datosa un mayor nivel usando DM-Crypt. Elmódulo del kernel dm-crypt trabaja alnivel del dispositivo de bloques, permi-tiendo a los usuarios encriptar parti-ciones completas. El proceso es trans-parente a la aplicación, permitiendo elacceso al usuario que haya sido valida-do en el sistema. DM-Crypt encripta eldenominado dispositivo de respaldo (eldisco físico) y hace uso de un dispositi-vo de bloque virtual para proporcionaracceso al contenido en claro bajo/dev/mapper. Los usuarios puedenacceder a este dispositivo de bloquespara configurar y montar el sistema deficheros. Este artículo examina la tec-nología subyacente a DM-Crypt y lanueva herramienta de gestión LUKS(Linux Unified Key Setup).

La encriptación de ficheros es unmedio popular para asegurarse laprivacidad y la seguridad de los

datos a nivel de ficheros. Un intruso quelogre colarse a través del cortafuegos no

ADMINISTRACIÓN • DM-Crypt

68 Número 14 W W W . L I N U X - M A G A Z I N E . E SW W W . L I N U X - M A G A Z I N E . E S

Si se toma en serio la seguridad, pruebe la encriptación del

disco duro con DM-Crypt y LUKS. POR CLEMENS FRUH-

WIRTH Y MARKUS SCHUSTER

Clemens Fruhwirth es el autorde LUKS y del papel blanco titu-lado “New Methods in Hard DiskEncryption”, que definen lateoría subyacente. Clemens tam-bién es el inventor de ESSIV y elimplementador de LRW-AES yEME para Linux. Markus Schus-ter es un integrador de sistemascon Bits & Bytes (un proveedorde servicios IT de Bavaria); sedefine a sí mismo como unfanático del software libre. Haestado usando LUKS desde sucreación.

LOS AUTORES

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

La ConfiguraciónDM-Crypt se instala en una capa flexibleconocida como dispositivo mapper. Losmódulos del dispositivo mapper se con-figuran a través de las denominadastablas DM, ficheros de texto simples queespecifican cómo debe manejar el dis-positivo mapper los accesos a las zonasdel disco virtual. El programa dmsetup

procesa estos ficheros de texto y utilizalas llamadas a ioctl() para pasar losdetalles al kernel.

El formato de las tablas DM para DM-Crypt es muy pesado para usarlo adiario. El software espera que la clavesea una cadena hexadecimal de tamañofijo. El módulo utiliza la clave paraencriptar los datos del dispositivo de blo-ques. Sin embargo, almacenar la clavede forma permanente en los ficheros delas tablas DM es como dejar la llave col-gando del pomo de la puerta. Por ello, laclave hay que introducirla en el momen-to de montar el dispositivo.

Teclear hasta 32 caracteres hexadeci-males de memoria puede que no seafácil, pero cryptsetup puede ayudar.cryptsetup es una herramienta que ge-nera una clave criptográfica desde (mássimple) una fase de paso, y luego le pasala clave al kernel. La Figura 1 muestra elentorno cryptsetup.

Se pueden parametrizar dos caracterís-ticas importantes de cryptsetup: la ge-neración de claves y la encriptación. Laprimera especifica cómo generará crypt-setup las claves desde una contraseñaproporcionada por el usuario. Por defec-to usa un algoritmo hash, que propor-ciona al usuario la libertad de selec-cionar una contraseña de cualquier lon-gitud. El código hash comprimirá lainformación para proporcionar unnúmero fijo de bytes. La Figura 1 mues-tra a cryptsetup usando los valores pordefecto: el hash Ripemd-160 genera unaclave de 256 bits.

Hay que seleccionar dos parámetrospara el proceso de encriptación: el algo-ritmo y el modo. Cryptsetup pasa estosparámetros y la clave obtenida al kernely el módulo DM-Crypt coordina el pro-cedimiento, usando el API Crypto paramanejar la encriptación.

Utiliza la Fuerza, LUKSDesafortunadamente, cryptsetup tieneun lado negativo. Separa los detalles delo que hay que hacer con un conjunto deinformación encriptada de la informa-ción encriptada. La mayoría de losparámetros de cryptsetup se encuentranen scripts o en ficheros de configuraciónque, obviamente, no pueden estar en las

particiones encriptadas. Si se pierdenestos ficheros o no puede recordar laconfiguración de un disco portable, seperderá el acceso a los datos encripta-dos. LUKS (Linux Unified Key Setup)elimina esta segregación.

LUKS es un estándar formal [3], imple-mentado por la herramienta cryptsetup-LUKS [4] (Figura 2). Este último es unaversión del cryptsetup original. LUKSdefine una cabecera para las particionesDM-Crypt (Figura 3); la cabecera incluyetoda la información para la generaciónsegura de la clave. Como es parte de lapartición encriptada, la configuraciónestá siempre disponible justo allí dondese necesita.

Cryptsetup-LUKS y el cryptsetup origi-nal también difieren con respecto a laforma en la que generan las claves desdeuna frase de paso (Figura 2). La gestiónde claves de LUKS está basada en tresconceptos: jerarquía de claves, PBDKDF2y almacenamiento de información anti-forense.

Gestión de ContraseñasSegurasLa aplicación cryptsetup pasa la clave,que se genera desde la contraseña, direc-tamente al kernel. La mayor pega a estasolución es que el software necesita

DM-Crypt • ADMINISTRACIÓN

69Número 14W W W . L I N U X - M A G A Z I N E . E S

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

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.

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

reencriptar todos los datos cada vez quela contraseña se modifica. Cryptsetup-LUKS presenta una capa de gestión decontraseñas adicional para eliminar esteproblema. La jerarquía de claves insertauna capa de encriptación extra entre laclave derivada y la clave usada por elkernel para proteger los datos de la parti-ción. Además, la clave derivada tan sóloprotege la denominada clave maestra,que encripta los datos de la partición(Figura 2).

Para cambiar la contraseña, cryptset-up-LUKS desencripta la clave maestrausando la contraseña antigua, reencriptala clave usando la nueva contraseña ysobrescribe la copia de la antigua clavemaestra con el valor nuevo. Como losdatos no se ven afectados por la clavemaestra, la partición encriptada per-manece segura. Esto podría ahorrarlemedio día de trabajo duro en el caso deque tenga que desencriptar 120GBytes;la jerarquía de claves reduce el tiemponecesario para cambiar una contraseña aunos pocos segundos.

LUKS almacena la clave maestraencriptada en la cabecera de la particiónsin imponer una restricción de copiasimple. Para soportar múltiples con-traseñas para una misma partición,LUKS puede almacenar múltiples copiasequivalentes de la clave maestra yencriptar cada una de ellas con unacadena diferente. Cada una de estas con-traseñas proporciona al usuario acceso alcontenido del disco en claro. Esto es par-ticularmente útil si se desea almacenar

ADMINISTRACIÓN • DM-Crypt

70 Número 14 W W W . L I N U X - M A G A Z I N E . E S

una contraseña de contingencia o pro-porcionar múltiples credenciales dife-rentes a los usuarios. LUKS reserva hastaocho huecos para contraseñas en lacabecera (Figura 3).

Mejor que un HashComo cryptsetup, LUKS necesita unalgoritmo hash para convertir una con-traseña de longitud arbitraria en unnúmero fijo de bytes. Para ello, utiliza lasolución genérica PBKDF2 (Password-Based 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 usodel estiramiento y la dispersión paraimpedir los ataques basados en dic-cionarios.

Los usuarios prefieren usar con-traseñas cortas y fácilmente recordables.Fechas de nacimiento y nombres de mas-cotas son mucho más comunes quecadenas aleatorias de 22 caracteres.Desafortunadamente, se necesitan almenos 22 caracteres para representaruna clave de 128-bits. Pero no haymucha gente que tenga la capacidad derecordar o incluso teclearSq5woq7501VUE5irAXau.a cada día. Unafunción de derivación satisface ambosrequerimientos: el usuario puede teclearuna contraseña fácilmente recordable yla función genera una clave más comple-ja.

Un algoritmo que genera una clave de128 bits a partir de una contraseña más

corta tiene que re-llenar el espacioentrópico, es decir,el espacio entre elgrado de aleato-riedad en el dominode la contraseña y eldominio de la clave.Un simple rellenadoproduciría una clavemayor, pero no seríamás aleatorio que lapropia contraseña ysería fácilmenteadivinable.

Imaginemos queun usuario introdu-jera solamente pa-labras inglesas; estorestringiría elalcance del dominio

de la contraseña y no proporcionaría lasuficiente entropía. Un atacante podríasimplemente ejecutar un ataque basadoen diccionario en vez de intentar las2128 claves posibles que proporcionauna clave de 128 bits. Un diccionarioinglés, por ejemplo, podría tener menosde 220 entradas. 220 es una potencia 108veces menor que el espacio de la clavecompleto; una reducción fatal, ya quecasi cualquiera podría atacar una clavede 20 bits.

Para salvar este problema, PBKDF2utiliza deliberadamente una funcióncompleja para derivar una clave a partirde la contraseña. Aunque esto tarda unpoco, el usuario no lo apreciará, ya quela operación sólo se realiza una vez. Unatacante tendría que intentar 220 frases.Si cada una puede consumir un segundo,le llevaría 12 días (220 segundos). Si elusuario combina dos palabras para for-mar una contraseña, el ataque podría lle-var 30.000 años (240 segundos). Estabarrera artificial se conoce como esti-ramiento. PBKDF2 usa una función deestiramiento que implica un esfuerzocomputacional infinitamente variable.

Dispersión y EstiramientosPero esto no es suficiente para frenar aun hacker determinado. Un atacantepodría crear una tabla enorme que con-tuviera las entradas y las salidas de lafunción de estiramiento para eliminar lanecesidad de repetir entradas en ataquesfuturos. Para impedir que pueda sucederesto, PBKDF2 añade una cadena selec-cionada aleatoriamente a la contraseñaantes de generar la clave. LUKS almace-na la versión en claro en la cabecera dela partición.

Ahora, el atacante necesita añadir elvalor hash PBKDF2 para cada palabradel diccionario. De hecho, el atacantenecesitaría los valores hash de cada pa-labra del diccionario junto con cadacombinación de posibles cadenas añadi-das. Cuanto mayor sea la dispersión,mayor tendría que ser la tabla que nece-sitaría. PBKDF2 aumenta el tamaño de latabla a una escala inimaginable. El uni-verso tiene menos átomos que el númerode entradas que debería contener un dic-cionario universal para contener cadacombinación PBKDF2.

Los atacantes se ven forzados areducir el número de intentos con espe-ranza de acertar. El mecanismo de con-

Figura 3: LUKS añade los parámetros que necesita cryptsetup-

LUKS para generar la clave desde una contraseña introducida por el

usuario a la cabecera de la partición encriptada. Cada clave con-

tiene una copia encriptada de la clave maestra que DM-Crypt utiliza

para proteger los datos.

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

traseñas de UNIX utiliza una soluciónparecida: sin embargo, la dispersión esmucho menor en este caso (12 bits alma-cenados en los dos primeros dígitos).

TriturandoComo se mencionó antes, es muy difí-cil deshacerse de los datos en un dis-positivo de almacenamiento magnético[2]. Para cambiar efectivamente o bor-rar la contraseña de la jerarquía declaves, es de vital importancia destruircompletamente la copia antigua de laclave maestra. Con un poco de suerte,un usuario podría escribir el sector co-rrecto del disco duro después de unospocos intentos y sobrescribir física-mente la antigua clave maestra. Pero lasuerte es algo en lo que los usuarios ylos criptógrafos raramente confían.

El firmware del disco duro está con-tinuamente combatiendo la destruc-ción de datos, ya que lo que intentapor todos los medios es justo lo con-trario, salvarlos. Una de las formas enlas que el disco duro proporcionamayor seguridad es reasignando losbloques dañados, una técnica simplepara detectar sectores que son difícilesde leer. El firmware automáticamentecopia estos sectores a un área del discoespecialmente reservada para estepropósito y redirecciona cualquieroperación de lectura o escritura poste-rior del sector original a la copia.

El sector original no puede ser borra-do desde este punto en adelante, yaque el firmware redireccionarácualquier intento de escritura a la zonareservada. Desafortunadamente, estopodría dejar fragmentos de la clave enel disco duro, lo que implicaría que unexperto en recuperación de datos o unhacker determinado, podría aún acce-der y recuperar los fragmentos usandoun firmware modificado.

Esto es un problema grave para lasclaves maestras de LUKS, que son muypequeñas en comparación con eltamaño de los sectores (128, 192 o 256bits para AES) y por ello es fácil que seencuentren dentro de un sector. Todoello si sucediera que el firmware deci-diera mover el sector en cuestión a lazona reservada cuando la contraseñaantigua aún siguiera activa. Ni los dis-cos SCSI ni IDE disponen de comandosque proporcionen acceso al sector ori-ginal.

DM-Crypt • ADMINISTRACIÓN

71Número 14W W W . L I N U X - M A G A Z I N E . E S

Neutralización de Expertosen Recuperación de DatosEl autor de LUKS introdujo fragmentosde información antiforense (AF Splitter)para confundir a los expertos en recu-peración. Para reducir la probabilidadestadística de seguirle la traza a losficheros borrados que hayan sobrevividoen el medio de almacenamiento magnéti-co, AF Splitter expande los datos en unfactor de cuatro mil. Los datos expandi-dos no son redundantes; el registro com-pleto es siempre necesario para recupe-rar la clave maestra. La operación con-traria consiste en reunir de nuevo enmemoria estos datos para borrarlos fácil-mente.

AF Splitter distribuye los datos origi-nales (Variable x) basado en la fórmulax= a1 + a2 + a3 + … + a4000. Elalgoritmo genera las variables a1 hastaa3999 aleatoriamente y calcula a4000para balancear la ecuación. El combi-nador suma los elementos ai y para elloprecisa cada uno de ellos individual-mente, no hay redundancia. Si desa-parece un elemento, la ecuación no sepuede resolver y no se puede calcular x.

Para destruir los datos, tan sólo hayque borrar alguno de los 4000 sectoresimplicados en el proceso, ya que laoperación de combinación necesita elregistro completo. Desde luego, esmucho más fácil sobrescribir uno de los4000 sectores. Las estadísticas muestranque esto funciona bastante bien, tal ycomo se puede leer en [1]. Gracias a AFSplitter, las contraseñas pueden ser cam-biadas sin dejar ningún rastro detrás. Encombinación con la jerarquía de claves yPBKDF2, esto proporciona al usuario

una gestión de claves con calidad paralas particiones encriptadas con DM-Crypt.

Salvando el Medio deAlmacenamientoLo que los usuarios principalmenteesperan de un disco encriptado es laencriptación. DM-Crypt proporciona dosmodos de cifrado: ECB (Electronic CodeBook) y CBC (Cipher Block Chaining).Ambos modos están sujetos a unaspocas vulnerabilides, todas ellas seresuelven por el candidato más promete-dor del momento LRW-AES [6][7] (LRW:Liskov, Rivest, Wagner; AES: AdvancedEncryption Standard).

ECB (Figura 4) no se merece realmenteel nombre de Modo de Cifrado:Almacena cada bloque individual cifradoresultante sin realizar ningún cálculoadicional. Esto significa que para cadaclave, el texto en claro siempre se con-vertirá en el mismo texto cifrado.Expresado matemáticamente, ECB esuna función biyectiva de texto en claro atexto cifrado. Esto es peligroso si el ata-cante conoce el texto en claro de unbloque encriptado, lo que puedeaveriguar a partir de las cabecerasestandarizadas del sistema de ficheros,por ejemplo.

Si el atacante sabe que el primer sectorde la partición encriptada empieza conuna serie de ceros, sabrá cómo se encrip-tan los ceros. No necesita una clave paraello, y simplemente puede comparartodos los bloques de texto cifrado con elcomienzo de la partición. Si el atacantedescubre bloques idénticos, sabrá que ladesencriptación de estos bloques se co-rresponde con ceros. El mismo principio

Figura 4: El modo de encriptación ECB (Elec-

tronic 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.

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.

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

dos de texto cifrado.

Efecto de Bola de NieveUna de las características de esta clasede recursión es que la primera ronda deencriptación produce un efecto en las

subsecuentes rondas. Esto no es útil parala encriptación de los discos duros,donde toda la partición tendría que serreencriptada si el contenido del primersector se ve modificado. La respuestatípica aquí es que hay que ver cada sec-tor como el resultado de una funciónrecursiva y hay que procesar cada sectorindependientemente del resto.

Esto lleva a un problema familiar: dossectores con idéntico texto en claro dancomo resultado el mismo texto cifrado.Aunque los sectores son mucho mayoresque los bloques, en un cifrado de blo-ques, el contenido aun podría per-manecer idéntico: imagínese un usuariocreando múltiples copias de un mismofichero, por ejemplo. Aquí es donde seaplica el primer truco: el número de sec-tor cambia la encriptación especificandoel vector de inicialización (IV, Figura 5).Dos modificaciones diferentes del primertexto en claro dispararán diferentes efec-tos de bola de nieve y conducirán a difer-entes textos cifrados.

La variante estándar de DM-Crypt apli-ca el número de sector directamentecomo en IV. Esto está referido a una gen-eración plana IV. Desafortunadamente,esta solución es vulnerable a los ataquesde marcas de agua, donde un atacanteintroduce datos para que posteriormentepueda redescubrir dichos datos sin tenerque conocer la clave.

se puede aplicar a cualquier bloque detexto en claro.

Ocultar y BuscarHay dos formas básicas de ocultar estaredundancia del texto en claro. Una solu-ción es añadir otro componente al proce-so de encriptación; este componentenecesita ser único para cada localizacióndel disco, por ejemplo la posición en eldisco duro. Esto significaría que bloquesidénticos de texto en claro en posicionesdiferentes proporcionarían resultadosdiferentes tras su encriptación.

La segunda solución utiliza un modode encriptación que tiene en cuenta losbloques ya encriptados. La forma mássencilla de implementarlo es haciendouso de la recursión. CBC (Cipher BlockChaining) puede ser simple, pero pro-duce un sistema de encriptación recursi-va efectiva. Realiza una operación deXOR entre el texto del bloque cifradoanteriormente con el texto en claro ac-tual. CBC entonces encripta el texto enclaro modificado y aplica el resultado alsiguiente bloque de texto en claro.

Échese un vistazo a la Figura 5 paraver cómo funciona CBC. Incluso si variosbloques de texto en claro contiguos sonidénticos, la recursión produce un efectode bola de nieve. Esto significa que blo-ques de texto en claro idénticos sonmodificados usando diferentes resulta-

ADMINISTRACIÓN • DM-Crypt

72 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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 propor-

cione dos resulta-

dos idénticos para

encriptar dos sec-

tores en el disco.

En la Figura 5 se

puede ver que el

atacante puede

identificar todos

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 Pi-

1 en vez de Pi al segundo sector. El IV

para el sector dos es algo mayor que

el IV del sector uno. Este incremento

puede ser compensado restando 1 de

P1 (Figura 6b). Si el atacante con-

figura todas las sub-

secuencias Pi como el

primer sector, los tex-

tos cifrados son idén-

ticos. ESSIV

(Encrypted Salt Sector

IV) resuelve este

problema. Pasa el

número del sector a

una función, el resul-

tado de ello depende

de la clave secreta

(Figura 6c). El ata-

cante no puede

manipular P1 en el

sector dos para compensar por la

diferencia IV. Tampoco tiene la clave

necesaria para calcular los IVs.

ESSIV

Figura 6a: El tradi-

cional CBC

comienza encrip-

tando mediante

XOR-ing la IV con

el primer bloque de

texto en claro.

Figura 6b: Las mar-

cas de agua compen-

san el cambio de IV

por el inverso del

cambio en P1.

Figura 6c: ESSIV impide que

el posible atacante calcule el

IV porque no conoce la clave

secreta K.

Figura 7: El modo de encriptación LRW no uti-

liza recursión. Evitar el tipo de ataque ECB

(Figura 4) añadiendo blancos. El factor de blan-

queo se calcula haciendo referencia a la posi-

ción en el disco duro de n y a la clave secreta K.

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

Las marcas de agua pueden contenerhasta 5 bits de información [1]. Un ata-cante podría añadir marcas de agua a uncorreo electrónico, que posteriormentese lo enviaría a la víctima para averiguardónde almacena los mensajes. Las mar-cas de agua también podrían ser añadi-das a ficheros MP3, imágenes u otrosficheros que podrían enviarse a losmiembros de una empresa. Esto haríaposible atacar la privacidad de unusuario. Sin tener que desencriptar, elespía podría acceder a la información deldisco de la víctima.

El generador ESSIV (Encripted Salt-Sector IV) IV impide esto. Las marcas deagua suponen una relación simple entrelos IVs de dos sectores contiguos. Esto esverdad en el caso simple; el IV para elsector n es seguido por el IV n + 1 parael siguiente sector. ESSIV añade comple-jidad a la secuencia, haciendo imposiblepara un atacante calcular la secuenciasin saber al menos parte de la clave se-creta (véase el cuadro “ESSIV”).

Blanqueo de DatosSeguro que se estará preguntando porqué MD-Crypt utiliza una mezcla derecursión y manipulación basada en laposición del disco duro, cuando ésta últi-ma sería suficiente por sí misma. Hayuna razón histórica para utilizar CBC: esuna solución probada y comprobada ysus propiedades han sido investigadaspor muchísima gente. Las alternativas,que recaen por completo en el númerode bloque, son jóvenes en términos crip-tográficos.

LRW es un modo de encriptación queintegra el número de bloque en una ruti-na de encriptación de un modo sencillo yeficaz. Primero, LRW calcula un factorde blancura basado en la clave secreta y

en el número de bloque. Luego añade elfactor de blancura al texto en claro yencripta la suma, antes de añadir el fac-tor de blancura de nuevo (Figura 7).Estos dos pasos son conocidos como pre-blanqueado y postblanqueado. Ligan eltexto cifrado con su posición en el discoduro para obtener resultados deencriptación diferentes para textos enclaro idénticos almacenados en difer-entes partes del disco.

LRW elimina las vulnerabilidadesconocidas asociadas con CBC mientrasmejora el rendimiento. Como CBC no seadapta bien en entornos multiproce-sadores, ya que cada paso recursivo estábasado en los resultados de paso previo,LRW no puede utilizar múltiples proce-sadores paralelos. El autor de LUKS, quetambién es el coautor de este artículo,Clemens Fruhwirth, ha implementado ycomprobado LRW para DM-Crypt, y supublicación es inminente.

Frustrado por el KernelActualmente, LRW no está disponiblepara DM-Crypt. El diseño de gestión dela memoria alta/baja de Linux hace queel módulo del kernel procese más de dosáreas altas de memoria. La imple-mentación LRW está basada en un inten-to genérico de reimplementación deScatterwalk (parte de la Crypto-API),que sería capaz de acceder a un númeroarbitrario de áreas de la memoria altasimultáneamente. Debido a las restric-

ciones actuales a dos áreas de memoria,una implementación genérica no con-seguiría lo que el autor pretende y esto lohabría llevado a abandonarlo porfrustación [8].

Por ahora, DM-Crypt es el modo decifrado más seguro implementado deCBC-ESSIV, al menos hasta que alguienque no le interese en exceso las inter-minables e inútiles discusiones de la listade correo del kernel [9] avance y desa-rrolle una variante adecuada deScatterwalk. Los autores de este artículoestarán encantados de verlo. Los traba-jos matemáticos para LRW han sidocompletados e implementados para ajus-tarse a los estándares.

La InstalaciónPara utilizar DM-Crypt, cryptsetup yLUKS se necesitan unos cuantos módu-los del kernel y algunas herramientas.Las opciones para DM-Crypt están ocul-tas en Device Drivers | Multi-device sup-

port | Device mapper support en la con-figuración del kernel y bajo Crypt target

support (Figura 8) en la misma sección.Téngase en cuenta que es necesarioseleccionar Prompt for development and/

or incomplete code/drivers bajo Code

maturity level options, de otro modoCrypt-Target permanecerá oculto.

Como DM-Crypt se basa en las fun-ciones de Crypto-API, hay que selec-cionar al menos un algoritmo enCryptographic options | Cryptographic

DM-Crypt • ADMINISTRACIÓN

73Número 14W W W . L I N U X - M A G A Z I N E . E S

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.

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

/dev/loop0 verysecret

15 Enter LUKS passphrase: ******

16 key slot 0 unlocked.

17 $ mkfs.xfs /dev/mapper/

18 verysecret

19 amount /dev/mapper/verysecret

/mnt

20 $ umount /mnt

21 $ cryptsetup luksClose

verysecret

22 $ cryptsetup luksAddKey

/dev/loop0

23 Enter any LUKS

passphrase:******

24 key slot 0 unlocked.

25 Enter new passphrase for key

slot: ******

26 $ cryptsetup luksDelKey

/dev/loop0 0

27 losetup -d /dev/loop0

Listado 1: cryptsetup-LUKS

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

algoritmo de encriptación en concreto.Para realizar el formateo es necesario eldispositivo de bloques y opcionalmenteun fichero, cuyo contenido se usará comocontraseña. LUKS hace referencia a estefichero como el fichero de clave. Los si-guientes parámetros son útiles:

• -c especifica el algoritmo y para lasversiones recientes del kernel, elmodo de encadenamiento y el gene-rador IV. Estos tres parámetros debenser separados por guiones (por defec-to: aes-cbc-plain). La variante mássegura actualmente es aes-cbc-essiv:sha256.

• -y le indica a cryptsetup que pida dosveces la contraseña para evitar errorestipográficos. Este parámetro no tienesentido con un fichero de claves.

• -s especifica la longitud del la clave deencriptación.

En la línea 5 del Listado 1, se puedeobservar la llamada completa. TecleandoYES en la línea 11, el usuario confirmaque los datos existentes podrían perderse.Luego tendrá que establecer la primeracontraseña (línea 12).

Correspondencias con elSistema de FicherosPara usar el sistemas de ficheros que seacaba de preparar, cryptsetup-LUKStiene que establecer una corresponden-cia entre el dispositivo físico de bloquesy el dispositivo virtual de bloques. Laacción luksOpen se encarga de esto(línea 14). Si la contraseña está almace-nada en un fichero (véase luksformat),cryptsetup necesita el parámetro -d

seguido del nombre del fichero de laclave. En nuestro ejemplo, el usuarioteclea una contraseña (línea 15).

Cryptsetup-LUKS crea automática-mente el dispositivo de bloques con elnombre específico de verysecret en/dev/mapper/. La llamada a mkfs.xfs enla línea 17 pone un sistema de ficherosXFS en el dispositivo. El resultado puedeser montado como se muestra en la línea19. No hay que olvidarse de desmontarla partición antes de aplicar los cambios(línea 20).

LimpiandoDespués de concluir el trabajo, habríaque deshacer la correspondencia paraevitar tener abierta una puerta a los ata-cantes y espías. La acción luksClose seencarga de esto.

Como se mencionó anteriormente,cryptsetup-LUKS puede manipular múlti-ples contraseñas por dispositivo de blo-ques. Esto facilita el cambio de una con-traseña comprometida sin tener quereencriptar los datos. La luksAdd Key

espera el dispositivo físico de bloquescomo parámetro (Listado 1, línea 22).Tras teclear cualquier contraseña actual,la herramienta solicita una nueva con-traseña adicional. También se puedeespecificar un fichero de claves.

La acción luksDelKey (línea 26) elimi-na una contraseña existente. Esperacomo parámetros el dispositivo físico debloques y la posición de la clave que va aser eliminada. Esta última es donde seencuentra almacenada la clave. Comocryptsetup-LUKS gestiona hasta ochocontraseñas por defecto, las posicionesde las claves van desde 0 hasta 7. El pro-grama solicitará la posición donde se vaa almacenar la contraseña cuando seinvoque a luksOpen (línea 16) oluksAddKey (línea 24). �

API (Figura 9). Los autores recomiendanAES. Lo único que se necesita es un algo-ritmo de encriptación; la herramientacryptsetup-LUKS maneja las operaciones,como el código hash para generar la clavea partir de la contraseña.

La mayoría de las distribuciones Linuxestablecen estas opciones por defecto. Sepuede introducir modprobe dm-crypt paraprobar. El comando debería funcionarbien. DM-Crypt será un componente ofi-cial de Linux con el kernel 2.6.4; el gene-rador ESSIV IV necesita al menos la ver-sión del kernel 2.6.10.

Los componentes de LUKS estándisponibles para descargarse desde [4].Hay paquetes para Debian, Gentoo, Susey Red Hat; cryptsetup-luks es un compo-nente estándar de Fedora 4. Los usuarioscon otras distribuciones pueden seguir elprocedimiento estándar, ./configure &&

make && make install para compilarlo einstalarlo, suponiendo que Libpopt,Libgcrypt (Versión 1.1.42 o posterior) yLibdevmapper estén instaladas.

cryptsetup-LUKScryptsetup soporta varias acciones.Corresponde al tipo de herramientas quepermiten a los administradores de Linuxasignar sistemas de ficheros a dispositivosde bloques y montar estos sistemas deficheros. El Listado 1 muestra un ejemplo.Para mantenerlo lo menos invasivo quesea posible, la llamada a dd en la línea 1crea un contenedor de 50 MByte, que sehabilita como un dispositivo de bloquesusando el bucle de la línea 4.

Inicialmente, la acción más importantede cryptsetup es luksFormat, que preparael dispositivo de bloques (en nuestro casoel dispositivo loopback) para ser usadopara la encriptación. Este es también elpaso donde hay que decidirse por un

ADMINISTRACIÓN • DM-Crypt

74 Número 14 W W W . L I N U X - M A G A Z I N E . E S

[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 ker-

nel sobre los cambios de Scatterwalk:

http://lkml.org/lkml/2005/1/24/54

RECURSOS

Figura 9: Como DM-Crypt se basa en Crypto-

API para la encriptación, necesita selec-

cionar al menos un algoritmo en Crypto-

graphic options | Cryptographic API. La

mejor opción por ahora es el algoritmo AES.

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

7373ISSUE 52 MARCH 2005W W W . L I N U X - M A G A Z I N E . C O M

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 utili-

dad 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 docu-

mentos.

Educación 82

En nuestra segunda entrega sobre moodle,

vemos como utilizar la plataforma como profe-

sores 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.

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

yammi-1.2.2), e introducir el comando

./configure para crear los ficheros. Poste-

riormente, 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. Seguida-

mente puede arrancarse Yammi intro-

duciendo el nombre del programa en una

ventana terminal.

¡Qué no pare la música!Cuando se arranca por primera vez el pro-

grama, pregunta por el directorio con las

pistas. Yammi soporta canciones en for-

mato MP3, OGG y WAV (Figura 1). La lec-

tura 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 con-

tiene el campo de búsqueda y los controles

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, Noa-

tum y ArtsPlayer. Tras seleccionar el repro-

ductor 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.

76

LINUX USER • KTools: Yammi

76 Número 14 W W W . L I N U X - M A G A Z I N E . E S

La base de datos de música Yammi

puede administrar incluso la mayor

de las colecciones de canciones y

ofrece una arquitectura flexible que per-

mite 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, yammi-

1.2.2.tar.gz. Tambien se necesitan la libre-

rí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 pre-

ciso 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.

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

CAJA DE MÚSICABúsquedas rápidas y divertidas fiestas con la base de datos de música Yammi

CAJA DE MÚSICA

En esta sección examinamos herramien-

tas 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

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

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

77

KTools: Yammi • LINUX USER

77Número 14W W W . L I N U X - M A G A Z I N E . E S

[F2] salta a la pista siguiente, [F3] hacia

atrás y [F4] detiene la reproducción.

Yammi tiene una característica de

autoreproducción muy interesante: De

forma similar a los iPods de Apple, el pro-

grama reproduce pistas aleatoriamente

desde una lista, sacando las viejas y olvi-

dadas melodias de una colección.

Siempre muestra la ultima pista y las

cuatro siguientes en la lista de reproduc-

ción. Si se prefiere no escuchar una de esas

pistas, se presiona [F8] para eliminarla.

Busca y EncuentraPresionando 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 selec-

cionada al final de la lista de reproducción;

[F6] lo coloca para hacer que sea el siguien-

te en reproducirse; y haciendo doble click

sobre la pista, se reproduce de inmediato.

El menú contextual para cada pista con-

tiene unas cuantas opciones para selec-

cionar 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

artista, las

pistas del

mismo

álbum o

canciones

con el

mismo

nombre. El

programa

resalta en

verde las

canciones

que ya se

han repro-

ducido,

mientras

que la

selección actual se resalta en rojo. Esto

hace que sea más fácil seguir la pista a las

canciones en una fiesta.

Yammi también lee pistas de CDs que no

se encuentran en la base de datos. Si se

selecciona Database | Scan removable

Media…, el programa pedirá una ruta al

CD y añadirá todas las pistas del disco a la

base de datos. Si más tarde se desea repro-

ducir una de esas pistas, el software pedirá

que se introduzca el CD.

Ordenadito y limpioSi 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ónYammi puede personalizarse para que

refleje las preferencias de cada usuario,

permitiendo, además, añadirle funcionali-

dades mediante la inclusión de plugins.

Por ejemplo, si no nos gusta la disposición

de la lista de reproducción, puede selec-

cionarse 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 soft-

ware de grabación K3b. También existe un

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 FiestaComo 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 selec-

cionada.

ConclusionesYammi cumple lo prometido: es simple y

compacto. Los controles del programa

parecen estar bien diseñados y son intui-

tivos para los nuevos usuarios. Una fun-

ció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 col-

gara 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. �

Figura 2: El programa presenta las pistas que emparejan la búsqueda actual

con las mejores coincidencias primero.

[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

RECURSOS

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

Trayer podría ser muy útil si se desean

mantener esas caracteristicas tan venta-

josas, 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 consi-

derable 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ónSi 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 insta-

lación y copiar manualmente el fichero

trayer a la carpeta en la que se almace-

nan los binarios compilados manual-

mente.

Los usuarios con Suse Linux 9.3

pueden sufrir algunas dificultades en la

construcción de los binarios, como

ocurre con los ficheros de encabeza-

miento desde los paquetes de desarrollo

que, con esta distribución ya, no con-

tienen las definiciones requeridas [3].

Para remediarlo, es necesario actualizar

la librería GTK2. Suse Linux almacena la

librería en un paquete adicional de

78

LINUX USER • Desktopia

78 Número 14 W W W . L I N U X - M A G A Z I N E . E S

Los 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 fun-

ciones 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 distribu-

ciones principales de escritorio, añaden sus

propios applets de acceso rápido.

Figura 1: Los applets de Gnome y KDE resi-

den en la bandeja.

Trayer

BANDEJA DEENTRADA

Trayer

BANDEJA DEENTRADA

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 encuen-

tran 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 dependen-

cia. Para volver a la versión GTK2 previa

sin ningún problema, deshabilite las

fuentes añadidas. YaST accederá luego a

los paquetes originales.

Añadidos para Suse 9.3

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 fun-

cionalidad, tal vez Trayer sea la respuesta. POR HAGEN HÖPFNER

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

79

Desktopia • LINUX USER

79Número 14W W W . L I N U X - M A G A Z I N E . E S

GNOME para la versión 2.7.5. Tras

actualizar el sistema (ver el cuadro ti-

tulado 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ónUno 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 ele-

mento 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 pan-

talla, 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 Win-

dowMaker. 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 bot-

tom para el parámetro edge envían a

Trayer a la izquierda, derecha o a la

parte inferior de la pantalla respectiva-

mente.

Si se desea que Trayer esté en la

esquina izquierda de la parte inferior

de la pantalla, hay que usar las si-

guientes 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

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 combi-

nació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 transparen-

cia; 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 selec-

cionado.

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.

ConclusionesTrayer 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 ven-

tanas. 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 fun-

cionaron. Los administradores de ven-

tanas que dibujan marcos alrededor de

cada ventana (TWM, por citar un ejem-

plo) son teóricamente idóneas para usar-

las con Trayer, aunque un marco alrede-

dor de la bandeja no es la idea que tienen

algunos de una aspecto elegante. �

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.

[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

RECURSOS

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

documentos entre diversas

plataformas.

En el mundo de Linux y

Unix, otros formatos tales

como PostScript y DVI jue-

gan papeles importantes.

Existen un determinado

número de visores de docu-

mentos basados en Linux.

Gnome incluye actual-

mente como visor estándar

para esos ficheros Evince

(Figura 1) [3], una com-

pleta utilidad. También

puede manejar formatos

gráficos tales como TIFF y DjVu, los

cuales típicamente son el resultado de

documentos de texto escaneados.

El ProgramaSi se usa Evince como visor, lo más

común es arrancar el programa en el

contexto de un fichero que se necesita

visionar. Lo habitual es arrancar

Evince mediante clicks en un admin-

istrador de ficheros, antes que intro-

duciendo evince, seguido por el nom-

bre del fichero, desde la línea de

comando.

Evince implementa características de

usabilidad realizando sus tareas de ma-

nera conveniente y eficiente, en vez de

confundir al usuario con una sobredosis

de opciones. En la ventana del programa

hay una caja de herramientas junto al

menú con botones, permitiendo al

usuario desplazarse a través del fichero o

aumentar la presentación. El documento

ocupa la mayor parte de la ventana del

programa. Una columna en el margen

izquierdo de la pantalla ofrece una pers-

pectiva basada en miniaturas de las pági-

nas en el documento (Figura 2).

80

LINUX USER • Evince

80 Número 14 W W W . L I N U X - M A G A Z I N E . E S

De 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 despa-

chos no parece que vayan a disminuir. Sin

embargo, queda aún alguna esperanza:

determinados libros, especialmente docu-

mentación técnica, se encuentran actual-

mente disponibles en formato electrónico,

alternativamente o exclusivamente, según

sea el caso. Documentos en Portable Doc-

ument 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

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

POR MATTHIAS WARKUS

El Visor de Documentos Evince

VISOR VERSÁTIL

Después de trabajar como tra-

ductor 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 efec-

tos del cambio de personalidad

que se producen al estudiar

filosofía.

EL AUTOR

Figura 1: El GUI de Evince presenta las necesidades más

básicas.

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

81

Evince • LINUX USER

81Número 14W W W . L I N U X - M A G A Z I N E . E S

Si es necesario, la barra de tareas puede

presentar la estructura del documento

como un árbol expandible. Ambas

opciones suponen que el documento con-

tiene 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á presen-

tando 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 ayu-

das 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

orientados gráficamente de muy rápida-

mente. 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 fun-

ciones 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.

HerramientasAunque 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 compara-

ble a la función que posee Adobe Reader.

El diálogo “Search” no presenta una ven-

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

ConclusionesCon 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 pre-

sentar 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. �

[1] Adobe: http://www.adobe.com

[2] PDF: http://en.wikipedia.org/wiki/PDF

[3] Evince: http://www.gnome.org/

projects/evince/

RECURSOS

Figura 4: Evince soporta características PDF tales como protección

con contraseña.

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

documento.

Figura 3: Al igual que Firefox, Evince tiene

un cuadro de búsqueda integrado en la

parte inferior de la pantalla.

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

82

LINUX USER • Educación

82 Número 14 W W W . L I N U X - M A G A Z I N E . E S

En el número anterior hicimos una

primera presentación de la

plataforma educativa libre moo-dle, de su historia y de las teorías cons-

tructivistas 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 comparti-

mentarlo; 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 accesibili-

dad?), 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 conse-

cuencia secundaria de la escritura fue

que se creó un mundo humano intempo-

ral, en el que era y es posible el diálogo

con los sabios de todos los tiempos, con

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 mer-

caderes, pero tiene consecuencias socio-

ló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 reali-

dad, pero no lleva inherente una dimen-

sión ética: somos nosotros como ciu-

dadanos libres, como sujetos

autónomos, los que debemos

plantearnos un uso ético y educativo.

¿Qué queremos hacer con esta tec-

nología que introducimos en nuestras

aulas? Intentar dar una respuesta puede

ser muy bien el hilo conductor de nues-

tros artículos.

Usos en una clase realconstructiva¿Hasta qué punto es útil una plataforma

en un centro educativo? Lo diré pronto y

de manera directa: más allá quecualquier herramienta especializada, almismo nivel que el editor de textos y elnavegador, la plataforma es nuestra prin-

cipal baza en un aula. Saber sacarle par-

tido a nuestro LMS, con recursos adapta-

dos 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 humilde-

mente lo evidente, esta sección ya ha

sido esbozada de forma magistral y sen-

cilla por amigos como Joan Queralt Gil

(que publicó en [1] Los diez deseos) o

Aníbal de la Torre (en diversos fragmen-

tos de su blog [2] y de sus participa-

ciones en numerosas listas de distribu-

ción). Como me han permitido amable-

mente 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 elprofe pueda plantear temas y los estudi-antes los contesten, o que cada estudian-te inicie un tema y los conteste quien

En nuestra segunda entrega sobre moodle, vamos a aprender a uti-

lizar la plataforma como profesores y alumnos; examinaremos tam-

bién varios ejemplos prácticos de explotación en el entorno de

clases presenciales. POR JUAN RAFAEL FERNÁNDEZ GARCÍA

En nuestra segunda entrega sobre moodle, vamos a aprender a uti-

lizar la plataforma como profesores y alumnos; examinaremos tam-

bién varios ejemplos prácticos de explotación en el entorno de

clases presenciales. POR JUAN RAFAEL FERNÁNDEZ GARCÍA

La plataforma educativa Moodle

CLASES VIRTUALES,CLASES REALES

La plataforma educativa Moodle

CLASES VIRTUALES,CLASES REALES

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

83

Educación • LINUX USER

83Número 14W W W . L I N U X - M A G A Z I N E . E S

quiera o, elcaso máscomún, quetodo el mundopueda iniciar ycontestartemas. Hay laposibilidad deadjuntararchivos a lasaportaciones(los archivosde imagen semuestran, losde textoquedan indica-dos con unicono). Losforos tambiénse pueden usarpara hacer pre-sentacionespersonales,opinionessobre untema, 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

tipo de actividad: grupos de trabajo o

discusión, etc.). Aquí se produce una

curiosa paradoja: un invitado ve el lis-

tado completo de cursos, pero cuando

nos identificamos, el sistema nos pre-

senta ú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). Pul-

samos 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 com-

pleto: 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 pul-

samos en agregar actividad y selec-

cionamos «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 conse-

jos 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 moo-dle), 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 obligato-

ria» 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 aporta-

ciones.

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 agre-

gador; en la figura 5 vemos cómo liferea

nos presenta las noticias generadas

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 par-

ticipá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 presencial-

mente, 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 dis-

cusión; si lo que se busca es que se

llegue a conclusiones, se puede acom-

pañ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 docu-

mento común.

Su solución: «Tienes que montar tan-tos foros como equipos quieras [foros porgrupos]. Vale la pena asignar a qué grupova cada participante y aclararles muchoqué trabajo tienen que hacer y qué pro-ceso tienen que seguir. Por ejemplo, cincoestudiantes tienen que recoger informa-ción sobre las temperaturas máximas ymínimas de treinta ciudades europeasdurante una semana y hacer un gráfico.Se le asignan seis ciudades a cada uno y,cuando tienen los datos, los cuelgan en elforo de su grupo. Entonces, con todas losdatos a la vista, cada estudiante hace sugráfico en una hoja de cálculo y lo mues-

Figura 1: Cómo encontrar

más cursos alojados.

Figura 2: Listado completo de cursos.

Figura 3: Autoinscripción en un curso

abierto.

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

moodle el diario se ha convertido en unamodalidad de la tarea, como Tarea de

texto en línea]. Se podrán hacer tantosdiarios como queramos, pero cada unode ellos tiene que pedir sólo una cosa(p.ej.: explica qué es la fotosíntesis, diqué te parece nuestro sistema parlamen-tario, haz una redacción con el tema:«Recuerdos de la niñez»). El estudianteescribirá en una pantalla y sólo con unclic lo dejará en el sistema a disposicióndel profesor/a que se lo leerá, le harácomentarios (no una corrección esmer-ada) y lo puntuará (8/10). Aquí sólo elestudiante ve la corrección, pero no puedever los trabajos de los compañeros ni lasotras correcciones.»

Joan destaca correctamente una carac-

terí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] profun-

diza en el tema del cuaderno personal

del alumno y expone el siguiente ejem-

plo 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 dema-

siado 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 tra-

bajo; 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 correc-

ción en alguna página de actividad

creadas por ellos, usando un color dis-

tinto para resaltar mi aportación.»

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 do-

cumentos de forma cooperativa, es decir,

que todos tienen permiso para modificar

un texto que se ha creado en la

plataforma. La documentación de moo-dle, [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-

sando en la pestaña «Edición» y uti-

lizando 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.6incluirá 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 crearuna tarea. El estudiante sabe las tareasque tiene pendientes, tiene las instruc-ciones por hacer el trabajo y la hace con

tra. El grupo puede escoger el mejor detodos y presentarlo al profe.»

Quizás tenga sentido el foro como

momento de la discusión, pero posterior-

mente 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 montarun glosario. En un glosario los estudian-tes podrán escribir definiciones que elprofe puede (o no) revisar y publicar.Después las «fichas» quedan a la vista detodo el mundo para ser consultadas y sepodrán adjuntar ficheros de imágenes.Por ejemplo, queremos reunir biografíasde poetas de la generación del 56: cadaestudiante busca información sobre un/apoeta y lo escribe en una entrada delglosario y añade una foto digital (encon-trada en internet), el profe las revisa y, sison correctos, acepta la publicación. Losestudiantes pueden consultarlas pororden de creación, por orden alfabético ypor 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 estudianteUn 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 pro-

pongo, que me la envíen y yo voy a

devolverles un comentario.

Su solución: «Tienes que hacer undiario [Nota: en las nuevas versiones de

LINUX USER • Educación

84 Número 14 W W W . L I N U X - M A G A Z I N E . E S

Figura 4: Configuración de un foro de dis-

cusión.

Figura 5: Un agregador recoge las noticias

de las plataformas.

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

un programa aparte (OOWriter, OOCalc,Gimp, etc.) y la guarda en su ordenador.Cuando considera que la tiene acabadasólo tiene que pulsar el botón «Explorar»para localizarla en su disco duro y con elbotón «Enviar» dejarla en el sistema adisposición del profe. Éste la abre, lamira y la valora (correcto, bien, 7, etc.).Esta valoración es el único retorno queencuentra el estudiante. Hay la posibili-dad, aun así, de enviarle un email.»

Bueno, como moodle avanza, ha

surgido un nuevo medio de comuni-

cació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 mon-tar un foro. Los foros permiten adjun-tar ficheros, de tal modo que unestudiante hace el trabajo encomen-dado con un programa aparte(OOWriter, OOCalc, Gimp, etc) y loguarda en su ordenador. Cuando lotiene hecho va al foro y hace una inter-vención del tipo: «este es mi trabajo, aver qué os parece» y adjunta su ficherosólo pulsando los botones «Explorar» y«Enviar». Este archivo adjunto queda ala vista de todos los participantes quele podrán responder con críticas oideas. El profe, si así lo desea, le puededevolver el archivo totalmente co-rregido adjuntándolo también en surespuesta.»

Una alternativa es que los estudian-

tes envíen sus tareas y el profesor las

cuelgue en una carpeta como

recursos. O bien crear un taller.

Pizarra, periódico y libroOtro tipo de recursos tiene que ver con

la posibilidad de presentar a los

alumnos materiales o apuntes, textos,

gráficos, etc.

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 tienesque subir el fichero al sistema,(preferible en formato PDF [se refiere aun formato que pueda ser reconocidopor cualquier sistema operativo y quegarantice la estabilidad del con-tenido]), a través de la opción«Ficheros» (…) Cuando clicas verásqué ficheros o archivos tienes guarda-dos en el sistema dentro de tu curso; sino hay ningún fichero puedes subirlospulsando el botón «Enviar un fichero»que abre un cuadro para localizarlo entu ordenador. Cuando lo tengas a lavista selecciónalo con un clic y pulsa«Abrir», aparecerá el nombre y la rutaen pantalla, si es correcto pulsa«Enviar» y se enviará al sistema. Unavez esté en moodle ya podrás crear unrecurso de tipo fichero que, te permi-tirá escoger entre los diferentes ficherosde tu curso. Cuando esté preparado elestudiante, haciendo un clic sobre esterecurso, accederá al contenido en laparte 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 lamemoria un 10% de lo que leemosfrente al 90% de lo que hacemos (si lohabías leído antes es probable que yalo hubieras olvidado, verdad? =:-)»

Una alternativa sería crear los docu-

mentos 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, opcional-

mente, tablas de rama o de con-

tenidos, cada página contiene algún

tipo de contenido y, por lo general, ter-

mina 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…El espacio nos ha obligado a posponer

la conclusión de este repaso a los posi-

bles ejemplos de uso pedagógico de la

plataforma hasta el siguiente número;

en él exploraremos el estado de moo-dle con respecto a los recursos multi-

media, o cómo se integran varias he-

rramientas de trabajo (por ejemplo el

módulo para HotPotatoes o para

Webquest) y de seguimiento del pro-

greso de los alumnos (hablaremos de

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 moo-dle en el cumplimiento de los están-

dares educativos. Creo que los temas

son interesantes, nos vemos el mes

que viene. �

Educación • LINUX USER

85Número 14W W W . L I N U X - M A G A Z I N E . E S

Figura 7: Ejemplo de debate en un foro.

Figura 6: Escribiendo en un wiki.

[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 per-

sonal 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

RECURSOS

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

86

LINUX USER • Línea de Comandos

86 Número 14 W W W . L I N U X - M A G A Z I N E . E S

El 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 empaque-

tar 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 coman-

dos de Linux ofrecen al usuario de la línea

de comandos.

Empaquetado fino con“gzip”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 exten-

sió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 com-

primirá un fichero de manera más efi-

ciente si contiene patrones que se repiten

frecuentemente. No funciona bien para

los ficheros comprimidos que usan for-

matos 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 prede-

terminado es -6. Si se quiere cambiar

Un escueto comando es todo lo

que se necesita para empaque-

tar los datos o extraerlos de un

archivo. POR HEIKE JURZIK

gzip, bzip2 y tar

PAQUE-EXPRESS

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

Listado 1: CompresiónComparada

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á oca-

siones cuando te enfrentes a situa-

ciones en las que un conocimiento prác-

tico 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 termi-

nales de texto.

Línea de Comandos

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

87

Línea de Comandos • LINUX USER

87Número 14W W W . L I N U X - M A G A Z I N E . E S

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 tra-

bajo, informa al usuario para asegurarse

de que se sepa que se está sobreescri-

biendo 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 pagi-

nadores less o more para verlos. Co-

rriendo 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:

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, Rápido, Mejor:bzip2La herramienta bzip2 emplea un algorito

de compresión diferente, lo que hace

que comprima los ficheros más efectiva-

mente. El listado 2 muestra una compa-

rativa entre gzip y bzip2. Adicional-

mente, bzip2 posee un modo de recu-

peración. En la compresión, la he-

rramienta 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 desempa-

quetar 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 sim-

plemente 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 ten-

drí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.

Para cambiar el predeterminado, se con-

figura nuevamente la variable de

entorno BZIP2 añadiendo a ~/.bashrc

lo siguiente

export BZIP2="-6"

Para desempaquetar un fichero com-

primido, hay que establecer el

parámetro -d de bzip2 o usar la her-

ramienta especial de desempaquetado

bunzip2. Al igual que gzip, bzip2 ofrece

alguna protección contra la sobreescri-

tura que inadvertidamente se produce

en los ficheros existentes, pero en con-

traposició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 compor-

tamiento.

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.

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

Listado 2: gzip y bzip2Comparados

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

Cuando tar incluye el nombre de la car-

peta, pueden manejarse directorios y sub-

directorios completos de la misma mane-

ra, en lugar de especificar

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 posibili-

dad. El parámetro --rsh-command tam-

bié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 -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,

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)

Si se prefiere usar

bzip2 en lugar

de gzip

con tar,

reem-

plazar

la

opción

-z en el

comando

precedente

con -j:

tar -cvjf U

archive.tar.bz2 fichero(s)

Pueden establecerse los parámetros -z y

-j apropiadamente cuando se desempa-

queta 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. �

En el ArchivoEl 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 adminis-

tració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 concate-

nar al fichero usando la opción -r.

tar -rf archivo.tar file

PAaa desempaquetar un archivo, se rea-

liza 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 desempaque-

tar 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.

LINUX USER • Línea de Comandos

88 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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.

LAAUTORA

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

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?

Me gradué como ingeniero eléctrico

en la Universidad de Kaiserslautern, Ale-

mania, y he trabajado en la adminis-

tració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.

¿Cómo empezó Knoppix?

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 si-

guiendo 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-

KK

LM

KK

LM

El mundo según el creador de Knoppix, KlausKnopper

KLAUS KNOPPER

89

Entrevista Klaus Knopper • COMUNIDAD

89Número 14W W W . L I N U X - M A G A Z I N E . E S

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 sugeren-

cias. Pero hay de 3 a 5 personas que re-

gularmente 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 distribu-

ciones basadas en Knoppix a menudo

retorna a la edición descargable de ésta,

siempre que sea legal y técnicamente

posible.

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?

El espacio era siempre la última fron-

tera 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 siem-

pre 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 he-

rramientas de rescate para el CD, y todo

KK

LM

namiento en el trabajo, le llamé Knop-

pix, a falta de un nombre mejor. Se pu-

blicó 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.

¿Cómo decides qué incluyes en

Knoppix?

El contenido está altamente influen-

ciado por lo que realmente necesito para

un trabajo de formación o de consul-

torí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.

¿Dispones de un equipo de ayu-

dantes, como otros proyectos de Soft-

ware Libre? ¿O por el contrario trabajas

más bien en solitario?

Debo admitir que usualmente tra-

bajo solo, simplemente debido a mis

extrañas horas de trabajo y al hecho de

KK

LM

KK

LM

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

Page 90: Linux Magazine - Edición en Castellano, Nº 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 tarje-

tas gráficas el lanzar drivers semi-pro-

pietarios, con licencias restrictivas en

mayor o menor medida, pero que no

pueden ser consideradas “de libre dis-

tribució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 pen-

sarán que el motivo de estas licencias es

ocultar ciertas cosas, como optimiza-

ciones especiales para benchmarks

específicos que hacen que la gente com-

pre 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 dri-

vers que se ejecutan a nivel de kernel, y

son incompatibles con la licencia de dis-

tribució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.

¿Cuál es la postura de estas grandes

compañías de hardware respecto a tu

labor?

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. Desafortunada-

mente, 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 fun-

ciona con una arquitectura cerrada

dependiente de un driver propietario.

Mi consejo es simplemente devolver

hardware que no funcione con el kernel

KK

LM

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.

¿A dónde se dirige? Colocar Knoppix

en un DVD parece un cambio realmente

grande. ¿Tiene otros cambios en mente

para el futuro?

Le estoy dando vueltas a añadir algu-

nas 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 ver-

sió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 lanza-

mientos debido a que estoy también

involucrado en otros proyectos.

¿En qué ocupas la mayor parte del

tiempo con Knoppix? ¿Puedes comen-

tarnos brevemente un ciclo de actua-

lización típico? ¿Qué tiene que ocurrir

para que edites una nueva versión de

Knoppix?

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 actua-

lizació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

KK

LM

KK

LM

lo demás para el DVD. Iremos encon-

trando 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 per-

sonalmente prefiero LaTeX a cualquier

otro procesador de textos basado en

interfaz gráfica, OpenOffice era simple-

mente más importante a la hora de

mostrar las cualidades ofimáticas de

Knoppix.

Knoppix tiene que estar al corriente

de diferentes tipos de hardware. ¿Traba-

jas en ocasiones directamente con HP,

Intel y otras grandes compañías?

Me gustaría que fuese así, sin

embargo, las grandes compañías no suelen

ser demasiado cooperativas y a veces pare-

cen estar esperando hasta que alguien

reinventa la rueda y escribe un driver

mediante ingeniería inversa, o que simple-

mente 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 encon-

tramos 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 fabri-

cantes 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 pu-

blica en kernel.org, y algunos módulos adi-

cionales para ciertos componentes hard-

ware más nuevos que aún no han entrado

en la rama principal del kernel. Con esto,

afortunadamente, mandamos como men-

saje a los fabricantes de hardware que

deberían tratar de seguir los estándares

abiertos y documentar sus productos ade-

cuadamente. 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, inse-

guro y no distribuible, para el kernel.

KK

LM

COMUNIDAD · Entrevista Klaus Knopper

90 Número 14 W W W . L I N U X - M A G A Z I N E . E S

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

dedicar más tiempo y esfuerzo para

sacar la edición dentro de un cierto ca-

lendario. 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.

Cuéntanos algo más acerca de estas

ediciones especiales de pago. ¿Quién

encarga estas ediciones y por qué?

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 espe-

cial, y esto por supuesto es trabajo que

ha de pagarse como cualquier otro

proyecto de software comercial. El tra-

bajo suele licenciarse bajo las condi-

ciones GNU. (Debe ser así, ya que se

basa en Software Libre).

Los clientes que piden una versión co-

mercial 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 edi-

tor 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 cien-

tíficas, universidades o incluso proyectos

internacionales relacionados con la edu-

cación o la ciencia. Debido a la flexibili-

dad de GNU/Linux, existen numerosos

propósitos para Live CD’s especializa-

dos, 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 Knop-

pix que las distribuciones live que con-

tienen software propietario o de

demostración que no es “libremente dis-

tribuible 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

KK

LM

licencias del software que incluyo en

Knoppix.

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 actuali-

dad?

La alianza está tratando de estable-

cer 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 distribu-

ció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 dife-

rente. Ya es posible instalar Knoppix en

disco duro y actualizarlo desde los repo-

sitorios de Debian, pero en algunos

casos, debemos tener cuidado con prob-

lemas 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.

¿Quién está decidiendo esta lista de

paquetes principal de la DCCA? ¿Eres

parte del comité que vota qué incluir en

la lista principal?

Al igual que la mayoría de proyec-

tos de Software Libre, la DCCA ha

puesto en marcha una lista de correo de

desarrolladores donde todo el mundo

puede mandar sus sugerencias y discu-

tir qué paquetes deberían incluirse en

el grupo principal de paquetes. De

momento ha habido muy pocas dis-

putas al respecto. Probablemente

debido a que la gente de formación téc-

nica tiene bastante claro qué compo-

nentes son absolutamente necesarios y

cuales son opcionales. Debemos tener

KK

LM

KK

LM

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 soft-

ware 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 metapaque-

tes. En estos momentos, estamos dis-

cutiendo asuntos relacionados con los

paquetes del kernel, lo cual no es tan

sencillo como las cuestiones de con-

formidad 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 mantene-

dores de paquetes.

Con la gran cantidad de distribu-

ciones 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?

Knoppix se diseñó como un sis-

tema live (principalmente conmigo

mismo como usuario destino) para

desarrollar trabajo de verdad y produc-

tivo en ordenadores extraños, basado

en sistema Linux pre-instalado con una

rápida auto-configuración y gran facili-

dad de uso. Knoppix no es un mero

disco de demostración o una he-

rramienta de hackers. Otras distribu-

ciones tienen sus versiones live CD que

muestran (de manera simulada) el pro-

ceso 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 per-

manentemente. El software incluido en

Knoppix es usualmente utilizado en

varias distribuciones, aunque he inten-

tado 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. �

KK

LM

91Número 14W W W . L I N U X - M A G A Z I N E . E S

Entrevista Klaus Knopper • COMUNIDAD

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

¡Hazte con tus ejemplares atrasados!

#2

WWW.LINUX-MAGAZINE.ES

#3

#4

#6

#7

¡pídelos ya!

¡pídelos ya!

¡pídelos ya!

a go t a do

#5

#1

#9

#10

#8

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

[email protected]

¡No esperes a quese agoten!

el REPOSITORIOde conocimientos LINUX

#12

#13

#11

más COMPLETO

¡pídelos ya!

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

94

EVENTOS

94 Número 14 W W W . L I N U X - M A G A Z I N E . E S

LinuxWorld Conf.& ExpoMéxicoFecha: 14-17 Febrero

Ciudad: Ciudad de México.

Sitio Web:

www.linuxworldexpo.com

OSWC 2005Fecha: 15-17 Febrero

Ciudad:Málaga,España

Sitio Web:

http://www.opensource-worldconference.com

Festival Digital de AndalucíaFecha: 10-23 Abril

Ciudad:Málaga,España

Sitio Web:

http://www.festivaldigi-tal.org

Información de Contacto

DirectorPaul C. Brown

CoolaboradoresPaul C. Brown, Jose Manuel González Vida, JuanRafael Fernández, Pedro Orantes, José María Ruíz,Alberto Planas, Jose A. García, Ana Mª Ferreiro

TraductoresPaqui Martín Vergara, Paul C. Brown, AntonioRueda, Víctor Tienda.

MaquetaciónFrancisco Fernández

Diseño de [email protected]

Publicidadwww.linux-magazine.es/pub/

Para EspañaExpresando Comunicaciones [email protected].: (+ 34) 952 216 406Fax.: (+ 34) 952 217 115

Paul C. [email protected].: (+ 34) 951 010 556Fax.: (+ 34) 951 010 516

Para el Resto del MundoBrian Osborn [email protected] Tel.: (+49) 6509 910 495Fax.: (+49) 6509 910 497

Director EditorialPaul C. Brown

Jefe de ProducciónFrancisco Fernández

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

Precios Subscripción España: 49,50 €Europa: 59,90 €Resto del Mundo - Euros: 79,90 €Resto del Mundo - Dólares U.S.A.: $ 94,90

Tel.: (+34) 951 010 556Fax.: (+34) 951 010 516 [email protected]

Linux MagazineLinux New Media Spain, S.L.Avda. Juan López Peñalver, 2129590 - Campanillas Málaga ESPAÑA [email protected].: (+34) 951 010 556Fax.: (+34) 951 010 516

www.linux-magazine.es - Españawww.linux-magazine.com - Mundowww.linux-magazine.de - Alemania

Si bien se toman todas las medidas posibles paragarantizar la precisión del contenido de los artículos publi-cados en Linux Magazine, la editorial no se hace responsable de imprecisiones aparecidas en larevista. Asimismo, Linux Magazine no compartenecesariamente las opiniones vertidas por suscolaboradores 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 escrupu-losamente para confirmar que está libre de virus y errores.

Copyright y Marcas Registradas © 2004 Linux NewMedia Spain, S.L. Linux New Media Spain S.L. prohíbela reproducción total o parcial de los contenidos deLinux 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

Calendario de Eventos

Evento Fecha Ciudad Sitio Web

Linux Asia Conference & Expo 08-10 Febrero 06 Nueva Delhi, India www.technetra.com/linuxasia2006

Southern California Linux Expo 11-12 Febrero 06 Los Angeles,CA,EE.UU www.socallinuxexpo.org

LinuxWorld Conference & Expo México 14-17 Febrero 06 Ciudad de México,M. www.linuxworldexpo.com.

OSWC 2005 15-17 Febrero 06 Málaga,España www.opensourceworldconference.com

PyCon 2006 24-26 Febrero 06 Addison,Texas,EE.UU. www.python.org/pycon/2006

O'Reilly Emerging Technology Conference 06-06 Marzo 06 San Diego,CA,EE.UU. http://conferences.oreillynet.com/etech

UKUUG Spring Conference 2006 22-23 Marzo 06 Durham,Reino Unido www.ukuug.org/events/spring2006

LinuxWorld Conference & Expo Australia 28-30 Marzo 06 Sydney,Australia www.linuxworldexpo.com.au

LinuxWorld Conference & Expo Boston 3-6 Abril 06 Boston,MA,EE.UU www.linuxworldexpo.com

Festival Digital de Andalucía 10-23 Abril 06 Málaga,España http://www.festivaldigital.org

7º Fórum Internacional Software Libre 19-22 Abril 06 Porto Alegre,Brasil http://fisl.softwarelivre.org

III Jorn.Soft. Libre Univ.Cádiz 20-21 Abril 06 Cádiz,España http://osl.uca.es/jornadas/

LinuxWorld & NetworkWorld Canada 24-26 Abril 06 Toronto,Canada www.lwnwexpo.plumcom.ca

LinuxWorld Conference & Expo Italy 9-10 Mayo 06 Milan, Italia www.linuxworldexpo.it

LinuxWorld Conference & Expo SA 16-19 Mayo 06 ohanesburgo,S.África www.linuxworldexpo.co.za

LinuxWorld Conference & Expo Brazil 23-25 Mayo 06 Sao Paulo,Brasil www.linuxworldexpo.com

LinuxWorld Conference & Expo Japan 31 Mayo - 6 Junio 06 Tokio, Japón www.linuxworldexpo.com

6º Fórum Internacional Software Livre 4-6 Junio 06 Porto Alegre,Brazil http://fisl.softwarelivre.org

LinuxWorld Conference & Expo 5-7 Junio 06 Korea Seúl,Korea www.linuxworldkorea.com

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

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 serequiere 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 domiciliocada mes.

Si por cualquier motivo decides dejar de leer Linux Magazine, puedes cancelar tu subscripción en cualquier momento. Te abonaremos el preciode 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.

Page 96: Linux Magazine - Edición en Castellano, Nº 14
Page 97: Linux Magazine - Edición en Castellano, Nº 14

LINUX LOCAL

97Número 14W W W . L I N U X - M A G A Z I N E . E S

Andalucía

Logo Empresa Correo-e Web 1 2 3 4 5 6 7 8

Gesinfo [email protected] www.gesinfoweb.com � � � � � �

BitRock [email protected] bitrock.com � � � � � �

Properly Software [email protected] www.properly.es/site � �

GuadaGames [email protected] www.guadagames.com �

Exprecom [email protected] www.exprecom.com � � � � � � �

LINUX LOCALLeyenda

1.- Hardware

2.- Software / Desarollo

3.- Formación

4.- Soporte / Consultoría

5.- Servidores

6.- Redes

7.- Migración

8.- Hospedaje

Cataluña

Logo Empresa Correo-e Web 1 2 3 4 5 6 7 8

IWS [email protected] www.iws.es � � � � � �

Madrid

Logo Empresa Correo-e Web 1 2 3 4 5 6 7 8

Mono::labs [email protected] www.monolabs.com � � � � � �

Datum [email protected] www.datum.ws � � � � � �

Linux Local es tu directorio de servicios y empresas de Linux cerca de ti.

¿Necesitas soporte, hardware, formación? Consulta Linux Local y encuen-

tra quién ofrece qué y dónde. El directorio se divide en regiones autóno-

mas para ayudarte a localizar las empresas que ofrecen servicios cerca de ti. Uti-

liza la leyenda de la derecha para encontrar la empresa que ofrece el servicio

que precises.

Linux Local es tu guía de servicios Linux.

¿Por qué no está su empresa eneste 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 556Fax: +34 951 010 516

[email protected]

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

98

PRÓXIMO NÚMERO

98 Número 14 W W W . L I N U X - M A G A Z I N E . E S

A LA VENTA: MARZO 2006

CAZADORES DEVIRUS“Algunos dicen que un ataque es inminentey otros que no hay de qué preocuparse,pero… ¿Cuál es la verdad tras los virus enLinux?”Ésta es la pregunta que se planteaTomasz Kojm en nuestro primer artículo deportada del número 15 de Linux Magazine.Para todos aquellos que se sentían muyseguros con Linux,Kojm de inmediato pasaa explicar cómo crear un hipotético virus enLinux e ilustra cómo se propagaría por unsistema. Si esta perspectiva te ponenervioso/a, siempre puedes echarle un vis-tazo a nuestros siguientes artículos: en“Antivirus Linux”evaluamos una buenaselección de los antivirus disponibles en elmercado para Linux. En “Klamming Up”echamos un vistazo a la mejor y másfamosa de las soluciones de código abierto:KlamAV.Y, finalmente, en nuestro artículosobre Amavisd-new examinamos cómoproteger toda una red de spam y virus anivel de servidor de correo.

Abril 2006: Número 15

PRÓXIMO NÚMERO

ANIMACIÓN 3DEn “Mundos Virtuales”

repasamos cómo está el

panorama del software para

la generación de imágenes

tridimensionales con

aplicaciones de código

abierto. Imprescindible para

diseñadores y creadores de

juegos.

PLAN 9Si piensas que “Plan 9” es

una película cutre de los años

cincuenta, piensa de nuevo.

El equipo de desarrolladores

que creó el primer Unix, el

sistema “papá” de Linux, no

ha permanecido inmóvil

todos estos años y ha creado

“Plan 9”, un innovador

sistema operativo que poco

tiene que ver con Unix y que

recientemente se ha

empezado a distribuir bajo

una licencia libre. Aprende lo

que has de saber de este

fascinante sistema en el

número 15 de Linux

Magazine.

KONSULTORIO

Estrenamos sección: “El

Konsultorio de Klaus”. En

ella. Klaus Knopper, el

creador de Knoppix, contesta

a las preguntas planteadas

por los lectores.Todo esto y

mucho más en el número 15

de LINUX MAGAZINE

ANIMACIÓN 3DEn “Mundos Virtuales”

repasamos cómo está el

panorama del software para

la generación de imágenes

tridimensionales con

aplicaciones de código

abierto. Imprescindible para

diseñadores y creadores de

juegos.

PLAN 9Si piensas que “Plan 9” es

una película cutre de los años

cincuenta, piensa de nuevo.

El equipo de desarrolladores

que creó el primer Unix, el

sistema “papá” de Linux, no

ha permanecido inmóvil

todos estos años y ha creado

“Plan 9”, un innovador

sistema operativo que poco

tiene que ver con Unix y que

recientemente se ha

empezado a distribuir bajo

una licencia libre. Aprende lo

que has de saber de este

fascinante sistema en el

número 15 de Linux

Magazine.

KONSULTORIO

Estrenamos sección: “El

Konsultorio de Klaus”. En

ella. Klaus Knopper, el

creador de Knoppix, contesta

a las preguntas planteadas

por los lectores.Todo esto y

mucho más en el número 15

de LINUX MAGAZINE

Page 99: Linux Magazine - Edición en Castellano, Nº 14
Page 100: Linux Magazine - Edición en Castellano, Nº 14