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
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
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
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.
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.
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).
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
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-
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:
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
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
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).
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.
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.
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.
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.
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.
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
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
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.
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
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.
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.
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
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.
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
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
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.
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
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
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.
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.
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
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.
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.
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
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.
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.
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
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
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.
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
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.
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
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
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
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
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
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
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
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
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
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)
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
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
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
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
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
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
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
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
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.
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
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
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
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.
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
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.
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.
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.
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.
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
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.
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.
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
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
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
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
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.
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.
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
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.
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.
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
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
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
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
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
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
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
¡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
¡No esperes a quese agoten!
el REPOSITORIOde conocimientos LINUX
#12
#13
#11
más COMPLETO
¡pídelos ya!
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
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.
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
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
Top Related